From 0ee960e3a3dc47a05bb599f7690eb6ab65e162ea Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Sat, 7 Mar 2026 12:15:32 +0100 Subject: [PATCH] chore: Start making use of Mozilla's linter, p=#12656 --- .github/workflows/code-linter.yml | 32 +- .github/workflows/pr-test.yml | 24 +- .github/workflows/sync-upstream.yml | 9 +- .prettierignore | 42 - .prettierrc.json | 20 - package-lock.json | 4295 +---------------- package.json | 28 +- pyproject.toml | 9 - requirements.txt | 1 - src/-stylelintignore.patch | 31 + src/-stylelintrc-js.patch | 25 + src/eslint-file-globals-config-mjs.patch | 22 + src/eslint-ignores-config-mjs.patch | 12 + src/eslint-test-paths-config-mjs.patch | 12 + src/python/mozlint/mozlint/roller-py.patch | 12 + .../lib/configs/require-jsdoc-mjs.patch | 13 + src/tools/lint/ignorefile-yml.patch | 12 + src/tools/lint/rejected-words-yml.patch | 12 + src/zen/common/emojis/ZenEmojisData.min.mjs | 4 + .../common/styles/zen-browser-container.css | 3 + src/zen/common/styles/zen-browser-ui.css | 7 +- src/zen/common/styles/zen-omnibox.css | 27 +- .../common/styles/zen-overflowing-addons.css | 2 +- src/zen/common/styles/zen-panel-ui.css | 4 +- .../common/styles/zen-panels/bookmarks.css | 4 +- src/zen/common/styles/zen-panels/dialog.css | 1 - src/zen/common/styles/zen-popup.css | 20 +- .../styles/zen-sidebar-notification.css | 4 +- .../common/styles/zen-single-components.css | 26 +- src/zen/compact-mode/sidebar.inc.css | 8 +- src/zen/compact-mode/toolbar.inc.css | 2 +- src/zen/drag-and-drop/nsIZenDragAndDrop.idl | 1 - src/zen/drag-and-drop/nsZenDragAndDrop.cpp | 21 +- src/zen/drag-and-drop/nsZenDragAndDrop.h | 11 +- src/zen/folders/jar.inc.mn | 2 +- src/zen/folders/zen-folders.css | 9 +- src/zen/glance/jar.inc.mn | 2 +- src/zen/glance/zen-glance.css | 6 +- src/zen/images/favicons/tuta.svg | 3 + src/zen/media/zen-media-controls.css | 11 +- src/zen/mods/ZenStyleSheetCache.cpp | 22 +- src/zen/mods/ZenStyleSheetCache.h | 10 +- src/zen/mods/nsIZenModsBackend.idl | 1 - src/zen/mods/nsZenModsBackend.cpp | 14 +- src/zen/mods/nsZenModsBackend.h | 2 +- src/zen/sessionstore/ZenWindowSync.sys.mjs | 3 +- src/zen/split-view/jar.inc.mn | 2 +- .../zen-splitview-overlay.inc.xhtml | 2 +- src/zen/tabs/jar.inc.mn | 2 +- src/zen/tabs/zen-tabs/vertical-tabs.css | 47 +- src/zen/tests/compact_mode/browser.toml | 2 + .../tests/container_essentials/browser.toml | 3 +- src/zen/tests/folders/browser.toml | 27 +- src/zen/tests/glance/browser.toml | 14 +- src/zen/tests/live-folders/browser.toml | 8 +- .../mochitests/sandbox/mac_register_font.py | 112 +- .../mochitests/shell/mac_desktop_image.py | 252 +- src/zen/tests/pinned/browser.toml | 22 +- src/zen/tests/split_view/browser.toml | 14 +- src/zen/tests/tabs/browser.toml | 12 +- src/zen/tests/ub-actions/browser.toml | 4 +- src/zen/tests/urlbar/browser.toml | 1 + src/zen/tests/window_sync/browser.toml | 3 +- src/zen/tests/workspaces/browser.toml | 16 +- src/zen/toolkit/common/ZenCommonUtils.cpp | 41 +- src/zen/toolkit/common/ZenCommonUtils.h | 8 +- src/zen/toolkit/common/ZenShareInternal.h | 33 +- .../toolkit/common/cocoa/ZenHapticFeedback.mm | 5 +- .../toolkit/common/cocoa/ZenShareInternal.mm | 19 +- src/zen/toolkit/common/nsIZenCommonUtils.idl | 3 +- .../common/windows/ZenShareInternal.cpp | 16 +- src/zen/vendor/motion.min.mjs | 4 + src/zen/welcome/jar.inc.mn | 2 +- src/zen/welcome/zen-welcome.css | 3 +- src/zen/workspaces/create-workspace-form.css | 9 +- src/zen/workspaces/jar.inc.mn | 2 +- src/zen/workspaces/zen-gradient-generator.css | 19 +- src/zen/workspaces/zen-workspaces.css | 6 +- 78 files changed, 712 insertions(+), 4842 deletions(-) delete mode 100644 .prettierignore delete mode 100644 .prettierrc.json delete mode 100644 pyproject.toml create mode 100644 src/-stylelintignore.patch create mode 100644 src/-stylelintrc-js.patch create mode 100644 src/eslint-file-globals-config-mjs.patch create mode 100644 src/eslint-ignores-config-mjs.patch create mode 100644 src/eslint-test-paths-config-mjs.patch create mode 100644 src/python/mozlint/mozlint/roller-py.patch create mode 100644 src/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc-mjs.patch create mode 100644 src/tools/lint/ignorefile-yml.patch create mode 100644 src/tools/lint/rejected-words-yml.patch diff --git a/.github/workflows/code-linter.yml b/.github/workflows/code-linter.yml index 3bb902c32..04ee4408d 100644 --- a/.github/workflows/code-linter.yml +++ b/.github/workflows/code-linter.yml @@ -28,20 +28,32 @@ jobs: with: node-version-file: ".nvmrc" - - name: Setup and run autopep8 - if: ${{ contains(join(github.event.commits.*.modified, ' '), '.py') || contains(join(github.event.commits.*.added, ' '), '.py') || contains(join(github.event.commits.*.removed, ' '), '.py') }} - run: | - sudo apt install python3-autopep8 - autopep8 --diff scripts/ src/ - - name: Install dependencies run: npm ci - - name: Download Firefox - env: - ZEN_DOWNLOAD_DONT_INIT_GIT: "1" + - name: Restore Surfer engine cache + id: surfer-engine-cache + uses: actions/cache@v4 + with: + path: .surfer/engine/*.tar + key: surfer-engine-${{ hashFiles('surfer.json') }} + + - name: Setup Git run: | - npm run download + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + + - name: Download Firefox + run: npm run download + + - name: Import patches + run: npm run import + + - name: Add .hgignore file to the engine dir + run: touch engine/.hgignore + + - name: Run Bootstrap + run: npm run bootstrap - name: Lint run: npm run lint diff --git a/.github/workflows/pr-test.yml b/.github/workflows/pr-test.yml index 7070cccf8..5cc2bd6ae 100644 --- a/.github/workflows/pr-test.yml +++ b/.github/workflows/pr-test.yml @@ -28,13 +28,29 @@ jobs: - name: Install dependencies run: npm ci + - name: Restore Surfer engine cache + id: surfer-engine-cache + uses: actions/cache@v4 + with: + path: .surfer/engine/*.tar + key: surfer-engine-${{ hashFiles('surfer.json') }} + + - name: Setup Git + run: | + git config --global user.name "github-actions[bot]" + git config --global user.email "github-actions[bot]@users.noreply.github.com" + - name: Download Firefox and dependencies - env: - ZEN_DOWNLOAD_DONT_INIT_GIT: "1" run: npm run download - - name: Run linting - run: npm run lint + - name: Run Bootstrap + run: npm run bootstrap + + - name: Add .hgignore file to the engine dir + run: touch engine/.hgignore - name: Import patches run: npm run import + + - name: Run linting + run: npm run lint diff --git a/.github/workflows/sync-upstream.yml b/.github/workflows/sync-upstream.yml index a9f122e2b..ba7d6b620 100644 --- a/.github/workflows/sync-upstream.yml +++ b/.github/workflows/sync-upstream.yml @@ -73,8 +73,9 @@ jobs: npm run sync fi - - name: Install autopep8 - run: sudo apt install python3-autopep8 + - name: Run Bootstrap + if: steps.check-upstream-branch.outputs.branch_exists == 'false' + run: npm run bootstrap - name: Install requirements run: pip3 install -r requirements.txt @@ -82,7 +83,7 @@ jobs: - name: Check if any files changed id: git-check run: | - npm run pretty + npm run lint:fix if [ -n "$(git status --porcelain)" ]; then echo "files_changed=true" >> $GITHUB_OUTPUT else @@ -119,7 +120,7 @@ jobs: - name: Run formatter if: steps.check-upstream-branch.outputs.branch_exists == 'false' run: | - npm run pretty + npm run lint:fix - name: Create pull request uses: peter-evans/create-pull-request@v7 diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index f47fa179c..000000000 --- a/.prettierignore +++ /dev/null @@ -1,42 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -engine/ - -**/*.html -**/*.xhtml -**/*.inc.xhtml -**/*.bundle.min.js -**/*.min.js -**/*.min.mjs - -**/*.svg - -**/*.inc.css - -surfer.json - -src/zen/tests/mochitests/* - -src/browser/app/profile/*.js -pnpm-lock.yaml - -**/engine/ - -docs/issue-metrics/*.md - -.husky/ - -# Some CSS files are preprocessed and prettier doesn't handle them well -# We also dont want to format the CSS files that are generated by the build -src/zen/tabs/zen-tabs.css -src/zen/common/styles/zen-theme.css -src/zen/compact-mode/zen-compact-mode.css -src/zen/common/ZenEmojis.mjs - -src/zen/split-view/zen-decks.css -src/zen/workspaces/zen-workspaces.css -src/zen/common/styles/zen-toolbar.css - -*.inc diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 967de9106..000000000 --- a/.prettierrc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "bracketSameLine": true, - "endOfLine": "lf", - "trailingComma": "es5", - "tabWidth": 2, - "useTabs": false, - "jsxSingleQuote": false, - "semi": true, - "printWidth": 100, - "plugins": ["prettier-plugin-sh"], - "overrides": [ - { - "files": "*.css", - "options": { - "parser": "css", - "printWidth": 160 - } - } - ] -} diff --git a/package-lock.json b/package-lock.json index 1e5cbcbf4..fde4e3044 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,33 +10,12 @@ "license": "MPL-2.0", "devDependencies": { "@babel/preset-typescript": "^7.27.0", - "@eslint/js": "^9.39.2", - "@eslint/json": "^0.14.0", - "@microsoft/eslint-plugin-sdl": "^1.1.0", "@zen-browser/surfer": "^1.13.1", - "eslint": "^9.39.2", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-eslint-plugin": "^7.3.0", - "eslint-plugin-html": "^8.1.3", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.12.1", - "eslint-plugin-json": "^4.0.1", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-lit": "^2.1.1", - "eslint-plugin-mozilla": "^4.3.3", - "eslint-plugin-no-unsanitized": "4.1.4", - "eslint-plugin-promise": "7.2.1", - "eslint-plugin-react": "7.37.5", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-spidermonkey-js": "file:tools/eslint-plugin-spidermonkey-js", "formal-git": "^1.2.9", "globals": "^16.3.0", "husky": "^9.1.7", "lint-staged": "^15.3.0", - "prettier": "^3.4.2", - "prettier-plugin-sh": "^0.14.0", - "typescript": "^5.9.3", - "typescript-eslint": "^8.52.0" + "typescript": "^5.9.3" } }, "engine/tools/lint/eslint/eslint-plugin-spidermonkey-js": { @@ -531,297 +510,6 @@ "node": ">=6.9.0" } }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.78.0.tgz", - "integrity": "sha512-rQkU5u8hNAq2NVRzHnIUUvR6arbO0b6AOlvpTNS48CkiKSn/xtNfOzBK23JE4SiW89DgvU7GtxLVgV4Vn2HBAw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "^1.0.8", - "@typescript-eslint/types": "^8.46.4", - "comment-parser": "1.4.1", - "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~7.0.0" - }, - "engines": { - "node": ">=20.11.0" - } - }, - "node_modules/@es-joy/resolve.exports": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", - "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", - "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^2.1.7", - "debug": "^4.3.1", - "minimatch": "^3.1.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", - "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/core": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", - "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - } - }, - "node_modules/@eslint/json": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/json/-/json-0.14.0.tgz", - "integrity": "sha512-rvR/EZtvUG3p9uqrSmcDJPYSH7atmWr0RnFWN6m917MAPx82+zQgPUmDu0whPFG6XTyM0vB/hR6c1Q63OaYtCQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "@eslint/plugin-kit": "^0.4.1", - "@humanwhocodes/momoa": "^3.3.10", - "natural-compare": "^1.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/object-schema": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", - "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", - "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^0.17.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/momoa": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.10.tgz", - "integrity": "sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", @@ -875,67 +563,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@microsoft/eslint-plugin-sdl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@microsoft/eslint-plugin-sdl/-/eslint-plugin-sdl-1.1.0.tgz", - "integrity": "sha512-dxdNHOemLnBhfY3eByrujX9KyLigcNtW8sU+axzWv5nLGcsSBeKW2YYyTpfPo1hV8YPOmIGnfA4fZHyKVtWqBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-n": "17.10.3", - "eslint-plugin-react": "7.37.3", - "eslint-plugin-security": "1.4.0" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "eslint": "^9" - } - }, - "node_modules/@microsoft/eslint-plugin-sdl/node_modules/eslint-plugin-react": { - "version": "7.37.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", - "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/@microsoft/eslint-plugin-sdl/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@oozcitak/dom": { "version": "1.15.10", "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", @@ -1216,48 +843,6 @@ "node": ">= 10" } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/base62": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", - "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { "version": "17.0.45", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", @@ -1265,262 +850,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz", - "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.52.0", - "@typescript-eslint/type-utils": "8.52.0", - "@typescript-eslint/utils": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.52.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", - "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.52.0", - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz", - "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.52.0", - "@typescript-eslint/types": "^8.52.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz", - "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz", - "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz", - "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0", - "@typescript-eslint/utils": "8.52.0", - "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", - "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz", - "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.52.0", - "@typescript-eslint/tsconfig-utils": "8.52.0", - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/visitor-keys": "8.52.0", - "debug": "^4.4.3", - "minimatch": "^9.0.5", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", - "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.52.0", - "@typescript-eslint/types": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz", - "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.52.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@zen-browser/surfer": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.13.1.tgz", @@ -1555,46 +884,6 @@ "surfer": "dist/index.js" } }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/ansi-escapes": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", @@ -1640,194 +929,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -1835,13 +936,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true, - "license": "MIT" - }, "node_modules/async-compat": { "version": "1.6.8", "resolved": "https://registry.npmjs.org/async-compat/-/async-compat-1.6.8.tgz", @@ -1856,16 +950,6 @@ "node": ">=0.8" } }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/async-icns": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/async-icns/-/async-icns-1.0.2.tgz", @@ -1896,32 +980,6 @@ "dev": true, "license": "MIT" }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", - "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, "node_modules/axios": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", @@ -1934,16 +992,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/b4a": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", @@ -1951,13 +999,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, "node_modules/bare-events": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", @@ -2101,17 +1142,6 @@ "node": ">= 0.4" } }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -2216,25 +1246,6 @@ "dev": true, "license": "(MIT OR Apache-2.0)" }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -2249,23 +1260,6 @@ "node": ">= 0.4" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-once-fn": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/call-once-fn/-/call-once-fn-1.0.15.tgz", @@ -2276,16 +1270,6 @@ "node": ">=0.8" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001715", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz", @@ -2478,24 +1462,6 @@ "node": ">= 6" } }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -2551,67 +1517,6 @@ "node": ">= 8" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2656,49 +1561,6 @@ "node": ">=4.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2719,91 +1581,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -2872,33 +1649,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/environment": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", @@ -2912,75 +1662,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -3001,34 +1682,6 @@ "node": ">= 0.4" } }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/es-object-atoms": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", @@ -3058,37 +1711,6 @@ "node": ">= 0.4" } }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3100,690 +1722,6 @@ "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.2", - "@eslint/core": "^0.17.0", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", - "@eslint/plugin-kit": "^0.4.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "esquery": "^1.5.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-es-x": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/ota-meshi", - "https://opencollective.com/eslint" - ], - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, - "node_modules/eslint-plugin-eslint-plugin": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-7.3.0.tgz", - "integrity": "sha512-M9S7ihAFD91+FnSja0Joky+0xrJlgMqmy3WmbOJVNpnUqy49YqEImSdfuVbpnggVz3QinzIVPJh2cPYaJ1Z4TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "estraverse": "^5.3.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.1 || >=24.0.0" - }, - "peerDependencies": { - "eslint": ">=9.0.0" - } - }, - "node_modules/eslint-plugin-html": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-8.1.3.tgz", - "integrity": "sha512-cnCdO7yb/jrvgSJJAfRkGDOwLu1AOvNdw8WCD6nh/2C4RnxuI4tz6QjMEAmmSiHSeugq/fXcIO8yBpIBQrMZCg==", - "dev": true, - "license": "ISC", - "dependencies": { - "htmlparser2": "^10.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "29.12.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.12.1.tgz", - "integrity": "sha512-Rxo7r4jSANMBkXLICJKS0gjacgyopfNAsoS0e3R9AHnjoKuQOaaPfmsDJPi8UWwygI099OV/K/JhpYRVkxD4AA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^8.0.0" - }, - "engines": { - "node": "^20.12.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "61.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-61.7.1.tgz", - "integrity": "sha512-36DpldF95MlTX//n3/naULFVt8d1cV4jmSkx7ZKrE9ikkKHAgMLesuWp1SmwpVwAs5ndIM6abKd6PeOYZUgdWg==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.78.0", - "@es-joy/resolve.exports": "1.2.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.4.3", - "escape-string-regexp": "^4.0.0", - "espree": "^11.0.0", - "esquery": "^1.7.0", - "html-entities": "^2.6.0", - "object-deep-merge": "^2.0.0", - "parse-imports-exports": "^0.2.4", - "semver": "^7.7.3", - "spdx-expression-parse": "^4.0.0", - "to-valid-identifier": "^1.0.0" - }, - "engines": { - "node": ">=20.11.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", - "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/espree": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.0.0.tgz", - "integrity": "sha512-+gMeWRrIh/NsG+3NaLeWHuyeyk70p2tbvZIWBYcqQ4/7Xvars6GYTZNhF1sIeLcc6Wb11He5ffz3hsHyXFrw5A==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-4.0.1.tgz", - "integrity": "sha512-3An5ISV5dq/kHfXdNyY5TUe2ONC3yXFSkLX2gu+W8xAhKhfvrRvkSAeKXCxZqZ0KJLX15ojBuLPyj+UikQMkOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-lit": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-2.1.1.tgz", - "integrity": "sha512-qmyAOnnTCdS+vDnNxtCoF0icSKIio4GUv6ZLnaCtTX6G/YezRa6Ag6tOQ+MfV5Elvtw9CIXeliRX4mIBSwrPIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "eslint": ">= 8" - } - }, - "node_modules/eslint-plugin-mozilla": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-mozilla/-/eslint-plugin-mozilla-4.3.3.tgz", - "integrity": "sha512-Caxrl4pZoEV612oU4iGcRP+R4G7ooO1MpV5rTPCGKFTYVY6Iw3FEJ0AA+1mUY/rDIdqw7CxyV7+Hllzyh3UYlQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "eslint-scope": "^8.4.0", - "eslint-visitor-keys": "^4.2.1", - "espree": "^10.4.0", - "estraverse": "^5.3.0", - "htmlparser2": "^10.0.0", - "toml-eslint-parser": "0.10.0" - }, - "engines": { - "node": ">=22.0.0" - }, - "peerDependencies": { - "@microsoft/eslint-plugin-sdl": "^1.0.0", - "eslint": "^9.0.0", - "eslint-plugin-jsdoc": "^61.0.0", - "eslint-plugin-no-unsanitized": "^4.1.0", - "eslint-plugin-promise": "^7.2.1" - }, - "peerDependenciesMeta": { - "@eslint-plugin-jsdoc": { - "optional": true - }, - "@microsoft/eslint-plugin-sdl": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-n": { - "version": "17.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.3.tgz", - "integrity": "sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "enhanced-resolve": "^5.17.0", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "globals": "^15.8.0", - "ignore": "^5.2.4", - "minimatch": "^9.0.5", - "semver": "^7.5.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": ">=8.23.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/eslint-plugin-no-unsanitized": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.1.4.tgz", - "integrity": "sha512-cjAoZoq3J+5KJuycYYOWrc0/OpZ7pl2Z3ypfFq4GtaAgheg+L7YGxUo2YS3avIvo/dYU5/zR2hXu3v81M9NxhQ==", - "dev": true, - "license": "MPL-2.0", - "peerDependencies": { - "eslint": "^8 || ^9" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.2.1.tgz", - "integrity": "sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", - "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-security": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.4.0.tgz", - "integrity": "sha512-xlS7P2PLMXeqfhyf3NpqbvbnW04kN8M9NtmhpR3XGyOvt/vNKS7XPXT5EDbwKW9vCjWH4PpfQvgD/+JgN0VJKA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-regex": "^1.1.0" - } - }, - "node_modules/eslint-plugin-spidermonkey-js": { - "resolved": "tools/eslint-plugin-spidermonkey-js", - "link": true - }, - "node_modules/eslint-scope": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", - "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -3798,52 +1736,6 @@ "node": ">=4" } }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -3905,13 +1797,6 @@ "node": ">=0.8" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-extract": { "version": "1.3.31", "resolved": "https://registry.npmjs.org/fast-extract/-/fast-extract-1.3.31.tgz", @@ -3960,20 +1845,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, "node_modules/fifo": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/fifo/-/fifo-2.4.1.tgz", @@ -3981,19 +1852,6 @@ "dev": true, "license": "MIT" }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -4007,44 +1865,6 @@ "node": ">=8" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, "node_modules/flush-write-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-2.0.0.tgz", @@ -4092,22 +1912,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/form-data": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", @@ -4168,37 +1972,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4285,37 +2058,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -4323,19 +2065,6 @@ "dev": true, "license": "MIT" }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/globals": { "version": "16.3.0", "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", @@ -4349,23 +2078,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", @@ -4400,19 +2112,6 @@ "dev": true, "license": "ISC" }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4423,35 +2122,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -4501,44 +2171,6 @@ "node": ">= 0.4" } }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/htmlparser2": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", - "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.1", - "entities": "^6.0.0" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -4586,43 +2218,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4650,21 +2245,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -4685,24 +2265,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -4710,123 +2272,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-error": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", @@ -4834,32 +2279,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", @@ -4873,64 +2292,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4941,23 +2302,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", @@ -4965,25 +2309,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -4997,35 +2322,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -5039,57 +2335,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -5103,52 +2348,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -5173,24 +2372,6 @@ "dev": true, "license": "ISC" }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", - "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5198,30 +2379,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.0.0.tgz", - "integrity": "sha512-c7YbokssPOSHmqTbSAmTtnVgAVa/7lumWNYqomgd5KOMyPrRve2anx6lonfOsXEQacqF9FKVUj7bLg4vRSvdYA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -5235,27 +2392,6 @@ "node": ">=6" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -5270,13 +2406,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -5290,32 +2419,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -5326,40 +2429,6 @@ "node": ">=6" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/lifecycle": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lifecycle/-/lifecycle-1.0.4.tgz", @@ -5593,29 +2662,6 @@ "node": ">=18.0.0" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.compact": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash.compact/-/lodash.compact-3.0.1.tgz", @@ -5623,13 +2669,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -5703,19 +2742,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -5817,19 +2843,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -5893,13 +2906,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mvdan-sh": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/mvdan-sh/-/mvdan-sh-0.10.1.tgz", - "integrity": "sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/nanoassert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", @@ -5914,13 +2920,6 @@ "dev": true, "license": "MIT" }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", @@ -5989,127 +2988,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-deep-merge": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", - "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/on-one": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/on-one/-/on-one-0.1.4.tgz", @@ -6146,24 +3024,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", @@ -6173,115 +3033,6 @@ "node": ">= 0.4.0" } }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-imports-exports": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", - "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "parse-statements": "1.0.11" - } - }, - "node_modules/parse-statements": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", - "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -6292,13 +3043,6 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6360,16 +3104,6 @@ "node": ">=12.13.0" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -6454,52 +3188,6 @@ "node": ">=6" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-sh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-sh/-/prettier-plugin-sh-0.14.0.tgz", - "integrity": "sha512-hfXulj5+zEl/ulrO5kMuuTPKmXvOg0bnLHY1hKFNN/N+/903iZbNp8NyZBTsgI8dtkSgFfAEIQq0IQTyP1ZVFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mvdan-sh": "^0.10.1", - "sh-syntax": "^0.4.1" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - }, - "peerDependencies": { - "prettier": "^3.0.3" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -6542,18 +3230,6 @@ "node": ">=6" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -6584,16 +3260,6 @@ "pump": "^3.0.0" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/queue-cb": { "version": "1.4.16", "resolved": "https://registry.npmjs.org/queue-cb/-/queue-cb-1.4.16.tgz", @@ -6627,13 +3293,6 @@ "dev": true, "license": "ISC" }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -6657,50 +3316,6 @@ "dev": true, "license": "MIT" }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -6722,38 +3337,6 @@ "semver": "bin/semver" } }, - "node_modules/reserved-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", - "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", @@ -6764,16 +3347,6 @@ "node": ">=0.10.0" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, "node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -6820,16 +3393,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -6862,33 +3425,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6910,58 +3446,6 @@ ], "license": "MIT" }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", @@ -6975,71 +3459,6 @@ "node": ">=10" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/sh-syntax": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/sh-syntax/-/sh-syntax-0.4.2.tgz", - "integrity": "sha512-/l2UZ5fhGZLVZa16XQM9/Vq/hezGGbdHeVEA01uWjOL1+7Ek/gt6FquW0iKKws4a9AYPYvlz6RyVvjh3JxOteg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/sharp": { "version": "0.32.6", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", @@ -7104,82 +3523,6 @@ "hash-string": "^1.0.0" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -7281,34 +3624,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0", - "peer": true - }, - "node_modules/spdx-expression-parse": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", - "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "dev": true, - "license": "CC0-1.0", - "peer": true - }, "node_modules/speedometer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-1.0.0.tgz", @@ -7339,20 +3654,6 @@ "node": ">=0.8" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", @@ -7449,119 +3750,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", - "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -7578,16 +3766,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -7621,29 +3799,6 @@ "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/tar-fs": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.1.tgz", @@ -7772,54 +3927,6 @@ "globrex": "^0.1.2" } }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7840,99 +3947,6 @@ "dev": true, "license": "MIT" }, - "node_modules/to-valid-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", - "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@sindresorhus/base62": "^1.0.0", - "reserved-identifiers": "^1.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/toml-eslint-parser": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/toml-eslint-parser/-/toml-eslint-parser-0.10.0.tgz", - "integrity": "sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/toml-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/ts-api-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", - "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -7946,97 +3960,6 @@ "node": "*" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -8051,49 +3974,6 @@ "node": ">=14.17" } }, - "node_modules/typescript-eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.52.0.tgz", - "integrity": "sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.52.0", - "@typescript-eslint/parser": "8.52.0", - "@typescript-eslint/typescript-estree": "8.52.0", - "@typescript-eslint/utils": "8.52.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -8157,16 +4037,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8174,48 +4044,6 @@ "dev": true, "license": "MIT" }, - "node_modules/vscode-json-languageservice": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz", - "integrity": "sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.3", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.3" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-nls": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", - "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", - "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, - "license": "MIT" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8232,112 +4060,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", @@ -8472,19 +4194,6 @@ "node": ">= 14" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zip": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/zip/-/zip-1.2.0.tgz", @@ -8521,7 +4230,7 @@ } }, "tools/eslint-plugin-spidermonkey-js": { - "dev": true, + "extraneous": true, "license": "MPL-2.0", "devDependencies": {}, "engines": { diff --git a/package.json b/package.json index 0a80cb901..bd8509d26 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,8 @@ "sync:raw": "surfer update", "sync:rc": "python3 scripts/update_ff.py --rc", "sync:l10n": "python3 scripts/update_ff.py --just-l10n", - "pretty": "prettier . --write --cache && autopep8 -r --in-place scripts/ src/ --exclude src/zen/tests/", - "lint": "npx eslint src/ && prettier . --check --cache", - "lint:fix": "npm run pretty && npx eslint src/ --fix", + "lint": "cd engine && ./mach lint zen", + "lint:fix": "npm run lint -- --fix", "prepare": "husky", "reset-ff": "surfer reset", "surfer": "surfer", @@ -51,32 +50,11 @@ "homepage": "https://github.com/zen-browser/desktop#readme", "devDependencies": { "@babel/preset-typescript": "^7.27.0", - "@eslint/js": "^9.39.2", - "@eslint/json": "^0.14.0", - "@microsoft/eslint-plugin-sdl": "^1.1.0", "@zen-browser/surfer": "^1.13.1", - "eslint": "^9.39.2", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-eslint-plugin": "^7.3.0", - "eslint-plugin-html": "^8.1.3", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.12.1", - "eslint-plugin-json": "^4.0.1", - "eslint-plugin-jsx-a11y": "^6.10.2", - "eslint-plugin-lit": "^2.1.1", - "eslint-plugin-mozilla": "^4.3.3", - "eslint-plugin-no-unsanitized": "4.1.4", - "eslint-plugin-promise": "7.2.1", - "eslint-plugin-react": "7.37.5", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-spidermonkey-js": "file:tools/eslint-plugin-spidermonkey-js", "formal-git": "^1.2.9", "globals": "^16.3.0", "husky": "^9.1.7", "lint-staged": "^15.3.0", - "prettier": "^3.4.2", - "prettier-plugin-sh": "^0.14.0", - "typescript": "^5.9.3", - "typescript-eslint": "^8.52.0" + "typescript": "^5.9.3" } } diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 3f0c0bdce..000000000 --- a/pyproject.toml +++ /dev/null @@ -1,9 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -[tool.autopep8] -max_line_length = 120 -recursive = true -aggressive = 3 -indent_size = 2 diff --git a/requirements.txt b/requirements.txt index d01dcfa80..45da7b672 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -autopep8==2.3.1 click==8.1.8 mypy-extensions==1.0.0 packaging==24.2 diff --git a/src/-stylelintignore.patch b/src/-stylelintignore.patch new file mode 100644 index 000000000..154a04f45 --- /dev/null +++ b/src/-stylelintignore.patch @@ -0,0 +1,31 @@ +diff --git a/.stylelintignore b/.stylelintignore +index 185490999507b8a5032977237af50f5e61c71df1..36f760f473b857e851134ceb62c837cb8d29c966 100644 +--- a/.stylelintignore ++++ b/.stylelintignore +@@ -106,3 +106,26 @@ build/pgo/blueprint/**/*.css + # under our control or we don't want to modify at this point: + testing/web-platform/mozilla/ + testing/web-platform/tests/ ++ ++**/*.bundle.min.js ++**/*.min.js ++**/*.min.mjs ++ ++**/*.svg ++ ++**/*.inc.css ++ ++zen/tests/mochitests/* ++ ++# Some CSS files are preprocessed and prettier doesn't handle them well ++# We also dont want to format the CSS files that are generated by the build ++zen/tabs/zen-tabs.css ++zen/common/styles/zen-theme.css ++zen/compact-mode/zen-compact-mode.css ++zen/common/ZenEmojis.mjs ++ ++zen/split-view/zen-decks.css ++zen/workspaces/zen-workspaces.css ++zen/common/styles/zen-toolbar.css ++ ++*.inc diff --git a/src/-stylelintrc-js.patch b/src/-stylelintrc-js.patch new file mode 100644 index 000000000..9e3900231 --- /dev/null +++ b/src/-stylelintrc-js.patch @@ -0,0 +1,25 @@ +diff --git a/.stylelintrc.js b/.stylelintrc.js +index 36719c9e152c34da2aa76fc74d74e58cb9e6b1cc..4226db2e0af4b36923a93dcd0b76e59f8508ba36 100644 +--- a/.stylelintrc.js ++++ b/.stylelintrc.js +@@ -67,7 +67,7 @@ module.exports = { + ], + + "max-nesting-depth": [ +- 3, ++ 6, + { + ignore: ["blockless-at-rules"], + }, +@@ -274,9 +274,9 @@ module.exports = { + // Remove this line setting `csscontrols/use-logical` to null after implementing fixes + "csstools/use-logical": null, + "stylelint-plugin-mozilla/no-base-design-tokens": true, +- "stylelint-plugin-mozilla/use-design-tokens": true, ++ "stylelint-plugin-mozilla/use-design-tokens": false, + "stylelint-plugin-mozilla/no-non-semantic-token-usage": true, +- "stylelint-plugin-mozilla/use-size-tokens": true, ++ "stylelint-plugin-mozilla/use-size-tokens": false, + }, + + overrides: [ diff --git a/src/eslint-file-globals-config-mjs.patch b/src/eslint-file-globals-config-mjs.patch new file mode 100644 index 000000000..d1149428e --- /dev/null +++ b/src/eslint-file-globals-config-mjs.patch @@ -0,0 +1,22 @@ +diff --git a/eslint-file-globals.config.mjs b/eslint-file-globals.config.mjs +index 00e49fce00efecab254aa1b8f0f0fe9ed2c24057..e9f390e15537d3d03a87f1c87099cb34698aee49 100644 +--- a/eslint-file-globals.config.mjs ++++ b/eslint-file-globals.config.mjs +@@ -22,6 +22,7 @@ + + import globals from "globals"; + import mozilla from "eslint-plugin-mozilla"; ++import zenGlobals from "./zen/zen.globals.mjs"; + + export default [ + { +@@ -550,4 +551,9 @@ export default [ + ], + languageOptions: { globals: globals.worker }, + }, ++ { ++ name: "zen-globals", ++ files: ["zen/**/!(*.sys).mjs", "zen/**/*.js"], ++ languageOptions: { globals: zenGlobals.reduce((acc, name) => ({ ...acc, [name]: "readonly" }), {}) }, ++ } + ]; diff --git a/src/eslint-ignores-config-mjs.patch b/src/eslint-ignores-config-mjs.patch new file mode 100644 index 000000000..42d5a8aa2 --- /dev/null +++ b/src/eslint-ignores-config-mjs.patch @@ -0,0 +1,12 @@ +diff --git a/eslint-ignores.config.mjs b/eslint-ignores.config.mjs +index 0cfd7e02ad58c331f48f1ba8e1588777e1ce2595..d85b95b18a7195b6794083af71cbe1947d9f2f9c 100644 +--- a/eslint-ignores.config.mjs ++++ b/eslint-ignores.config.mjs +@@ -312,4 +312,7 @@ export default [ + // Test files for circular import in modules. + "dom/base/test/jsmodules/import_circular.mjs", + "dom/base/test/jsmodules/import_circular_1.mjs", ++ ++ "**/*.min.mjs", ++ "zen/tests/**", + ]; diff --git a/src/eslint-test-paths-config-mjs.patch b/src/eslint-test-paths-config-mjs.patch new file mode 100644 index 000000000..34fea2e39 --- /dev/null +++ b/src/eslint-test-paths-config-mjs.patch @@ -0,0 +1,12 @@ +diff --git a/eslint-test-paths.config.mjs b/eslint-test-paths.config.mjs +index 53d97521a676d04212abb0263cb166da06c889e0..fa8c261de7a8663a369fb41671476d314722c025 100644 +--- a/eslint-test-paths.config.mjs ++++ b/eslint-test-paths.config.mjs +@@ -218,6 +218,7 @@ const extraBrowserTestPaths = [ + "toolkit/components/windowwatcher/test/", + "toolkit/mozapps/extensions/test/xpinstall/", + "uriloader/exthandler/tests/mochitest/", ++ "zen/tests/", + ]; + + // DO NOT add more items to this list. Please see the note at the top diff --git a/src/python/mozlint/mozlint/roller-py.patch b/src/python/mozlint/mozlint/roller-py.patch new file mode 100644 index 000000000..b3f21d87a --- /dev/null +++ b/src/python/mozlint/mozlint/roller-py.patch @@ -0,0 +1,12 @@ +diff --git a/python/mozlint/mozlint/roller.py b/python/mozlint/mozlint/roller.py +index aeafa93cc525d2846614b600e95fd817b832b0ef..69414ed032523f1b53b78ad867145efaea422c63 100644 +--- a/python/mozlint/mozlint/roller.py ++++ b/python/mozlint/mozlint/roller.py +@@ -92,7 +92,6 @@ def _run_worker(config, paths, **lintargs): + res = res or [] + else: + log.error(f"Unexpected result type received: {type(res)}") +- assert False + except Exception: + log.exception(f"{config['name']} failed") + res = 1 diff --git a/src/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc-mjs.patch b/src/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc-mjs.patch new file mode 100644 index 000000000..d2dee15ea --- /dev/null +++ b/src/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc-mjs.patch @@ -0,0 +1,13 @@ +diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc.mjs b/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc.mjs +index 87fc32f6a1bdf21a56fb3ce18c767ebbb12c6d67..174fcc3a679ae655c9bce907461f9c3a9030c2a9 100644 +--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc.mjs ++++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/require-jsdoc.mjs +@@ -13,7 +13,7 @@ export default { + "error", + { + require: { +- ClassDeclaration: true, ++ ClassDeclaration: false, + FunctionDeclaration: false, + }, + }, diff --git a/src/tools/lint/ignorefile-yml.patch b/src/tools/lint/ignorefile-yml.patch new file mode 100644 index 000000000..32dd81e22 --- /dev/null +++ b/src/tools/lint/ignorefile-yml.patch @@ -0,0 +1,12 @@ +diff --git a/tools/lint/ignorefile.yml b/tools/lint/ignorefile.yml +index 5ae3b282a54c129bb16bca461470154e4a882618..f46c6256037cbef1392f8d070726d45dadac1289 100644 +--- a/tools/lint/ignorefile.yml ++++ b/tools/lint/ignorefile.yml +@@ -3,7 +3,6 @@ ignorefile: + description: Linter for .gitignore and .hgignore files + include: + - '.gitignore' +- - '.hgignore' + support-files: + - 'tools/lint/ignorefile**' + type: external diff --git a/src/tools/lint/rejected-words-yml.patch b/src/tools/lint/rejected-words-yml.patch new file mode 100644 index 000000000..e70062e59 --- /dev/null +++ b/src/tools/lint/rejected-words-yml.patch @@ -0,0 +1,12 @@ +diff --git a/tools/lint/rejected-words.yml b/tools/lint/rejected-words.yml +index d5ca2e05fb335fcd17d1559d5332ec4a43d7cd1d..1f34e8d5e05508fc541bc7aa6a779cd98206032a 100644 +--- a/tools/lint/rejected-words.yml ++++ b/tools/lint/rejected-words.yml +@@ -8,7 +8,6 @@ avoid-blacklist-and-whitelist: + ignore-case: true + # Based on codespell with idl and webidl added. + extensions: +- - js + - mjs + - jsx + - idl diff --git a/src/zen/common/emojis/ZenEmojisData.min.mjs b/src/zen/common/emojis/ZenEmojisData.min.mjs index 21fff5121..a9b4a5b01 100644 --- a/src/zen/common/emojis/ZenEmojisData.min.mjs +++ b/src/zen/common/emojis/ZenEmojisData.min.mjs @@ -1,2 +1,6 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + /* eslint-disable no-unused-vars */ var ZenEmojisData = [{"tags": ["cheerful", "cheery", "face", "grin", "grinning", "happy", "laugh", "nice", "smile", "smiling", "teeth"], "order": 1, "emoji": "😀"}, {"tags": ["awesome", "big", "eyes", "face", "grin", "grinning", "happy", "mouth", "open", "smile", "smiling", "teeth", "yay"], "order": 2, "emoji": "😃"}, {"tags": ["eye", "eyes", "face", "grin", "grinning", "happy", "laugh", "lol", "mouth", "open", "smile", "smiling"], "order": 3, "emoji": "😄"}, {"tags": ["beaming", "eye", "eyes", "face", "grin", "grinning", "happy", "nice", "smile", "smiling", "teeth"], "order": 4, "emoji": "😁"}, {"tags": ["closed", "eyes", "face", "grinning", "haha", "hahaha", "happy", "laugh", "lol", "mouth", "open", "rofl", "smile", "smiling", "squinting"], "order": 5, "emoji": "😆"}, {"tags": ["cold", "dejected", "excited", "face", "grinning", "mouth", "nervous", "open", "smile", "smiling", "stress", "stressed", "sweat"], "order": 6, "emoji": "😅"}, {"tags": ["crying", "face", "floor", "funny", "haha", "happy", "hehe", "hilarious", "joy", "laugh", "lmao", "lol", "rofl", "roflmao", "rolling", "tear"], "order": 7, "emoji": "🤣"}, {"tags": ["crying", "face", "feels", "funny", "haha", "happy", "hehe", "hilarious", "joy", "laugh", "lmao", "lol", "rofl", "roflmao", "tear"], "order": 8, "emoji": "😂"}, {"tags": ["face", "happy", "slightly", "smile", "smiling"], "order": 9, "emoji": "🙂"}, {"tags": ["face", "hehe", "smile", "upside-down"], "order": 10, "emoji": "🙃"}, {"tags": ["disappear", "dissolve", "embarrassed", "face", "haha", "heat", "hot", "liquid", "lol", "melt", "melting", "sarcasm", "sarcastic"], "order": 11, "emoji": "🫠"}, {"tags": ["face", "flirt", "heartbreaker", "sexy", "slide", "tease", "wink", "winking", "winks"], "order": 12, "emoji": "😉"}, {"tags": ["blush", "eye", "eyes", "face", "glad", "satisfied", "smile", "smiling"], "order": 13, "emoji": "😊"}, {"tags": ["angel", "angelic", "angels", "blessed", "face", "fairy", "fairytale", "fantasy", "halo", "happy", "innocent", "peaceful", "smile", "smiling", "spirit", "tale"], "order": 14, "emoji": "😇"}, {"tags": ["3", "adore", "crush", "face", "heart", "hearts", "ily", "love", "romance", "smile", "smiling", "you"], "order": 15, "emoji": "🥰"}, {"tags": ["143", "bae", "eye", "face", "feels", "heart-eyes", "hearts", "ily", "kisses", "love", "romance", "romantic", "smile", "xoxo"], "order": 16, "emoji": "😍"}, {"tags": ["excited", "eyes", "face", "grinning", "smile", "star", "starry-eyed", "wow"], "order": 17, "emoji": "🤩"}, {"tags": ["adorbs", "bae", "blowing", "face", "flirt", "heart", "ily", "kiss", "love", "lover", "miss", "muah", "romantic", "smooch", "xoxo", "you"], "order": 18, "emoji": "😘"}, {"tags": ["143", "date", "dating", "face", "flirt", "ily", "kiss", "love", "smooch", "smooches", "xoxo", "you"], "order": 19, "emoji": "😗"}, {"tags": ["face", "happy", "outlined", "relaxed", "smile", "smiling"], "order": 21, "emoji": "☺️"}, {"tags": ["143", "bae", "blush", "closed", "date", "dating", "eye", "eyes", "face", "flirt", "ily", "kisses", "kissing", "smooches", "xoxo"], "order": 22, "emoji": "😚"}, {"tags": ["143", "closed", "date", "dating", "eye", "eyes", "face", "flirt", "ily", "kiss", "kisses", "kissing", "love", "night", "smile", "smiling"], "order": 23, "emoji": "😙"}, {"tags": ["face", "glad", "grateful", "happy", "joy", "pain", "proud", "relieved", "smile", "smiley", "smiling", "tear", "touched"], "order": 24, "emoji": "🥲"}, {"tags": ["delicious", "eat", "face", "food", "full", "hungry", "savor", "smile", "smiling", "tasty", "um", "yum", "yummy"], "order": 25, "emoji": "😋"}, {"tags": ["awesome", "cool", "face", "nice", "party", "stuck-out", "sweet", "tongue"], "order": 26, "emoji": "😛"}, {"tags": ["crazy", "epic", "eye", "face", "funny", "joke", "loopy", "nutty", "party", "stuck-out", "tongue", "wacky", "weirdo", "wink", "winking", "yolo"], "order": 27, "emoji": "😜"}, {"tags": ["crazy", "eye", "eyes", "face", "goofy", "large", "small", "zany"], "order": 28, "emoji": "🤪"}, {"tags": ["closed", "eye", "eyes", "face", "gross", "horrible", "omg", "squinting", "stuck-out", "taste", "tongue", "whatever", "yolo"], "order": 29, "emoji": "😝"}, {"tags": ["face", "money", "money-mouth", "mouth", "paid"], "order": 30, "emoji": "🤑"}, {"tags": ["face", "hands", "hug", "hugging", "open", "smiling"], "order": 31, "emoji": "🤗"}, {"tags": ["face", "giggle", "giggling", "hand", "mouth", "oops", "realization", "secret", "shock", "sudden", "surprise", "whoops"], "order": 32, "emoji": "🤭"}, {"tags": ["amazement", "awe", "disbelief", "embarrass", "eyes", "face", "gasp", "hand", "mouth", "omg", "open", "over", "quiet", "scared", "shock", "surprise"], "order": 33, "emoji": "🫢"}, {"tags": ["captivated", "embarrass", "eye", "face", "hide", "hiding", "peek", "peeking", "peep", "scared", "shy", "stare"], "order": 34, "emoji": "🫣"}, {"tags": ["face", "quiet", "shh", "shush", "shushing"], "order": 35, "emoji": "🤫"}, {"tags": ["chin", "consider", "face", "hmm", "ponder", "pondering", "thinking", "wondering"], "order": 36, "emoji": "🤔"}, {"tags": ["face", "good", "luck", "ma’am", "ok", "respect", "salute", "saluting", "sir", "troops", "yes"], "order": 37, "emoji": "🫡"}, {"tags": ["face", "keep", "mouth", "quiet", "secret", "shut", "zip", "zipper", "zipper-mouth"], "order": 38, "emoji": "🤐"}, {"tags": ["disapproval", "disbelief", "distrust", "emoji", "eyebrow", "face", "hmm", "mild", "raised", "skeptic", "skeptical", "skepticism", "surprise", "what"], "order": 39, "emoji": "🤨"}, {"tags": ["awkward", "blank", "deadpan", "expressionless", "face", "fine", "jealous", "meh", "neutral", "oh", "shade", "straight", "unamused", "unhappy", "unimpressed", "whatever"], "order": 40, "emoji": "😐️"}, {"tags": ["awkward", "dead", "expressionless", "face", "fine", "inexpressive", "jealous", "meh", "not", "oh", "omg", "straight", "uh", "unhappy", "unimpressed", "whatever"], "order": 41, "emoji": "😑"}, {"tags": ["awkward", "blank", "expressionless", "face", "mouth", "mouthless", "mute", "quiet", "secret", "silence", "silent", "speechless"], "order": 42, "emoji": "😶"}, {"tags": ["depressed", "disappear", "dotted", "face", "hidden", "hide", "introvert", "invisible", "line", "meh", "whatever", "wtv"], "order": 43, "emoji": "🫥"}, {"tags": ["absentminded", "clouds", "face", "fog", "head"], "order": 44, "emoji": "😶‍🌫️"}, {"tags": ["boss", "dapper", "face", "flirt", "homie", "kidding", "leer", "shade", "slick", "sly", "smirk", "smug", "snicker", "suave", "suspicious", "swag"], "order": 46, "emoji": "😏"}, {"tags": ["...", "bored", "face", "fine", "jealous", "jel", "jelly", "pissed", "smh", "ugh", "uhh", "unamused", "unhappy", "weird", "whatever"], "order": 47, "emoji": "😒"}, {"tags": ["eyeroll", "eyes", "face", "rolling", "shade", "ugh", "whatever"], "order": 48, "emoji": "🙄"}, {"tags": ["awk", "awkward", "dentist", "face", "grimace", "grimacing", "grinning", "smile", "smiling"], "order": 49, "emoji": "😬"}, {"tags": ["blow", "blowing", "exhale", "exhaling", "exhausted", "face", "gasp", "groan", "relief", "sigh", "smiley", "smoke", "whisper", "whistle"], "order": 50, "emoji": "😮‍💨"}, {"tags": ["face", "liar", "lie", "lying", "pinocchio"], "order": 51, "emoji": "🤥"}, {"tags": ["crazy", "daze", "earthquake", "face", "omg", "panic", "shaking", "shock", "surprise", "vibrate", "whoa", "wow"], "order": 52, "emoji": "🫨"}, {"tags": ["head", "horizontally", "no", "shake", "shaking"], "order": 53, "emoji": "🙂‍↔️"}, {"tags": ["head", "nod", "shaking", "vertically", "yes"], "order": 55, "emoji": "🙂‍↕️"}, {"tags": ["calm", "face", "peace", "relief", "relieved", "zen"], "order": 57, "emoji": "😌"}, {"tags": ["awful", "bored", "dejected", "died", "disappointed", "face", "losing", "lost", "pensive", "sad", "sucks"], "order": 58, "emoji": "😔"}, {"tags": ["crying", "face", "good", "night", "sad", "sleep", "sleeping", "sleepy", "tired"], "order": 59, "emoji": "😪"}, {"tags": ["drooling", "face"], "order": 60, "emoji": "🤤"}, {"tags": ["bed", "bedtime", "face", "good", "goodnight", "nap", "night", "sleep", "sleeping", "tired", "whatever", "yawn", "zzz"], "order": 61, "emoji": "😴"}, {"tags": ["bags", "bored", "exhausted", "eyes", "face", "fatigued", "late", "sleepy", "tired", "weary"], "order": 62, "emoji": "🫩"}, {"tags": ["cold", "dentist", "dermatologist", "doctor", "dr", "face", "germs", "mask", "medical", "medicine", "sick"], "order": 63, "emoji": "😷"}, {"tags": ["face", "ill", "sick", "thermometer"], "order": 64, "emoji": "🤒"}, {"tags": ["bandage", "face", "head-bandage", "hurt", "injury", "ouch"], "order": 65, "emoji": "🤕"}, {"tags": ["face", "gross", "nasty", "nauseated", "sick", "vomit"], "order": 66, "emoji": "🤢"}, {"tags": ["barf", "ew", "face", "gross", "puke", "sick", "spew", "throw", "up", "vomit", "vomiting"], "order": 67, "emoji": "🤮"}, {"tags": ["face", "fever", "flu", "gesundheit", "sick", "sneeze", "sneezing"], "order": 68, "emoji": "🤧"}, {"tags": ["dying", "face", "feverish", "heat", "hot", "panting", "red-faced", "stroke", "sweating", "tongue"], "order": 69, "emoji": "🥵"}, {"tags": ["blue", "blue-faced", "cold", "face", "freezing", "frostbite", "icicles", "subzero", "teeth"], "order": 70, "emoji": "🥶"}, {"tags": ["dizzy", "drunk", "eyes", "face", "intoxicated", "mouth", "tipsy", "uneven", "wavy", "woozy"], "order": 71, "emoji": "🥴"}, {"tags": ["crossed-out", "dead", "dizzy", "eyes", "face", "feels", "knocked", "out", "sick", "tired"], "order": 72, "emoji": "😵"}, {"tags": ["confused", "dizzy", "eyes", "face", "hypnotized", "omg", "smiley", "spiral", "trouble", "whoa", "woah", "woozy"], "order": 73, "emoji": "😵‍💫"}, {"tags": ["blown", "explode", "exploding", "head", "mind", "mindblown", "no", "shocked", "way"], "order": 74, "emoji": "🤯"}, {"tags": ["cowboy", "cowgirl", "face", "hat"], "order": 75, "emoji": "🤠"}, {"tags": ["bday", "birthday", "celebrate", "celebration", "excited", "face", "happy", "hat", "hooray", "horn", "party", "partying"], "order": 76, "emoji": "🥳"}, {"tags": ["disguise", "eyebrow", "face", "glasses", "incognito", "moustache", "mustache", "nose", "person", "spy", "tache", "tash"], "order": 77, "emoji": "🥸"}, {"tags": ["awesome", "beach", "bright", "bro", "chilling", "cool", "face", "rad", "relaxed", "shades", "slay", "smile", "style", "sunglasses", "swag", "win"], "order": 78, "emoji": "😎"}, {"tags": ["brainy", "clever", "expert", "face", "geek", "gifted", "glasses", "intelligent", "nerd", "smart"], "order": 79, "emoji": "🤓"}, {"tags": ["classy", "face", "fancy", "monocle", "rich", "stuffy", "wealthy"], "order": 80, "emoji": "🧐"}, {"tags": ["befuddled", "confused", "confusing", "dunno", "face", "frown", "hm", "meh", "not", "sad", "sorry", "sure"], "order": 81, "emoji": "😕"}, {"tags": ["confused", "confusion", "diagonal", "disappointed", "doubt", "doubtful", "face", "frustrated", "frustration", "meh", "mouth", "skeptical", "unsure", "whatever", "wtv"], "order": 82, "emoji": "🫤"}, {"tags": ["anxious", "butterflies", "face", "nerves", "nervous", "sad", "stress", "stressed", "surprised", "worried", "worry"], "order": 83, "emoji": "😟"}, {"tags": ["face", "frown", "frowning", "sad", "slightly"], "order": 84, "emoji": "🙁"}, {"tags": ["face", "frown", "frowning", "sad"], "order": 86, "emoji": "☹️"}, {"tags": ["believe", "face", "forgot", "mouth", "omg", "open", "shocked", "surprised", "sympathy", "unbelievable", "unreal", "whoa", "wow", "you"], "order": 87, "emoji": "😮"}, {"tags": ["epic", "face", "hushed", "omg", "stunned", "surprised", "whoa", "woah"], "order": 88, "emoji": "😯"}, {"tags": ["astonished", "cost", "face", "no", "omg", "shocked", "totally", "way"], "order": 89, "emoji": "😲"}, {"tags": ["amazed", "awkward", "crazy", "dazed", "dead", "disbelief", "embarrassed", "face", "flushed", "geez", "heat", "hot", "impressed", "jeez", "what", "wow"], "order": 90, "emoji": "😳"}, {"tags": ["begging", "big", "eyes", "face", "mercy", "not", "pleading", "please", "pretty", "puppy", "sad", "why"], "order": 91, "emoji": "🥺"}, {"tags": ["admiration", "aww", "back", "cry", "embarrassed", "face", "feelings", "grateful", "gratitude", "holding", "joy", "please", "proud", "resist", "sad", "tears"], "order": 92, "emoji": "🥹"}, {"tags": ["caught", "face", "frown", "frowning", "guard", "mouth", "open", "scared", "scary", "surprise", "what", "wow"], "order": 93, "emoji": "😦"}, {"tags": ["anguished", "face", "forgot", "scared", "scary", "stressed", "surprise", "unhappy", "what", "wow"], "order": 94, "emoji": "😧"}, {"tags": ["afraid", "anxious", "blame", "face", "fear", "fearful", "scared", "worried"], "order": 95, "emoji": "😨"}, {"tags": ["anxious", "blue", "cold", "eek", "face", "mouth", "nervous", "open", "rushed", "scared", "sweat", "yikes"], "order": 96, "emoji": "😰"}, {"tags": ["anxious", "call", "close", "complicated", "disappointed", "face", "not", "relieved", "sad", "sweat", "time", "whew"], "order": 97, "emoji": "😥"}, {"tags": ["awful", "cry", "crying", "face", "feels", "miss", "sad", "tear", "triste", "unhappy"], "order": 98, "emoji": "😢"}, {"tags": ["bawling", "cry", "crying", "face", "loudly", "sad", "sob", "tear", "tears", "unhappy"], "order": 99, "emoji": "😭"}, {"tags": ["epic", "face", "fear", "fearful", "munch", "scared", "scream", "screamer", "screaming", "shocked", "surprised", "woah"], "order": 100, "emoji": "😱"}, {"tags": ["annoyed", "confounded", "confused", "cringe", "distraught", "face", "feels", "frustrated", "mad", "sad"], "order": 101, "emoji": "😖"}, {"tags": ["concentrate", "concentration", "face", "focus", "headache", "persevere", "persevering"], "order": 102, "emoji": "😣"}, {"tags": ["awful", "blame", "dejected", "disappointed", "face", "fail", "losing", "sad", "unhappy"], "order": 103, "emoji": "😞"}, {"tags": ["close", "cold", "downcast", "face", "feels", "headache", "nervous", "sad", "scared", "sweat", "yikes"], "order": 104, "emoji": "😓"}, {"tags": ["crying", "face", "fail", "feels", "hungry", "mad", "nooo", "sad", "sleepy", "tired", "unhappy", "weary"], "order": 105, "emoji": "😩"}, {"tags": ["cost", "face", "feels", "nap", "sad", "sneeze", "tired"], "order": 106, "emoji": "😫"}, {"tags": ["bedtime", "bored", "face", "goodnight", "nap", "night", "sleep", "sleepy", "tired", "whatever", "yawn", "yawning", "zzz"], "order": 107, "emoji": "🥱"}, {"tags": ["anger", "angry", "face", "feels", "fume", "fuming", "furious", "fury", "mad", "nose", "steam", "triumph", "unhappy", "won"], "order": 108, "emoji": "😤"}, {"tags": ["anger", "angry", "enraged", "face", "feels", "mad", "maddening", "pouting", "rage", "red", "shade", "unhappy", "upset"], "order": 109, "emoji": "😡"}, {"tags": ["anger", "angry", "blame", "face", "feels", "frustrated", "mad", "maddening", "rage", "shade", "unhappy", "upset"], "order": 110, "emoji": "😠"}, {"tags": ["censor", "cursing", "cussing", "face", "mad", "mouth", "pissed", "swearing", "symbols"], "order": 111, "emoji": "🤬"}, {"tags": ["demon", "devil", "evil", "face", "fairy", "fairytale", "fantasy", "horns", "purple", "shade", "smile", "smiling", "tale"], "order": 112, "emoji": "😈"}, {"tags": ["angry", "demon", "devil", "evil", "face", "fairy", "fairytale", "fantasy", "horns", "imp", "mischievous", "purple", "shade", "tale"], "order": 113, "emoji": "👿"}, {"tags": ["body", "dead", "death", "face", "fairy", "fairytale", "i’m", "lmao", "monster", "tale", "yolo"], "order": 114, "emoji": "💀"}, {"tags": ["bone", "crossbones", "dead", "death", "face", "monster", "skull"], "order": 116, "emoji": "☠️"}, {"tags": ["bs", "comic", "doo", "dung", "face", "fml", "monster", "pile", "poo", "poop", "smelly", "smh", "stink", "stinks", "stinky", "turd"], "order": 117, "emoji": "💩"}, {"tags": ["clown", "face"], "order": 118, "emoji": "🤡"}, {"tags": ["creature", "devil", "face", "fairy", "fairytale", "fantasy", "mask", "monster", "scary", "tale"], "order": 119, "emoji": "👹"}, {"tags": ["angry", "creature", "face", "fairy", "fairytale", "fantasy", "mask", "mean", "monster", "tale"], "order": 120, "emoji": "👺"}, {"tags": ["boo", "creature", "excited", "face", "fairy", "fairytale", "fantasy", "halloween", "haunting", "monster", "scary", "silly", "tale"], "order": 121, "emoji": "👻"}, {"tags": ["creature", "extraterrestrial", "face", "fairy", "fairytale", "fantasy", "monster", "space", "tale", "ufo"], "order": 122, "emoji": "👽️"}, {"tags": ["alien", "creature", "extraterrestrial", "face", "fairy", "fairytale", "fantasy", "game", "gamer", "games", "monster", "pixelated", "space", "tale", "ufo"], "order": 123, "emoji": "👾"}, {"tags": ["face", "monster"], "order": 124, "emoji": "🤖"}, {"tags": ["animal", "cat", "face", "grinning", "mouth", "open", "smile", "smiling"], "order": 125, "emoji": "😺"}, {"tags": ["animal", "cat", "eye", "eyes", "face", "grin", "grinning", "smile", "smiling"], "order": 126, "emoji": "😸"}, {"tags": ["animal", "cat", "face", "joy", "laugh", "laughing", "lol", "tear", "tears"], "order": 127, "emoji": "😹"}, {"tags": ["animal", "cat", "eye", "face", "heart", "heart-eyes", "love", "smile", "smiling"], "order": 128, "emoji": "😻"}, {"tags": ["animal", "cat", "face", "ironic", "smile", "wry"], "order": 129, "emoji": "😼"}, {"tags": ["animal", "cat", "closed", "eye", "eyes", "face", "kiss", "kissing"], "order": 130, "emoji": "😽"}, {"tags": ["animal", "cat", "face", "oh", "surprised", "weary"], "order": 131, "emoji": "🙀"}, {"tags": ["animal", "cat", "cry", "crying", "face", "sad", "tear"], "order": 132, "emoji": "😿"}, {"tags": ["animal", "cat", "face", "pouting"], "order": 133, "emoji": "😾"}, {"tags": ["embarrassed", "evil", "face", "forbidden", "forgot", "gesture", "hide", "monkey", "no", "omg", "prohibited", "scared", "secret", "smh", "watch"], "order": 134, "emoji": "🙈"}, {"tags": ["animal", "ears", "evil", "face", "forbidden", "gesture", "hear", "listen", "monkey", "no", "not", "prohibited", "secret", "shh", "tmi"], "order": 135, "emoji": "🙉"}, {"tags": ["animal", "evil", "face", "forbidden", "gesture", "monkey", "no", "not", "oops", "prohibited", "quiet", "secret", "speak", "stealth"], "order": 136, "emoji": "🙊"}, {"tags": ["heart", "letter", "love", "mail", "romance", "valentine"], "order": 137, "emoji": "💌"}, {"tags": ["143", "adorbs", "arrow", "cupid", "date", "emotion", "heart", "ily", "love", "romance", "valentine"], "order": 138, "emoji": "💘"}, {"tags": ["143", "anniversary", "emotion", "heart", "ily", "kisses", "ribbon", "valentine", "xoxo"], "order": 139, "emoji": "💝"}, {"tags": ["143", "emotion", "excited", "good", "heart", "ily", "kisses", "morning", "night", "sparkle", "sparkling", "xoxo"], "order": 140, "emoji": "💖"}, {"tags": ["143", "emotion", "excited", "growing", "heart", "heartpulse", "ily", "kisses", "muah", "nervous", "pulse", "xoxo"], "order": 141, "emoji": "💗"}, {"tags": ["143", "beating", "cardio", "emotion", "heart", "heartbeat", "ily", "love", "pulsating", "pulse"], "order": 142, "emoji": "💓"}, {"tags": ["143", "adorbs", "anniversary", "emotion", "heart", "hearts", "revolving"], "order": 143, "emoji": "💞"}, {"tags": ["143", "anniversary", "date", "dating", "emotion", "heart", "hearts", "ily", "kisses", "love", "loving", "two", "xoxo"], "order": 144, "emoji": "💕"}, {"tags": ["143", "decoration", "emotion", "heart", "hearth", "purple", "white"], "order": 145, "emoji": "💟"}, {"tags": ["exclamation", "heart", "heavy", "mark", "punctuation"], "order": 147, "emoji": "❣️"}, {"tags": ["break", "broken", "crushed", "emotion", "heart", "heartbroken", "lonely", "sad"], "order": 148, "emoji": "💔"}, {"tags": ["burn", "fire", "heart", "love", "lust", "sacred"], "order": 149, "emoji": "❤️‍🔥"}, {"tags": ["healthier", "heart", "improving", "mending", "recovering", "recuperating", "well"], "order": 151, "emoji": "❤️‍🩹"}, {"tags": ["emotion", "heart", "love", "red"], "order": 154, "emoji": "❤️"}, {"tags": ["143", "adorable", "cute", "emotion", "heart", "ily", "like", "love", "pink", "special", "sweet"], "order": 155, "emoji": "🩷"}, {"tags": ["143", "heart", "orange"], "order": 156, "emoji": "🧡"}, {"tags": ["143", "cardiac", "emotion", "heart", "ily", "love", "yellow"], "order": 157, "emoji": "💛"}, {"tags": ["143", "emotion", "green", "heart", "ily", "love", "romantic"], "order": 158, "emoji": "💚"}, {"tags": ["143", "blue", "emotion", "heart", "ily", "love", "romance"], "order": 159, "emoji": "💙"}, {"tags": ["143", "blue", "cute", "cyan", "emotion", "heart", "ily", "light", "like", "love", "sky", "special", "teal"], "order": 160, "emoji": "🩵"}, {"tags": ["143", "bestest", "emotion", "heart", "ily", "love", "purple"], "order": 161, "emoji": "💜"}, {"tags": ["143", "brown", "heart"], "order": 162, "emoji": "🤎"}, {"tags": ["black", "evil", "heart", "wicked"], "order": 163, "emoji": "🖤"}, {"tags": ["143", "emotion", "gray", "grey", "heart", "ily", "love", "silver", "slate", "special"], "order": 164, "emoji": "🩶"}, {"tags": ["143", "heart", "white"], "order": 165, "emoji": "🤍"}, {"tags": ["dating", "emotion", "heart", "kiss", "kissing", "lips", "mark", "romance", "sexy"], "order": 166, "emoji": "💋"}, {"tags": ["100", "a+", "agree", "clearly", "definitely", "faithful", "fleek", "full", "hundred", "keep", "perfect", "point", "score", "true", "truth", "yup"], "order": 167, "emoji": "💯"}, {"tags": ["anger", "angry", "comic", "mad", "symbol", "upset"], "order": 168, "emoji": "💢"}, {"tags": ["bomb", "boom", "collide", "comic", "explode"], "order": 169, "emoji": "💥"}, {"tags": ["comic", "shining", "shooting", "star", "stars"], "order": 170, "emoji": "💫"}, {"tags": ["comic", "drip", "droplet", "droplets", "drops", "splashing", "squirt", "sweat", "water", "wet", "work", "workout"], "order": 171, "emoji": "💦"}, {"tags": ["away", "cloud", "comic", "dash", "dashing", "fart", "fast", "go", "gone", "gotta", "running", "smoke"], "order": 172, "emoji": "💨"}, {"tags": ["hole"], "order": 174, "emoji": "🕳️"}, {"tags": ["balloon", "bubble", "comic", "dialog", "message", "sms", "speech", "talk", "text", "typing"], "order": 175, "emoji": "💬"}, {"tags": ["balloon", "bubble", "eye", "speech", "witness"], "order": 176, "emoji": "👁️‍🗨️"}, {"tags": ["balloon", "bubble", "dialog", "left", "speech"], "order": 181, "emoji": "🗨️"}, {"tags": ["anger", "angry", "balloon", "bubble", "mad", "right"], "order": 183, "emoji": "🗯️"}, {"tags": ["balloon", "bubble", "cartoon", "cloud", "comic", "daydream", "decisions", "dream", "idea", "invent", "invention", "realize", "think", "thoughts", "wonder"], "order": 184, "emoji": "💭"}, {"tags": ["comic", "good", "goodnight", "night", "sleep", "sleeping", "sleepy", "tired", "zzz"], "order": 185, "emoji": "💤"}, {"tags": ["bye", "cya", "g2g", "greetings", "gtg", "hand", "hello", "hey", "hi", "later", "outtie", "ttfn", "ttyl", "wave", "yo", "you"], "order": 186, "emoji": "👋"}, {"tags": ["back", "backhand", "hand", "raised"], "order": 192, "emoji": "🤚"}, {"tags": ["finger", "fingers", "hand", "raised", "splayed", "stop"], "order": 199, "emoji": "🖐️"}, {"tags": ["5", "five", "hand", "high", "raised", "stop"], "order": 205, "emoji": "✋️"}, {"tags": ["finger", "hand", "hands", "salute", "vulcan"], "order": 211, "emoji": "🖖"}, {"tags": ["hand", "handshake", "hold", "reach", "right", "rightward", "rightwards", "shake"], "order": 217, "emoji": "🫱"}, {"tags": ["hand", "handshake", "hold", "left", "leftward", "leftwards", "reach", "shake"], "order": 223, "emoji": "🫲"}, {"tags": ["dismiss", "down", "drop", "dropped", "hand", "palm", "pick", "shoo", "up"], "order": 229, "emoji": "🫳"}, {"tags": ["beckon", "catch", "come", "hand", "hold", "know", "lift", "me", "offer", "palm", "tell"], "order": 235, "emoji": "🫴"}, {"tags": ["block", "five", "halt", "hand", "high", "hold", "leftward", "leftwards", "pause", "push", "pushing", "refuse", "slap", "stop", "wait"], "order": 241, "emoji": "🫷"}, {"tags": ["block", "five", "halt", "hand", "high", "hold", "pause", "push", "pushing", "refuse", "rightward", "rightwards", "slap", "stop", "wait"], "order": 247, "emoji": "🫸"}, {"tags": ["awesome", "bet", "dope", "fleek", "fosho", "got", "gotcha", "hand", "legit", "ok", "okay", "pinch", "rad", "sure", "sweet", "three"], "order": 253, "emoji": "👌"}, {"tags": ["fingers", "gesture", "hand", "hold", "huh", "interrogation", "patience", "pinched", "relax", "sarcastic", "ugh", "what", "zip"], "order": 259, "emoji": "🤌"}, {"tags": ["amount", "bit", "fingers", "hand", "little", "pinching", "small", "sort"], "order": 265, "emoji": "🤏"}, {"tags": ["hand", "peace", "v", "victory"], "order": 272, "emoji": "✌️"}, {"tags": ["cross", "crossed", "finger", "fingers", "hand", "luck"], "order": 278, "emoji": "🤞"}, {"tags": ["<3", "crossed", "expensive", "finger", "hand", "heart", "index", "love", "money", "snap", "thumb"], "order": 284, "emoji": "🫰"}, {"tags": ["fingers", "gesture", "hand", "ily", "love", "love-you", "three", "you"], "order": 290, "emoji": "🤟"}, {"tags": ["finger", "hand", "horns", "rock-on", "sign"], "order": 296, "emoji": "🤘"}, {"tags": ["call", "hand", "hang", "loose", "me", "shaka"], "order": 302, "emoji": "🤙"}, {"tags": ["backhand", "finger", "hand", "index", "left", "point", "pointing"], "order": 308, "emoji": "👈️"}, {"tags": ["backhand", "finger", "hand", "index", "point", "pointing", "right"], "order": 314, "emoji": "👉️"}, {"tags": ["backhand", "finger", "hand", "index", "point", "pointing", "up"], "order": 320, "emoji": "👆️"}, {"tags": ["finger", "hand", "middle"], "order": 326, "emoji": "🖕"}, {"tags": ["backhand", "down", "finger", "hand", "index", "point", "pointing"], "order": 332, "emoji": "👇️"}, {"tags": ["finger", "hand", "index", "point", "pointing", "this", "up"], "order": 339, "emoji": "☝️"}, {"tags": ["at", "finger", "hand", "index", "pointing", "poke", "viewer", "you"], "order": 345, "emoji": "🫵"}, {"tags": ["+1", "good", "hand", "like", "thumb", "up", "yes"], "order": 351, "emoji": "👍️"}, {"tags": ["-1", "bad", "dislike", "down", "good", "hand", "no", "nope", "thumb", "thumbs"], "order": 357, "emoji": "👎️"}, {"tags": ["clenched", "fist", "hand", "punch", "raised", "solidarity"], "order": 363, "emoji": "✊️"}, {"tags": ["absolutely", "agree", "boom", "bro", "bruh", "bump", "clenched", "correct", "fist", "hand", "knuckle", "oncoming", "pound", "punch", "rock", "ttyl"], "order": 369, "emoji": "👊"}, {"tags": ["fist", "left-facing", "leftwards"], "order": 375, "emoji": "🤛"}, {"tags": ["fist", "right-facing", "rightwards"], "order": 381, "emoji": "🤜"}, {"tags": ["applause", "approval", "awesome", "clap", "congrats", "congratulations", "excited", "good", "great", "hand", "homie", "job", "nice", "prayed", "well", "yay"], "order": 387, "emoji": "👏"}, {"tags": ["celebration", "gesture", "hand", "hands", "hooray", "praise", "raised", "raising"], "order": 393, "emoji": "🙌"}, {"tags": ["<3", "hands", "heart", "love", "you"], "order": 399, "emoji": "🫶"}, {"tags": ["hand", "hands", "hug", "jazz", "open", "swerve"], "order": 405, "emoji": "👐"}, {"tags": ["cupped", "dua", "hands", "palms", "pray", "prayer", "together", "up", "wish"], "order": 411, "emoji": "🤲"}, {"tags": ["agreement", "deal", "hand", "meeting", "shake"], "order": 417, "emoji": "🤝"}, {"tags": ["appreciate", "ask", "beg", "blessed", "bow", "cmon", "five", "folded", "gesture", "hand", "high", "please", "pray", "thanks", "thx"], "order": 443, "emoji": "🙏"}, {"tags": ["hand", "write", "writing"], "order": 450, "emoji": "✍️"}, {"tags": ["bored", "care", "cosmetics", "done", "makeup", "manicure", "nail", "polish", "whatever"], "order": 456, "emoji": "💅"}, {"tags": ["camera", "phone"], "order": 462, "emoji": "🤳"}, {"tags": ["arm", "beast", "bench", "biceps", "bodybuilder", "bro", "curls", "flex", "gains", "gym", "jacked", "muscle", "press", "ripped", "strong", "weightlift"], "order": 468, "emoji": "💪"}, {"tags": ["accessibility", "arm", "mechanical", "prosthetic"], "order": 474, "emoji": "🦾"}, {"tags": ["accessibility", "leg", "mechanical", "prosthetic"], "order": 475, "emoji": "🦿"}, {"tags": ["bent", "foot", "kick", "knee", "limb"], "order": 476, "emoji": "🦵"}, {"tags": ["ankle", "feet", "kick", "stomp"], "order": 482, "emoji": "🦶"}, {"tags": ["body", "ears", "hear", "hearing", "listen", "listening", "sound"], "order": 488, "emoji": "👂️"}, {"tags": ["accessibility", "aid", "ear", "hard", "hearing"], "order": 494, "emoji": "🦻"}, {"tags": ["body", "noses", "nosey", "odor", "smell", "smells"], "order": 500, "emoji": "👃"}, {"tags": ["intelligent", "smart"], "order": 506, "emoji": "🧠"}, {"tags": ["anatomical", "beat", "cardiology", "heart", "heartbeat", "organ", "pulse", "real", "red"], "order": 507, "emoji": "🫀"}, {"tags": ["breath", "breathe", "exhalation", "inhalation", "lung", "organ", "respiration"], "order": 508, "emoji": "🫁"}, {"tags": ["dentist", "pearly", "teeth", "white"], "order": 509, "emoji": "🦷"}, {"tags": ["bones", "dog", "skeleton", "wishbone"], "order": 510, "emoji": "🦴"}, {"tags": ["body", "eye", "face", "googly", "look", "looking", "omg", "peep", "see", "seeing"], "order": 511, "emoji": "👀"}, {"tags": ["1", "body", "one"], "order": 513, "emoji": "👁️"}, {"tags": ["body", "lick", "slurp"], "order": 514, "emoji": "👅"}, {"tags": ["beauty", "body", "kiss", "kissing", "lips", "lipstick"], "order": 515, "emoji": "👄"}, {"tags": ["anxious", "bite", "biting", "fear", "flirt", "flirting", "kiss", "lip", "lipstick", "nervous", "sexy", "uncomfortable", "worried", "worry"], "order": 516, "emoji": "🫦"}, {"tags": ["babies", "children", "goo", "infant", "newborn", "pregnant", "young"], "order": 517, "emoji": "👶"}, {"tags": ["bright-eyed", "grandchild", "kid", "young", "younger"], "order": 523, "emoji": "🧒"}, {"tags": ["bright-eyed", "child", "grandson", "kid", "son", "young", "younger"], "order": 529, "emoji": "👦"}, {"tags": ["bright-eyed", "child", "daughter", "granddaughter", "kid", "virgo", "young", "younger", "zodiac"], "order": 535, "emoji": "👧"}, {"tags": ["adult"], "order": 541, "emoji": "🧑"}, {"tags": ["blond", "blond-haired", "human", "person"], "order": 547, "emoji": "👱"}, {"tags": ["adult", "bro"], "order": 553, "emoji": "👨"}, {"tags": ["beard", "bearded", "person", "whiskers"], "order": 559, "emoji": "🧔"}, {"tags": ["beard", "bearded", "man", "whiskers"], "order": 565, "emoji": "🧔‍♂️"}, {"tags": ["beard", "bearded", "whiskers", "woman"], "order": 577, "emoji": "🧔‍♀️"}, {"tags": ["adult", "bro", "man", "red hair"], "order": 589, "emoji": "👨‍🦰"}, {"tags": ["adult", "bro", "curly hair", "man"], "order": 595, "emoji": "👨‍🦱"}, {"tags": ["adult", "bro", "man", "white hair"], "order": 601, "emoji": "👨‍🦳"}, {"tags": ["adult", "bald", "bro", "man"], "order": 607, "emoji": "👨‍🦲"}, {"tags": ["adult", "lady"], "order": 613, "emoji": "👩"}, {"tags": ["adult", "lady", "red hair", "woman"], "order": 619, "emoji": "👩‍🦰"}, {"tags": ["adult", "person", "red hair"], "order": 625, "emoji": "🧑‍🦰"}, {"tags": ["adult", "curly hair", "lady", "woman"], "order": 631, "emoji": "👩‍🦱"}, {"tags": ["adult", "curly hair", "person"], "order": 637, "emoji": "🧑‍🦱"}, {"tags": ["adult", "lady", "white hair", "woman"], "order": 643, "emoji": "👩‍🦳"}, {"tags": ["adult", "person", "white hair"], "order": 649, "emoji": "🧑‍🦳"}, {"tags": ["adult", "bald", "lady", "woman"], "order": 655, "emoji": "👩‍🦲"}, {"tags": ["adult", "bald", "person"], "order": 661, "emoji": "🧑‍🦲"}, {"tags": ["blond", "blond-haired", "blonde", "hair", "woman"], "order": 667, "emoji": "👱‍♀️"}, {"tags": ["blond", "blond-haired", "hair", "man"], "order": 679, "emoji": "👱‍♂️"}, {"tags": ["adult", "elderly", "grandparent", "old", "person", "wise"], "order": 691, "emoji": "🧓"}, {"tags": ["adult", "bald", "elderly", "gramps", "grandfather", "grandpa", "man", "old", "wise"], "order": 697, "emoji": "👴"}, {"tags": ["adult", "elderly", "grandma", "grandmother", "granny", "lady", "old", "wise", "woman"], "order": 703, "emoji": "👵"}, {"tags": ["annoyed", "disappointed", "disgruntled", "disturbed", "frown", "frowning", "frustrated", "gesture", "irritated", "person", "upset"], "order": 709, "emoji": "🙍"}, {"tags": ["annoyed", "disappointed", "disgruntled", "disturbed", "frown", "frowning", "frustrated", "gesture", "irritated", "man", "upset"], "order": 715, "emoji": "🙍‍♂️"}, {"tags": ["annoyed", "disappointed", "disgruntled", "disturbed", "frown", "frowning", "frustrated", "gesture", "irritated", "upset", "woman"], "order": 727, "emoji": "🙍‍♀️"}, {"tags": ["disappointed", "downtrodden", "frown", "grimace", "person", "pouting", "scowl", "sulk", "upset", "whine"], "order": 739, "emoji": "🙎"}, {"tags": ["disappointed", "downtrodden", "frown", "grimace", "man", "pouting", "scowl", "sulk", "upset", "whine"], "order": 745, "emoji": "🙎‍♂️"}, {"tags": ["disappointed", "downtrodden", "frown", "grimace", "pouting", "scowl", "sulk", "upset", "whine", "woman"], "order": 757, "emoji": "🙎‍♀️"}, {"tags": ["forbidden", "gesture", "hand", "no", "not", "person", "prohibit"], "order": 769, "emoji": "🙅"}, {"tags": ["forbidden", "gesture", "hand", "man", "no", "not", "prohibit"], "order": 775, "emoji": "🙅‍♂️"}, {"tags": ["forbidden", "gesture", "hand", "no", "not", "prohibit", "woman"], "order": 787, "emoji": "🙅‍♀️"}, {"tags": ["exercise", "gesture", "gesturing", "hand", "ok", "omg", "person"], "order": 799, "emoji": "🙆"}, {"tags": ["exercise", "gesture", "gesturing", "hand", "man", "ok", "omg"], "order": 805, "emoji": "🙆‍♂️"}, {"tags": ["exercise", "gesture", "gesturing", "hand", "ok", "omg", "woman"], "order": 817, "emoji": "🙆‍♀️"}, {"tags": ["fetch", "flick", "flip", "gossip", "hand", "person", "sarcasm", "sarcastic", "sassy", "seriously", "tipping", "whatever"], "order": 829, "emoji": "💁"}, {"tags": ["fetch", "flick", "flip", "gossip", "hand", "man", "sarcasm", "sarcastic", "sassy", "seriously", "tipping", "whatever"], "order": 835, "emoji": "💁‍♂️"}, {"tags": ["fetch", "flick", "flip", "gossip", "hand", "sarcasm", "sarcastic", "sassy", "seriously", "tipping", "whatever", "woman"], "order": 847, "emoji": "💁‍♀️"}, {"tags": ["gesture", "hand", "here", "know", "me", "person", "pick", "question", "raise", "raising"], "order": 859, "emoji": "🙋"}, {"tags": ["gesture", "hand", "here", "know", "man", "me", "pick", "question", "raise", "raising"], "order": 865, "emoji": "🙋‍♂️"}, {"tags": ["gesture", "hand", "here", "know", "me", "pick", "question", "raise", "raising", "woman"], "order": 877, "emoji": "🙋‍♀️"}, {"tags": ["accessibility", "deaf", "ear", "gesture", "hear", "person"], "order": 889, "emoji": "🧏"}, {"tags": ["accessibility", "deaf", "ear", "gesture", "hear", "man"], "order": 895, "emoji": "🧏‍♂️"}, {"tags": ["accessibility", "deaf", "ear", "gesture", "hear", "woman"], "order": 907, "emoji": "🧏‍♀️"}, {"tags": ["apology", "ask", "beg", "bow", "bowing", "favor", "forgive", "gesture", "meditate", "meditation", "person", "pity", "regret", "sorry"], "order": 919, "emoji": "🙇"}, {"tags": ["apology", "ask", "beg", "bow", "bowing", "favor", "forgive", "gesture", "man", "meditate", "meditation", "pity", "regret", "sorry"], "order": 925, "emoji": "🙇‍♂️"}, {"tags": ["apology", "ask", "beg", "bow", "bowing", "favor", "forgive", "gesture", "meditate", "meditation", "pity", "regret", "sorry", "woman"], "order": 937, "emoji": "🙇‍♀️"}, {"tags": ["again", "bewilder", "disbelief", "exasperation", "facepalm", "no", "not", "oh", "omg", "person", "shock", "smh"], "order": 949, "emoji": "🤦"}, {"tags": ["again", "bewilder", "disbelief", "exasperation", "facepalm", "man", "no", "not", "oh", "omg", "shock", "smh"], "order": 955, "emoji": "🤦‍♂️"}, {"tags": ["again", "bewilder", "disbelief", "exasperation", "facepalm", "no", "not", "oh", "omg", "shock", "smh", "woman"], "order": 967, "emoji": "🤦‍♀️"}, {"tags": ["doubt", "dunno", "guess", "idk", "ignorance", "indifference", "knows", "maybe", "person", "shrug", "shrugging", "whatever", "who"], "order": 979, "emoji": "🤷"}, {"tags": ["doubt", "dunno", "guess", "idk", "ignorance", "indifference", "knows", "man", "maybe", "shrug", "shrugging", "whatever", "who"], "order": 985, "emoji": "🤷‍♂️"}, {"tags": ["doubt", "dunno", "guess", "idk", "ignorance", "indifference", "knows", "maybe", "shrug", "shrugging", "whatever", "who", "woman"], "order": 997, "emoji": "🤷‍♀️"}, {"tags": ["doctor", "health", "healthcare", "nurse", "therapist", "worker"], "order": 1009, "emoji": "🧑‍⚕️"}, {"tags": ["doctor", "health", "healthcare", "man", "nurse", "therapist", "worker"], "order": 1021, "emoji": "👨‍⚕️"}, {"tags": ["doctor", "health", "healthcare", "nurse", "therapist", "woman", "worker"], "order": 1033, "emoji": "👩‍⚕️"}, {"tags": ["graduate"], "order": 1045, "emoji": "🧑‍🎓"}, {"tags": ["graduate", "man", "student"], "order": 1051, "emoji": "👨‍🎓"}, {"tags": ["graduate", "student", "woman"], "order": 1057, "emoji": "👩‍🎓"}, {"tags": ["instructor", "lecturer", "professor"], "order": 1063, "emoji": "🧑‍🏫"}, {"tags": ["instructor", "lecturer", "man", "professor", "teacher"], "order": 1069, "emoji": "👨‍🏫"}, {"tags": ["instructor", "lecturer", "professor", "teacher", "woman"], "order": 1075, "emoji": "👩‍🏫"}, {"tags": ["justice", "law", "scales"], "order": 1081, "emoji": "🧑‍⚖️"}, {"tags": ["judge", "justice", "law", "man", "scales"], "order": 1093, "emoji": "👨‍⚖️"}, {"tags": ["judge", "justice", "law", "scales", "woman"], "order": 1105, "emoji": "👩‍⚖️"}, {"tags": ["gardener", "rancher"], "order": 1117, "emoji": "🧑‍🌾"}, {"tags": ["farmer", "gardener", "man", "rancher"], "order": 1123, "emoji": "👨‍🌾"}, {"tags": ["farmer", "gardener", "rancher", "woman"], "order": 1129, "emoji": "👩‍🌾"}, {"tags": ["chef"], "order": 1135, "emoji": "🧑‍🍳"}, {"tags": ["chef", "cook", "man"], "order": 1141, "emoji": "👨‍🍳"}, {"tags": ["chef", "cook", "woman"], "order": 1147, "emoji": "👩‍🍳"}, {"tags": ["electrician", "plumber", "tradesperson"], "order": 1153, "emoji": "🧑‍🔧"}, {"tags": ["electrician", "man", "mechanic", "plumber", "tradesperson"], "order": 1159, "emoji": "👨‍🔧"}, {"tags": ["electrician", "mechanic", "plumber", "tradesperson", "woman"], "order": 1165, "emoji": "👩‍🔧"}, {"tags": ["assembly", "factory", "industrial", "worker"], "order": 1171, "emoji": "🧑‍🏭"}, {"tags": ["assembly", "factory", "industrial", "man", "worker"], "order": 1177, "emoji": "👨‍🏭"}, {"tags": ["assembly", "factory", "industrial", "woman", "worker"], "order": 1183, "emoji": "👩‍🏭"}, {"tags": ["architect", "business", "manager", "office", "white-collar", "worker"], "order": 1189, "emoji": "🧑‍💼"}, {"tags": ["architect", "business", "man", "manager", "office", "white-collar", "worker"], "order": 1195, "emoji": "👨‍💼"}, {"tags": ["architect", "business", "manager", "office", "white-collar", "woman", "worker"], "order": 1201, "emoji": "👩‍💼"}, {"tags": ["biologist", "chemist", "engineer", "mathematician", "physicist"], "order": 1207, "emoji": "🧑‍🔬"}, {"tags": ["biologist", "chemist", "engineer", "man", "mathematician", "physicist", "scientist"], "order": 1213, "emoji": "👨‍🔬"}, {"tags": ["biologist", "chemist", "engineer", "mathematician", "physicist", "scientist", "woman"], "order": 1219, "emoji": "👩‍🔬"}, {"tags": ["coder", "computer", "developer", "inventor", "software"], "order": 1225, "emoji": "🧑‍💻"}, {"tags": ["coder", "computer", "developer", "inventor", "man", "software", "technologist"], "order": 1231, "emoji": "👨‍💻"}, {"tags": ["coder", "computer", "developer", "inventor", "software", "technologist", "woman"], "order": 1237, "emoji": "👩‍💻"}, {"tags": ["actor", "entertainer", "rock", "rockstar", "star"], "order": 1243, "emoji": "🧑‍🎤"}, {"tags": ["actor", "entertainer", "man", "rock", "rockstar", "singer", "star"], "order": 1249, "emoji": "👨‍🎤"}, {"tags": ["actor", "entertainer", "rock", "rockstar", "singer", "star", "woman"], "order": 1255, "emoji": "👩‍🎤"}, {"tags": ["palette"], "order": 1261, "emoji": "🧑‍🎨"}, {"tags": ["artist", "man", "palette"], "order": 1267, "emoji": "👨‍🎨"}, {"tags": ["artist", "palette", "woman"], "order": 1273, "emoji": "👩‍🎨"}, {"tags": ["plane"], "order": 1279, "emoji": "🧑‍✈️"}, {"tags": ["man", "pilot", "plane"], "order": 1291, "emoji": "👨‍✈️"}, {"tags": ["pilot", "plane", "woman"], "order": 1303, "emoji": "👩‍✈️"}, {"tags": ["rocket", "space"], "order": 1315, "emoji": "🧑‍🚀"}, {"tags": ["astronaut", "man", "rocket", "space"], "order": 1321, "emoji": "👨‍🚀"}, {"tags": ["astronaut", "rocket", "space", "woman"], "order": 1327, "emoji": "👩‍🚀"}, {"tags": ["fire", "firetruck"], "order": 1333, "emoji": "🧑‍🚒"}, {"tags": ["fire", "firefighter", "firetruck", "man"], "order": 1339, "emoji": "👨‍🚒"}, {"tags": ["fire", "firefighter", "firetruck", "woman"], "order": 1345, "emoji": "👩‍🚒"}, {"tags": ["apprehend", "arrest", "citation", "cop", "law", "officer", "over", "police", "pulled", "undercover"], "order": 1351, "emoji": "👮"}, {"tags": ["apprehend", "arrest", "citation", "cop", "law", "man", "officer", "over", "police", "pulled", "undercover"], "order": 1357, "emoji": "👮‍♂️"}, {"tags": ["apprehend", "arrest", "citation", "cop", "law", "officer", "over", "police", "pulled", "undercover", "woman"], "order": 1369, "emoji": "👮‍♀️"}, {"tags": ["sleuth", "spy"], "order": 1382, "emoji": "🕵️"}, {"tags": ["detective", "man", "sleuth", "spy"], "order": 1388, "emoji": "🕵️‍♂️"}, {"tags": ["detective", "sleuth", "spy", "woman"], "order": 1402, "emoji": "🕵️‍♀️"}, {"tags": ["buckingham", "helmet", "london", "palace"], "order": 1416, "emoji": "💂"}, {"tags": ["buckingham", "guard", "helmet", "london", "man", "palace"], "order": 1422, "emoji": "💂‍♂️"}, {"tags": ["buckingham", "guard", "helmet", "london", "palace", "woman"], "order": 1434, "emoji": "💂‍♀️"}, {"tags": ["assassin", "fight", "fighter", "hidden", "person", "secret", "skills", "sly", "soldier", "stealth", "war"], "order": 1446, "emoji": "🥷"}, {"tags": ["build", "construction", "fix", "hardhat", "hat", "man", "person", "rebuild", "remodel", "repair", "work", "worker"], "order": 1452, "emoji": "👷"}, {"tags": ["build", "construction", "fix", "hardhat", "hat", "man", "rebuild", "remodel", "repair", "work", "worker"], "order": 1458, "emoji": "👷‍♂️"}, {"tags": ["build", "construction", "fix", "hardhat", "hat", "man", "rebuild", "remodel", "repair", "woman", "work", "worker"], "order": 1470, "emoji": "👷‍♀️"}, {"tags": ["crown", "monarch", "noble", "person", "regal", "royal", "royalty"], "order": 1482, "emoji": "🫅"}, {"tags": ["crown", "fairy", "fairytale", "fantasy", "king", "royal", "royalty", "tale"], "order": 1488, "emoji": "🤴"}, {"tags": ["crown", "fairy", "fairytale", "fantasy", "queen", "royal", "royalty", "tale"], "order": 1494, "emoji": "👸"}, {"tags": ["person", "turban", "wearing"], "order": 1500, "emoji": "👳"}, {"tags": ["man", "turban", "wearing"], "order": 1506, "emoji": "👳‍♂️"}, {"tags": ["turban", "wearing", "woman"], "order": 1518, "emoji": "👳‍♀️"}, {"tags": ["cap", "chinese", "gua", "guapi", "hat", "mao", "person", "pi", "skullcap"], "order": 1530, "emoji": "👲"}, {"tags": ["bandana", "head", "headscarf", "hijab", "kerchief", "mantilla", "tichel", "woman"], "order": 1536, "emoji": "🧕"}, {"tags": ["formal", "person", "tuxedo", "wedding"], "order": 1542, "emoji": "🤵"}, {"tags": ["formal", "groom", "man", "tuxedo", "wedding"], "order": 1548, "emoji": "🤵‍♂️"}, {"tags": ["formal", "tuxedo", "wedding", "woman"], "order": 1560, "emoji": "🤵‍♀️"}, {"tags": ["person", "veil", "wedding"], "order": 1572, "emoji": "👰"}, {"tags": ["man", "veil", "wedding"], "order": 1578, "emoji": "👰‍♂️"}, {"tags": ["bride", "veil", "wedding", "woman"], "order": 1590, "emoji": "👰‍♀️"}, {"tags": ["pregnant", "woman"], "order": 1602, "emoji": "🤰"}, {"tags": ["belly", "bloated", "full", "man", "overeat", "pregnant"], "order": 1608, "emoji": "🫃"}, {"tags": ["belly", "bloated", "full", "overeat", "person", "pregnant", "stuffed"], "order": 1614, "emoji": "🫄"}, {"tags": ["baby", "breast", "feeding", "mom", "mother", "nursing", "woman"], "order": 1620, "emoji": "🤱"}, {"tags": ["baby", "feed", "feeding", "mom", "mother", "nanny", "newborn", "nursing", "woman"], "order": 1626, "emoji": "👩‍🍼"}, {"tags": ["baby", "dad", "father", "feed", "feeding", "man", "nanny", "newborn", "nursing"], "order": 1632, "emoji": "👨‍🍼"}, {"tags": ["baby", "feed", "feeding", "nanny", "newborn", "nursing", "parent"], "order": 1638, "emoji": "🧑‍🍼"}, {"tags": ["angel", "baby", "church", "face", "fairy", "fairytale", "fantasy", "tale"], "order": 1644, "emoji": "👼"}, {"tags": ["celebration", "christmas", "claus", "fairy", "fantasy", "father", "holiday", "merry", "santa", "tale", "xmas"], "order": 1650, "emoji": "🎅"}, {"tags": ["celebration", "christmas", "claus", "fairy", "fantasy", "holiday", "merry", "mother", "mrs", "santa", "tale", "xmas"], "order": 1656, "emoji": "🤶"}, {"tags": ["celebration", "christmas", "claus", "fairy", "fantasy", "holiday", "merry", "mx", "santa", "tale", "xmas"], "order": 1662, "emoji": "🧑‍🎄"}, {"tags": ["good", "hero", "superpower"], "order": 1668, "emoji": "🦸"}, {"tags": ["good", "hero", "man", "superhero", "superpower"], "order": 1674, "emoji": "🦸‍♂️"}, {"tags": ["good", "hero", "heroine", "superhero", "superpower", "woman"], "order": 1686, "emoji": "🦸‍♀️"}, {"tags": ["bad", "criminal", "evil", "superpower", "villain"], "order": 1698, "emoji": "🦹"}, {"tags": ["bad", "criminal", "evil", "man", "superpower", "supervillain", "villain"], "order": 1704, "emoji": "🦹‍♂️"}, {"tags": ["bad", "criminal", "evil", "superpower", "supervillain", "villain", "woman"], "order": 1716, "emoji": "🦹‍♀️"}, {"tags": ["fantasy", "magic", "play", "sorcerer", "sorceress", "sorcery", "spell", "summon", "witch", "wizard"], "order": 1728, "emoji": "🧙"}, {"tags": ["fantasy", "mage", "magic", "man", "play", "sorcerer", "sorceress", "sorcery", "spell", "summon", "witch", "wizard"], "order": 1734, "emoji": "🧙‍♂️"}, {"tags": ["fantasy", "mage", "magic", "play", "sorcerer", "sorceress", "sorcery", "spell", "summon", "witch", "wizard", "woman"], "order": 1746, "emoji": "🧙‍♀️"}, {"tags": ["fairytale", "fantasy", "myth", "person", "pixie", "tale", "wings"], "order": 1758, "emoji": "🧚"}, {"tags": ["fairy", "fairytale", "fantasy", "man", "myth", "oberon", "person", "pixie", "puck", "tale", "wings"], "order": 1764, "emoji": "🧚‍♂️"}, {"tags": ["fairy", "fairytale", "fantasy", "myth", "person", "pixie", "tale", "titania", "wings", "woman"], "order": 1776, "emoji": "🧚‍♀️"}, {"tags": ["blood", "dracula", "fangs", "halloween", "scary", "supernatural", "teeth", "undead"], "order": 1788, "emoji": "🧛"}, {"tags": ["blood", "fangs", "halloween", "man", "scary", "supernatural", "teeth", "undead", "vampire"], "order": 1794, "emoji": "🧛‍♂️"}, {"tags": ["blood", "fangs", "halloween", "scary", "supernatural", "teeth", "undead", "vampire", "woman"], "order": 1806, "emoji": "🧛‍♀️"}, {"tags": ["creature", "fairytale", "folklore", "ocean", "sea", "siren", "trident"], "order": 1818, "emoji": "🧜"}, {"tags": ["creature", "fairytale", "folklore", "neptune", "ocean", "poseidon", "sea", "siren", "trident", "triton"], "order": 1824, "emoji": "🧜‍♂️"}, {"tags": ["creature", "fairytale", "folklore", "merwoman", "ocean", "sea", "siren", "trident"], "order": 1836, "emoji": "🧜‍♀️"}, {"tags": ["elves", "enchantment", "fantasy", "folklore", "magic", "magical", "myth"], "order": 1848, "emoji": "🧝"}, {"tags": ["elf", "elves", "enchantment", "fantasy", "folklore", "magic", "magical", "man", "myth"], "order": 1854, "emoji": "🧝‍♂️"}, {"tags": ["elf", "elves", "enchantment", "fantasy", "folklore", "magic", "magical", "myth", "woman"], "order": 1866, "emoji": "🧝‍♀️"}, {"tags": ["djinn", "fantasy", "jinn", "lamp", "myth", "rub", "wishes"], "order": 1878, "emoji": "🧞"}, {"tags": ["djinn", "fantasy", "genie", "jinn", "lamp", "man", "myth", "rub", "wishes"], "order": 1879, "emoji": "🧞‍♂️"}, {"tags": ["djinn", "fantasy", "genie", "jinn", "lamp", "myth", "rub", "wishes", "woman"], "order": 1881, "emoji": "🧞‍♀️"}, {"tags": ["apocalypse", "dead", "halloween", "horror", "scary", "undead", "walking"], "order": 1883, "emoji": "🧟"}, {"tags": ["apocalypse", "dead", "halloween", "horror", "man", "scary", "undead", "walking", "zombie"], "order": 1884, "emoji": "🧟‍♂️"}, {"tags": ["apocalypse", "dead", "halloween", "horror", "scary", "undead", "walking", "woman", "zombie"], "order": 1886, "emoji": "🧟‍♀️"}, {"tags": ["fairy", "fantasy", "monster", "tale", "trolling"], "order": 1888, "emoji": "🧌"}, {"tags": ["face", "getting", "headache", "massage", "person", "relax", "relaxing", "salon", "soothe", "spa", "tension", "therapy", "treatment"], "order": 1889, "emoji": "💆"}, {"tags": ["face", "getting", "headache", "man", "massage", "relax", "relaxing", "salon", "soothe", "spa", "tension", "therapy", "treatment"], "order": 1895, "emoji": "💆‍♂️"}, {"tags": ["face", "getting", "headache", "massage", "relax", "relaxing", "salon", "soothe", "spa", "tension", "therapy", "treatment", "woman"], "order": 1907, "emoji": "💆‍♀️"}, {"tags": ["barber", "beauty", "chop", "cosmetology", "cut", "groom", "hair", "haircut", "parlor", "person", "shears", "style"], "order": 1919, "emoji": "💇"}, {"tags": ["barber", "beauty", "chop", "cosmetology", "cut", "groom", "hair", "haircut", "man", "parlor", "person", "shears", "style"], "order": 1925, "emoji": "💇‍♂️"}, {"tags": ["barber", "beauty", "chop", "cosmetology", "cut", "groom", "hair", "haircut", "parlor", "person", "shears", "style", "woman"], "order": 1937, "emoji": "💇‍♀️"}, {"tags": ["amble", "gait", "hike", "man", "pace", "pedestrian", "person", "stride", "stroll", "walk", "walking"], "order": 1949, "emoji": "🚶"}, {"tags": ["amble", "gait", "hike", "man", "pace", "pedestrian", "stride", "stroll", "walk", "walking"], "order": 1955, "emoji": "🚶‍♂️"}, {"tags": ["amble", "gait", "hike", "man", "pace", "pedestrian", "stride", "stroll", "walk", "walking", "woman"], "order": 1967, "emoji": "🚶‍♀️"}, {"tags": ["amble", "gait", "hike", "man", "pace", "pedestrian", "person", "stride", "stroll", "walk", "walking"], "order": 1979, "emoji": "🚶‍➡️"}, {"tags": ["amble", "gait", "hike", "man", "pace", "pedestrian", "stride", "stroll", "walk", "walking", "woman"], "order": 1991, "emoji": "🚶‍♀️‍➡️"}, {"tags": ["amble", "gait", "hike", "man", "pace", "pedestrian", "stride", "stroll", "walk", "walking"], "order": 2015, "emoji": "🚶‍♂️‍➡️"}, {"tags": ["person", "stand", "standing"], "order": 2039, "emoji": "🧍"}, {"tags": ["man", "stand", "standing"], "order": 2045, "emoji": "🧍‍♂️"}, {"tags": ["stand", "standing", "woman"], "order": 2057, "emoji": "🧍‍♀️"}, {"tags": ["kneel", "kneeling", "knees", "person"], "order": 2069, "emoji": "🧎"}, {"tags": ["kneel", "kneeling", "knees", "man"], "order": 2075, "emoji": "🧎‍♂️"}, {"tags": ["kneel", "kneeling", "knees", "woman"], "order": 2087, "emoji": "🧎‍♀️"}, {"tags": ["kneel", "kneeling", "knees", "person"], "order": 2099, "emoji": "🧎‍➡️"}, {"tags": ["kneel", "kneeling", "knees", "woman"], "order": 2111, "emoji": "🧎‍♀️‍➡️"}, {"tags": ["kneel", "kneeling", "knees", "man"], "order": 2135, "emoji": "🧎‍♂️‍➡️"}, {"tags": ["accessibility", "blind", "cane", "person", "probing", "white"], "order": 2159, "emoji": "🧑‍🦯"}, {"tags": ["accessibility", "blind", "cane", "person", "probing", "white"], "order": 2165, "emoji": "🧑‍🦯‍➡️"}, {"tags": ["accessibility", "blind", "cane", "man", "probing", "white"], "order": 2177, "emoji": "👨‍🦯"}, {"tags": ["accessibility", "blind", "cane", "man", "probing", "white"], "order": 2183, "emoji": "👨‍🦯‍➡️"}, {"tags": ["accessibility", "blind", "cane", "probing", "white", "woman"], "order": 2195, "emoji": "👩‍🦯"}, {"tags": ["accessibility", "blind", "cane", "probing", "white", "woman"], "order": 2201, "emoji": "👩‍🦯‍➡️"}, {"tags": ["accessibility", "motorized", "person", "wheelchair"], "order": 2213, "emoji": "🧑‍🦼"}, {"tags": ["accessibility", "motorized", "person", "wheelchair"], "order": 2219, "emoji": "🧑‍🦼‍➡️"}, {"tags": ["accessibility", "man", "motorized", "wheelchair"], "order": 2231, "emoji": "👨‍🦼"}, {"tags": ["accessibility", "man", "motorized", "wheelchair"], "order": 2237, "emoji": "👨‍🦼‍➡️"}, {"tags": ["accessibility", "motorized", "wheelchair", "woman"], "order": 2249, "emoji": "👩‍🦼"}, {"tags": ["accessibility", "motorized", "wheelchair", "woman"], "order": 2255, "emoji": "👩‍🦼‍➡️"}, {"tags": ["accessibility", "manual", "person", "wheelchair"], "order": 2267, "emoji": "🧑‍🦽"}, {"tags": ["accessibility", "manual", "person", "wheelchair"], "order": 2273, "emoji": "🧑‍🦽‍➡️"}, {"tags": ["accessibility", "man", "manual", "wheelchair"], "order": 2285, "emoji": "👨‍🦽"}, {"tags": ["accessibility", "man", "manual", "wheelchair"], "order": 2291, "emoji": "👨‍🦽‍➡️"}, {"tags": ["accessibility", "manual", "wheelchair", "woman"], "order": 2303, "emoji": "👩‍🦽"}, {"tags": ["accessibility", "manual", "wheelchair", "woman"], "order": 2309, "emoji": "👩‍🦽‍➡️"}, {"tags": ["fast", "hurry", "marathon", "move", "person", "quick", "race", "racing", "run", "rush", "speed"], "order": 2321, "emoji": "🏃"}, {"tags": ["fast", "hurry", "man", "marathon", "move", "quick", "race", "racing", "run", "rush", "speed"], "order": 2327, "emoji": "🏃‍♂️"}, {"tags": ["fast", "hurry", "marathon", "move", "quick", "race", "racing", "run", "rush", "speed", "woman"], "order": 2339, "emoji": "🏃‍♀️"}, {"tags": ["fast", "hurry", "marathon", "move", "person", "quick", "race", "racing", "run", "rush", "speed"], "order": 2351, "emoji": "🏃‍➡️"}, {"tags": ["fast", "hurry", "marathon", "move", "quick", "race", "racing", "run", "rush", "speed", "woman"], "order": 2363, "emoji": "🏃‍♀️‍➡️"}, {"tags": ["fast", "hurry", "man", "marathon", "move", "quick", "race", "racing", "run", "rush", "speed"], "order": 2387, "emoji": "🏃‍♂️‍➡️"}, {"tags": ["dance", "dancer", "dancing", "elegant", "festive", "flair", "flamenco", "groove", "let’s", "salsa", "tango", "woman"], "order": 2411, "emoji": "💃"}, {"tags": ["dance", "dancer", "dancing", "elegant", "festive", "flair", "flamenco", "groove", "let’s", "man", "salsa", "tango"], "order": 2417, "emoji": "🕺"}, {"tags": ["business", "levitating", "person", "suit"], "order": 2424, "emoji": "🕴️"}, {"tags": ["bestie", "bff", "bunny", "counterpart", "dancer", "double", "ear", "identical", "pair", "party", "partying", "people", "soulmate", "twin", "twinsies"], "order": 2430, "emoji": "👯"}, {"tags": ["bestie", "bff", "bunny", "counterpart", "dancer", "double", "ear", "identical", "men", "pair", "party", "partying", "people", "soulmate", "twin", "twinsies"], "order": 2431, "emoji": "👯‍♂️"}, {"tags": ["bestie", "bff", "bunny", "counterpart", "dancer", "double", "ear", "identical", "pair", "party", "partying", "people", "soulmate", "twin", "twinsies", "women"], "order": 2433, "emoji": "👯‍♀️"}, {"tags": ["day", "luxurious", "pamper", "person", "relax", "room", "sauna", "spa", "steam", "steambath", "unwind"], "order": 2435, "emoji": "🧖"}, {"tags": ["day", "luxurious", "man", "pamper", "relax", "room", "sauna", "spa", "steam", "steambath", "unwind"], "order": 2441, "emoji": "🧖‍♂️"}, {"tags": ["day", "luxurious", "pamper", "relax", "room", "sauna", "spa", "steam", "steambath", "unwind", "woman"], "order": 2453, "emoji": "🧖‍♀️"}, {"tags": ["climb", "climber", "climbing", "mountain", "person", "rock", "scale", "up"], "order": 2465, "emoji": "🧗"}, {"tags": ["climb", "climber", "climbing", "man", "mountain", "rock", "scale", "up"], "order": 2471, "emoji": "🧗‍♂️"}, {"tags": ["climb", "climber", "climbing", "mountain", "rock", "scale", "up", "woman"], "order": 2483, "emoji": "🧗‍♀️"}, {"tags": ["fencer", "fencing", "person", "sword"], "order": 2495, "emoji": "🤺"}, {"tags": ["horse", "jockey", "racehorse", "racing", "riding", "sport"], "order": 2496, "emoji": "🏇"}, {"tags": ["ski", "snow"], "order": 2503, "emoji": "⛷️"}, {"tags": ["ski", "snow", "snowboard", "sport"], "order": 2504, "emoji": "🏂️"}, {"tags": ["ball", "birdie", "caddy", "driving", "golf", "golfing", "green", "person", "pga", "putt", "range", "tee"], "order": 2511, "emoji": "🏌️"}, {"tags": ["ball", "birdie", "caddy", "driving", "golf", "golfing", "green", "man", "pga", "putt", "range", "tee"], "order": 2517, "emoji": "🏌️‍♂️"}, {"tags": ["ball", "birdie", "caddy", "driving", "golf", "golfing", "green", "pga", "putt", "range", "tee", "woman"], "order": 2531, "emoji": "🏌️‍♀️"}, {"tags": ["beach", "ocean", "person", "sport", "surf", "surfer", "surfing", "swell", "waves"], "order": 2545, "emoji": "🏄️"}, {"tags": ["beach", "man", "ocean", "sport", "surf", "surfer", "surfing", "swell", "waves"], "order": 2551, "emoji": "🏄‍♂️"}, {"tags": ["beach", "ocean", "person", "sport", "surf", "surfer", "surfing", "swell", "waves"], "order": 2563, "emoji": "🏄‍♀️"}, {"tags": ["boat", "canoe", "cruise", "fishing", "lake", "oar", "paddle", "person", "raft", "river", "row", "rowboat", "rowing"], "order": 2575, "emoji": "🚣"}, {"tags": ["boat", "canoe", "cruise", "fishing", "lake", "man", "oar", "paddle", "raft", "river", "row", "rowboat", "rowing"], "order": 2581, "emoji": "🚣‍♂️"}, {"tags": ["boat", "canoe", "cruise", "fishing", "lake", "oar", "paddle", "raft", "river", "row", "rowboat", "rowing", "woman"], "order": 2593, "emoji": "🚣‍♀️"}, {"tags": ["freestyle", "person", "sport", "swim", "swimmer", "swimming", "triathlon"], "order": 2605, "emoji": "🏊️"}, {"tags": ["freestyle", "man", "sport", "swim", "swimmer", "swimming", "triathlon"], "order": 2611, "emoji": "🏊‍♂️"}, {"tags": ["freestyle", "man", "sport", "swim", "swimmer", "swimming", "triathlon"], "order": 2623, "emoji": "🏊‍♀️"}, {"tags": ["athletic", "ball", "basketball", "bouncing", "championship", "dribble", "net", "person", "player", "throw"], "order": 2636, "emoji": "⛹️"}, {"tags": ["athletic", "ball", "basketball", "bouncing", "championship", "dribble", "man", "net", "player", "throw"], "order": 2642, "emoji": "⛹️‍♂️"}, {"tags": ["athletic", "ball", "basketball", "bouncing", "championship", "dribble", "net", "player", "throw", "woman"], "order": 2656, "emoji": "⛹️‍♀️"}, {"tags": ["barbell", "bodybuilder", "deadlift", "lifter", "lifting", "person", "powerlifting", "weight", "weightlifter", "weights", "workout"], "order": 2671, "emoji": "🏋️"}, {"tags": ["barbell", "bodybuilder", "deadlift", "lifter", "lifting", "man", "powerlifting", "weight", "weightlifter", "weights", "workout"], "order": 2677, "emoji": "🏋️‍♂️"}, {"tags": ["barbell", "bodybuilder", "deadlift", "lifter", "lifting", "powerlifting", "weight", "weightlifter", "weights", "woman", "workout"], "order": 2691, "emoji": "🏋️‍♀️"}, {"tags": ["bicycle", "bicyclist", "bike", "biking", "cycle", "cyclist", "person", "riding", "sport"], "order": 2705, "emoji": "🚴"}, {"tags": ["bicycle", "bicyclist", "bike", "biking", "cycle", "cyclist", "man", "riding", "sport"], "order": 2711, "emoji": "🚴‍♂️"}, {"tags": ["bicycle", "bicyclist", "bike", "biking", "cycle", "cyclist", "riding", "sport", "woman"], "order": 2723, "emoji": "🚴‍♀️"}, {"tags": ["bicycle", "bicyclist", "bike", "biking", "cycle", "cyclist", "mountain", "person", "riding", "sport"], "order": 2735, "emoji": "🚵"}, {"tags": ["bicycle", "bicyclist", "bike", "biking", "cycle", "cyclist", "man", "mountain", "riding", "sport"], "order": 2741, "emoji": "🚵‍♂️"}, {"tags": ["bicycle", "bicyclist", "bike", "biking", "cycle", "cyclist", "mountain", "riding", "sport", "woman"], "order": 2753, "emoji": "🚵‍♀️"}, {"tags": ["active", "cartwheel", "cartwheeling", "excited", "flip", "gymnastics", "happy", "person", "somersault"], "order": 2765, "emoji": "🤸"}, {"tags": ["active", "cartwheel", "cartwheeling", "excited", "flip", "gymnastics", "happy", "man", "somersault"], "order": 2771, "emoji": "🤸‍♂️"}, {"tags": ["active", "cartwheel", "cartwheeling", "excited", "flip", "gymnastics", "happy", "somersault", "woman"], "order": 2783, "emoji": "🤸‍♀️"}, {"tags": ["combat", "duel", "grapple", "people", "ring", "tournament", "wrestle", "wrestling"], "order": 2795, "emoji": "🤼"}, {"tags": ["combat", "duel", "grapple", "men", "ring", "tournament", "wrestle", "wrestling"], "order": 2796, "emoji": "🤼‍♂️"}, {"tags": ["combat", "duel", "grapple", "ring", "tournament", "women", "wrestle", "wrestling"], "order": 2798, "emoji": "🤼‍♀️"}, {"tags": ["person", "playing", "polo", "sport", "swimming", "water", "waterpolo"], "order": 2800, "emoji": "🤽"}, {"tags": ["man", "playing", "polo", "sport", "swimming", "water", "waterpolo"], "order": 2806, "emoji": "🤽‍♂️"}, {"tags": ["playing", "polo", "sport", "swimming", "water", "waterpolo", "woman"], "order": 2818, "emoji": "🤽‍♀️"}, {"tags": ["athletics", "ball", "catch", "chuck", "handball", "hurl", "lob", "person", "pitch", "playing", "sport", "throw", "toss"], "order": 2830, "emoji": "🤾"}, {"tags": ["athletics", "ball", "catch", "chuck", "handball", "hurl", "lob", "man", "pitch", "playing", "sport", "throw", "toss"], "order": 2836, "emoji": "🤾‍♂️"}, {"tags": ["athletics", "ball", "catch", "chuck", "handball", "hurl", "lob", "pitch", "playing", "sport", "throw", "toss", "woman"], "order": 2848, "emoji": "🤾‍♀️"}, {"tags": ["act", "balance", "balancing", "handle", "juggle", "juggling", "manage", "multitask", "person", "skill"], "order": 2860, "emoji": "🤹"}, {"tags": ["act", "balance", "balancing", "handle", "juggle", "juggling", "man", "manage", "multitask", "skill"], "order": 2866, "emoji": "🤹‍♂️"}, {"tags": ["act", "balance", "balancing", "handle", "juggle", "juggling", "manage", "multitask", "skill", "woman"], "order": 2878, "emoji": "🤹‍♀️"}, {"tags": ["cross", "legged", "legs", "lotus", "meditation", "peace", "person", "position", "relax", "serenity", "yoga", "yogi", "zen"], "order": 2890, "emoji": "🧘"}, {"tags": ["cross", "legged", "legs", "lotus", "man", "meditation", "peace", "position", "relax", "serenity", "yoga", "yogi", "zen"], "order": 2896, "emoji": "🧘‍♂️"}, {"tags": ["cross", "legged", "legs", "lotus", "meditation", "peace", "position", "relax", "serenity", "woman", "yoga", "yogi", "zen"], "order": 2908, "emoji": "🧘‍♀️"}, {"tags": ["bath", "bathtub", "person", "taking", "tub"], "order": 2920, "emoji": "🛀"}, {"tags": ["bed", "bedtime", "good", "goodnight", "hotel", "nap", "night", "person", "sleep", "tired", "zzz"], "order": 2926, "emoji": "🛌"}, {"tags": ["bae", "bestie", "bff", "couple", "dating", "flirt", "friends", "hand", "hold", "people", "twins"], "order": 2932, "emoji": "🧑‍🤝‍🧑"}, {"tags": ["bae", "bestie", "bff", "couple", "dating", "flirt", "friends", "girls", "hand", "hold", "sisters", "twins", "women"], "order": 2958, "emoji": "👭"}, {"tags": ["bae", "bestie", "bff", "couple", "dating", "flirt", "friends", "hand", "hold", "man", "twins", "woman"], "order": 2984, "emoji": "👫"}, {"tags": ["bae", "bestie", "bff", "boys", "brothers", "couple", "dating", "flirt", "friends", "hand", "hold", "men", "twins"], "order": 3010, "emoji": "👬"}, {"tags": ["anniversary", "babe", "bae", "couple", "date", "dating", "heart", "love", "mwah", "person", "romance", "together", "xoxo"], "order": 3036, "emoji": "💏"}, {"tags": ["anniversary", "babe", "bae", "couple", "date", "dating", "heart", "kiss", "love", "man", "mwah", "person", "romance", "together", "woman", "xoxo"], "order": 3082, "emoji": "👩‍❤️‍💋‍👨"}, {"tags": ["anniversary", "babe", "bae", "couple", "date", "dating", "heart", "kiss", "love", "man", "mwah", "person", "romance", "together", "xoxo"], "order": 3134, "emoji": "👨‍❤️‍💋‍👨"}, {"tags": ["anniversary", "babe", "bae", "couple", "date", "dating", "heart", "kiss", "love", "mwah", "person", "romance", "together", "woman", "xoxo"], "order": 3186, "emoji": "👩‍❤️‍💋‍👩"}, {"tags": ["anniversary", "babe", "bae", "couple", "dating", "heart", "kiss", "love", "person", "relationship", "romance", "together", "you"], "order": 3238, "emoji": "💑"}, {"tags": ["anniversary", "babe", "bae", "couple", "dating", "heart", "kiss", "love", "man", "person", "relationship", "romance", "together", "woman", "you"], "order": 3284, "emoji": "👩‍❤️‍👨"}, {"tags": ["anniversary", "babe", "bae", "couple", "dating", "heart", "kiss", "love", "man", "person", "relationship", "romance", "together", "you"], "order": 3336, "emoji": "👨‍❤️‍👨"}, {"tags": ["anniversary", "babe", "bae", "couple", "dating", "heart", "kiss", "love", "person", "relationship", "romance", "together", "woman", "you"], "order": 3388, "emoji": "👩‍❤️‍👩"}, {"tags": ["boy", "child", "family", "man", "woman"], "order": 3440, "emoji": "👨‍👩‍👦"}, {"tags": ["child", "family", "girl", "man", "woman"], "order": 3441, "emoji": "👨‍👩‍👧"}, {"tags": ["boy", "child", "family", "girl", "man", "woman"], "order": 3442, "emoji": "👨‍👩‍👧‍👦"}, {"tags": ["boy", "child", "family", "man", "woman"], "order": 3443, "emoji": "👨‍👩‍👦‍👦"}, {"tags": ["child", "family", "girl", "man", "woman"], "order": 3444, "emoji": "👨‍👩‍👧‍👧"}, {"tags": ["boy", "child", "family", "man"], "order": 3445, "emoji": "👨‍👨‍👦"}, {"tags": ["child", "family", "girl", "man"], "order": 3446, "emoji": "👨‍👨‍👧"}, {"tags": ["boy", "child", "family", "girl", "man"], "order": 3447, "emoji": "👨‍👨‍👧‍👦"}, {"tags": ["boy", "child", "family", "man"], "order": 3448, "emoji": "👨‍👨‍👦‍👦"}, {"tags": ["child", "family", "girl", "man"], "order": 3449, "emoji": "👨‍👨‍👧‍👧"}, {"tags": ["boy", "child", "family", "woman"], "order": 3450, "emoji": "👩‍👩‍👦"}, {"tags": ["child", "family", "girl", "woman"], "order": 3451, "emoji": "👩‍👩‍👧"}, {"tags": ["boy", "child", "family", "girl", "woman"], "order": 3452, "emoji": "👩‍👩‍👧‍👦"}, {"tags": ["boy", "child", "family", "woman"], "order": 3453, "emoji": "👩‍👩‍👦‍👦"}, {"tags": ["child", "family", "girl", "woman"], "order": 3454, "emoji": "👩‍👩‍👧‍👧"}, {"tags": ["boy", "child", "family", "man"], "order": 3455, "emoji": "👨‍👦"}, {"tags": ["boy", "child", "family", "man"], "order": 3456, "emoji": "👨‍👦‍👦"}, {"tags": ["child", "family", "girl", "man"], "order": 3457, "emoji": "👨‍👧"}, {"tags": ["boy", "child", "family", "girl", "man"], "order": 3458, "emoji": "👨‍👧‍👦"}, {"tags": ["child", "family", "girl", "man"], "order": 3459, "emoji": "👨‍👧‍👧"}, {"tags": ["boy", "child", "family", "woman"], "order": 3460, "emoji": "👩‍👦"}, {"tags": ["boy", "child", "family", "woman"], "order": 3461, "emoji": "👩‍👦‍👦"}, {"tags": ["child", "family", "girl", "woman"], "order": 3462, "emoji": "👩‍👧"}, {"tags": ["boy", "child", "family", "girl", "woman"], "order": 3463, "emoji": "👩‍👧‍👦"}, {"tags": ["child", "family", "girl", "woman"], "order": 3464, "emoji": "👩‍👧‍👧"}, {"tags": ["face", "head", "silhouette", "speak", "speaking"], "order": 3466, "emoji": "🗣️"}, {"tags": ["bust", "mysterious", "shadow", "silhouette"], "order": 3467, "emoji": "👤"}, {"tags": ["bff", "bust", "busts", "everyone", "friend", "friends", "people", "silhouette"], "order": 3468, "emoji": "👥"}, {"tags": ["comfort", "embrace", "farewell", "friendship", "goodbye", "hello", "hug", "hugging", "love", "people", "thanks"], "order": 3469, "emoji": "🫂"}, {"tags": ["child"], "order": 3470, "emoji": "👪️"}, {"tags": ["adult", "child", "family"], "order": 3471, "emoji": "🧑‍🧑‍🧒"}, {"tags": ["adult", "child", "family"], "order": 3472, "emoji": "🧑‍🧑‍🧒‍🧒"}, {"tags": ["adult", "child", "family"], "order": 3473, "emoji": "🧑‍🧒"}, {"tags": ["adult", "child", "family"], "order": 3474, "emoji": "🧑‍🧒‍🧒"}, {"tags": ["barefoot", "clothing", "footprint", "omw", "print", "walk"], "order": 3475, "emoji": "👣"}, {"tags": ["clue", "crime", "detective", "forensics", "identity", "mystery", "print", "safety", "trace"], "order": 3476, "emoji": "🫆"}, {"tags": ["1–2", "light", "skin", "tone", "type"], "order": 3477, "emoji": "🏻"}, {"tags": ["3", "medium-light", "skin", "tone", "type"], "order": 3478, "emoji": "🏼"}, {"tags": ["4", "medium", "skin", "tone", "type"], "order": 3479, "emoji": "🏽"}, {"tags": ["5", "medium-dark", "skin", "tone", "type"], "order": 3480, "emoji": "🏾"}, {"tags": ["6", "dark", "skin", "tone", "type"], "order": 3481, "emoji": "🏿"}, {"tags": ["ginger", "hair", "red", "redhead"], "order": 3482, "emoji": "🦰"}, {"tags": ["afro", "curly", "hair", "ringlets"], "order": 3483, "emoji": "🦱"}, {"tags": ["gray", "hair", "old", "white"], "order": 3484, "emoji": "🦳"}, {"tags": ["chemotherapy", "hair", "hairless", "no", "shaven"], "order": 3485, "emoji": "🦲"}, {"tags": ["animal", "banana", "face", "monkey"], "order": 3486, "emoji": "🐵"}, {"tags": ["animal", "banana"], "order": 3487, "emoji": "🐒"}, {"tags": ["animal"], "order": 3488, "emoji": "🦍"}, {"tags": ["animal", "ape", "monkey"], "order": 3489, "emoji": "🦧"}, {"tags": ["adorbs", "animal", "dog", "face", "pet", "puppies", "puppy"], "order": 3490, "emoji": "🐶"}, {"tags": ["animal", "animals", "dogs", "pet"], "order": 3491, "emoji": "🐕️"}, {"tags": ["accessibility", "animal", "blind", "dog", "guide"], "order": 3492, "emoji": "🦮"}, {"tags": ["accessibility", "animal", "assistance", "dog", "service"], "order": 3493, "emoji": "🐕‍🦺"}, {"tags": ["animal", "dog", "fluffy"], "order": 3494, "emoji": "🐩"}, {"tags": ["animal", "face"], "order": 3495, "emoji": "🐺"}, {"tags": ["animal", "face"], "order": 3496, "emoji": "🦊"}, {"tags": ["animal", "curious", "sly"], "order": 3497, "emoji": "🦝"}, {"tags": ["animal", "cat", "face", "kitten", "kitty", "pet"], "order": 3498, "emoji": "🐱"}, {"tags": ["animal", "animals", "cats", "kitten", "pet"], "order": 3499, "emoji": "🐈️"}, {"tags": ["animal", "black", "cat", "feline", "halloween", "meow", "unlucky"], "order": 3500, "emoji": "🐈‍⬛"}, {"tags": ["alpha", "animal", "face", "leo", "mane", "order", "rawr", "roar", "safari", "strong", "zodiac"], "order": 3501, "emoji": "🦁"}, {"tags": ["animal", "big", "cat", "face", "predator", "tiger"], "order": 3502, "emoji": "🐯"}, {"tags": ["animal", "big", "cat", "predator", "zoo"], "order": 3503, "emoji": "🐅"}, {"tags": ["animal", "big", "cat", "predator", "zoo"], "order": 3504, "emoji": "🐆"}, {"tags": ["animal", "dressage", "equine", "face", "farm", "horse", "horses"], "order": 3505, "emoji": "🐴"}, {"tags": ["alces", "animal", "antlers", "elk", "mammal"], "order": 3506, "emoji": "🫎"}, {"tags": ["animal", "ass", "burro", "hinny", "mammal", "mule", "stubborn"], "order": 3507, "emoji": "🫏"}, {"tags": ["animal", "equestrian", "farm", "racehorse", "racing"], "order": 3508, "emoji": "🐎"}, {"tags": ["face"], "order": 3509, "emoji": "🦄"}, {"tags": ["animal", "stripe"], "order": 3510, "emoji": "🦓"}, {"tags": ["animal"], "order": 3511, "emoji": "🦌"}, {"tags": ["animal", "buffalo", "herd", "wisent"], "order": 3512, "emoji": "🦬"}, {"tags": ["animal", "cow", "face", "farm", "milk", "moo"], "order": 3513, "emoji": "🐮"}, {"tags": ["animal", "animals", "bull", "farm", "taurus", "zodiac"], "order": 3514, "emoji": "🐂"}, {"tags": ["animal", "buffalo", "water", "zoo"], "order": 3515, "emoji": "🐃"}, {"tags": ["animal", "animals", "farm", "milk", "moo"], "order": 3516, "emoji": "🐄"}, {"tags": ["animal", "bacon", "face", "farm", "pig", "pork"], "order": 3517, "emoji": "🐷"}, {"tags": ["animal", "bacon", "farm", "pork", "sow"], "order": 3518, "emoji": "🐖"}, {"tags": ["animal", "pig"], "order": 3519, "emoji": "🐗"}, {"tags": ["animal", "face", "farm", "nose", "pig", "smell", "snout"], "order": 3520, "emoji": "🐽"}, {"tags": ["animal", "aries", "horns", "male", "sheep", "zodiac", "zoo"], "order": 3521, "emoji": "🐏"}, {"tags": ["animal", "baa", "farm", "female", "fluffy", "lamb", "sheep", "wool"], "order": 3522, "emoji": "🐑"}, {"tags": ["animal", "capricorn", "farm", "milk", "zodiac"], "order": 3523, "emoji": "🐐"}, {"tags": ["animal", "desert", "dromedary", "hump", "one"], "order": 3524, "emoji": "🐪"}, {"tags": ["animal", "bactrian", "camel", "desert", "hump", "two", "two-hump"], "order": 3525, "emoji": "🐫"}, {"tags": ["alpaca", "animal", "guanaco", "vicuña", "wool"], "order": 3526, "emoji": "🦙"}, {"tags": ["animal", "spots"], "order": 3527, "emoji": "🦒"}, {"tags": ["animal"], "order": 3528, "emoji": "🐘"}, {"tags": ["animal", "extinction", "large", "tusk", "wooly"], "order": 3529, "emoji": "🦣"}, {"tags": ["animal"], "order": 3530, "emoji": "🦏"}, {"tags": ["animal", "hippo"], "order": 3531, "emoji": "🦛"}, {"tags": ["animal", "face", "mouse"], "order": 3532, "emoji": "🐭"}, {"tags": ["animal", "animals"], "order": 3533, "emoji": "🐁"}, {"tags": ["animal"], "order": 3534, "emoji": "🐀"}, {"tags": ["animal", "face", "pet"], "order": 3535, "emoji": "🐹"}, {"tags": ["animal", "bunny", "face", "pet", "rabbit"], "order": 3536, "emoji": "🐰"}, {"tags": ["animal", "bunny", "pet"], "order": 3537, "emoji": "🐇"}, {"tags": ["animal", "squirrel"], "order": 3539, "emoji": "🐿️"}, {"tags": ["animal", "dam", "teeth"], "order": 3540, "emoji": "🦫"}, {"tags": ["animal", "spiny"], "order": 3541, "emoji": "🦔"}, {"tags": ["animal", "vampire"], "order": 3542, "emoji": "🦇"}, {"tags": ["animal", "face", "grizzly", "growl", "honey"], "order": 3543, "emoji": "🐻"}, {"tags": ["animal", "arctic", "bear", "polar", "white"], "order": 3544, "emoji": "🐻‍❄️"}, {"tags": ["animal", "australia", "bear", "down", "face", "marsupial", "under"], "order": 3546, "emoji": "🐨"}, {"tags": ["animal", "bamboo", "face"], "order": 3547, "emoji": "🐼"}, {"tags": ["lazy", "slow"], "order": 3548, "emoji": "🦥"}, {"tags": ["animal", "fishing", "playful"], "order": 3549, "emoji": "🦦"}, {"tags": ["animal", "stink"], "order": 3550, "emoji": "🦨"}, {"tags": ["animal", "joey", "jump", "marsupial"], "order": 3551, "emoji": "🦘"}, {"tags": ["animal", "honey", "pester"], "order": 3552, "emoji": "🦡"}, {"tags": ["feet", "paw", "paws", "print", "prints"], "order": 3553, "emoji": "🐾"}, {"tags": ["bird", "gobble", "thanksgiving"], "order": 3554, "emoji": "🦃"}, {"tags": ["animal", "bird", "ornithology"], "order": 3555, "emoji": "🐔"}, {"tags": ["animal", "bird", "ornithology"], "order": 3556, "emoji": "🐓"}, {"tags": ["animal", "baby", "bird", "chick", "egg", "hatching"], "order": 3557, "emoji": "🐣"}, {"tags": ["animal", "baby", "bird", "chick", "ornithology"], "order": 3558, "emoji": "🐤"}, {"tags": ["animal", "baby", "bird", "chick", "front-facing", "newborn", "ornithology"], "order": 3559, "emoji": "🐥"}, {"tags": ["animal", "ornithology"], "order": 3560, "emoji": "🐦️"}, {"tags": ["animal", "antarctica", "bird", "ornithology"], "order": 3561, "emoji": "🐧"}, {"tags": ["bird", "fly", "ornithology", "peace"], "order": 3563, "emoji": "🕊️"}, {"tags": ["animal", "bird", "ornithology"], "order": 3564, "emoji": "🦅"}, {"tags": ["animal", "bird", "ornithology"], "order": 3565, "emoji": "🦆"}, {"tags": ["animal", "bird", "cygnet", "duckling", "ornithology", "ugly"], "order": 3566, "emoji": "🦢"}, {"tags": ["animal", "bird", "ornithology", "wise"], "order": 3567, "emoji": "🦉"}, {"tags": ["animal", "bird", "extinction", "large", "ornithology"], "order": 3568, "emoji": "🦤"}, {"tags": ["bird", "flight", "light", "plumage"], "order": 3569, "emoji": "🪶"}, {"tags": ["animal", "bird", "flamboyant", "ornithology", "tropical"], "order": 3570, "emoji": "🦩"}, {"tags": ["animal", "bird", "colorful", "ornithology", "ostentatious", "peahen", "pretty", "proud"], "order": 3571, "emoji": "🦚"}, {"tags": ["animal", "bird", "ornithology", "pirate", "talk"], "order": 3572, "emoji": "🦜"}, {"tags": ["angelic", "ascend", "aviation", "bird", "fly", "flying", "heavenly", "mythology", "soar"], "order": 3573, "emoji": "🪽"}, {"tags": ["animal", "beak", "bird", "black", "caw", "corvid", "crow", "ornithology", "raven", "rook"], "order": 3574, "emoji": "🐦‍⬛"}, {"tags": ["animal", "bird", "duck", "flock", "fowl", "gaggle", "gander", "geese", "honk", "ornithology", "silly"], "order": 3575, "emoji": "🪿"}, {"tags": ["ascend", "ascension", "emerge", "fantasy", "firebird", "glory", "immortal", "rebirth", "reincarnation", "reinvent", "renewal", "revival", "revive", "rise", "transform"], "order": 3576, "emoji": "🐦‍🔥"}, {"tags": ["animal", "face"], "order": 3577, "emoji": "🐸"}, {"tags": ["animal", "zoo"], "order": 3578, "emoji": "🐊"}, {"tags": ["animal", "terrapin", "tortoise"], "order": 3579, "emoji": "🐢"}, {"tags": ["animal", "reptile"], "order": 3580, "emoji": "🦎"}, {"tags": ["animal", "bearer", "ophiuchus", "serpent", "zodiac"], "order": 3581, "emoji": "🐍"}, {"tags": ["animal", "dragon", "face", "fairy", "fairytale", "tale"], "order": 3582, "emoji": "🐲"}, {"tags": ["animal", "fairy", "fairytale", "knights", "tale"], "order": 3583, "emoji": "🐉"}, {"tags": ["brachiosaurus", "brontosaurus", "dinosaur", "diplodocus"], "order": 3584, "emoji": "🦕"}, {"tags": ["dinosaur", "rex", "t", "t-rex", "tyrannosaurus"], "order": 3585, "emoji": "🦖"}, {"tags": ["animal", "beach", "face", "ocean", "spouting", "whale"], "order": 3586, "emoji": "🐳"}, {"tags": ["animal", "beach", "ocean"], "order": 3587, "emoji": "🐋"}, {"tags": ["animal", "beach", "flipper", "ocean"], "order": 3588, "emoji": "🐬"}, {"tags": ["animal", "lion", "ocean", "sea"], "order": 3589, "emoji": "🦭"}, {"tags": ["animal", "dinner", "fishes", "fishing", "pisces", "zodiac"], "order": 3590, "emoji": "🐟️"}, {"tags": ["animal", "fish", "fishes", "tropical"], "order": 3591, "emoji": "🐠"}, {"tags": ["animal", "fish"], "order": 3592, "emoji": "🐡"}, {"tags": ["animal", "fish"], "order": 3593, "emoji": "🦈"}, {"tags": ["animal", "creature", "ocean"], "order": 3594, "emoji": "🐙"}, {"tags": ["animal", "beach", "conch", "sea", "shell", "spiral"], "order": 3595, "emoji": "🐚"}, {"tags": ["change", "climate", "ocean", "reef", "sea"], "order": 3596, "emoji": "🪸"}, {"tags": ["animal", "aquarium", "burn", "invertebrate", "jelly", "life", "marine", "ocean", "ouch", "plankton", "sea", "sting", "stinger", "tentacles"], "order": 3597, "emoji": "🪼"}, {"tags": ["cancer", "zodiac"], "order": 3598, "emoji": "🦀"}, {"tags": ["animal", "bisque", "claws", "seafood"], "order": 3599, "emoji": "🦞"}, {"tags": ["food", "shellfish", "small"], "order": 3600, "emoji": "🦐"}, {"tags": ["animal", "food", "mollusk"], "order": 3601, "emoji": "🦑"}, {"tags": ["diving", "pearl"], "order": 3602, "emoji": "🦪"}, {"tags": ["animal", "escargot", "garden", "nature", "slug"], "order": 3603, "emoji": "🐌"}, {"tags": ["insect", "pretty"], "order": 3604, "emoji": "🦋"}, {"tags": ["animal", "garden", "insect"], "order": 3605, "emoji": "🐛"}, {"tags": ["animal", "garden", "insect"], "order": 3606, "emoji": "🐜"}, {"tags": ["animal", "bee", "bumblebee", "honey", "insect", "nature", "spring"], "order": 3607, "emoji": "🐝"}, {"tags": ["animal", "bug", "insect"], "order": 3608, "emoji": "🪲"}, {"tags": ["animal", "beetle", "garden", "insect", "lady", "ladybird", "ladybug", "nature"], "order": 3609, "emoji": "🐞"}, {"tags": ["animal", "bug", "grasshopper", "insect", "orthoptera"], "order": 3610, "emoji": "🦗"}, {"tags": ["animal", "insect", "pest", "roach"], "order": 3611, "emoji": "🪳"}, {"tags": ["animal", "insect"], "order": 3613, "emoji": "🕷️"}, {"tags": ["spider", "web"], "order": 3615, "emoji": "🕸️"}, {"tags": ["scorpio", "scorpius", "zodiac"], "order": 3616, "emoji": "🦂"}, {"tags": ["bite", "disease", "fever", "insect", "malaria", "pest", "virus"], "order": 3617, "emoji": "🦟"}, {"tags": ["animal", "disease", "insect", "maggot", "pest", "rotting"], "order": 3618, "emoji": "🪰"}, {"tags": ["animal", "annelid", "earthworm", "parasite"], "order": 3619, "emoji": "🪱"}, {"tags": ["amoeba", "bacteria", "science", "virus"], "order": 3620, "emoji": "🦠"}, {"tags": ["anniversary", "birthday", "date", "flower", "love", "plant", "romance"], "order": 3621, "emoji": "💐"}, {"tags": ["blossom", "cherry", "flower", "plant", "spring", "springtime"], "order": 3622, "emoji": "🌸"}, {"tags": ["flower", "white"], "order": 3623, "emoji": "💮"}, {"tags": ["beauty", "buddhism", "calm", "flower", "hinduism", "peace", "purity", "serenity"], "order": 3624, "emoji": "🪷"}, {"tags": ["plant"], "order": 3626, "emoji": "🏵️"}, {"tags": ["beauty", "elegant", "flower", "love", "plant", "red", "valentine"], "order": 3627, "emoji": "🌹"}, {"tags": ["dying", "flower", "wilted"], "order": 3628, "emoji": "🥀"}, {"tags": ["flower", "plant"], "order": 3629, "emoji": "🌺"}, {"tags": ["flower", "outdoors", "plant", "sun"], "order": 3630, "emoji": "🌻"}, {"tags": ["buttercup", "dandelion", "flower", "plant"], "order": 3631, "emoji": "🌼"}, {"tags": ["blossom", "flower", "growth", "plant"], "order": 3632, "emoji": "🌷"}, {"tags": ["bloom", "bluebonnet", "flower", "indigo", "lavender", "lilac", "lupine", "plant", "purple", "shrub", "snapdragon", "spring", "violet"], "order": 3633, "emoji": "🪻"}, {"tags": ["plant", "sapling", "sprout", "young"], "order": 3634, "emoji": "🌱"}, {"tags": ["decor", "grow", "house", "nurturing", "plant", "pot", "potted"], "order": 3635, "emoji": "🪴"}, {"tags": ["christmas", "evergreen", "forest", "pine", "tree"], "order": 3636, "emoji": "🌲"}, {"tags": ["deciduous", "forest", "green", "habitat", "shedding", "tree"], "order": 3637, "emoji": "🌳"}, {"tags": ["beach", "palm", "plant", "tree", "tropical"], "order": 3638, "emoji": "🌴"}, {"tags": ["desert", "drought", "nature", "plant"], "order": 3639, "emoji": "🌵"}, {"tags": ["ear", "grain", "grains", "plant", "rice", "sheaf"], "order": 3640, "emoji": "🌾"}, {"tags": ["leaf", "plant"], "order": 3641, "emoji": "🌿"}, {"tags": ["irish", "plant"], "order": 3643, "emoji": "☘️"}, {"tags": ["4", "clover", "four", "four-leaf", "irish", "leaf", "lucky", "plant"], "order": 3644, "emoji": "🍀"}, {"tags": ["falling", "leaf", "maple"], "order": 3645, "emoji": "🍁"}, {"tags": ["autumn", "fall", "fallen", "falling", "leaf"], "order": 3646, "emoji": "🍂"}, {"tags": ["blow", "flutter", "fluttering", "leaf", "wind"], "order": 3647, "emoji": "🍃"}, {"tags": ["branch", "empty", "home", "nest", "nesting"], "order": 3648, "emoji": "🪹"}, {"tags": ["bird", "branch", "egg", "eggs", "nest", "nesting"], "order": 3649, "emoji": "🪺"}, {"tags": ["fungus", "toadstool"], "order": 3650, "emoji": "🍄"}, {"tags": ["bare", "barren", "branches", "dead", "drought", "leafless", "tree", "trunk", "winter", "wood"], "order": 3651, "emoji": "🪾"}, {"tags": ["dionysus", "fruit", "grape"], "order": 3652, "emoji": "🍇"}, {"tags": ["cantaloupe", "fruit"], "order": 3653, "emoji": "🍈"}, {"tags": ["fruit"], "order": 3654, "emoji": "🍉"}, {"tags": ["c", "citrus", "fruit", "nectarine", "orange", "vitamin"], "order": 3655, "emoji": "🍊"}, {"tags": ["citrus", "fruit", "sour"], "order": 3656, "emoji": "🍋"}, {"tags": ["acidity", "citrus", "cocktail", "fruit", "garnish", "key", "margarita", "mojito", "refreshing", "salsa", "sour", "tangy", "tequila", "tropical", "zest"], "order": 3657, "emoji": "🍋‍🟩"}, {"tags": ["fruit", "potassium"], "order": 3658, "emoji": "🍌"}, {"tags": ["colada", "fruit", "pina", "tropical"], "order": 3659, "emoji": "🍍"}, {"tags": ["food", "fruit", "tropical"], "order": 3660, "emoji": "🥭"}, {"tags": ["apple", "diet", "food", "fruit", "health", "red", "ripe"], "order": 3661, "emoji": "🍎"}, {"tags": ["apple", "fruit", "green"], "order": 3662, "emoji": "🍏"}, {"tags": ["fruit"], "order": 3663, "emoji": "🍐"}, {"tags": ["fruit"], "order": 3664, "emoji": "🍑"}, {"tags": ["berries", "cherry", "fruit", "red"], "order": 3665, "emoji": "🍒"}, {"tags": ["berry", "fruit"], "order": 3666, "emoji": "🍓"}, {"tags": ["berries", "berry", "bilberry", "blue", "blueberry", "food", "fruit"], "order": 3667, "emoji": "🫐"}, {"tags": ["food", "fruit", "kiwi"], "order": 3668, "emoji": "🥝"}, {"tags": ["food", "fruit", "vegetable"], "order": 3669, "emoji": "🍅"}, {"tags": ["food"], "order": 3670, "emoji": "🫒"}, {"tags": ["colada", "palm", "piña"], "order": 3671, "emoji": "🥥"}, {"tags": ["food", "fruit"], "order": 3672, "emoji": "🥑"}, {"tags": ["aubergine", "vegetable"], "order": 3673, "emoji": "🍆"}, {"tags": ["food", "vegetable"], "order": 3674, "emoji": "🥔"}, {"tags": ["food", "vegetable"], "order": 3675, "emoji": "🥕"}, {"tags": ["corn", "crops", "ear", "farm", "maize", "maze"], "order": 3676, "emoji": "🌽"}, {"tags": ["hot", "pepper"], "order": 3678, "emoji": "🌶️"}, {"tags": ["bell", "capsicum", "food", "pepper", "vegetable"], "order": 3679, "emoji": "🫑"}, {"tags": ["food", "pickle", "vegetable"], "order": 3680, "emoji": "🥒"}, {"tags": ["bok", "burgers", "cabbage", "choy", "green", "kale", "leafy", "lettuce", "salad"], "order": 3681, "emoji": "🥬"}, {"tags": ["cabbage", "wild"], "order": 3682, "emoji": "🥦"}, {"tags": ["flavoring"], "order": 3683, "emoji": "🧄"}, {"tags": ["flavoring"], "order": 3684, "emoji": "🧅"}, {"tags": ["food", "nut", "peanut", "vegetable"], "order": 3685, "emoji": "🥜"}, {"tags": ["food", "kidney", "legume", "small"], "order": 3686, "emoji": "🫘"}, {"tags": ["almond", "plant"], "order": 3687, "emoji": "🌰"}, {"tags": ["beer", "ginger", "health", "herb", "natural", "root", "spice"], "order": 3688, "emoji": "🫚"}, {"tags": ["beans", "beanstalk", "edamame", "legume", "pea", "pod", "soybean", "vegetable", "veggie"], "order": 3689, "emoji": "🫛"}, {"tags": ["food", "fungi", "fungus", "mushroom", "nature", "pizza", "portobello", "shiitake", "shroom", "spore", "sprout", "toppings", "truffle", "vegetable", "vegetarian", "veggie"], "order": 3690, "emoji": "🍄‍🟫"}, {"tags": ["beet", "food", "garden", "radish", "root", "salad", "turnip", "vegetable", "vegetarian"], "order": 3691, "emoji": "🫜"}, {"tags": ["carbs", "food", "grain", "loaf", "restaurant", "toast", "wheat"], "order": 3692, "emoji": "🍞"}, {"tags": ["bread", "breakfast", "crescent", "food", "french", "roll"], "order": 3693, "emoji": "🥐"}, {"tags": ["baguette", "bread", "food", "french"], "order": 3694, "emoji": "🥖"}, {"tags": ["arepa", "bread", "food", "gordita", "lavash", "naan", "pita"], "order": 3695, "emoji": "🫓"}, {"tags": ["convoluted", "twisted"], "order": 3696, "emoji": "🥨"}, {"tags": ["bakery", "bread", "breakfast", "schmear"], "order": 3697, "emoji": "🥯"}, {"tags": ["breakfast", "crêpe", "food", "hotcake", "pancake"], "order": 3698, "emoji": "🥞"}, {"tags": ["breakfast", "indecisive", "iron"], "order": 3699, "emoji": "🧇"}, {"tags": ["cheese", "wedge"], "order": 3700, "emoji": "🧀"}, {"tags": ["bone", "meat"], "order": 3701, "emoji": "🍖"}, {"tags": ["bone", "chicken", "drumstick", "hungry", "leg", "poultry", "turkey"], "order": 3702, "emoji": "🍗"}, {"tags": ["chop", "cut", "lambchop", "meat", "porkchop", "red", "steak"], "order": 3703, "emoji": "🥩"}, {"tags": ["breakfast", "food", "meat"], "order": 3704, "emoji": "🥓"}, {"tags": ["burger", "eat", "fast", "food", "hungry"], "order": 3705, "emoji": "🍔"}, {"tags": ["fast", "food", "french", "fries"], "order": 3706, "emoji": "🍟"}, {"tags": ["cheese", "food", "hungry", "pepperoni", "slice"], "order": 3707, "emoji": "🍕"}, {"tags": ["dog", "frankfurter", "hot", "hotdog", "sausage"], "order": 3708, "emoji": "🌭"}, {"tags": ["bread"], "order": 3709, "emoji": "🥪"}, {"tags": ["mexican"], "order": 3710, "emoji": "🌮"}, {"tags": ["mexican", "wrap"], "order": 3711, "emoji": "🌯"}, {"tags": ["food", "mexican", "pamonha", "wrapped"], "order": 3712, "emoji": "🫔"}, {"tags": ["falafel", "flatbread", "food", "gyro", "kebab", "stuffed"], "order": 3713, "emoji": "🥙"}, {"tags": ["chickpea", "meatball"], "order": 3714, "emoji": "🧆"}, {"tags": ["breakfast", "food"], "order": 3715, "emoji": "🥚"}, {"tags": ["breakfast", "easy", "egg", "fry", "frying", "over", "pan", "restaurant", "side", "sunny", "up"], "order": 3716, "emoji": "🍳"}, {"tags": ["casserole", "food", "paella", "pan", "shallow"], "order": 3717, "emoji": "🥘"}, {"tags": ["food", "pot", "soup", "stew"], "order": 3718, "emoji": "🍲"}, {"tags": ["cheese", "chocolate", "food", "melted", "pot", "ski"], "order": 3719, "emoji": "🫕"}, {"tags": ["bowl", "breakfast", "cereal", "congee", "oatmeal", "porridge", "spoon"], "order": 3720, "emoji": "🥣"}, {"tags": ["food", "green", "salad"], "order": 3721, "emoji": "🥗"}, {"tags": ["corn", "movie", "pop"], "order": 3722, "emoji": "🍿"}, {"tags": ["dairy"], "order": 3723, "emoji": "🧈"}, {"tags": ["condiment", "flavor", "mad", "salty", "shaker", "taste", "upset"], "order": 3724, "emoji": "🧂"}, {"tags": ["can", "canned", "food"], "order": 3725, "emoji": "🥫"}, {"tags": ["bento", "box", "food"], "order": 3726, "emoji": "🍱"}, {"tags": ["cracker", "food", "rice"], "order": 3727, "emoji": "🍘"}, {"tags": ["ball", "food", "japanese", "rice"], "order": 3728, "emoji": "🍙"}, {"tags": ["cooked", "food", "rice"], "order": 3729, "emoji": "🍚"}, {"tags": ["curry", "food", "rice"], "order": 3730, "emoji": "🍛"}, {"tags": ["bowl", "chopsticks", "food", "noodle", "pho", "ramen", "soup", "steaming"], "order": 3731, "emoji": "🍜"}, {"tags": ["food", "meatballs", "pasta", "restaurant"], "order": 3732, "emoji": "🍝"}, {"tags": ["food", "potato", "roasted", "sweet"], "order": 3733, "emoji": "🍠"}, {"tags": ["food", "kebab", "restaurant", "seafood", "skewer", "stick"], "order": 3734, "emoji": "🍢"}, {"tags": ["food"], "order": 3735, "emoji": "🍣"}, {"tags": ["fried", "prawn", "shrimp", "tempura"], "order": 3736, "emoji": "🍤"}, {"tags": ["cake", "fish", "food", "pastry", "restaurant", "swirl"], "order": 3737, "emoji": "🍥"}, {"tags": ["autumn", "cake", "festival", "moon", "yuèbǐng"], "order": 3738, "emoji": "🥮"}, {"tags": ["dessert", "japanese", "skewer", "stick", "sweet"], "order": 3739, "emoji": "🍡"}, {"tags": ["empanada", "gyōza", "jiaozi", "pierogi", "potsticker"], "order": 3740, "emoji": "🥟"}, {"tags": ["cookie", "fortune", "prophecy"], "order": 3741, "emoji": "🥠"}, {"tags": ["box", "chopsticks", "delivery", "food", "oyster", "pail", "takeout"], "order": 3742, "emoji": "🥡"}, {"tags": ["cream", "dessert", "food", "ice", "icecream", "restaurant", "serve", "soft", "sweet"], "order": 3743, "emoji": "🍦"}, {"tags": ["dessert", "ice", "restaurant", "shaved", "sweet"], "order": 3744, "emoji": "🍧"}, {"tags": ["cream", "dessert", "food", "ice", "restaurant", "sweet"], "order": 3745, "emoji": "🍨"}, {"tags": ["breakfast", "dessert", "donut", "food", "sweet"], "order": 3746, "emoji": "🍩"}, {"tags": ["chip", "chocolate", "dessert", "sweet"], "order": 3747, "emoji": "🍪"}, {"tags": ["bday", "birthday", "cake", "celebration", "dessert", "happy", "pastry", "sweet"], "order": 3748, "emoji": "🎂"}, {"tags": ["cake", "dessert", "pastry", "slice", "sweet"], "order": 3749, "emoji": "🍰"}, {"tags": ["bakery", "dessert", "sprinkles", "sugar", "sweet", "treat"], "order": 3750, "emoji": "🧁"}, {"tags": ["apple", "filling", "fruit", "meat", "pastry", "pumpkin", "slice"], "order": 3751, "emoji": "🥧"}, {"tags": ["bar", "candy", "chocolate", "dessert", "halloween", "sweet", "tooth"], "order": 3752, "emoji": "🍫"}, {"tags": ["cavities", "dessert", "halloween", "restaurant", "sweet", "tooth", "wrapper"], "order": 3753, "emoji": "🍬"}, {"tags": ["candy", "dessert", "food", "restaurant", "sweet"], "order": 3754, "emoji": "🍭"}, {"tags": ["dessert", "pudding", "sweet"], "order": 3755, "emoji": "🍮"}, {"tags": ["barrel", "bear", "food", "honey", "honeypot", "jar", "pot", "sweet"], "order": 3756, "emoji": "🍯"}, {"tags": ["babies", "baby", "birth", "born", "bottle", "drink", "infant", "milk", "newborn"], "order": 3757, "emoji": "🍼"}, {"tags": ["drink", "glass", "milk"], "order": 3758, "emoji": "🥛"}, {"tags": ["beverage", "cafe", "caffeine", "chai", "coffee", "drink", "hot", "morning", "steaming", "tea"], "order": 3759, "emoji": "☕️"}, {"tags": ["brew", "drink", "food", "pot", "tea"], "order": 3760, "emoji": "🫖"}, {"tags": ["beverage", "cup", "drink", "handle", "oolong", "tea", "teacup"], "order": 3761, "emoji": "🍵"}, {"tags": ["bar", "beverage", "bottle", "cup", "drink", "restaurant"], "order": 3762, "emoji": "🍶"}, {"tags": ["bar", "bottle", "cork", "drink", "popping"], "order": 3763, "emoji": "🍾"}, {"tags": ["alcohol", "bar", "beverage", "booze", "club", "drink", "drinking", "drinks", "glass", "restaurant", "wine"], "order": 3764, "emoji": "🍷"}, {"tags": ["alcohol", "bar", "booze", "club", "cocktail", "drink", "drinking", "drinks", "glass", "mad", "martini", "men"], "order": 3765, "emoji": "🍸️"}, {"tags": ["alcohol", "bar", "booze", "club", "cocktail", "drink", "drinking", "drinks", "drunk", "mai", "party", "tai", "tropical", "tropics"], "order": 3766, "emoji": "🍹"}, {"tags": ["alcohol", "ale", "bar", "beer", "booze", "drink", "drinking", "drinks", "mug", "octoberfest", "oktoberfest", "pint", "stein", "summer"], "order": 3767, "emoji": "🍺"}, {"tags": ["alcohol", "bar", "beer", "booze", "bottoms", "cheers", "clink", "clinking", "drinking", "drinks", "mugs"], "order": 3768, "emoji": "🍻"}, {"tags": ["celebrate", "clink", "clinking", "drink", "glass", "glasses"], "order": 3769, "emoji": "🥂"}, {"tags": ["glass", "liquor", "scotch", "shot", "tumbler", "whiskey", "whisky"], "order": 3770, "emoji": "🥃"}, {"tags": ["accident", "drink", "empty", "glass", "liquid", "oops", "pour", "pouring", "spill", "water"], "order": 3771, "emoji": "🫗"}, {"tags": ["cup", "drink", "juice", "malt", "soda", "soft", "straw", "water"], "order": 3772, "emoji": "🥤"}, {"tags": ["boba", "bubble", "food", "milk", "pearl", "tea"], "order": 3773, "emoji": "🧋"}, {"tags": ["beverage", "box", "juice", "straw", "sweet"], "order": 3774, "emoji": "🧃"}, {"tags": ["drink"], "order": 3775, "emoji": "🧉"}, {"tags": ["cold", "cube", "iceberg"], "order": 3776, "emoji": "🧊"}, {"tags": ["hashi", "jeotgarak", "kuaizi"], "order": 3777, "emoji": "🥢"}, {"tags": ["cooking", "dinner", "eat", "fork", "knife", "plate"], "order": 3779, "emoji": "🍽️"}, {"tags": ["breakfast", "breaky", "cooking", "cutlery", "delicious", "dinner", "eat", "feed", "food", "fork", "hungry", "knife", "lunch", "restaurant", "yum", "yummy"], "order": 3780, "emoji": "🍴"}, {"tags": ["eat", "tableware"], "order": 3781, "emoji": "🥄"}, {"tags": ["chef", "cooking", "hocho", "kitchen", "knife", "tool", "weapon"], "order": 3782, "emoji": "🔪"}, {"tags": ["condiment", "container", "empty", "nothing", "sauce", "store"], "order": 3783, "emoji": "🫙"}, {"tags": ["aquarius", "cooking", "drink", "jug", "tool", "weapon", "zodiac"], "order": 3784, "emoji": "🏺"}, {"tags": ["africa", "earth", "europe", "europe-africa", "globe", "showing", "world"], "order": 3785, "emoji": "🌍️"}, {"tags": ["americas", "earth", "globe", "showing", "world"], "order": 3786, "emoji": "🌎️"}, {"tags": ["asia", "asia-australia", "australia", "earth", "globe", "showing", "world"], "order": 3787, "emoji": "🌏️"}, {"tags": ["earth", "globe", "internet", "meridians", "web", "world", "worldwide"], "order": 3788, "emoji": "🌐"}, {"tags": ["map", "world"], "order": 3790, "emoji": "🗺️"}, {"tags": ["japan", "map"], "order": 3791, "emoji": "🗾"}, {"tags": ["direction", "magnetic", "navigation", "orienteering"], "order": 3792, "emoji": "🧭"}, {"tags": ["cold", "mountain", "snow", "snow-capped"], "order": 3794, "emoji": "🏔️"}, {"tags": ["mountain"], "order": 3796, "emoji": "⛰️"}, {"tags": ["eruption", "mountain", "nature"], "order": 3797, "emoji": "🌋"}, {"tags": ["fuji", "mount", "mountain", "nature"], "order": 3798, "emoji": "🗻"}, {"tags": ["camping"], "order": 3800, "emoji": "🏕️"}, {"tags": ["beach", "umbrella"], "order": 3802, "emoji": "🏖️"}, {"tags": ["desert"], "order": 3804, "emoji": "🏜️"}, {"tags": ["desert", "island"], "order": 3806, "emoji": "🏝️"}, {"tags": ["national", "park"], "order": 3808, "emoji": "🏞️"}, {"tags": ["stadium"], "order": 3810, "emoji": "🏟️"}, {"tags": ["building", "classical"], "order": 3812, "emoji": "🏛️"}, {"tags": ["building", "construction", "crane"], "order": 3814, "emoji": "🏗️"}, {"tags": ["bricks", "clay", "mortar", "wall"], "order": 3815, "emoji": "🧱"}, {"tags": ["boulder", "heavy", "solid", "stone", "tough"], "order": 3816, "emoji": "🪨"}, {"tags": ["log", "lumber", "timber"], "order": 3817, "emoji": "🪵"}, {"tags": ["home", "house", "roundhouse", "shelter", "yurt"], "order": 3818, "emoji": "🛖"}, {"tags": ["house"], "order": 3820, "emoji": "🏘️"}, {"tags": ["derelict", "home", "house"], "order": 3822, "emoji": "🏚️"}, {"tags": ["building", "country", "heart", "home", "ranch", "settle", "simple", "suburban", "suburbia", "where"], "order": 3823, "emoji": "🏠️"}, {"tags": ["building", "country", "garden", "heart", "home", "house", "ranch", "settle", "simple", "suburban", "suburbia", "where"], "order": 3824, "emoji": "🏡"}, {"tags": ["building", "city", "cubical", "job", "office"], "order": 3825, "emoji": "🏢"}, {"tags": ["building", "japanese", "office", "post"], "order": 3826, "emoji": "🏣"}, {"tags": ["building", "european", "office", "post"], "order": 3827, "emoji": "🏤"}, {"tags": ["building", "doctor", "medicine"], "order": 3828, "emoji": "🏥"}, {"tags": ["building"], "order": 3829, "emoji": "🏦"}, {"tags": ["building"], "order": 3830, "emoji": "🏨"}, {"tags": ["building", "hotel", "love"], "order": 3831, "emoji": "🏩"}, {"tags": ["24", "building", "convenience", "hours", "store"], "order": 3832, "emoji": "🏪"}, {"tags": ["building"], "order": 3833, "emoji": "🏫"}, {"tags": ["building", "department", "store"], "order": 3834, "emoji": "🏬"}, {"tags": ["building"], "order": 3835, "emoji": "🏭️"}, {"tags": ["building", "castle", "japanese"], "order": 3836, "emoji": "🏯"}, {"tags": ["building", "european"], "order": 3837, "emoji": "🏰"}, {"tags": ["chapel", "hitched", "nuptials", "romance"], "order": 3838, "emoji": "💒"}, {"tags": ["tokyo", "tower"], "order": 3839, "emoji": "🗼"}, {"tags": ["liberty", "new", "ny", "nyc", "statue", "york"], "order": 3840, "emoji": "🗽"}, {"tags": ["bless", "chapel", "christian", "cross", "religion"], "order": 3841, "emoji": "⛪️"}, {"tags": ["islam", "masjid", "muslim", "religion"], "order": 3842, "emoji": "🕌"}, {"tags": ["hindu", "temple"], "order": 3843, "emoji": "🛕"}, {"tags": ["jew", "jewish", "judaism", "religion", "temple"], "order": 3844, "emoji": "🕍"}, {"tags": ["religion", "shinto", "shrine"], "order": 3846, "emoji": "⛩️"}, {"tags": ["hajj", "islam", "muslim", "religion", "umrah"], "order": 3847, "emoji": "🕋"}, {"tags": ["fountain"], "order": 3848, "emoji": "⛲️"}, {"tags": ["camping"], "order": 3849, "emoji": "⛺️"}, {"tags": ["fog"], "order": 3850, "emoji": "🌁"}, {"tags": ["night", "star", "stars"], "order": 3851, "emoji": "🌃"}, {"tags": ["city"], "order": 3853, "emoji": "🏙️"}, {"tags": ["morning", "mountains", "over", "sun", "sunrise"], "order": 3854, "emoji": "🌄"}, {"tags": ["morning", "nature", "sun"], "order": 3855, "emoji": "🌅"}, {"tags": ["at", "building", "city", "cityscape", "dusk", "evening", "landscape", "sun", "sunset"], "order": 3856, "emoji": "🌆"}, {"tags": ["building", "dusk", "sun"], "order": 3857, "emoji": "🌇"}, {"tags": ["at", "bridge", "night"], "order": 3858, "emoji": "🌉"}, {"tags": ["hot", "hotsprings", "springs", "steaming"], "order": 3860, "emoji": "♨️"}, {"tags": ["carousel", "entertainment", "horse"], "order": 3861, "emoji": "🎠"}, {"tags": ["amusement", "park", "play", "playground", "playing", "slide", "sliding", "theme"], "order": 3862, "emoji": "🛝"}, {"tags": ["amusement", "ferris", "park", "theme", "wheel"], "order": 3863, "emoji": "🎡"}, {"tags": ["amusement", "coaster", "park", "roller", "theme"], "order": 3864, "emoji": "🎢"}, {"tags": ["barber", "cut", "fresh", "haircut", "pole", "shave"], "order": 3865, "emoji": "💈"}, {"tags": ["circus", "tent"], "order": 3866, "emoji": "🎪"}, {"tags": ["caboose", "engine", "railway", "steam", "train", "trains", "travel"], "order": 3867, "emoji": "🚂"}, {"tags": ["car", "electric", "railway", "train", "tram", "travel", "trolleybus"], "order": 3868, "emoji": "🚃"}, {"tags": ["high-speed", "railway", "shinkansen", "speed", "train"], "order": 3869, "emoji": "🚄"}, {"tags": ["bullet", "high-speed", "nose", "railway", "shinkansen", "speed", "train", "travel"], "order": 3870, "emoji": "🚅"}, {"tags": ["arrived", "choo", "railway"], "order": 3871, "emoji": "🚆"}, {"tags": ["subway", "travel"], "order": 3872, "emoji": "🚇️"}, {"tags": ["arrived", "light", "monorail", "rail", "railway"], "order": 3873, "emoji": "🚈"}, {"tags": ["railway", "train"], "order": 3874, "emoji": "🚉"}, {"tags": ["trolleybus"], "order": 3875, "emoji": "🚊"}, {"tags": ["vehicle"], "order": 3876, "emoji": "🚝"}, {"tags": ["car", "mountain", "railway", "trip"], "order": 3877, "emoji": "🚞"}, {"tags": ["bus", "car", "tram", "trolley", "trolleybus"], "order": 3878, "emoji": "🚋"}, {"tags": ["school", "vehicle"], "order": 3879, "emoji": "🚌"}, {"tags": ["bus", "cars", "oncoming"], "order": 3880, "emoji": "🚍️"}, {"tags": ["bus", "tram", "trolley"], "order": 3881, "emoji": "🚎"}, {"tags": ["bus", "drive", "van", "vehicle"], "order": 3882, "emoji": "🚐"}, {"tags": ["emergency", "vehicle"], "order": 3883, "emoji": "🚑️"}, {"tags": ["engine", "fire", "truck"], "order": 3884, "emoji": "🚒"}, {"tags": ["5–0", "car", "cops", "patrol", "police"], "order": 3885, "emoji": "🚓"}, {"tags": ["car", "oncoming", "police"], "order": 3886, "emoji": "🚔️"}, {"tags": ["cab", "cabbie", "car", "drive", "vehicle", "yellow"], "order": 3887, "emoji": "🚕"}, {"tags": ["cab", "cabbie", "cars", "drove", "hail", "oncoming", "taxi", "yellow"], "order": 3888, "emoji": "🚖"}, {"tags": ["car", "driving", "vehicle"], "order": 3889, "emoji": "🚗"}, {"tags": ["automobile", "car", "cars", "drove", "oncoming", "vehicle"], "order": 3890, "emoji": "🚘️"}, {"tags": ["car", "drive", "recreational", "sport", "sportutility", "utility", "vehicle"], "order": 3891, "emoji": "🚙"}, {"tags": ["automobile", "car", "flatbed", "pick-up", "pickup", "transportation", "truck"], "order": 3892, "emoji": "🛻"}, {"tags": ["car", "delivery", "drive", "truck", "vehicle"], "order": 3893, "emoji": "🚚"}, {"tags": ["articulated", "car", "drive", "lorry", "move", "semi", "truck", "vehicle"], "order": 3894, "emoji": "🚛"}, {"tags": ["vehicle"], "order": 3895, "emoji": "🚜"}, {"tags": ["car", "racing", "zoom"], "order": 3897, "emoji": "🏎️"}, {"tags": ["racing"], "order": 3899, "emoji": "🏍️"}, {"tags": ["motor", "scooter"], "order": 3900, "emoji": "🛵"}, {"tags": ["accessibility", "manual", "wheelchair"], "order": 3901, "emoji": "🦽"}, {"tags": ["accessibility", "motorized", "wheelchair"], "order": 3902, "emoji": "🦼"}, {"tags": ["auto", "rickshaw", "tuk"], "order": 3903, "emoji": "🛺"}, {"tags": ["bike", "class", "cycle", "cycling", "cyclist", "gang", "ride", "spin", "spinning"], "order": 3904, "emoji": "🚲️"}, {"tags": ["kick", "scooter"], "order": 3905, "emoji": "🛴"}, {"tags": ["board", "skate", "skater", "wheels"], "order": 3906, "emoji": "🛹"}, {"tags": ["blades", "roller", "skate", "skates", "sport"], "order": 3907, "emoji": "🛼"}, {"tags": ["bus", "busstop", "stop"], "order": 3908, "emoji": "🚏"}, {"tags": ["highway", "road"], "order": 3910, "emoji": "🛣️"}, {"tags": ["railway", "track", "train"], "order": 3912, "emoji": "🛤️"}, {"tags": ["drum", "oil"], "order": 3914, "emoji": "🛢️"}, {"tags": ["diesel", "fuel", "fuelpump", "gas", "gasoline", "pump", "station"], "order": 3915, "emoji": "⛽️"}, {"tags": ["car", "circle", "tire", "turn", "vehicle"], "order": 3916, "emoji": "🛞"}, {"tags": ["alarm", "alert", "beacon", "car", "emergency", "light", "police", "revolving", "siren"], "order": 3917, "emoji": "🚨"}, {"tags": ["horizontal", "intersection", "light", "signal", "stop", "stoplight", "traffic"], "order": 3918, "emoji": "🚥"}, {"tags": ["drove", "intersection", "light", "signal", "stop", "stoplight", "traffic", "vertical"], "order": 3919, "emoji": "🚦"}, {"tags": ["octagonal", "sign", "stop"], "order": 3920, "emoji": "🛑"}, {"tags": ["barrier"], "order": 3921, "emoji": "🚧"}, {"tags": ["ship", "tool"], "order": 3922, "emoji": "⚓️"}, {"tags": ["buoy", "float", "life", "lifesaver", "preserver", "rescue", "ring", "safety", "save", "saver", "swim"], "order": 3923, "emoji": "🛟"}, {"tags": ["boat", "resort", "sailing", "sea", "yacht"], "order": 3924, "emoji": "⛵️"}, {"tags": ["boat"], "order": 3925, "emoji": "🛶"}, {"tags": ["billionaire", "boat", "lake", "luxury", "millionaire", "summer", "travel"], "order": 3926, "emoji": "🚤"}, {"tags": ["passenger", "ship"], "order": 3928, "emoji": "🛳️"}, {"tags": ["boat", "passenger"], "order": 3930, "emoji": "⛴️"}, {"tags": ["boat", "motor", "motorboat"], "order": 3932, "emoji": "🛥️"}, {"tags": ["boat", "passenger", "travel"], "order": 3933, "emoji": "🚢"}, {"tags": ["aeroplane", "fly", "flying", "jet", "plane", "travel"], "order": 3935, "emoji": "✈️"}, {"tags": ["aeroplane", "airplane", "plane", "small"], "order": 3937, "emoji": "🛩️"}, {"tags": ["aeroplane", "airplane", "check-in", "departure", "departures", "plane"], "order": 3938, "emoji": "🛫"}, {"tags": ["aeroplane", "airplane", "arrival", "arrivals", "arriving", "landing", "plane"], "order": 3939, "emoji": "🛬"}, {"tags": ["hang-glide", "parasail", "skydive"], "order": 3940, "emoji": "🪂"}, {"tags": ["chair"], "order": 3941, "emoji": "💺"}, {"tags": ["copter", "roflcopter", "travel", "vehicle"], "order": 3942, "emoji": "🚁"}, {"tags": ["railway", "suspension"], "order": 3943, "emoji": "🚟"}, {"tags": ["cable", "cableway", "gondola", "lift", "mountain", "ski"], "order": 3944, "emoji": "🚠"}, {"tags": ["aerial", "cable", "car", "gondola", "ropeway", "tramway"], "order": 3945, "emoji": "🚡"}, {"tags": ["space"], "order": 3947, "emoji": "🛰️"}, {"tags": ["launch", "rockets", "space", "travel"], "order": 3948, "emoji": "🚀"}, {"tags": ["aliens", "extra", "flying", "saucer", "terrestrial", "ufo"], "order": 3949, "emoji": "🛸"}, {"tags": ["bell", "bellhop", "hotel"], "order": 3951, "emoji": "🛎️"}, {"tags": ["bag", "packing", "roller", "suitcase", "travel"], "order": 3952, "emoji": "🧳"}, {"tags": ["done", "hourglass", "sand", "time", "timer"], "order": 3953, "emoji": "⌛️"}, {"tags": ["done", "flowing", "hourglass", "hours", "not", "sand", "timer", "waiting", "yolo"], "order": 3954, "emoji": "⏳️"}, {"tags": ["clock", "time"], "order": 3955, "emoji": "⌚️"}, {"tags": ["alarm", "clock", "hours", "hrs", "late", "time", "waiting"], "order": 3956, "emoji": "⏰️"}, {"tags": ["clock", "time"], "order": 3958, "emoji": "⏱️"}, {"tags": ["clock", "timer"], "order": 3960, "emoji": "⏲️"}, {"tags": ["clock", "mantelpiece", "time"], "order": 3962, "emoji": "🕰️"}, {"tags": ["12", "12:00", "clock", "o’clock", "time", "twelve"], "order": 3963, "emoji": "🕛️"}, {"tags": ["12", "12:30", "30", "clock", "thirty", "time", "twelve"], "order": 3964, "emoji": "🕧️"}, {"tags": ["1", "1:00", "clock", "one", "o’clock", "time"], "order": 3965, "emoji": "🕐️"}, {"tags": ["1", "1:30", "30", "clock", "one", "thirty", "time"], "order": 3966, "emoji": "🕜️"}, {"tags": ["2", "2:00", "clock", "o’clock", "time", "two"], "order": 3967, "emoji": "🕑️"}, {"tags": ["2", "2:30", "30", "clock", "thirty", "time", "two"], "order": 3968, "emoji": "🕝️"}, {"tags": ["3", "3:00", "clock", "o’clock", "three", "time"], "order": 3969, "emoji": "🕒️"}, {"tags": ["3", "30", "3:30", "clock", "thirty", "three", "time"], "order": 3970, "emoji": "🕞️"}, {"tags": ["4", "4:00", "clock", "four", "o’clock", "time"], "order": 3971, "emoji": "🕓️"}, {"tags": ["30", "4", "4:30", "clock", "four", "thirty", "time"], "order": 3972, "emoji": "🕟️"}, {"tags": ["5", "5:00", "clock", "five", "o’clock", "time"], "order": 3973, "emoji": "🕔️"}, {"tags": ["30", "5", "5:30", "clock", "five", "thirty", "time"], "order": 3974, "emoji": "🕠️"}, {"tags": ["6", "6:00", "clock", "o’clock", "six", "time"], "order": 3975, "emoji": "🕕️"}, {"tags": ["30", "6", "6:30", "clock", "six", "thirty"], "order": 3976, "emoji": "🕡️"}, {"tags": ["0", "7", "7:00", "clock", "o’clock", "seven"], "order": 3977, "emoji": "🕖️"}, {"tags": ["30", "7", "7:30", "clock", "seven", "thirty"], "order": 3978, "emoji": "🕢️"}, {"tags": ["8", "8:00", "clock", "eight", "o’clock", "time"], "order": 3979, "emoji": "🕗️"}, {"tags": ["30", "8", "8:30", "clock", "eight", "thirty", "time"], "order": 3980, "emoji": "🕣️"}, {"tags": ["9", "9:00", "clock", "nine", "o’clock", "time"], "order": 3981, "emoji": "🕘️"}, {"tags": ["30", "9", "9:30", "clock", "nine", "thirty", "time"], "order": 3982, "emoji": "🕤️"}, {"tags": ["0", "10", "10:00", "clock", "o’clock", "ten"], "order": 3983, "emoji": "🕙️"}, {"tags": ["10", "10:30", "30", "clock", "ten", "thirty", "time"], "order": 3984, "emoji": "🕥️"}, {"tags": ["11", "11:00", "clock", "eleven", "o’clock", "time"], "order": 3985, "emoji": "🕚️"}, {"tags": ["11", "11:30", "30", "clock", "eleven", "thirty", "time"], "order": 3986, "emoji": "🕦️"}, {"tags": ["dark", "moon", "new", "space"], "order": 3987, "emoji": "🌑"}, {"tags": ["crescent", "dreams", "moon", "space", "waxing"], "order": 3988, "emoji": "🌒"}, {"tags": ["first", "moon", "quarter", "space"], "order": 3989, "emoji": "🌓"}, {"tags": ["gibbous", "moon", "space", "waxing"], "order": 3990, "emoji": "🌔"}, {"tags": ["full", "moon", "space"], "order": 3991, "emoji": "🌕️"}, {"tags": ["gibbous", "moon", "space", "waning"], "order": 3992, "emoji": "🌖"}, {"tags": ["last", "moon", "quarter", "space"], "order": 3993, "emoji": "🌗"}, {"tags": ["crescent", "moon", "space", "waning"], "order": 3994, "emoji": "🌘"}, {"tags": ["crescent", "moon", "ramadan", "space"], "order": 3995, "emoji": "🌙"}, {"tags": ["face", "moon", "new", "space"], "order": 3996, "emoji": "🌚"}, {"tags": ["face", "first", "moon", "quarter", "space"], "order": 3997, "emoji": "🌛"}, {"tags": ["dreams", "face", "last", "moon", "quarter"], "order": 3998, "emoji": "🌜️"}, {"tags": ["weather"], "order": 4000, "emoji": "🌡️"}, {"tags": ["bright", "rays", "space", "sunny", "weather"], "order": 4002, "emoji": "☀️"}, {"tags": ["bright", "face", "full", "moon"], "order": 4003, "emoji": "🌝"}, {"tags": ["beach", "bright", "day", "face", "heat", "shine", "sun", "sunny", "sunshine", "weather"], "order": 4004, "emoji": "🌞"}, {"tags": ["planet", "ringed", "saturn", "saturnine"], "order": 4005, "emoji": "🪐"}, {"tags": ["astronomy", "medium", "stars", "white"], "order": 4006, "emoji": "⭐️"}, {"tags": ["glittery", "glow", "glowing", "night", "shining", "sparkle", "star", "win"], "order": 4007, "emoji": "🌟"}, {"tags": ["falling", "night", "shooting", "space", "star"], "order": 4008, "emoji": "🌠"}, {"tags": ["milky", "space", "way"], "order": 4009, "emoji": "🌌"}, {"tags": ["weather"], "order": 4011, "emoji": "☁️"}, {"tags": ["behind", "cloud", "cloudy", "sun", "weather"], "order": 4012, "emoji": "⛅️"}, {"tags": ["cloud", "lightning", "rain", "thunder", "thunderstorm"], "order": 4014, "emoji": "⛈️"}, {"tags": ["behind", "cloud", "sun", "weather"], "order": 4016, "emoji": "🌤️"}, {"tags": ["behind", "cloud", "sun", "weather"], "order": 4018, "emoji": "🌥️"}, {"tags": ["behind", "cloud", "rain", "sun", "weather"], "order": 4020, "emoji": "🌦️"}, {"tags": ["cloud", "rain", "weather"], "order": 4022, "emoji": "🌧️"}, {"tags": ["cloud", "cold", "snow", "weather"], "order": 4024, "emoji": "🌨️"}, {"tags": ["cloud", "lightning", "weather"], "order": 4026, "emoji": "🌩️"}, {"tags": ["cloud", "weather", "whirlwind"], "order": 4028, "emoji": "🌪️"}, {"tags": ["cloud", "weather"], "order": 4030, "emoji": "🌫️"}, {"tags": ["blow", "cloud", "face", "wind"], "order": 4032, "emoji": "🌬️"}, {"tags": ["dizzy", "hurricane", "twister", "typhoon", "weather"], "order": 4033, "emoji": "🌀"}, {"tags": ["gay", "genderqueer", "glbt", "glbtq", "lesbian", "lgbt", "lgbtq", "lgbtqia", "nature", "pride", "queer", "rain", "trans", "transgender", "weather"], "order": 4034, "emoji": "🌈"}, {"tags": ["closed", "clothing", "rain", "umbrella"], "order": 4035, "emoji": "🌂"}, {"tags": ["clothing", "rain"], "order": 4037, "emoji": "☂️"}, {"tags": ["clothing", "drop", "drops", "rain", "umbrella", "weather"], "order": 4038, "emoji": "☔️"}, {"tags": ["ground", "rain", "sun", "umbrella"], "order": 4040, "emoji": "⛱️"}, {"tags": ["danger", "electric", "electricity", "high", "lightning", "nature", "thunder", "thunderbolt", "voltage", "zap"], "order": 4041, "emoji": "⚡️"}, {"tags": ["cold", "snow", "weather"], "order": 4043, "emoji": "❄️"}, {"tags": ["cold", "man", "snow"], "order": 4045, "emoji": "☃️"}, {"tags": ["cold", "man", "snow", "snowman"], "order": 4046, "emoji": "⛄️"}, {"tags": ["space"], "order": 4048, "emoji": "☄️"}, {"tags": ["af", "burn", "flame", "hot", "lit", "litaf", "tool"], "order": 4049, "emoji": "🔥"}, {"tags": ["cold", "comic", "drop", "nature", "sad", "sweat", "tear", "water", "weather"], "order": 4050, "emoji": "💧"}, {"tags": ["nature", "ocean", "surf", "surfer", "surfing", "water", "wave"], "order": 4051, "emoji": "🌊"}, {"tags": ["celebration", "halloween", "jack", "lantern", "pumpkin"], "order": 4052, "emoji": "🎃"}, {"tags": ["celebration", "christmas", "tree"], "order": 4053, "emoji": "🎄"}, {"tags": ["boom", "celebration", "entertainment", "yolo"], "order": 4054, "emoji": "🎆"}, {"tags": ["boom", "celebration", "fireworks", "sparkle"], "order": 4055, "emoji": "🎇"}, {"tags": ["dynamite", "explosive", "fire", "fireworks", "light", "pop", "popping", "spark"], "order": 4056, "emoji": "🧨"}, {"tags": ["*", "magic", "sparkle", "star"], "order": 4057, "emoji": "✨️"}, {"tags": ["birthday", "celebrate", "celebration"], "order": 4058, "emoji": "🎈"}, {"tags": ["awesome", "birthday", "celebrate", "celebration", "excited", "hooray", "party", "popper", "tada", "woohoo"], "order": 4059, "emoji": "🎉"}, {"tags": ["ball", "celebrate", "celebration", "confetti", "party", "woohoo"], "order": 4060, "emoji": "🎊"}, {"tags": ["banner", "celebration", "japanese", "tanabata", "tree"], "order": 4061, "emoji": "🎋"}, {"tags": ["bamboo", "celebration", "decoration", "japanese", "pine", "plant"], "order": 4062, "emoji": "🎍"}, {"tags": ["celebration", "doll", "dolls", "festival", "japanese"], "order": 4063, "emoji": "🎎"}, {"tags": ["carp", "celebration", "streamer"], "order": 4064, "emoji": "🎏"}, {"tags": ["bell", "celebration", "chime", "wind"], "order": 4065, "emoji": "🎐"}, {"tags": ["celebration", "ceremony", "moon", "viewing"], "order": 4066, "emoji": "🎑"}, {"tags": ["envelope", "gift", "good", "hóngbāo", "lai", "luck", "money", "red", "see"], "order": 4067, "emoji": "🧧"}, {"tags": ["celebration"], "order": 4068, "emoji": "🎀"}, {"tags": ["birthday", "bow", "box", "celebration", "christmas", "gift", "present", "surprise", "wrapped"], "order": 4069, "emoji": "🎁"}, {"tags": ["celebration", "reminder", "ribbon"], "order": 4071, "emoji": "🎗️"}, {"tags": ["admission", "ticket", "tickets"], "order": 4073, "emoji": "🎟️"}, {"tags": ["admission", "stub"], "order": 4074, "emoji": "🎫"}, {"tags": ["award", "celebration", "medal", "military"], "order": 4076, "emoji": "🎖️"}, {"tags": ["champion", "champs", "prize", "slay", "sport", "victory", "win", "winning"], "order": 4077, "emoji": "🏆️"}, {"tags": ["award", "gold", "medal", "sports", "winner"], "order": 4078, "emoji": "🏅"}, {"tags": ["1st", "first", "gold", "medal", "place"], "order": 4079, "emoji": "🥇"}, {"tags": ["2nd", "medal", "place", "second", "silver"], "order": 4080, "emoji": "🥈"}, {"tags": ["3rd", "bronze", "medal", "place", "third"], "order": 4081, "emoji": "🥉"}, {"tags": ["ball", "football", "futbol", "soccer", "sport"], "order": 4082, "emoji": "⚽️"}, {"tags": ["ball", "sport"], "order": 4083, "emoji": "⚾️"}, {"tags": ["ball", "glove", "sports", "underarm"], "order": 4084, "emoji": "🥎"}, {"tags": ["ball", "hoop", "sport"], "order": 4085, "emoji": "🏀"}, {"tags": ["ball", "game"], "order": 4086, "emoji": "🏐"}, {"tags": ["american", "ball", "bowl", "football", "sport", "super"], "order": 4087, "emoji": "🏈"}, {"tags": ["ball", "football", "rugby", "sport"], "order": 4088, "emoji": "🏉"}, {"tags": ["ball", "racquet", "sport"], "order": 4089, "emoji": "🎾"}, {"tags": ["disc", "flying", "ultimate"], "order": 4090, "emoji": "🥏"}, {"tags": ["ball", "game", "sport", "strike"], "order": 4091, "emoji": "🎳"}, {"tags": ["ball", "bat", "cricket", "game"], "order": 4092, "emoji": "🏏"}, {"tags": ["ball", "field", "game", "hockey", "stick"], "order": 4093, "emoji": "🏑"}, {"tags": ["game", "hockey", "ice", "puck", "stick"], "order": 4094, "emoji": "🏒"}, {"tags": ["ball", "goal", "sports", "stick"], "order": 4095, "emoji": "🥍"}, {"tags": ["ball", "bat", "game", "paddle", "ping", "pingpong", "pong", "table", "tennis"], "order": 4096, "emoji": "🏓"}, {"tags": ["birdie", "game", "racquet", "shuttlecock"], "order": 4097, "emoji": "🏸"}, {"tags": ["boxing", "glove"], "order": 4098, "emoji": "🥊"}, {"tags": ["arts", "judo", "karate", "martial", "taekwondo", "uniform"], "order": 4099, "emoji": "🥋"}, {"tags": ["goal", "net"], "order": 4100, "emoji": "🥅"}, {"tags": ["flag", "golf", "hole", "sport"], "order": 4101, "emoji": "⛳️"}, {"tags": ["ice", "skate", "skating"], "order": 4103, "emoji": "⛸️"}, {"tags": ["entertainment", "fish", "fishing", "pole", "sport"], "order": 4104, "emoji": "🎣"}, {"tags": ["diving", "mask", "scuba", "snorkeling"], "order": 4105, "emoji": "🤿"}, {"tags": ["athletics", "running", "sash", "shirt"], "order": 4106, "emoji": "🎽"}, {"tags": ["ski", "snow", "sport"], "order": 4107, "emoji": "🎿"}, {"tags": ["luge", "sledge", "sleigh", "snow", "toboggan"], "order": 4108, "emoji": "🛷"}, {"tags": ["curling", "game", "rock", "stone"], "order": 4109, "emoji": "🥌"}, {"tags": ["bull", "dart", "direct", "entertainment", "game", "hit", "target"], "order": 4110, "emoji": "🎯"}, {"tags": ["fluctuate", "toy"], "order": 4111, "emoji": "🪀"}, {"tags": ["fly", "soar"], "order": 4112, "emoji": "🪁"}, {"tags": ["gun", "handgun", "pistol", "revolver", "tool", "water", "weapon"], "order": 4113, "emoji": "🔫"}, {"tags": ["8", "8ball", "ball", "billiard", "eight", "game", "pool"], "order": 4114, "emoji": "🎱"}, {"tags": ["ball", "crystal", "fairy", "fairytale", "fantasy", "fortune", "future", "magic", "tale", "tool"], "order": 4115, "emoji": "🔮"}, {"tags": ["magic", "magician", "wand", "witch", "wizard"], "order": 4116, "emoji": "🪄"}, {"tags": ["controller", "entertainment", "game", "video"], "order": 4117, "emoji": "🎮️"}, {"tags": ["game", "video", "videogame"], "order": 4119, "emoji": "🕹️"}, {"tags": ["casino", "gamble", "gambling", "game", "machine", "slot", "slots"], "order": 4120, "emoji": "🎰"}, {"tags": ["dice", "die", "entertainment", "game"], "order": 4121, "emoji": "🎲"}, {"tags": ["clue", "interlocking", "jigsaw", "piece", "puzzle"], "order": 4122, "emoji": "🧩"}, {"tags": ["bear", "plaything", "plush", "stuffed", "teddy", "toy"], "order": 4123, "emoji": "🧸"}, {"tags": ["candy", "celebrate", "celebration", "cinco", "de", "festive", "mayo", "party", "pinada", "pinata"], "order": 4124, "emoji": "🪅"}, {"tags": ["ball", "dance", "disco", "glitter", "mirror", "party"], "order": 4125, "emoji": "🪩"}, {"tags": ["babooshka", "baboushka", "babushka", "doll", "dolls", "matryoshka", "nesting", "russia"], "order": 4126, "emoji": "🪆"}, {"tags": ["card", "game", "spade", "suit"], "order": 4128, "emoji": "♠️"}, {"tags": ["card", "emotion", "game", "heart", "hearts", "suit"], "order": 4130, "emoji": "♥️"}, {"tags": ["card", "diamond", "game", "suit"], "order": 4132, "emoji": "♦️"}, {"tags": ["card", "club", "clubs", "game", "suit"], "order": 4134, "emoji": "♣️"}, {"tags": ["chess", "dupe", "expendable", "pawn"], "order": 4136, "emoji": "♟️"}, {"tags": ["card", "game", "wildcard"], "order": 4137, "emoji": "🃏"}, {"tags": ["dragon", "game", "mahjong", "red"], "order": 4138, "emoji": "🀄️"}, {"tags": ["card", "cards", "flower", "game", "japanese", "playing"], "order": 4139, "emoji": "🎴"}, {"tags": ["actor", "actress", "art", "arts", "entertainment", "mask", "performing", "theater", "theatre", "thespian"], "order": 4140, "emoji": "🎭️"}, {"tags": ["art", "frame", "framed", "museum", "painting", "picture"], "order": 4142, "emoji": "🖼️"}, {"tags": ["art", "artist", "artsy", "arty", "colorful", "creative", "entertainment", "museum", "painter", "painting", "palette"], "order": 4143, "emoji": "🎨"}, {"tags": ["needle", "sewing", "spool", "string"], "order": 4144, "emoji": "🧵"}, {"tags": ["embroidery", "needle", "sew", "sewing", "stitches", "sutures", "tailoring", "thread"], "order": 4145, "emoji": "🪡"}, {"tags": ["ball", "crochet", "knit"], "order": 4146, "emoji": "🧶"}, {"tags": ["cord", "rope", "tangled", "tie", "twine", "twist"], "order": 4147, "emoji": "🪢"}, {"tags": ["clothing", "eye", "eyeglasses", "eyewear"], "order": 4148, "emoji": "👓️"}, {"tags": ["dark", "eye", "eyewear", "glasses"], "order": 4150, "emoji": "🕶️"}, {"tags": ["dive", "eye", "protection", "scuba", "swimming", "welding"], "order": 4151, "emoji": "🥽"}, {"tags": ["clothes", "coat", "doctor", "dr", "experiment", "jacket", "lab", "scientist", "white"], "order": 4152, "emoji": "🥼"}, {"tags": ["emergency", "safety", "vest"], "order": 4153, "emoji": "🦺"}, {"tags": ["clothing", "employed", "serious", "shirt", "tie"], "order": 4154, "emoji": "👔"}, {"tags": ["blue", "casual", "clothes", "clothing", "collar", "dressed", "shirt", "shopping", "tshirt", "weekend"], "order": 4155, "emoji": "👕"}, {"tags": ["blue", "casual", "clothes", "clothing", "denim", "dressed", "pants", "shopping", "trousers", "weekend"], "order": 4156, "emoji": "👖"}, {"tags": ["bundle", "cold", "neck", "up"], "order": 4157, "emoji": "🧣"}, {"tags": ["hand"], "order": 4158, "emoji": "🧤"}, {"tags": ["brr", "bundle", "cold", "jacket", "up"], "order": 4159, "emoji": "🧥"}, {"tags": ["stocking"], "order": 4160, "emoji": "🧦"}, {"tags": ["clothes", "clothing", "dressed", "fancy", "shopping"], "order": 4161, "emoji": "👗"}, {"tags": ["clothing", "comfortable"], "order": 4162, "emoji": "👘"}, {"tags": ["clothing", "dress"], "order": 4163, "emoji": "🥻"}, {"tags": ["bathing", "one-piece", "suit", "swimsuit"], "order": 4164, "emoji": "🩱"}, {"tags": ["bathing", "one-piece", "suit", "swimsuit", "underwear"], "order": 4165, "emoji": "🩲"}, {"tags": ["bathing", "pants", "suit", "swimsuit", "underwear"], "order": 4166, "emoji": "🩳"}, {"tags": ["bathing", "beach", "clothing", "pool", "suit", "swim"], "order": 4167, "emoji": "👙"}, {"tags": ["blouse", "clothes", "clothing", "collar", "dress", "dressed", "lady", "shirt", "shopping", "woman", "woman’s"], "order": 4168, "emoji": "👚"}, {"tags": ["clack", "clap", "cool", "cooling", "dance", "fan", "flirt", "flutter", "folding", "hand", "hot", "shy"], "order": 4169, "emoji": "🪭"}, {"tags": ["clothes", "clothing", "coin", "dress", "fancy", "handbag", "shopping"], "order": 4170, "emoji": "👛"}, {"tags": ["bag", "clothes", "clothing", "dress", "lady", "purse", "shopping"], "order": 4171, "emoji": "👜"}, {"tags": ["bag", "clothes", "clothing", "clutch", "dress", "handbag", "pouch", "purse"], "order": 4172, "emoji": "👝"}, {"tags": ["bag", "bags", "hotel", "shopping"], "order": 4174, "emoji": "🛍️"}, {"tags": ["backpacking", "bag", "bookbag", "education", "rucksack", "satchel", "school"], "order": 4175, "emoji": "🎒"}, {"tags": ["beach", "flip", "flop", "sandal", "sandals", "shoe", "thong", "thongs", "zōri"], "order": 4176, "emoji": "🩴"}, {"tags": ["brown", "clothes", "clothing", "feet", "foot", "kick", "man", "man’s", "shoe", "shoes", "shopping"], "order": 4177, "emoji": "👞"}, {"tags": ["athletic", "clothes", "clothing", "fast", "kick", "running", "shoe", "shoes", "shopping", "sneaker", "tennis"], "order": 4178, "emoji": "👟"}, {"tags": ["backpacking", "boot", "brown", "camping", "hiking", "outdoors", "shoe"], "order": 4179, "emoji": "🥾"}, {"tags": ["ballet", "comfy", "flat", "flats", "shoe", "slip-on", "slipper"], "order": 4180, "emoji": "🥿"}, {"tags": ["clothes", "clothing", "dress", "fashion", "heel", "heels", "high-heeled", "shoe", "shoes", "shopping", "stiletto", "woman"], "order": 4181, "emoji": "👠"}, {"tags": ["clothing", "sandal", "shoe", "woman", "woman’s"], "order": 4182, "emoji": "👡"}, {"tags": ["ballet", "dance", "shoes"], "order": 4183, "emoji": "🩰"}, {"tags": ["boot", "clothes", "clothing", "dress", "shoe", "shoes", "shopping", "woman", "woman’s"], "order": 4184, "emoji": "👢"}, {"tags": ["afro", "comb", "groom", "hair", "pick"], "order": 4185, "emoji": "🪮"}, {"tags": ["clothing", "family", "king", "medieval", "queen", "royal", "royalty", "win"], "order": 4186, "emoji": "👑"}, {"tags": ["clothes", "clothing", "garden", "hat", "hats", "party", "woman", "woman’s"], "order": 4187, "emoji": "👒"}, {"tags": ["clothes", "clothing", "fancy", "formal", "hat", "magic", "top", "tophat"], "order": 4188, "emoji": "🎩"}, {"tags": ["cap", "celebration", "clothing", "education", "graduation", "hat", "scholar"], "order": 4189, "emoji": "🎓️"}, {"tags": ["baseball", "bent", "billed", "cap", "dad", "hat"], "order": 4190, "emoji": "🧢"}, {"tags": ["army", "helmet", "military", "soldier", "war", "warrior"], "order": 4191, "emoji": "🪖"}, {"tags": ["aid", "cross", "face", "hat", "helmet", "rescue", "worker’s"], "order": 4193, "emoji": "⛑️"}, {"tags": ["beads", "clothing", "necklace", "prayer", "religion"], "order": 4194, "emoji": "📿"}, {"tags": ["cosmetics", "date", "makeup"], "order": 4195, "emoji": "💄"}, {"tags": ["diamond", "engaged", "engagement", "married", "romance", "shiny", "sparkling", "wedding"], "order": 4196, "emoji": "💍"}, {"tags": ["diamond", "engagement", "gem", "jewel", "money", "romance", "stone", "wedding"], "order": 4197, "emoji": "💎"}, {"tags": ["mute", "muted", "quiet", "silent", "sound", "speaker"], "order": 4198, "emoji": "🔇"}, {"tags": ["low", "soft", "sound", "speaker", "volume"], "order": 4199, "emoji": "🔈️"}, {"tags": ["medium", "sound", "speaker", "volume"], "order": 4200, "emoji": "🔉"}, {"tags": ["high", "loud", "music", "sound", "speaker", "volume"], "order": 4201, "emoji": "🔊"}, {"tags": ["address", "communication", "loud", "public", "sound"], "order": 4202, "emoji": "📢"}, {"tags": ["cheering", "sound"], "order": 4203, "emoji": "📣"}, {"tags": ["horn", "post", "postal"], "order": 4204, "emoji": "📯"}, {"tags": ["break", "church", "sound"], "order": 4205, "emoji": "🔔"}, {"tags": ["bell", "forbidden", "mute", "no", "not", "prohibited", "quiet", "silent", "slash", "sound"], "order": 4206, "emoji": "🔕"}, {"tags": ["music", "musical", "note", "score"], "order": 4207, "emoji": "🎼"}, {"tags": ["music", "musical", "note", "sound"], "order": 4208, "emoji": "🎵"}, {"tags": ["music", "musical", "note", "notes", "sound"], "order": 4209, "emoji": "🎶"}, {"tags": ["mic", "microphone", "music", "studio"], "order": 4211, "emoji": "🎙️"}, {"tags": ["level", "music", "slider"], "order": 4213, "emoji": "🎚️"}, {"tags": ["control", "knobs", "music"], "order": 4215, "emoji": "🎛️"}, {"tags": ["karaoke", "mic", "music", "sing", "sound"], "order": 4216, "emoji": "🎤"}, {"tags": ["earbud", "sound"], "order": 4217, "emoji": "🎧️"}, {"tags": ["entertainment", "tbt", "video"], "order": 4218, "emoji": "📻️"}, {"tags": ["instrument", "music", "sax"], "order": 4219, "emoji": "🎷"}, {"tags": ["box", "concertina", "instrument", "music", "squeeze", "squeezebox"], "order": 4220, "emoji": "🪗"}, {"tags": ["instrument", "music", "strat"], "order": 4221, "emoji": "🎸"}, {"tags": ["instrument", "keyboard", "music", "musical", "piano"], "order": 4222, "emoji": "🎹"}, {"tags": ["instrument", "music"], "order": 4223, "emoji": "🎺"}, {"tags": ["instrument", "music"], "order": 4224, "emoji": "🎻"}, {"tags": ["music", "stringed"], "order": 4225, "emoji": "🪕"}, {"tags": ["drumsticks", "music"], "order": 4226, "emoji": "🥁"}, {"tags": ["beat", "conga", "drum", "instrument", "long", "rhythm"], "order": 4227, "emoji": "🪘"}, {"tags": ["cha", "dance", "instrument", "music", "party", "percussion", "rattle", "shake", "shaker"], "order": 4228, "emoji": "🪇"}, {"tags": ["band", "fife", "flautist", "instrument", "marching", "music", "orchestra", "piccolo", "pipe", "recorder", "woodwind"], "order": 4229, "emoji": "🪈"}, {"tags": ["cupid", "instrument", "love", "music", "orchestra"], "order": 4230, "emoji": "🪉"}, {"tags": ["cell", "communication", "mobile", "phone", "telephone"], "order": 4231, "emoji": "📱"}, {"tags": ["arrow", "build", "call", "cell", "communication", "mobile", "phone", "receive", "telephone"], "order": 4232, "emoji": "📲"}, {"tags": ["phone"], "order": 4234, "emoji": "☎️"}, {"tags": ["communication", "phone", "receiver", "telephone", "voip"], "order": 4235, "emoji": "📞"}, {"tags": ["communication"], "order": 4236, "emoji": "📟️"}, {"tags": ["communication", "fax", "machine"], "order": 4237, "emoji": "📠"}, {"tags": ["battery"], "order": 4238, "emoji": "🔋"}, {"tags": ["battery", "drained", "electronic", "energy", "low", "power"], "order": 4239, "emoji": "🪫"}, {"tags": ["electric", "electricity", "plug"], "order": 4240, "emoji": "🔌"}, {"tags": ["computer", "office", "pc", "personal"], "order": 4241, "emoji": "💻️"}, {"tags": ["computer", "desktop", "monitor"], "order": 4243, "emoji": "🖥️"}, {"tags": ["computer"], "order": 4245, "emoji": "🖨️"}, {"tags": ["computer"], "order": 4247, "emoji": "⌨️"}, {"tags": ["computer", "mouse"], "order": 4249, "emoji": "🖱️"}, {"tags": ["computer"], "order": 4251, "emoji": "🖲️"}, {"tags": ["computer", "disk", "minidisk", "optical"], "order": 4252, "emoji": "💽"}, {"tags": ["computer", "disk", "floppy"], "order": 4253, "emoji": "💾"}, {"tags": ["blu-ray", "cd", "computer", "disk", "dvd", "optical"], "order": 4254, "emoji": "💿️"}, {"tags": ["blu-ray", "cd", "computer", "disk", "optical"], "order": 4255, "emoji": "📀"}, {"tags": ["calculation", "calculator"], "order": 4256, "emoji": "🧮"}, {"tags": ["bollywood", "camera", "cinema", "film", "hollywood", "movie", "record"], "order": 4257, "emoji": "🎥"}, {"tags": ["cinema", "film", "frames", "movie"], "order": 4259, "emoji": "🎞️"}, {"tags": ["cinema", "film", "movie", "projector", "video"], "order": 4261, "emoji": "📽️"}, {"tags": ["action", "board", "clapper", "movie"], "order": 4262, "emoji": "🎬️"}, {"tags": ["tv", "video"], "order": 4263, "emoji": "📺️"}, {"tags": ["photo", "selfie", "snap", "tbt", "trip", "video"], "order": 4264, "emoji": "📷️"}, {"tags": ["camera", "flash", "video"], "order": 4265, "emoji": "📸"}, {"tags": ["camcorder", "camera", "tbt", "video"], "order": 4266, "emoji": "📹️"}, {"tags": ["old", "school", "tape", "vcr", "vhs", "video"], "order": 4267, "emoji": "📼"}, {"tags": ["glass", "lab", "left", "left-pointing", "magnifying", "science", "search", "tilted", "tool"], "order": 4268, "emoji": "🔍️"}, {"tags": ["contact", "glass", "lab", "magnifying", "right", "right-pointing", "science", "search", "tilted", "tool"], "order": 4269, "emoji": "🔎"}, {"tags": ["light"], "order": 4271, "emoji": "🕯️"}, {"tags": ["bulb", "comic", "electric", "idea", "light"], "order": 4272, "emoji": "💡"}, {"tags": ["electric", "light", "tool", "torch"], "order": 4273, "emoji": "🔦"}, {"tags": ["bar", "lantern", "light", "paper", "red", "restaurant"], "order": 4274, "emoji": "🏮"}, {"tags": ["diya", "lamp", "light", "oil"], "order": 4275, "emoji": "🪔"}, {"tags": ["book", "cover", "decorated", "decorative", "education", "notebook", "school", "writing"], "order": 4276, "emoji": "📔"}, {"tags": ["book", "closed", "education"], "order": 4277, "emoji": "📕"}, {"tags": ["book", "education", "fantasy", "knowledge", "library", "novels", "open", "reading"], "order": 4278, "emoji": "📖"}, {"tags": ["book", "education", "fantasy", "green", "library", "reading"], "order": 4279, "emoji": "📗"}, {"tags": ["blue", "book", "education", "fantasy", "library", "reading"], "order": 4280, "emoji": "📘"}, {"tags": ["book", "education", "fantasy", "library", "orange", "reading"], "order": 4281, "emoji": "📙"}, {"tags": ["book", "education", "fantasy", "knowledge", "library", "novels", "reading", "school", "study"], "order": 4282, "emoji": "📚️"}, {"tags": ["notebook"], "order": 4283, "emoji": "📓"}, {"tags": ["notebook"], "order": 4284, "emoji": "📒"}, {"tags": ["curl", "document", "page", "paper"], "order": 4285, "emoji": "📃"}, {"tags": ["paper"], "order": 4286, "emoji": "📜"}, {"tags": ["document", "facing", "page", "paper", "up"], "order": 4287, "emoji": "📄"}, {"tags": ["communication", "news", "paper"], "order": 4288, "emoji": "📰"}, {"tags": ["news", "newspaper", "paper", "rolled", "rolled-up"], "order": 4290, "emoji": "🗞️"}, {"tags": ["bookmark", "mark", "marker", "tabs"], "order": 4291, "emoji": "📑"}, {"tags": ["mark"], "order": 4292, "emoji": "🔖"}, {"tags": ["tag"], "order": 4294, "emoji": "🏷️"}, {"tags": ["bag", "bank", "bet", "billion", "cash", "cost", "dollar", "gold", "million", "money", "moneybag", "paid", "paying", "pot", "rich", "win"], "order": 4295, "emoji": "💰️"}, {"tags": ["dollar", "euro", "gold", "metal", "money", "rich", "silver", "treasure"], "order": 4296, "emoji": "🪙"}, {"tags": ["bank", "banknote", "bill", "currency", "money", "note", "yen"], "order": 4297, "emoji": "💴"}, {"tags": ["bank", "banknote", "bill", "currency", "dollar", "money", "note"], "order": 4298, "emoji": "💵"}, {"tags": ["100", "bank", "banknote", "bill", "currency", "euro", "money", "note", "rich"], "order": 4299, "emoji": "💶"}, {"tags": ["bank", "banknote", "bill", "billion", "cash", "currency", "money", "note", "pound", "pounds"], "order": 4300, "emoji": "💷"}, {"tags": ["bank", "banknote", "bill", "billion", "cash", "dollar", "fly", "million", "money", "note", "pay", "wings"], "order": 4301, "emoji": "💸"}, {"tags": ["bank", "card", "cash", "charge", "credit", "money", "pay"], "order": 4302, "emoji": "💳️"}, {"tags": ["accounting", "bookkeeping", "evidence", "invoice", "proof"], "order": 4303, "emoji": "🧾"}, {"tags": ["bank", "chart", "currency", "graph", "growth", "increasing", "market", "money", "rise", "trend", "upward", "yen"], "order": 4304, "emoji": "💹"}, {"tags": ["e-mail", "email", "letter"], "order": 4306, "emoji": "✉️"}, {"tags": ["email", "letter", "mail"], "order": 4307, "emoji": "📧"}, {"tags": ["delivering", "e-mail", "email", "envelope", "incoming", "letter", "mail", "receive", "sent"], "order": 4308, "emoji": "📨"}, {"tags": ["arrow", "communication", "down", "e-mail", "email", "envelope", "letter", "mail", "outgoing", "send", "sent"], "order": 4309, "emoji": "📩"}, {"tags": ["box", "email", "letter", "mail", "outbox", "sent", "tray"], "order": 4310, "emoji": "📤️"}, {"tags": ["box", "email", "inbox", "letter", "mail", "receive", "tray", "zero"], "order": 4311, "emoji": "📥️"}, {"tags": ["box", "communication", "delivery", "parcel", "shipping"], "order": 4312, "emoji": "📦️"}, {"tags": ["closed", "communication", "flag", "mail", "mailbox", "postbox", "raised"], "order": 4313, "emoji": "📫️"}, {"tags": ["closed", "flag", "lowered", "mail", "mailbox", "postbox"], "order": 4314, "emoji": "📪️"}, {"tags": ["flag", "mail", "mailbox", "open", "postbox", "raised"], "order": 4315, "emoji": "📬️"}, {"tags": ["flag", "lowered", "mail", "mailbox", "open", "postbox"], "order": 4316, "emoji": "📭️"}, {"tags": ["mail", "mailbox"], "order": 4317, "emoji": "📮"}, {"tags": ["ballot", "box"], "order": 4319, "emoji": "🗳️"}, {"tags": ["pencil"], "order": 4321, "emoji": "✏️"}, {"tags": ["black", "nib", "pen"], "order": 4323, "emoji": "✒️"}, {"tags": ["fountain", "pen"], "order": 4325, "emoji": "🖋️"}, {"tags": ["ballpoint"], "order": 4327, "emoji": "🖊️"}, {"tags": ["painting"], "order": 4329, "emoji": "🖌️"}, {"tags": ["crayon"], "order": 4331, "emoji": "🖍️"}, {"tags": ["communication", "media", "notes", "pencil"], "order": 4332, "emoji": "📝"}, {"tags": ["office"], "order": 4333, "emoji": "💼"}, {"tags": ["file", "folder"], "order": 4334, "emoji": "📁"}, {"tags": ["file", "folder", "open"], "order": 4335, "emoji": "📂"}, {"tags": ["card", "dividers", "index"], "order": 4337, "emoji": "🗂️"}, {"tags": ["date"], "order": 4338, "emoji": "📅"}, {"tags": ["calendar", "tear-off"], "order": 4339, "emoji": "📆"}, {"tags": ["note", "notepad", "pad", "spiral"], "order": 4341, "emoji": "🗒️"}, {"tags": ["calendar", "pad", "spiral"], "order": 4343, "emoji": "🗓️"}, {"tags": ["card", "index", "old", "rolodex", "school"], "order": 4344, "emoji": "📇"}, {"tags": ["chart", "data", "graph", "growth", "increasing", "right", "trend", "up", "upward"], "order": 4345, "emoji": "📈"}, {"tags": ["chart", "data", "decreasing", "down", "downward", "graph", "negative", "trend"], "order": 4346, "emoji": "📉"}, {"tags": ["bar", "chart", "data", "graph"], "order": 4347, "emoji": "📊"}, {"tags": ["do", "list", "notes"], "order": 4348, "emoji": "📋️"}, {"tags": ["collage", "pin"], "order": 4349, "emoji": "📌"}, {"tags": ["location", "map", "pin", "pushpin", "round"], "order": 4350, "emoji": "📍"}, {"tags": ["paperclip"], "order": 4351, "emoji": "📎"}, {"tags": ["link", "linked", "paperclip", "paperclips"], "order": 4353, "emoji": "🖇️"}, {"tags": ["angle", "edge", "math", "ruler", "straight", "straightedge"], "order": 4354, "emoji": "📏"}, {"tags": ["angle", "math", "rule", "ruler", "set", "slide", "triangle", "triangular"], "order": 4355, "emoji": "📐"}, {"tags": ["cut", "cutting", "paper", "tool"], "order": 4357, "emoji": "✂️"}, {"tags": ["box", "card", "file"], "order": 4359, "emoji": "🗃️"}, {"tags": ["cabinet", "file", "filing", "paper"], "order": 4361, "emoji": "🗄️"}, {"tags": ["can", "garbage", "trash", "waste"], "order": 4363, "emoji": "🗑️"}, {"tags": ["closed", "lock", "private"], "order": 4364, "emoji": "🔒️"}, {"tags": ["cracked", "lock", "open", "unlock"], "order": 4365, "emoji": "🔓️"}, {"tags": ["ink", "lock", "locked", "nib", "pen", "privacy"], "order": 4366, "emoji": "🔏"}, {"tags": ["bike", "closed", "key", "lock", "locked", "secure"], "order": 4367, "emoji": "🔐"}, {"tags": ["keys", "lock", "major", "password", "unlock"], "order": 4368, "emoji": "🔑"}, {"tags": ["clue", "key", "lock", "old"], "order": 4370, "emoji": "🗝️"}, {"tags": ["home", "improvement", "repairs", "tool"], "order": 4371, "emoji": "🔨"}, {"tags": ["ax", "chop", "hatchet", "split", "wood"], "order": 4372, "emoji": "🪓"}, {"tags": ["hammer", "mining", "tool"], "order": 4374, "emoji": "⛏️"}, {"tags": ["hammer", "pick", "tool"], "order": 4376, "emoji": "⚒️"}, {"tags": ["hammer", "spanner", "tool", "wrench"], "order": 4378, "emoji": "🛠️"}, {"tags": ["knife", "weapon"], "order": 4380, "emoji": "🗡️"}, {"tags": ["crossed", "swords", "weapon"], "order": 4382, "emoji": "⚔️"}, {"tags": ["boom", "comic", "dangerous", "explosion", "hot"], "order": 4383, "emoji": "💣️"}, {"tags": ["rebound", "repercussion", "weapon"], "order": 4384, "emoji": "🪃"}, {"tags": ["archer", "archery", "arrow", "bow", "sagittarius", "tool", "weapon", "zodiac"], "order": 4385, "emoji": "🏹"}, {"tags": ["weapon"], "order": 4387, "emoji": "🛡️"}, {"tags": ["carpenter", "carpentry", "cut", "lumber", "saw", "tool", "trim"], "order": 4388, "emoji": "🪚"}, {"tags": ["home", "improvement", "spanner", "tool"], "order": 4389, "emoji": "🔧"}, {"tags": ["flathead", "handy", "screw", "tool"], "order": 4390, "emoji": "🪛"}, {"tags": ["bolt", "home", "improvement", "nut", "tool"], "order": 4391, "emoji": "🔩"}, {"tags": ["cog", "cogwheel", "tool"], "order": 4393, "emoji": "⚙️"}, {"tags": ["compress", "tool", "vice"], "order": 4395, "emoji": "🗜️"}, {"tags": ["balance", "justice", "libra", "scale", "scales", "tool", "weight", "zodiac"], "order": 4397, "emoji": "⚖️"}, {"tags": ["accessibility", "blind", "cane", "probing", "white"], "order": 4398, "emoji": "🦯"}, {"tags": ["links"], "order": 4399, "emoji": "🔗"}, {"tags": ["break", "breaking", "broken", "chain", "cuffs", "freedom"], "order": 4400, "emoji": "⛓️‍💥"}, {"tags": ["chain"], "order": 4403, "emoji": "⛓️"}, {"tags": ["catch", "crook", "curve", "ensnare", "point", "selling"], "order": 4404, "emoji": "🪝"}, {"tags": ["box", "chest", "mechanic", "red", "tool"], "order": 4405, "emoji": "🧰"}, {"tags": ["attraction", "horseshoe", "magnetic", "negative", "positive", "shape", "u"], "order": 4406, "emoji": "🧲"}, {"tags": ["climb", "rung", "step"], "order": 4407, "emoji": "🪜"}, {"tags": ["bury", "dig", "garden", "hole", "plant", "scoop", "snow", "spade"], "order": 4408, "emoji": "🪏"}, {"tags": ["chemistry", "tool"], "order": 4410, "emoji": "⚗️"}, {"tags": ["chemist", "chemistry", "experiment", "lab", "science", "test", "tube"], "order": 4411, "emoji": "🧪"}, {"tags": ["bacteria", "biologist", "biology", "culture", "dish", "lab", "petri"], "order": 4412, "emoji": "🧫"}, {"tags": ["biologist", "evolution", "gene", "genetics", "life"], "order": 4413, "emoji": "🧬"}, {"tags": ["experiment", "lab", "science", "tool"], "order": 4414, "emoji": "🔬"}, {"tags": ["contact", "extraterrestrial", "science", "tool"], "order": 4415, "emoji": "🔭"}, {"tags": ["aliens", "antenna", "contact", "dish", "satellite", "science"], "order": 4416, "emoji": "📡"}, {"tags": ["doctor", "flu", "medicine", "needle", "shot", "sick", "tool", "vaccination"], "order": 4417, "emoji": "💉"}, {"tags": ["bleed", "blood", "donation", "drop", "injury", "medicine", "menstruation"], "order": 4418, "emoji": "🩸"}, {"tags": ["doctor", "drugs", "medicated", "medicine", "pills", "sick", "vitamin"], "order": 4419, "emoji": "💊"}, {"tags": ["adhesive", "bandage"], "order": 4420, "emoji": "🩹"}, {"tags": ["aid", "cane", "disability", "help", "hurt", "injured", "mobility", "stick"], "order": 4421, "emoji": "🩼"}, {"tags": ["doctor", "heart", "medicine"], "order": 4422, "emoji": "🩺"}, {"tags": ["bones", "doctor", "medical", "skeleton", "skull", "xray"], "order": 4423, "emoji": "🩻"}, {"tags": ["back", "closet", "front"], "order": 4424, "emoji": "🚪"}, {"tags": ["accessibility", "hoist", "lift"], "order": 4425, "emoji": "🛗"}, {"tags": ["makeup", "reflection", "reflector", "speculum"], "order": 4426, "emoji": "🪞"}, {"tags": ["air", "frame", "fresh", "opening", "transparent", "view"], "order": 4427, "emoji": "🪟"}, {"tags": ["hotel", "sleep"], "order": 4429, "emoji": "🛏️"}, {"tags": ["couch", "hotel", "lamp"], "order": 4431, "emoji": "🛋️"}, {"tags": ["seat", "sit"], "order": 4432, "emoji": "🪑"}, {"tags": ["bathroom"], "order": 4433, "emoji": "🚽"}, {"tags": ["cup", "force", "plumber", "poop", "suction", "toilet"], "order": 4434, "emoji": "🪠"}, {"tags": ["water"], "order": 4435, "emoji": "🚿"}, {"tags": ["bath"], "order": 4436, "emoji": "🛁"}, {"tags": ["bait", "cheese", "lure", "mouse", "mousetrap", "snare", "trap"], "order": 4437, "emoji": "🪤"}, {"tags": ["sharp", "shave"], "order": 4438, "emoji": "🪒"}, {"tags": ["bottle", "lotion", "moisturizer", "shampoo", "sunscreen"], "order": 4439, "emoji": "🧴"}, {"tags": ["diaper", "pin", "punk", "rock", "safety"], "order": 4440, "emoji": "🧷"}, {"tags": ["cleaning", "sweeping", "witch"], "order": 4441, "emoji": "🧹"}, {"tags": ["farming", "laundry", "picnic"], "order": 4442, "emoji": "🧺"}, {"tags": ["paper", "roll", "toilet", "towels"], "order": 4443, "emoji": "🧻"}, {"tags": ["cask", "pail", "vat"], "order": 4444, "emoji": "🪣"}, {"tags": ["bar", "bathing", "clean", "cleaning", "lather", "soapdish"], "order": 4445, "emoji": "🧼"}, {"tags": ["bubble", "burp", "clean", "floating", "pearl", "soap", "underwater"], "order": 4446, "emoji": "🫧"}, {"tags": ["bathroom", "brush", "clean", "dental", "hygiene", "teeth", "toiletry"], "order": 4447, "emoji": "🪥"}, {"tags": ["absorbing", "cleaning", "porous", "soak"], "order": 4448, "emoji": "🧽"}, {"tags": ["extinguish", "extinguisher", "fire", "quench"], "order": 4449, "emoji": "🧯"}, {"tags": ["cart", "shopping", "trolley"], "order": 4450, "emoji": "🛒"}, {"tags": ["smoking"], "order": 4451, "emoji": "🚬"}, {"tags": ["dead", "death", "vampire"], "order": 4453, "emoji": "⚰️"}, {"tags": ["cemetery", "dead", "grave", "graveyard", "memorial", "rip", "tomb", "tombstone"], "order": 4454, "emoji": "🪦"}, {"tags": ["ashes", "death", "funeral", "urn"], "order": 4456, "emoji": "⚱️"}, {"tags": ["amulet", "bead", "blue", "charm", "evil-eye", "nazar", "talisman"], "order": 4457, "emoji": "🧿"}, {"tags": ["amulet", "fatima", "fortune", "guide", "hand", "mary", "miriam", "palm", "protect", "protection"], "order": 4458, "emoji": "🪬"}, {"tags": ["face", "moyai", "statue", "stoneface", "travel"], "order": 4459, "emoji": "🗿"}, {"tags": ["card", "demonstration", "notice", "picket", "plaque", "protest", "sign"], "order": 4460, "emoji": "🪧"}, {"tags": ["card", "credentials", "document", "id", "identification", "license", "security"], "order": 4461, "emoji": "🪪"}, {"tags": ["atm", "automated", "bank", "cash", "money", "sign", "teller"], "order": 4462, "emoji": "🏧"}, {"tags": ["bin", "litter", "litterbin", "sign"], "order": 4463, "emoji": "🚮"}, {"tags": ["drinking", "potable", "water"], "order": 4464, "emoji": "🚰"}, {"tags": ["access", "handicap", "symbol", "wheelchair"], "order": 4465, "emoji": "♿️"}, {"tags": ["bathroom", "lavatory", "man", "men’s", "restroom", "room", "toilet", "wc"], "order": 4466, "emoji": "🚹️"}, {"tags": ["bathroom", "lavatory", "restroom", "room", "toilet", "wc", "woman", "women’s"], "order": 4467, "emoji": "🚺️"}, {"tags": ["bathroom", "lavatory", "toilet", "wc"], "order": 4468, "emoji": "🚻"}, {"tags": ["baby", "changing", "symbol"], "order": 4469, "emoji": "🚼️"}, {"tags": ["bathroom", "closet", "lavatory", "restroom", "toilet", "water", "wc"], "order": 4470, "emoji": "🚾"}, {"tags": ["control", "passport"], "order": 4471, "emoji": "🛂"}, {"tags": ["packing"], "order": 4472, "emoji": "🛃"}, {"tags": ["arrived", "baggage", "bags", "case", "checked", "claim", "journey", "packing", "plane", "ready", "travel", "trip"], "order": 4473, "emoji": "🛄"}, {"tags": ["baggage", "case", "left", "locker", "luggage"], "order": 4474, "emoji": "🛅"}, {"tags": ["caution"], "order": 4476, "emoji": "⚠️"}, {"tags": ["child", "children", "crossing", "pedestrian", "traffic"], "order": 4477, "emoji": "🚸"}, {"tags": ["do", "entry", "fail", "forbidden", "no", "not", "pass", "prohibited", "traffic"], "order": 4478, "emoji": "⛔️"}, {"tags": ["entry", "forbidden", "no", "not", "smoke"], "order": 4479, "emoji": "🚫"}, {"tags": ["bicycle", "bicycles", "bike", "forbidden", "no", "not", "prohibited"], "order": 4480, "emoji": "🚳"}, {"tags": ["forbidden", "no", "not", "prohibited", "smoke", "smoking"], "order": 4481, "emoji": "🚭️"}, {"tags": ["forbidden", "litter", "littering", "no", "not", "prohibited"], "order": 4482, "emoji": "🚯"}, {"tags": ["dry", "non-drinking", "non-potable", "prohibited", "water"], "order": 4483, "emoji": "🚱"}, {"tags": ["forbidden", "no", "not", "pedestrian", "pedestrians", "prohibited"], "order": 4484, "emoji": "🚷"}, {"tags": ["cell", "forbidden", "mobile", "no", "not", "phone", "phones", "prohibited", "telephone"], "order": 4485, "emoji": "📵"}, {"tags": ["18", "age", "eighteen", "forbidden", "no", "not", "one", "prohibited", "restriction", "underage"], "order": 4486, "emoji": "🔞"}, {"tags": ["sign"], "order": 4488, "emoji": "☢️"}, {"tags": ["sign"], "order": 4490, "emoji": "☣️"}, {"tags": ["arrow", "cardinal", "direction", "north", "up"], "order": 4492, "emoji": "⬆️"}, {"tags": ["arrow", "direction", "intercardinal", "northeast", "up-right"], "order": 4494, "emoji": "↗️"}, {"tags": ["arrow", "cardinal", "direction", "east", "right"], "order": 4496, "emoji": "➡️"}, {"tags": ["arrow", "direction", "down-right", "intercardinal", "southeast"], "order": 4498, "emoji": "↘️"}, {"tags": ["arrow", "cardinal", "direction", "down", "south"], "order": 4500, "emoji": "⬇️"}, {"tags": ["arrow", "direction", "down-left", "intercardinal", "southwest"], "order": 4502, "emoji": "↙️"}, {"tags": ["arrow", "cardinal", "direction", "left", "west"], "order": 4504, "emoji": "⬅️"}, {"tags": ["arrow", "direction", "intercardinal", "northwest", "up-left"], "order": 4506, "emoji": "↖️"}, {"tags": ["arrow", "up-down"], "order": 4508, "emoji": "↕️"}, {"tags": ["arrow", "left-right"], "order": 4510, "emoji": "↔️"}, {"tags": ["arrow", "curving", "left", "right"], "order": 4512, "emoji": "↩️"}, {"tags": ["arrow", "curving", "left", "right"], "order": 4514, "emoji": "↪️"}, {"tags": ["arrow", "curving", "right", "up"], "order": 4516, "emoji": "⤴️"}, {"tags": ["arrow", "curving", "down", "right"], "order": 4518, "emoji": "⤵️"}, {"tags": ["arrow", "arrows", "clockwise", "refresh", "reload", "vertical"], "order": 4519, "emoji": "🔃"}, {"tags": ["again", "anticlockwise", "arrow", "arrows", "button", "counterclockwise", "deja", "refresh", "rewindershins", "vu"], "order": 4520, "emoji": "🔄"}, {"tags": ["arrow", "back"], "order": 4521, "emoji": "🔙"}, {"tags": ["arrow", "end"], "order": 4522, "emoji": "🔚"}, {"tags": ["arrow", "mark", "on!"], "order": 4523, "emoji": "🔛"}, {"tags": ["arrow", "brb", "omw", "soon"], "order": 4524, "emoji": "🔜"}, {"tags": ["arrow", "homie", "top", "up"], "order": 4525, "emoji": "🔝"}, {"tags": ["place", "pray", "religion", "worship"], "order": 4526, "emoji": "🛐"}, {"tags": ["atheist", "atom", "symbol"], "order": 4528, "emoji": "⚛️"}, {"tags": ["hindu", "religion"], "order": 4530, "emoji": "🕉️"}, {"tags": ["david", "jew", "jewish", "judaism", "religion", "star"], "order": 4532, "emoji": "✡️"}, {"tags": ["buddhist", "dharma", "religion", "wheel"], "order": 4534, "emoji": "☸️"}, {"tags": ["difficult", "lives", "religion", "tao", "taoist", "total", "yang", "yin", "yinyang"], "order": 4536, "emoji": "☯️"}, {"tags": ["christ", "christian", "cross", "latin", "religion"], "order": 4538, "emoji": "✝️"}, {"tags": ["christian", "cross", "orthodox", "religion"], "order": 4540, "emoji": "☦️"}, {"tags": ["crescent", "islam", "muslim", "ramadan", "religion", "star"], "order": 4542, "emoji": "☪️"}, {"tags": ["healing", "peace", "peaceful", "symbol"], "order": 4544, "emoji": "☮️"}, {"tags": ["candelabrum", "candlestick", "hanukkah", "jewish", "judaism", "religion"], "order": 4545, "emoji": "🕎"}, {"tags": ["dotted", "fortune", "jewish", "judaism", "six-pointed", "star"], "order": 4546, "emoji": "🔯"}, {"tags": ["deg", "fateh", "khalsa", "religion", "sikh", "sikhism", "tegh"], "order": 4547, "emoji": "🪯"}, {"tags": ["aries", "horoscope", "ram", "zodiac"], "order": 4548, "emoji": "♈️"}, {"tags": ["bull", "horoscope", "ox", "taurus", "zodiac"], "order": 4549, "emoji": "♉️"}, {"tags": ["gemini", "horoscope", "twins", "zodiac"], "order": 4550, "emoji": "♊️"}, {"tags": ["cancer", "crab", "horoscope", "zodiac"], "order": 4551, "emoji": "♋️"}, {"tags": ["horoscope", "leo", "lion", "zodiac"], "order": 4552, "emoji": "♌️"}, {"tags": ["horoscope", "virgo", "zodiac"], "order": 4553, "emoji": "♍️"}, {"tags": ["balance", "horoscope", "justice", "libra", "scales", "zodiac"], "order": 4554, "emoji": "♎️"}, {"tags": ["horoscope", "scorpio", "scorpion", "scorpius", "zodiac"], "order": 4555, "emoji": "♏️"}, {"tags": ["archer", "horoscope", "sagittarius", "zodiac"], "order": 4556, "emoji": "♐️"}, {"tags": ["capricorn", "goat", "horoscope", "zodiac"], "order": 4557, "emoji": "♑️"}, {"tags": ["aquarius", "bearer", "horoscope", "water", "zodiac"], "order": 4558, "emoji": "♒️"}, {"tags": ["fish", "horoscope", "pisces", "zodiac"], "order": 4559, "emoji": "♓️"}, {"tags": ["bearer", "ophiuchus", "serpent", "snake", "zodiac"], "order": 4560, "emoji": "⛎️"}, {"tags": ["arrow", "button", "crossed", "shuffle", "tracks"], "order": 4561, "emoji": "🔀"}, {"tags": ["arrow", "button", "clockwise", "repeat"], "order": 4562, "emoji": "🔁"}, {"tags": ["arrow", "button", "clockwise", "once", "repeat", "single"], "order": 4563, "emoji": "🔂"}, {"tags": ["arrow", "button", "play", "right", "triangle"], "order": 4565, "emoji": "▶️"}, {"tags": ["arrow", "button", "double", "fast", "fast-forward", "forward"], "order": 4566, "emoji": "⏩️"}, {"tags": ["arrow", "button", "next", "scene", "track", "triangle"], "order": 4568, "emoji": "⏭️"}, {"tags": ["arrow", "button", "pause", "play", "right", "triangle"], "order": 4570, "emoji": "⏯️"}, {"tags": ["arrow", "button", "left", "reverse", "triangle"], "order": 4572, "emoji": "◀️"}, {"tags": ["arrow", "button", "double", "fast", "reverse", "rewind"], "order": 4573, "emoji": "⏪️"}, {"tags": ["arrow", "button", "last", "previous", "scene", "track", "triangle"], "order": 4575, "emoji": "⏮️"}, {"tags": ["arrow", "button", "red", "up", "upwards"], "order": 4576, "emoji": "🔼"}, {"tags": ["arrow", "button", "double", "fast", "up"], "order": 4577, "emoji": "⏫️"}, {"tags": ["arrow", "button", "down", "downwards", "red"], "order": 4578, "emoji": "🔽"}, {"tags": ["arrow", "button", "double", "down", "fast"], "order": 4579, "emoji": "⏬️"}, {"tags": ["bar", "button", "double", "pause", "vertical"], "order": 4581, "emoji": "⏸️"}, {"tags": ["button", "square", "stop"], "order": 4583, "emoji": "⏹️"}, {"tags": ["button", "circle", "record"], "order": 4585, "emoji": "⏺️"}, {"tags": ["button", "eject"], "order": 4587, "emoji": "⏏️"}, {"tags": ["camera", "film", "movie"], "order": 4588, "emoji": "🎦"}, {"tags": ["brightness", "button", "dim", "low"], "order": 4589, "emoji": "🔅"}, {"tags": ["bright", "brightness", "button", "light"], "order": 4590, "emoji": "🔆"}, {"tags": ["antenna", "bar", "bars", "cell", "communication", "mobile", "phone", "signal", "telephone"], "order": 4591, "emoji": "📶"}, {"tags": ["broadband", "computer", "connectivity", "hotspot", "internet", "network", "router", "smartphone", "wi-fi", "wifi", "wlan"], "order": 4592, "emoji": "🛜"}, {"tags": ["cell", "communication", "mobile", "mode", "phone", "telephone", "vibration"], "order": 4593, "emoji": "📳"}, {"tags": ["cell", "mobile", "off", "phone", "telephone"], "order": 4594, "emoji": "📴"}, {"tags": ["female", "sign", "woman"], "order": 4596, "emoji": "♀️"}, {"tags": ["male", "man", "sign"], "order": 4598, "emoji": "♂️"}, {"tags": ["symbol", "transgender"], "order": 4600, "emoji": "⚧️"}, {"tags": ["cancel", "multiplication", "sign", "x", "×"], "order": 4602, "emoji": "✖️"}, {"tags": ["+"], "order": 4603, "emoji": "➕️"}, {"tags": ["-", "heavy", "math", "sign", "−"], "order": 4604, "emoji": "➖️"}, {"tags": ["division", "heavy", "math", "sign", "÷"], "order": 4605, "emoji": "➗️"}, {"tags": ["answer", "equal", "equality", "equals", "heavy", "math", "sign"], "order": 4606, "emoji": "🟰"}, {"tags": ["forever", "unbounded", "universal"], "order": 4608, "emoji": "♾️"}, {"tags": ["!", "!!", "bangbang", "double", "exclamation", "mark", "punctuation"], "order": 4610, "emoji": "‼️"}, {"tags": ["!", "!?", "?", "exclamation", "interrobang", "mark", "punctuation", "question"], "order": 4612, "emoji": "⁉️"}, {"tags": ["?", "mark", "punctuation", "question", "red"], "order": 4613, "emoji": "❓️"}, {"tags": ["?", "mark", "outlined", "punctuation", "question", "white"], "order": 4614, "emoji": "❔️"}, {"tags": ["!", "exclamation", "mark", "outlined", "punctuation", "white"], "order": 4615, "emoji": "❕️"}, {"tags": ["!", "exclamation", "mark", "punctuation", "red"], "order": 4616, "emoji": "❗️"}, {"tags": ["dash", "punctuation", "wavy"], "order": 4618, "emoji": "〰️"}, {"tags": ["bank", "currency", "exchange", "money"], "order": 4619, "emoji": "💱"}, {"tags": ["billion", "cash", "charge", "currency", "dollar", "heavy", "million", "money", "pay", "sign"], "order": 4620, "emoji": "💲"}, {"tags": ["aesculapius", "medical", "medicine", "staff", "symbol"], "order": 4622, "emoji": "⚕️"}, {"tags": ["recycle", "recycling", "symbol"], "order": 4624, "emoji": "♻️"}, {"tags": ["knights"], "order": 4626, "emoji": "⚜️"}, {"tags": ["anchor", "emblem", "poseidon", "ship", "tool", "trident"], "order": 4627, "emoji": "🔱"}, {"tags": ["badge", "name"], "order": 4628, "emoji": "📛"}, {"tags": ["beginner", "chevron", "green", "japanese", "leaf", "symbol", "tool", "yellow"], "order": 4629, "emoji": "🔰"}, {"tags": ["circle", "heavy", "hollow", "large", "o", "red"], "order": 4630, "emoji": "⭕️"}, {"tags": ["button", "check", "checked", "checkmark", "complete", "completed", "done", "fixed", "mark", "tick", "✓"], "order": 4631, "emoji": "✅️"}, {"tags": ["ballot", "box", "check", "checked", "done", "off", "tick", "✓"], "order": 4633, "emoji": "☑️"}, {"tags": ["check", "checked", "checkmark", "done", "heavy", "mark", "tick", "✓"], "order": 4635, "emoji": "✔️"}, {"tags": ["cancel", "cross", "mark", "multiplication", "multiply", "x", "×"], "order": 4636, "emoji": "❌️"}, {"tags": ["button", "cross", "mark", "multiplication", "multiply", "square", "x", "×"], "order": 4637, "emoji": "❎️"}, {"tags": ["curl", "curly", "loop"], "order": 4638, "emoji": "➰️"}, {"tags": ["curl", "curly", "double", "loop"], "order": 4639, "emoji": "➿️"}, {"tags": ["alternation", "mark", "part"], "order": 4641, "emoji": "〽️"}, {"tags": ["*", "asterisk", "eight-spoked"], "order": 4643, "emoji": "✳️"}, {"tags": ["*", "eight-pointed", "star"], "order": 4645, "emoji": "✴️"}, {"tags": ["*"], "order": 4647, "emoji": "❇️"}, {"tags": ["c"], "order": 4649, "emoji": "©️"}, {"tags": ["r"], "order": 4651, "emoji": "®️"}, {"tags": ["mark", "tm", "trade", "trademark"], "order": 4653, "emoji": "™️"}, {"tags": ["drip", "holi", "ink", "liquid", "mess", "paint", "spill", "stain"], "order": 4654, "emoji": "🫟"}, {"tags": ["keycap"], "order": 4655, "emoji": "#️⃣"}, {"tags": ["keycap"], "order": 4657, "emoji": "*️⃣"}, {"tags": ["keycap"], "order": 4659, "emoji": "0️⃣"}, {"tags": ["keycap"], "order": 4661, "emoji": "1️⃣"}, {"tags": ["keycap"], "order": 4663, "emoji": "2️⃣"}, {"tags": ["keycap"], "order": 4665, "emoji": "3️⃣"}, {"tags": ["keycap"], "order": 4667, "emoji": "4️⃣"}, {"tags": ["keycap"], "order": 4669, "emoji": "5️⃣"}, {"tags": ["keycap"], "order": 4671, "emoji": "6️⃣"}, {"tags": ["keycap"], "order": 4673, "emoji": "7️⃣"}, {"tags": ["keycap"], "order": 4675, "emoji": "8️⃣"}, {"tags": ["keycap"], "order": 4677, "emoji": "9️⃣"}, {"tags": ["keycap"], "order": 4679, "emoji": "🔟"}, {"tags": ["abcd", "input", "latin", "letters", "uppercase"], "order": 4680, "emoji": "🔠"}, {"tags": ["abcd", "input", "latin", "letters", "lowercase"], "order": 4681, "emoji": "🔡"}, {"tags": ["1234", "input", "numbers"], "order": 4682, "emoji": "🔢"}, {"tags": ["%", "&", "input", "symbols", "♪", "〒"], "order": 4683, "emoji": "🔣"}, {"tags": ["abc", "alphabet", "input", "latin", "letters"], "order": 4684, "emoji": "🔤"}, {"tags": ["blood", "button", "type"], "order": 4686, "emoji": "🅰️"}, {"tags": ["ab", "blood", "button", "type"], "order": 4687, "emoji": "🆎"}, {"tags": ["b", "blood", "button", "type"], "order": 4689, "emoji": "🅱️"}, {"tags": ["button", "cl"], "order": 4690, "emoji": "🆑"}, {"tags": ["button", "cool"], "order": 4691, "emoji": "🆒"}, {"tags": ["button", "free"], "order": 4692, "emoji": "🆓"}, {"tags": ["i"], "order": 4694, "emoji": "ℹ️"}, {"tags": ["button", "id", "identity"], "order": 4695, "emoji": "🆔"}, {"tags": ["circle", "circled", "m"], "order": 4697, "emoji": "Ⓜ️"}, {"tags": ["button", "new"], "order": 4698, "emoji": "🆕"}, {"tags": ["button", "ng"], "order": 4699, "emoji": "🆖"}, {"tags": ["blood", "button", "o", "type"], "order": 4701, "emoji": "🅾️"}, {"tags": ["button", "ok", "okay"], "order": 4702, "emoji": "🆗"}, {"tags": ["button", "p", "parking"], "order": 4704, "emoji": "🅿️"}, {"tags": ["button", "help", "sos"], "order": 4705, "emoji": "🆘"}, {"tags": ["button", "mark", "up", "up!"], "order": 4706, "emoji": "🆙"}, {"tags": ["button", "versus", "vs"], "order": 4707, "emoji": "🆚"}, {"tags": ["button", "here", "japanese", "katakana"], "order": 4708, "emoji": "🈁"}, {"tags": ["button", "charge", "japanese", "katakana", "service"], "order": 4710, "emoji": "🈂️"}, {"tags": ["amount", "button", "ideograph", "japanese", "monthly"], "order": 4712, "emoji": "🈷️"}, {"tags": ["button", "charge", "free", "ideograph", "japanese", "not"], "order": 4713, "emoji": "🈶"}, {"tags": ["button", "ideograph", "japanese", "reserved"], "order": 4714, "emoji": "🈯️"}, {"tags": ["bargain", "button", "ideograph", "japanese"], "order": 4715, "emoji": "🉐"}, {"tags": ["button", "discount", "ideograph", "japanese"], "order": 4716, "emoji": "🈹"}, {"tags": ["button", "charge", "free", "ideograph", "japanese"], "order": 4717, "emoji": "🈚️"}, {"tags": ["button", "ideograph", "japanese", "prohibited"], "order": 4718, "emoji": "🈲"}, {"tags": ["acceptable", "button", "ideograph", "japanese"], "order": 4719, "emoji": "🉑"}, {"tags": ["application", "button", "ideograph", "japanese"], "order": 4720, "emoji": "🈸"}, {"tags": ["button", "grade", "ideograph", "japanese", "passing"], "order": 4721, "emoji": "🈴"}, {"tags": ["button", "ideograph", "japanese", "vacancy"], "order": 4722, "emoji": "🈳"}, {"tags": ["button", "congratulations", "ideograph", "japanese"], "order": 4724, "emoji": "㊗️"}, {"tags": ["button", "ideograph", "japanese", "secret"], "order": 4726, "emoji": "㊙️"}, {"tags": ["business", "button", "ideograph", "japanese", "open"], "order": 4727, "emoji": "🈺"}, {"tags": ["button", "ideograph", "japanese", "no", "vacancy"], "order": 4728, "emoji": "🈵"}, {"tags": ["circle", "geometric", "red"], "order": 4729, "emoji": "🔴"}, {"tags": ["circle", "orange"], "order": 4730, "emoji": "🟠"}, {"tags": ["circle", "yellow"], "order": 4731, "emoji": "🟡"}, {"tags": ["circle", "green"], "order": 4732, "emoji": "🟢"}, {"tags": ["blue", "circle", "geometric"], "order": 4733, "emoji": "🔵"}, {"tags": ["circle", "purple"], "order": 4734, "emoji": "🟣"}, {"tags": ["brown", "circle"], "order": 4735, "emoji": "🟤"}, {"tags": ["black", "circle", "geometric"], "order": 4736, "emoji": "⚫️"}, {"tags": ["circle", "geometric", "white"], "order": 4737, "emoji": "⚪️"}, {"tags": ["card", "penalty", "red", "square"], "order": 4738, "emoji": "🟥"}, {"tags": ["orange", "square"], "order": 4739, "emoji": "🟧"}, {"tags": ["card", "penalty", "square", "yellow"], "order": 4740, "emoji": "🟨"}, {"tags": ["green", "square"], "order": 4741, "emoji": "🟩"}, {"tags": ["blue", "square"], "order": 4742, "emoji": "🟦"}, {"tags": ["purple", "square"], "order": 4743, "emoji": "🟪"}, {"tags": ["brown", "square"], "order": 4744, "emoji": "🟫"}, {"tags": ["black", "geometric", "large", "square"], "order": 4745, "emoji": "⬛️"}, {"tags": ["geometric", "large", "square", "white"], "order": 4746, "emoji": "⬜️"}, {"tags": ["black", "geometric", "medium", "square"], "order": 4748, "emoji": "◼️"}, {"tags": ["geometric", "medium", "square", "white"], "order": 4750, "emoji": "◻️"}, {"tags": ["black", "geometric", "medium-small", "square"], "order": 4751, "emoji": "◾️"}, {"tags": ["geometric", "medium-small", "square", "white"], "order": 4752, "emoji": "◽️"}, {"tags": ["black", "geometric", "small", "square"], "order": 4754, "emoji": "▪️"}, {"tags": ["geometric", "small", "square", "white"], "order": 4756, "emoji": "▫️"}, {"tags": ["diamond", "geometric", "large", "orange"], "order": 4757, "emoji": "🔶"}, {"tags": ["blue", "diamond", "geometric", "large"], "order": 4758, "emoji": "🔷"}, {"tags": ["diamond", "geometric", "orange", "small"], "order": 4759, "emoji": "🔸"}, {"tags": ["blue", "diamond", "geometric", "small"], "order": 4760, "emoji": "🔹"}, {"tags": ["geometric", "pointed", "red", "triangle", "up"], "order": 4761, "emoji": "🔺"}, {"tags": ["down", "geometric", "pointed", "red", "triangle"], "order": 4762, "emoji": "🔻"}, {"tags": ["comic", "diamond", "dot", "geometric"], "order": 4763, "emoji": "💠"}, {"tags": ["button", "geometric", "radio"], "order": 4764, "emoji": "🔘"}, {"tags": ["button", "geometric", "outlined", "square", "white"], "order": 4765, "emoji": "🔳"}, {"tags": ["black", "button", "geometric", "square"], "order": 4766, "emoji": "🔲"}, {"tags": ["checkered", "chequered", "finish", "flag", "flags", "game", "race", "racing", "sport", "win"], "order": 4767, "emoji": "🏁"}, {"tags": ["construction", "flag", "golf", "post", "triangular"], "order": 4768, "emoji": "🚩"}, {"tags": ["celebration", "cross", "crossed", "flags", "japanese"], "order": 4769, "emoji": "🎌"}, {"tags": ["black", "flag", "waving"], "order": 4770, "emoji": "🏴"}, {"tags": ["flag", "waving", "white"], "order": 4772, "emoji": "🏳️"}, {"tags": ["bisexual", "flag", "gay", "genderqueer", "glbt", "glbtq", "lesbian", "lgbt", "lgbtq", "lgbtqia", "pride", "queer", "rainbow", "trans", "transgender"], "order": 4773, "emoji": "🏳️‍🌈"}, {"tags": ["blue", "flag", "light", "pink", "transgender", "white"], "order": 4775, "emoji": "🏳️‍⚧️"}, {"tags": ["flag", "jolly", "pirate", "plunder", "roger", "treasure"], "order": 4779, "emoji": "🏴‍☠️"}, {"tags": ["AC", "flag"], "order": 4781, "emoji": "🇦🇨"}, {"tags": ["AD", "flag"], "order": 4782, "emoji": "🇦🇩"}, {"tags": ["AE", "flag"], "order": 4783, "emoji": "🇦🇪"}, {"tags": ["AF", "flag"], "order": 4784, "emoji": "🇦🇫"}, {"tags": ["AG", "flag"], "order": 4785, "emoji": "🇦🇬"}, {"tags": ["AI", "flag"], "order": 4786, "emoji": "🇦🇮"}, {"tags": ["AL", "flag"], "order": 4787, "emoji": "🇦🇱"}, {"tags": ["AM", "flag"], "order": 4788, "emoji": "🇦🇲"}, {"tags": ["AO", "flag"], "order": 4789, "emoji": "🇦🇴"}, {"tags": ["AQ", "flag"], "order": 4790, "emoji": "🇦🇶"}, {"tags": ["AR", "flag"], "order": 4791, "emoji": "🇦🇷"}, {"tags": ["AS", "flag"], "order": 4792, "emoji": "🇦🇸"}, {"tags": ["AT", "flag"], "order": 4793, "emoji": "🇦🇹"}, {"tags": ["AU", "flag"], "order": 4794, "emoji": "🇦🇺"}, {"tags": ["AW", "flag"], "order": 4795, "emoji": "🇦🇼"}, {"tags": ["AX", "flag"], "order": 4796, "emoji": "🇦🇽"}, {"tags": ["AZ", "flag"], "order": 4797, "emoji": "🇦🇿"}, {"tags": ["BA", "flag"], "order": 4798, "emoji": "🇧🇦"}, {"tags": ["BB", "flag"], "order": 4799, "emoji": "🇧🇧"}, {"tags": ["BD", "flag"], "order": 4800, "emoji": "🇧🇩"}, {"tags": ["BE", "flag"], "order": 4801, "emoji": "🇧🇪"}, {"tags": ["BF", "flag"], "order": 4802, "emoji": "🇧🇫"}, {"tags": ["BG", "flag"], "order": 4803, "emoji": "🇧🇬"}, {"tags": ["BH", "flag"], "order": 4804, "emoji": "🇧🇭"}, {"tags": ["BI", "flag"], "order": 4805, "emoji": "🇧🇮"}, {"tags": ["BJ", "flag"], "order": 4806, "emoji": "🇧🇯"}, {"tags": ["BL", "flag"], "order": 4807, "emoji": "🇧🇱"}, {"tags": ["BM", "flag"], "order": 4808, "emoji": "🇧🇲"}, {"tags": ["BN", "flag"], "order": 4809, "emoji": "🇧🇳"}, {"tags": ["BO", "flag"], "order": 4810, "emoji": "🇧🇴"}, {"tags": ["BQ", "flag"], "order": 4811, "emoji": "🇧🇶"}, {"tags": ["BR", "flag"], "order": 4812, "emoji": "🇧🇷"}, {"tags": ["BS", "flag"], "order": 4813, "emoji": "🇧🇸"}, {"tags": ["BT", "flag"], "order": 4814, "emoji": "🇧🇹"}, {"tags": ["BV", "flag"], "order": 4815, "emoji": "🇧🇻"}, {"tags": ["BW", "flag"], "order": 4816, "emoji": "🇧🇼"}, {"tags": ["BY", "flag"], "order": 4817, "emoji": "🇧🇾"}, {"tags": ["BZ", "flag"], "order": 4818, "emoji": "🇧🇿"}, {"tags": ["CA", "flag"], "order": 4819, "emoji": "🇨🇦"}, {"tags": ["CC", "flag"], "order": 4820, "emoji": "🇨🇨"}, {"tags": ["CD", "flag"], "order": 4821, "emoji": "🇨🇩"}, {"tags": ["CF", "flag"], "order": 4822, "emoji": "🇨🇫"}, {"tags": ["CG", "flag"], "order": 4823, "emoji": "🇨🇬"}, {"tags": ["CH", "flag"], "order": 4824, "emoji": "🇨🇭"}, {"tags": ["CI", "flag"], "order": 4825, "emoji": "🇨🇮"}, {"tags": ["CK", "flag"], "order": 4826, "emoji": "🇨🇰"}, {"tags": ["CL", "flag"], "order": 4827, "emoji": "🇨🇱"}, {"tags": ["CM", "flag"], "order": 4828, "emoji": "🇨🇲"}, {"tags": ["CN", "flag"], "order": 4829, "emoji": "🇨🇳"}, {"tags": ["CO", "flag"], "order": 4830, "emoji": "🇨🇴"}, {"tags": ["CP", "flag"], "order": 4831, "emoji": "🇨🇵"}, {"tags": ["CQ", "flag"], "order": 4832, "emoji": "🇨🇶"}, {"tags": ["CR", "flag"], "order": 4833, "emoji": "🇨🇷"}, {"tags": ["CU", "flag"], "order": 4834, "emoji": "🇨🇺"}, {"tags": ["CV", "flag"], "order": 4835, "emoji": "🇨🇻"}, {"tags": ["CW", "flag"], "order": 4836, "emoji": "🇨🇼"}, {"tags": ["CX", "flag"], "order": 4837, "emoji": "🇨🇽"}, {"tags": ["CY", "flag"], "order": 4838, "emoji": "🇨🇾"}, {"tags": ["CZ", "flag"], "order": 4839, "emoji": "🇨🇿"}, {"tags": ["DE", "flag"], "order": 4840, "emoji": "🇩🇪"}, {"tags": ["DG", "flag"], "order": 4841, "emoji": "🇩🇬"}, {"tags": ["DJ", "flag"], "order": 4842, "emoji": "🇩🇯"}, {"tags": ["DK", "flag"], "order": 4843, "emoji": "🇩🇰"}, {"tags": ["DM", "flag"], "order": 4844, "emoji": "🇩🇲"}, {"tags": ["DO", "flag"], "order": 4845, "emoji": "🇩🇴"}, {"tags": ["DZ", "flag"], "order": 4846, "emoji": "🇩🇿"}, {"tags": ["EA", "flag"], "order": 4847, "emoji": "🇪🇦"}, {"tags": ["EC", "flag"], "order": 4848, "emoji": "🇪🇨"}, {"tags": ["EE", "flag"], "order": 4849, "emoji": "🇪🇪"}, {"tags": ["EG", "flag"], "order": 4850, "emoji": "🇪🇬"}, {"tags": ["EH", "flag"], "order": 4851, "emoji": "🇪🇭"}, {"tags": ["ER", "flag"], "order": 4852, "emoji": "🇪🇷"}, {"tags": ["ES", "flag"], "order": 4853, "emoji": "🇪🇸"}, {"tags": ["ET", "flag"], "order": 4854, "emoji": "🇪🇹"}, {"tags": ["EU", "flag"], "order": 4855, "emoji": "🇪🇺"}, {"tags": ["FI", "flag"], "order": 4856, "emoji": "🇫🇮"}, {"tags": ["FJ", "flag"], "order": 4857, "emoji": "🇫🇯"}, {"tags": ["FK", "flag"], "order": 4858, "emoji": "🇫🇰"}, {"tags": ["FM", "flag"], "order": 4859, "emoji": "🇫🇲"}, {"tags": ["FO", "flag"], "order": 4860, "emoji": "🇫🇴"}, {"tags": ["FR", "flag"], "order": 4861, "emoji": "🇫🇷"}, {"tags": ["GA", "flag"], "order": 4862, "emoji": "🇬🇦"}, {"tags": ["GB", "flag"], "order": 4863, "emoji": "🇬🇧"}, {"tags": ["GD", "flag"], "order": 4864, "emoji": "🇬🇩"}, {"tags": ["GE", "flag"], "order": 4865, "emoji": "🇬🇪"}, {"tags": ["GF", "flag"], "order": 4866, "emoji": "🇬🇫"}, {"tags": ["GG", "flag"], "order": 4867, "emoji": "🇬🇬"}, {"tags": ["GH", "flag"], "order": 4868, "emoji": "🇬🇭"}, {"tags": ["GI", "flag"], "order": 4869, "emoji": "🇬🇮"}, {"tags": ["GL", "flag"], "order": 4870, "emoji": "🇬🇱"}, {"tags": ["GM", "flag"], "order": 4871, "emoji": "🇬🇲"}, {"tags": ["GN", "flag"], "order": 4872, "emoji": "🇬🇳"}, {"tags": ["GP", "flag"], "order": 4873, "emoji": "🇬🇵"}, {"tags": ["GQ", "flag"], "order": 4874, "emoji": "🇬🇶"}, {"tags": ["GR", "flag"], "order": 4875, "emoji": "🇬🇷"}, {"tags": ["GS", "flag"], "order": 4876, "emoji": "🇬🇸"}, {"tags": ["GT", "flag"], "order": 4877, "emoji": "🇬🇹"}, {"tags": ["GU", "flag"], "order": 4878, "emoji": "🇬🇺"}, {"tags": ["GW", "flag"], "order": 4879, "emoji": "🇬🇼"}, {"tags": ["GY", "flag"], "order": 4880, "emoji": "🇬🇾"}, {"tags": ["HK", "flag"], "order": 4881, "emoji": "🇭🇰"}, {"tags": ["HM", "flag"], "order": 4882, "emoji": "🇭🇲"}, {"tags": ["HN", "flag"], "order": 4883, "emoji": "🇭🇳"}, {"tags": ["HR", "flag"], "order": 4884, "emoji": "🇭🇷"}, {"tags": ["HT", "flag"], "order": 4885, "emoji": "🇭🇹"}, {"tags": ["HU", "flag"], "order": 4886, "emoji": "🇭🇺"}, {"tags": ["IC", "flag"], "order": 4887, "emoji": "🇮🇨"}, {"tags": ["ID", "flag"], "order": 4888, "emoji": "🇮🇩"}, {"tags": ["IE", "flag"], "order": 4889, "emoji": "🇮🇪"}, {"tags": ["IL", "flag"], "order": 4890, "emoji": "🇮🇱"}, {"tags": ["IM", "flag"], "order": 4891, "emoji": "🇮🇲"}, {"tags": ["IN", "flag"], "order": 4892, "emoji": "🇮🇳"}, {"tags": ["IO", "flag"], "order": 4893, "emoji": "🇮🇴"}, {"tags": ["IQ", "flag"], "order": 4894, "emoji": "🇮🇶"}, {"tags": ["IR", "flag"], "order": 4895, "emoji": "🇮🇷"}, {"tags": ["IS", "flag"], "order": 4896, "emoji": "🇮🇸"}, {"tags": ["IT", "flag"], "order": 4897, "emoji": "🇮🇹"}, {"tags": ["JE", "flag"], "order": 4898, "emoji": "🇯🇪"}, {"tags": ["JM", "flag"], "order": 4899, "emoji": "🇯🇲"}, {"tags": ["JO", "flag"], "order": 4900, "emoji": "🇯🇴"}, {"tags": ["JP", "flag"], "order": 4901, "emoji": "🇯🇵"}, {"tags": ["KE", "flag"], "order": 4902, "emoji": "🇰🇪"}, {"tags": ["KG", "flag"], "order": 4903, "emoji": "🇰🇬"}, {"tags": ["KH", "flag"], "order": 4904, "emoji": "🇰🇭"}, {"tags": ["KI", "flag"], "order": 4905, "emoji": "🇰🇮"}, {"tags": ["KM", "flag"], "order": 4906, "emoji": "🇰🇲"}, {"tags": ["KN", "flag"], "order": 4907, "emoji": "🇰🇳"}, {"tags": ["KP", "flag"], "order": 4908, "emoji": "🇰🇵"}, {"tags": ["KR", "flag"], "order": 4909, "emoji": "🇰🇷"}, {"tags": ["KW", "flag"], "order": 4910, "emoji": "🇰🇼"}, {"tags": ["KY", "flag"], "order": 4911, "emoji": "🇰🇾"}, {"tags": ["KZ", "flag"], "order": 4912, "emoji": "🇰🇿"}, {"tags": ["LA", "flag"], "order": 4913, "emoji": "🇱🇦"}, {"tags": ["LB", "flag"], "order": 4914, "emoji": "🇱🇧"}, {"tags": ["LC", "flag"], "order": 4915, "emoji": "🇱🇨"}, {"tags": ["LI", "flag"], "order": 4916, "emoji": "🇱🇮"}, {"tags": ["LK", "flag"], "order": 4917, "emoji": "🇱🇰"}, {"tags": ["LR", "flag"], "order": 4918, "emoji": "🇱🇷"}, {"tags": ["LS", "flag"], "order": 4919, "emoji": "🇱🇸"}, {"tags": ["LT", "flag"], "order": 4920, "emoji": "🇱🇹"}, {"tags": ["LU", "flag"], "order": 4921, "emoji": "🇱🇺"}, {"tags": ["LV", "flag"], "order": 4922, "emoji": "🇱🇻"}, {"tags": ["LY", "flag"], "order": 4923, "emoji": "🇱🇾"}, {"tags": ["MA", "flag"], "order": 4924, "emoji": "🇲🇦"}, {"tags": ["MC", "flag"], "order": 4925, "emoji": "🇲🇨"}, {"tags": ["MD", "flag"], "order": 4926, "emoji": "🇲🇩"}, {"tags": ["ME", "flag"], "order": 4927, "emoji": "🇲🇪"}, {"tags": ["MF", "flag"], "order": 4928, "emoji": "🇲🇫"}, {"tags": ["MG", "flag"], "order": 4929, "emoji": "🇲🇬"}, {"tags": ["MH", "flag"], "order": 4930, "emoji": "🇲🇭"}, {"tags": ["MK", "flag"], "order": 4931, "emoji": "🇲🇰"}, {"tags": ["ML", "flag"], "order": 4932, "emoji": "🇲🇱"}, {"tags": ["MM", "flag"], "order": 4933, "emoji": "🇲🇲"}, {"tags": ["MN", "flag"], "order": 4934, "emoji": "🇲🇳"}, {"tags": ["MO", "flag"], "order": 4935, "emoji": "🇲🇴"}, {"tags": ["MP", "flag"], "order": 4936, "emoji": "🇲🇵"}, {"tags": ["MQ", "flag"], "order": 4937, "emoji": "🇲🇶"}, {"tags": ["MR", "flag"], "order": 4938, "emoji": "🇲🇷"}, {"tags": ["MS", "flag"], "order": 4939, "emoji": "🇲🇸"}, {"tags": ["MT", "flag"], "order": 4940, "emoji": "🇲🇹"}, {"tags": ["MU", "flag"], "order": 4941, "emoji": "🇲🇺"}, {"tags": ["MV", "flag"], "order": 4942, "emoji": "🇲🇻"}, {"tags": ["MW", "flag"], "order": 4943, "emoji": "🇲🇼"}, {"tags": ["MX", "flag"], "order": 4944, "emoji": "🇲🇽"}, {"tags": ["MY", "flag"], "order": 4945, "emoji": "🇲🇾"}, {"tags": ["MZ", "flag"], "order": 4946, "emoji": "🇲🇿"}, {"tags": ["NA", "flag"], "order": 4947, "emoji": "🇳🇦"}, {"tags": ["NC", "flag"], "order": 4948, "emoji": "🇳🇨"}, {"tags": ["NE", "flag"], "order": 4949, "emoji": "🇳🇪"}, {"tags": ["NF", "flag"], "order": 4950, "emoji": "🇳🇫"}, {"tags": ["NG", "flag"], "order": 4951, "emoji": "🇳🇬"}, {"tags": ["NI", "flag"], "order": 4952, "emoji": "🇳🇮"}, {"tags": ["NL", "flag"], "order": 4953, "emoji": "🇳🇱"}, {"tags": ["NO", "flag"], "order": 4954, "emoji": "🇳🇴"}, {"tags": ["NP", "flag"], "order": 4955, "emoji": "🇳🇵"}, {"tags": ["NR", "flag"], "order": 4956, "emoji": "🇳🇷"}, {"tags": ["NU", "flag"], "order": 4957, "emoji": "🇳🇺"}, {"tags": ["NZ", "flag"], "order": 4958, "emoji": "🇳🇿"}, {"tags": ["OM", "flag"], "order": 4959, "emoji": "🇴🇲"}, {"tags": ["PA", "flag"], "order": 4960, "emoji": "🇵🇦"}, {"tags": ["PE", "flag"], "order": 4961, "emoji": "🇵🇪"}, {"tags": ["PF", "flag"], "order": 4962, "emoji": "🇵🇫"}, {"tags": ["PG", "flag"], "order": 4963, "emoji": "🇵🇬"}, {"tags": ["PH", "flag"], "order": 4964, "emoji": "🇵🇭"}, {"tags": ["PK", "flag"], "order": 4965, "emoji": "🇵🇰"}, {"tags": ["PL", "flag"], "order": 4966, "emoji": "🇵🇱"}, {"tags": ["PM", "flag"], "order": 4967, "emoji": "🇵🇲"}, {"tags": ["PN", "flag"], "order": 4968, "emoji": "🇵🇳"}, {"tags": ["PR", "flag"], "order": 4969, "emoji": "🇵🇷"}, {"tags": ["PS", "flag"], "order": 4970, "emoji": "🇵🇸"}, {"tags": ["PT", "flag"], "order": 4971, "emoji": "🇵🇹"}, {"tags": ["PW", "flag"], "order": 4972, "emoji": "🇵🇼"}, {"tags": ["PY", "flag"], "order": 4973, "emoji": "🇵🇾"}, {"tags": ["QA", "flag"], "order": 4974, "emoji": "🇶🇦"}, {"tags": ["RE", "flag"], "order": 4975, "emoji": "🇷🇪"}, {"tags": ["RO", "flag"], "order": 4976, "emoji": "🇷🇴"}, {"tags": ["RS", "flag"], "order": 4977, "emoji": "🇷🇸"}, {"tags": ["RU", "flag"], "order": 4978, "emoji": "🇷🇺"}, {"tags": ["RW", "flag"], "order": 4979, "emoji": "🇷🇼"}, {"tags": ["SA", "flag"], "order": 4980, "emoji": "🇸🇦"}, {"tags": ["SB", "flag"], "order": 4981, "emoji": "🇸🇧"}, {"tags": ["SC", "flag"], "order": 4982, "emoji": "🇸🇨"}, {"tags": ["SD", "flag"], "order": 4983, "emoji": "🇸🇩"}, {"tags": ["SE", "flag"], "order": 4984, "emoji": "🇸🇪"}, {"tags": ["SG", "flag"], "order": 4985, "emoji": "🇸🇬"}, {"tags": ["SH", "flag"], "order": 4986, "emoji": "🇸🇭"}, {"tags": ["SI", "flag"], "order": 4987, "emoji": "🇸🇮"}, {"tags": ["SJ", "flag"], "order": 4988, "emoji": "🇸🇯"}, {"tags": ["SK", "flag"], "order": 4989, "emoji": "🇸🇰"}, {"tags": ["SL", "flag"], "order": 4990, "emoji": "🇸🇱"}, {"tags": ["SM", "flag"], "order": 4991, "emoji": "🇸🇲"}, {"tags": ["SN", "flag"], "order": 4992, "emoji": "🇸🇳"}, {"tags": ["SO", "flag"], "order": 4993, "emoji": "🇸🇴"}, {"tags": ["SR", "flag"], "order": 4994, "emoji": "🇸🇷"}, {"tags": ["SS", "flag"], "order": 4995, "emoji": "🇸🇸"}, {"tags": ["ST", "flag"], "order": 4996, "emoji": "🇸🇹"}, {"tags": ["SV", "flag"], "order": 4997, "emoji": "🇸🇻"}, {"tags": ["SX", "flag"], "order": 4998, "emoji": "🇸🇽"}, {"tags": ["SY", "flag"], "order": 4999, "emoji": "🇸🇾"}, {"tags": ["SZ", "flag"], "order": 5000, "emoji": "🇸🇿"}, {"tags": ["TA", "flag"], "order": 5001, "emoji": "🇹🇦"}, {"tags": ["TC", "flag"], "order": 5002, "emoji": "🇹🇨"}, {"tags": ["TD", "flag"], "order": 5003, "emoji": "🇹🇩"}, {"tags": ["TF", "flag"], "order": 5004, "emoji": "🇹🇫"}, {"tags": ["TG", "flag"], "order": 5005, "emoji": "🇹🇬"}, {"tags": ["TH", "flag"], "order": 5006, "emoji": "🇹🇭"}, {"tags": ["TJ", "flag"], "order": 5007, "emoji": "🇹🇯"}, {"tags": ["TK", "flag"], "order": 5008, "emoji": "🇹🇰"}, {"tags": ["TL", "flag"], "order": 5009, "emoji": "🇹🇱"}, {"tags": ["TM", "flag"], "order": 5010, "emoji": "🇹🇲"}, {"tags": ["TN", "flag"], "order": 5011, "emoji": "🇹🇳"}, {"tags": ["TO", "flag"], "order": 5012, "emoji": "🇹🇴"}, {"tags": ["TR", "flag"], "order": 5013, "emoji": "🇹🇷"}, {"tags": ["TT", "flag"], "order": 5014, "emoji": "🇹🇹"}, {"tags": ["TV", "flag"], "order": 5015, "emoji": "🇹🇻"}, {"tags": ["TW", "flag"], "order": 5016, "emoji": "🇹🇼"}, {"tags": ["TZ", "flag"], "order": 5017, "emoji": "🇹🇿"}, {"tags": ["UA", "flag"], "order": 5018, "emoji": "🇺🇦"}, {"tags": ["UG", "flag"], "order": 5019, "emoji": "🇺🇬"}, {"tags": ["UM", "flag"], "order": 5020, "emoji": "🇺🇲"}, {"tags": ["UN", "flag"], "order": 5021, "emoji": "🇺🇳"}, {"tags": ["US", "flag"], "order": 5022, "emoji": "🇺🇸"}, {"tags": ["UY", "flag"], "order": 5023, "emoji": "🇺🇾"}, {"tags": ["UZ", "flag"], "order": 5024, "emoji": "🇺🇿"}, {"tags": ["VA", "flag"], "order": 5025, "emoji": "🇻🇦"}, {"tags": ["VC", "flag"], "order": 5026, "emoji": "🇻🇨"}, {"tags": ["VE", "flag"], "order": 5027, "emoji": "🇻🇪"}, {"tags": ["VG", "flag"], "order": 5028, "emoji": "🇻🇬"}, {"tags": ["VI", "flag"], "order": 5029, "emoji": "🇻🇮"}, {"tags": ["VN", "flag"], "order": 5030, "emoji": "🇻🇳"}, {"tags": ["VU", "flag"], "order": 5031, "emoji": "🇻🇺"}, {"tags": ["WF", "flag"], "order": 5032, "emoji": "🇼🇫"}, {"tags": ["WS", "flag"], "order": 5033, "emoji": "🇼🇸"}, {"tags": ["XK", "flag"], "order": 5034, "emoji": "🇽🇰"}, {"tags": ["YE", "flag"], "order": 5035, "emoji": "🇾🇪"}, {"tags": ["YT", "flag"], "order": 5036, "emoji": "🇾🇹"}, {"tags": ["ZA", "flag"], "order": 5037, "emoji": "🇿🇦"}, {"tags": ["ZM", "flag"], "order": 5038, "emoji": "🇿🇲"}, {"tags": ["ZW", "flag"], "order": 5039, "emoji": "🇿🇼"}, {"tags": ["flag", "gbeng"], "order": 5040, "emoji": "🏴󠁧󠁢󠁥󠁮󠁧󠁿"}, {"tags": ["flag", "gbsct"], "order": 5041, "emoji": "🏴󠁧󠁢󠁳󠁣󠁴󠁿"}, {"tags": ["flag", "gbwls"], "order": 5042, "emoji": "🏴󠁧󠁢󠁷󠁬󠁳󠁿"}] \ No newline at end of file diff --git a/src/zen/common/styles/zen-browser-container.css b/src/zen/common/styles/zen-browser-container.css index 5e29a4d0f..7c33d6831 100644 --- a/src/zen/common/styles/zen-browser-container.css +++ b/src/zen/common/styles/zen-browser-container.css @@ -22,12 +22,14 @@ } } + /* stylelint-disable-next-line media-query-no-invalid */ @media not -moz-pref("layout.css.prefers-color-scheme.content-override", 2) { & browser[type="content"] { color-scheme: env(-moz-content-preferred-color-scheme); } } + /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.theme.acrylic-elements") { & browser[type="content"] { /* For the rendering engine to apply layering optimizations. This @@ -37,6 +39,7 @@ } } + /* stylelint-disable-next-line media-query-no-invalid */ @media (not -moz-pref("zen.view.shift-down-site-on-hover")) and (not ((-moz-pref("zen.view.experimental-no-window-controls") or (not -moz-pref("zen.view.hide-window-controls"))) and -moz-pref("zen.view.use-single-toolbar"))) { .browserSidebarContainer:is(.deck-selected, [zen-split="true"]) .browserContainer { transition: margin var(--zen-hidden-toolbar-transition); diff --git a/src/zen/common/styles/zen-browser-ui.css b/src/zen/common/styles/zen-browser-ui.css index c3a0c46a0..75b49fc04 100644 --- a/src/zen/common/styles/zen-browser-ui.css +++ b/src/zen/common/styles/zen-browser-ui.css @@ -142,9 +142,10 @@ #zen-main-app-wrapper { background: var(--zen-themed-toolbar-bg-transparent); - /* See bug #8814, don't an overflow here as it causes issues + /* See bug #8814, don't add overflow here as it causes issues * with firefox's rendering of the tab bar */ + /* stylelint-disable-next-line media-query-no-invalid */ @media (-moz-pref("zen.view.grey-out-inactive-windows")) { &:-moz-window-inactive { background: InactiveCaption; @@ -155,6 +156,7 @@ z-index: 1; } + /* stylelint-disable-next-line media-query-no-invalid */ @media (-moz-windows-accent-color-in-titlebar) and ((-moz-windows-mica) or -moz-pref("browser.theme.windows.accent-color-in-tabs.enabled")) { background: ActiveCaption; color: CaptionText; @@ -207,6 +209,7 @@ } } + /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.widget.mac.mono-window-controls") { :root:not([window-modal-open="true"]) .titlebar-buttonbox-container { color: var(--toolbox-textcolor); @@ -220,7 +223,7 @@ /* Draw 3 dots as background to represent the window controls, all with the same cololr as the titlebar */ background-image: radial-gradient(circle, var(--zen-toolbar-element-bg) var(--zen-traffic-light-size), transparent 0.5px); - background-size: 20px 22px; + background-size: var(--icon-size-medium) 22px; background-position: 53% 50%; @media (-moz-mac-tahoe-theme) { diff --git a/src/zen/common/styles/zen-omnibox.css b/src/zen/common/styles/zen-omnibox.css index fba61b8de..d3ee11dbd 100644 --- a/src/zen/common/styles/zen-omnibox.css +++ b/src/zen/common/styles/zen-omnibox.css @@ -119,7 +119,7 @@ } #urlbar .urlbar-input { - border-radius: 0px !important; + border-radius: 0 !important; } #urlbar .urlbar-input-box { @@ -174,7 +174,7 @@ & #identity-box { order: 999; - margin: 0px !important; + margin: 0 !important; } } @@ -189,12 +189,14 @@ } } +/* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.urlbar.single-toolbar-show-copy-url", false) { :root[zen-single-toolbar="true"] #zen-copy-url-button { display: none !important; } } +/* stylelint-disable-next-line media-query-no-invalid */ @media not -moz-pref("zen.urlbar.show-pip-button") { #picture-in-picture-button { display: none !important; @@ -259,14 +261,17 @@ & .urlbar-background { --zen-urlbar-background-base: light-dark(#fbfbfb, color-mix(in srgb, hsl(0, 0%, 6.7%), var(--zen-colors-primary) 30%)); + /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.theme.acrylic-elements") { --zen-urlbar-background-transparent: color-mix(in srgb, var(--zen-urlbar-background-base) 70%, transparent 30%); } background-color: var(--zen-urlbar-background-transparent, var(--zen-urlbar-background-base)) !important; - box-shadow: 0px 30px 140px -15px light-dark(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.6)) !important; + box-shadow: 0 30px 140px -15px light-dark(rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.6)) !important; backdrop-filter: none !important; outline: 0.5px solid light-dark(rgba(0, 0, 0, 0.2), rgba(255, 255, 255, 0.2)) !important; outline-offset: var(--zen-urlbar-outline-offset) !important; + + /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.theme.acrylic-elements") { backdrop-filter: blur(42px) saturate(110%) brightness(0.25) contrast(100%) !important; } @@ -324,8 +329,8 @@ & > image { margin-top: auto; margin-bottom: auto; - height: 24px; /* double 12px */ - width: 24px; + height: var(--size-item-medium); /* double 12px */ + width: var(--size-item-medium); padding: 4px !important; &:hover { @@ -502,13 +507,14 @@ height: var(--urlbar-height) !important; margin-inline: 0.15rem !important; :root:not([zen-single-toolbar="true"]) & { - max-height: 32px !important; + max-height: var(--size-item-large) !important; min-height: unset !important; margin-block: -1px !important; } } } +/* stylelint-disable-next-line media-query-no-invalid */ @media not -moz-pref("zen.urlbar.show-protections-icon") { #tracking-protection-icon-container { display: none !important; @@ -573,8 +579,8 @@ & img { -moz-context-properties: fill; fill: currentColor; - width: 16px; - height: 16px; + width: var(--size-item-small); + height: var(--size-item-small); } &[hidden] { @@ -702,7 +708,7 @@ } #identity-box { - margin-inline-end: 0px; + margin-inline-end: 0; } } @@ -714,7 +720,7 @@ #urlbar-search-mode-indicator-title { font-weight: 600; - padding: 0px; + padding: 0; } /* These are buttons that we dont need to be @@ -727,6 +733,7 @@ display: none !important; } +/* stylelint-disable-next-line media-query-no-invalid */ @media not -moz-pref("zen.urlbar.show-contextual-id") { #userContext-icons { display: none !important; diff --git a/src/zen/common/styles/zen-overflowing-addons.css b/src/zen/common/styles/zen-overflowing-addons.css index 1d8d4aa24..cd68ea2f1 100644 --- a/src/zen/common/styles/zen-overflowing-addons.css +++ b/src/zen/common/styles/zen-overflowing-addons.css @@ -9,7 +9,7 @@ display: flex; gap: 8px; padding: 8px 2px; - padding-bottom: 0px; + padding-bottom: 0; & .unified-extensions-item { flex: 1; diff --git a/src/zen/common/styles/zen-panel-ui.css b/src/zen/common/styles/zen-panel-ui.css index a73437832..133085bf0 100644 --- a/src/zen/common/styles/zen-panel-ui.css +++ b/src/zen/common/styles/zen-panel-ui.css @@ -22,7 +22,7 @@ panel[type="arrow"]:not(#feature-callout) { transition-duration: 0s !important; &::part(content) { - /* Refrain from animating for now as we haven't found a + /* Refrain from animating for now as we haven't found a * way to properly animate the popup without having the mica * backdrop staying still while the popup animates */ animation: none !important; @@ -45,7 +45,7 @@ panel[type="arrow"]:not(#feature-callout) { /* Remove the shadow for the native panels, as macos already * adds the shadows to the window. This is specially important - * on Tahoe, where we *dont* apply an image mask, meaning that + * on Tahoe, where we *don't* apply an image mask, meaning that * trying to render a shadow would end up in having weird borders * around the panel */ --panel-shadow: none; diff --git a/src/zen/common/styles/zen-panels/bookmarks.css b/src/zen/common/styles/zen-panels/bookmarks.css index 35dc04006..58ebf9b05 100644 --- a/src/zen/common/styles/zen-panels/bookmarks.css +++ b/src/zen/common/styles/zen-panels/bookmarks.css @@ -21,8 +21,8 @@ } #zenEditBookmarkPanelFavicon { - width: 20px; - height: 20px; + width: var(--icon-size-medium); + height: var(--icon-size-medium); } #editBookmarkPanel .panel-header { diff --git a/src/zen/common/styles/zen-panels/dialog.css b/src/zen/common/styles/zen-panels/dialog.css index ad12f9c3a..4b41dd0dc 100644 --- a/src/zen/common/styles/zen-panels/dialog.css +++ b/src/zen/common/styles/zen-panels/dialog.css @@ -4,7 +4,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ .dialogBox { - border: none; outline: 1px solid light-dark(transparent, #646464); animation: zen-dialog-fade-in 0.3s ease-out; border-radius: 12px !important; diff --git a/src/zen/common/styles/zen-popup.css b/src/zen/common/styles/zen-popup.css index a414d6738..b20e23c53 100644 --- a/src/zen/common/styles/zen-popup.css +++ b/src/zen/common/styles/zen-popup.css @@ -92,8 +92,8 @@ panel { #appMenu-fxa-label2::before { content: ""; display: -moz-box; - height: 16px; - width: 16px; + height: var(--size-item-small); + width: var(--size-item-small); background: var(--avatar-image-url) 0/16px; scale: 1.25; border-radius: 99px; @@ -139,7 +139,7 @@ panel { border-inline-start: 1px solid var(--panel-separator-color); display: block; position: relative; - height: 32px; + height: var(--size-item-large); margin-block: calc(var(--uc-panel-zoom-button-padding) * -1); transform: translateX( calc(var(--uc-panel-zoom-button-inline-padding) * -1 - (var(--panel-separator-margin-vertical) + var(--uc-arrowpanel-menuitem-margin-block)) - 1px) @@ -147,8 +147,8 @@ panel { } #appMenu-zoomReset-button2 { - height: calc(16px + var(--uc-panel-zoom-button-padding) * 2); - min-height: calc(16px + var(--uc-panel-zoom-button-padding) * 2); + height: calc(var(--size-item-small) + var(--uc-panel-zoom-button-padding) * 2); + min-height: calc(var(--size-item-small) + var(--uc-panel-zoom-button-padding) * 2); } #appMenu-zoomReduce-button2:not([disabled], [open], :active):is(:hover), @@ -191,7 +191,7 @@ panel { #identity-popup-mainView-panel-header, #protections-popup-mainView-panel-header, .panel-header { - min-height: calc((var(--arrowpanel-menuitem-padding-block) + 4px) * 2 + 16px); + min-height: calc((var(--arrowpanel-menuitem-padding-block) + 4px) * 2 + var(--size-item-small)); } /* URL bar popup */ @@ -223,7 +223,7 @@ panel { .permission-popup-permission-item, #permission-popup-storage-access-permission-list-header { padding-block: 4px; - margin-block: 0px; + margin-block: 0; } #editBookmarkPanel > #editBookmarkHeaderSeparator, @@ -353,7 +353,7 @@ menuseparator { padding: var(--zen-toast-padding); border-radius: 10px; background: linear-gradient(to bottom, var(--zen-primary-color) -40%, color-mix(in srgb, var(--zen-primary-color), #0f0f0f 20%)); - box-shadow: light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4)) 0px 0px 22px 2px; + box-shadow: light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.4)) 0 0 22px 2px; border: none; display: flex; font-weight: 600; @@ -386,10 +386,10 @@ menuseparator { & button { width: min-content; - padding: 0px 8px !important; + padding: 0 8px !important; min-width: unset !important; min-height: 28px; - margin: 0px !important; + margin: 0 !important; border-radius: 6px !important; border-top: 2px solid light-dark(transparent, rgba(255, 255, 255, 0.1)); color: light-dark(rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0.8)) !important; diff --git a/src/zen/common/styles/zen-sidebar-notification.css b/src/zen/common/styles/zen-sidebar-notification.css index 4ee269133..fdddbe549 100644 --- a/src/zen/common/styles/zen-sidebar-notification.css +++ b/src/zen/common/styles/zen-sidebar-notification.css @@ -107,8 +107,8 @@ & .zen-sidebar-notification-link-icon { pointer-events: none; - width: 16px; - height: 16px; + width: var(--size-item-small); + height: var(--size-item-small); -moz-context-properties: fill, fill-opacity; fill: var(--special-color, currentColor); } diff --git a/src/zen/common/styles/zen-single-components.css b/src/zen/common/styles/zen-single-components.css index 5b1610525..4b1ed8898 100644 --- a/src/zen/common/styles/zen-single-components.css +++ b/src/zen/common/styles/zen-single-components.css @@ -24,6 +24,7 @@ display: none !important; } +/* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.theme.disable-lightweight") { #customization-lwtheme-link { display: none !important; @@ -60,7 +61,7 @@ #PanelUI-zen-emojis-picker-header { gap: 10px; align-items: center; - padding: 0px 10px; + padding: 0 10px; padding-bottom: 6px; } @@ -147,7 +148,7 @@ .zen-emojis-picker-emoji { font-size: 14px; - padding: 0px !important; + padding: 0 !important; & image { display: none; } @@ -262,6 +263,7 @@ /* Status panel */ +/* stylelint-disable-next-line media-query-no-invalid */ @media (-moz-pref("zen.theme.styled-status-panel")) { #statuspanel { padding: 6px; @@ -334,8 +336,8 @@ & > * { background-color: color-mix(in srgb, currentcolor 6%, transparent); - width: 48px; - height: 32px; + width: var(--size-item-xlarge); + height: var(--size-item-large); margin: 0; justify-content: center; align-items: center; @@ -416,7 +418,7 @@ } .permission-popup-permission-label { - margin: 0px; + margin: 0; font-weight: 500; white-space: nowrap; overflow: hidden; @@ -447,8 +449,8 @@ position: absolute; inset: 1px; border-radius: 99px; - width: 32px; - height: 32px; + width: var(--size-item-large); + height: var(--size-item-large); background: var(--button-background-color-primary); opacity: 0.6; transition: @@ -491,12 +493,14 @@ } } +/* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.theme.hide-unified-extensions-button") { #unified-extensions-button:not([showing]) { display: none !important; } } +/* stylelint-disable-next-line media-query-no-invalid */ @media not -moz-pref("zen.theme.hide-unified-extensions-button") { #zen-site-data-section-addons { display: none; @@ -519,8 +523,8 @@ -moz-context-properties: fill; fill: currentColor; color: light-dark(rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0.8)); - width: 48px; - height: 32px; + width: var(--size-item-xlarge); + height: var(--size-item-large); position: relative; &[disabled] { @@ -547,8 +551,8 @@ background: linear-gradient(to bottom, light-dark(rgb(255, 255, 255), rgb(34, 34, 34)), light-dark(rgb(246, 246, 246), rgb(21, 21, 21))); box-shadow: - 0px 1px 2px rgba(0, 0, 0, 0.1), - inset 0px 1px 0px light-dark(transparent, rgba(255, 255, 255, 0.15)); + 0 1px 2px rgba(0, 0, 0, 0.1), + inset 0 1px 0 light-dark(transparent, rgba(255, 255, 255, 0.15)); border-radius: 6px; --base-border-color: light-dark(rgba(0, 0, 0, 0.3), rgba(255, 255, 255, 0.1)); border: 0.5px solid light-dark(var(--base-border-color), rgb(21, 21, 21)); diff --git a/src/zen/compact-mode/sidebar.inc.css b/src/zen/compact-mode/sidebar.inc.css index 6dc2b6eef..9d665df58 100644 --- a/src/zen/compact-mode/sidebar.inc.css +++ b/src/zen/compact-mode/sidebar.inc.css @@ -50,7 +50,7 @@ #navigator-toolbox { --zen-toolbox-max-width: 74px !important; --zen-compact-float: var(--zen-element-separation); - + :root[zen-no-padding='true'] & { --zen-compact-float: 10px; --zen-compact-top-toolbar-hidden-fix: var(--zen-compact-float); @@ -78,7 +78,7 @@ } :root:not([zen-single-toolbar='true']) & { bottom: calc(var(--zen-compact-float) / 2); - height: calc(100% - var(--zen-toolbar-height-with-bookmarks)); + height: calc(100% - var(--zen-toolbar-height-with-bookmarks)); @media -moz-pref('zen.view.compact.hide-toolbar') { height: calc(100% - var(--zen-compact-top-toolbar-hidden-fix, 0px)); } @@ -145,9 +145,9 @@ } #navigator-toolbox:is( - [zen-has-hover], [zen-user-show], + [zen-has-hover], [zen-user-show], [zen-has-empty-tab], [flash-popup], - [has-popup-menu], [movingtab], + [has-popup-menu], [movingtab], [zen-compact-mode-active] ), &[zen-renaming-tab='true'] #navigator-toolbox { diff --git a/src/zen/compact-mode/toolbar.inc.css b/src/zen/compact-mode/toolbar.inc.css index 96f7d478a..484f98c25 100644 --- a/src/zen/compact-mode/toolbar.inc.css +++ b/src/zen/compact-mode/toolbar.inc.css @@ -30,7 +30,7 @@ display: flex; } transition: height var(--zen-hidden-toolbar-transition); - + height: var(--zen-element-separation); overflow: clip; diff --git a/src/zen/drag-and-drop/nsIZenDragAndDrop.idl b/src/zen/drag-and-drop/nsIZenDragAndDrop.idl index c8fddbf20..af92f943b 100644 --- a/src/zen/drag-and-drop/nsIZenDragAndDrop.idl +++ b/src/zen/drag-and-drop/nsIZenDragAndDrop.idl @@ -22,4 +22,3 @@ interface nsIZenDragAndDrop : nsISupports { */ void onDragEnd(); }; - diff --git a/src/zen/drag-and-drop/nsZenDragAndDrop.cpp b/src/zen/drag-and-drop/nsZenDragAndDrop.cpp index 48246e842..c8c4fb792 100644 --- a/src/zen/drag-and-drop/nsZenDragAndDrop.cpp +++ b/src/zen/drag-and-drop/nsZenDragAndDrop.cpp @@ -10,26 +10,25 @@ namespace { static constexpr auto kZenDefaultDragImageOpacity = #if defined(MOZ_WIDGET_GTK) -// For GTK, the default is 0.5 (DRAG_IMAGE_ALPHA_LEVEL) to match -// the native behavior. Make sure its synced with the following variable: -// https://searchfox.org/firefox-main/rev/14c08f0368ead8bfdddec62f43e0bb5c8fd61289/widget/gtk/nsDragService.cpp#75 + // For GTK, the default is 0.5 (DRAG_IMAGE_ALPHA_LEVEL) to match + // the native behavior. Make sure its synced with the following variable: + // https://searchfox.org/firefox-main/rev/14c08f0368ead8bfdddec62f43e0bb5c8fd61289/widget/gtk/nsDragService.cpp#75 0.5f; #else -// For other platforms, the default is whatever the value of DRAG_TRANSLUCENCY -// is, defined in nsBaseDragService.h + // For other platforms, the default is whatever the value of + // DRAG_TRANSLUCENCY is, defined in nsBaseDragService.h DRAG_TRANSLUCENCY; #endif -} // namespace: +} // namespace // Use the macro to inject all of the definitions for nsISupports. NS_IMPL_ISUPPORTS(nsZenDragAndDrop, nsIZenDragAndDrop) -nsZenDragAndDrop::nsZenDragAndDrop() { - (void)this->OnDragEnd(); -} +nsZenDragAndDrop::nsZenDragAndDrop() { (void)this->OnDragEnd(); } -auto nsZenDragAndDrop::GetZenDragAndDropInstance() -> nsCOMPtr { +auto nsZenDragAndDrop::GetZenDragAndDropInstance() + -> nsCOMPtr { return do_GetService(ZEN_BOOSTS_BACKEND_CONTRACTID); } @@ -45,4 +44,4 @@ nsZenDragAndDrop::OnDragEnd() { return NS_OK; } -} // namespace: zen +} // namespace zen diff --git a/src/zen/drag-and-drop/nsZenDragAndDrop.h b/src/zen/drag-and-drop/nsZenDragAndDrop.h index d03990bfa..b5f593ba1 100644 --- a/src/zen/drag-and-drop/nsZenDragAndDrop.h +++ b/src/zen/drag-and-drop/nsZenDragAndDrop.h @@ -28,10 +28,11 @@ class nsZenDragAndDrop final : public nsIZenDragAndDrop { auto GetDragImageOpacity() const { return mDragImageOpacity; } /** - * @brief Get the singleton instance of nsZenDragAndDrop. There may be occasions - * where it won't be available (e.g. on the content process), so this may return - * nullptr. - * @return nsZenDragAndDrop* The singleton instance, or nullptr if not available + * @brief Get the singleton instance of nsZenDragAndDrop. There may be + * occasions where it won't be available (e.g. on the content process), so + * this may return nullptr. + * @return nsZenDragAndDrop* The singleton instance, or nullptr if not + * available */ static auto GetZenDragAndDropInstance() -> nsCOMPtr; @@ -40,6 +41,6 @@ class nsZenDragAndDrop final : public nsIZenDragAndDrop { float mDragImageOpacity{}; }; -} // namespace zen +} // namespace zen #endif diff --git a/src/zen/folders/jar.inc.mn b/src/zen/folders/jar.inc.mn index 971b59dfc..091b8bf6d 100644 --- a/src/zen/folders/jar.inc.mn +++ b/src/zen/folders/jar.inc.mn @@ -4,4 +4,4 @@ content/browser/zen-components/ZenFolder.mjs (../../zen/folders/ZenFolder.mjs) content/browser/zen-components/ZenFolders.mjs (../../zen/folders/ZenFolders.mjs) - content/browser/zen-styles/zen-folders.css (../../zen/folders/zen-folders.css) \ No newline at end of file + content/browser/zen-styles/zen-folders.css (../../zen/folders/zen-folders.css) diff --git a/src/zen/folders/zen-folders.css b/src/zen/folders/zen-folders.css index bdfa5ab15..cc82d727a 100644 --- a/src/zen/folders/zen-folders.css +++ b/src/zen/folders/zen-folders.css @@ -88,7 +88,6 @@ zen-folder { width: 28px; height: 28px; align-content: center; - pointer-events: none; position: absolute; pointer-events: none; @@ -266,8 +265,8 @@ zen-folder[collapsed] > .tab-group-container { } #zen-folder-tabs-popup .zen-folder-tabs-list-search-icon { - width: 16px; - height: 16px; + width: var(--size-item-small); + height: var(--size-item-small); margin: 10px 2px 10px 10px; -moz-context-properties: fill; fill: currentColor; @@ -275,8 +274,8 @@ zen-folder[collapsed] > .tab-group-container { } .folders-tabs-list-item-icon { - width: 16px; - height: 16px; + width: var(--size-item-small); + height: var(--size-item-small); flex-shrink: 0; margin-inline-end: 10px; margin-inline-start: 4px; diff --git a/src/zen/glance/jar.inc.mn b/src/zen/glance/jar.inc.mn index caeadcbe2..c7338b695 100644 --- a/src/zen/glance/jar.inc.mn +++ b/src/zen/glance/jar.inc.mn @@ -3,4 +3,4 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. content/browser/zen-components/ZenGlanceManager.mjs (../../zen/glance/ZenGlanceManager.mjs) - content/browser/zen-styles/zen-glance.css (../../zen/glance/zen-glance.css) \ No newline at end of file + content/browser/zen-styles/zen-glance.css (../../zen/glance/zen-glance.css) diff --git a/src/zen/glance/zen-glance.css b/src/zen/glance/zen-glance.css index 5a667305f..47b0c0f91 100644 --- a/src/zen/glance/zen-glance.css +++ b/src/zen/glance/zen-glance.css @@ -23,8 +23,8 @@ } & toolbarbutton { - width: 32px; - height: 32px; + width: var(--size-item-large); + height: var(--size-item-large); background: color-mix(in srgb, light-dark(rgb(24, 24, 24), rgb(231, 231, 231)) 96%, var(--zen-primary-color)); transition: background 0.05s ease, @@ -65,7 +65,7 @@ width: fit-content; & label { display: block; - max-width: 0px; + max-width: 0; margin: 0; overflow: hidden; transition: diff --git a/src/zen/images/favicons/tuta.svg b/src/zen/images/favicons/tuta.svg index 5be5cdce0..fccdcc6bb 100644 --- a/src/zen/images/favicons/tuta.svg +++ b/src/zen/images/favicons/tuta.svg @@ -1,4 +1,7 @@ + diff --git a/src/zen/media/zen-media-controls.css b/src/zen/media/zen-media-controls.css index a30fca410..8b23e50ee 100644 --- a/src/zen/media/zen-media-controls.css +++ b/src/zen/media/zen-media-controls.css @@ -119,8 +119,6 @@ position: absolute; width: 110%; height: 110%; - background-repeat: no-repeat; - opacity: 1; background: url("chrome://browser/content/zen-images/note-indicator.svg") no-repeat; top: -70%; left: 50%; @@ -152,7 +150,6 @@ & > toolbaritem { flex-grow: 1; - padding: 0; transition: padding 0.3s ease-out; position: absolute; left: 0; @@ -216,7 +213,7 @@ } #zen-media-title { - height: 16px; + height: var(--size-item-small); font-size: math; } @@ -250,7 +247,7 @@ } & label { - min-height: 16px; + min-height: var(--size-item-small); margin-left: 0; font-weight: 500; position: relative; /* For the animation */ @@ -264,9 +261,9 @@ #zen-media-progress-hbox { flex-grow: 1; - height: 2rem; + height: var(--size-item-large); align-items: center; - padding-top: 0px !important; + padding-top: 0 !important; #zen-media-controls-toolbar[media-position-hidden] & { display: none; diff --git a/src/zen/mods/ZenStyleSheetCache.cpp b/src/zen/mods/ZenStyleSheetCache.cpp index 15ac59fd2..dccfbd4b6 100644 --- a/src/zen/mods/ZenStyleSheetCache.cpp +++ b/src/zen/mods/ZenStyleSheetCache.cpp @@ -15,11 +15,11 @@ #include "mozilla/GlobalStyleSheetCache.h" #include "mozilla/RefPtr.h" -#define GET_MODS_FILE(chromeFile, err) \ +#define GET_MODS_FILE(chromeFile, err) \ NS_GetSpecialDirectory(NS_APP_USER_CHROME_DIR, getter_AddRefs(chromeFile)); \ - if (!chromeFile) { \ - return err; \ - } \ + if (!chromeFile) { \ + return err; \ + } \ chromeFile->Append(ZEN_MODS_FILENAME); namespace zen { @@ -50,7 +50,7 @@ auto ZenStyleSheetCache::GetModsSheet() -> StyleSheet* { } auto ZenStyleSheetCache::LoadSheetFile(nsIFile* aFile, - css::SheetParsingMode aParsingMode) + css::SheetParsingMode aParsingMode) -> void { nsCOMPtr uri; NS_NewFileURI(getter_AddRefs(uri), aFile); @@ -66,7 +66,7 @@ auto ZenStyleSheetCache::LoadSheetFile(nsIFile* aFile, } mModsSheet = result.unwrapOr(nullptr); } - + /* static */ auto ZenStyleSheetCache::Singleton() -> ZenStyleSheetCache* { MOZ_ASSERT(NS_IsMainThread()); @@ -76,8 +76,9 @@ auto ZenStyleSheetCache::Singleton() -> ZenStyleSheetCache* { return gZenModsCache; } -nsresult ZenStyleSheetCache::RebuildModsStylesheets(const nsACString& aContents) { - // Re-parse the mods stylesheet. By doing so, we read +nsresult ZenStyleSheetCache::RebuildModsStylesheets( + const nsACString& aContents) { + // Re-parse the mods stylesheet. By doing so, we read // Once we have the data as a nsACString, we call ReparseSheet from the // StyleSheet class to re-parse the stylesheet. auto sheet = GetModsSheet(); @@ -92,7 +93,6 @@ nsresult ZenStyleSheetCache::RebuildModsStylesheets(const nsACString& aContents) return aRv.StealNSResult(); } +mozilla::StaticRefPtr ZenStyleSheetCache::gZenModsCache; -mozilla::StaticRefPtr ZenStyleSheetCache::gZenModsCache; - -} // namespace: zen \ No newline at end of file +} // namespace zen diff --git a/src/zen/mods/ZenStyleSheetCache.h b/src/zen/mods/ZenStyleSheetCache.h index 607a65f85..cb16fbf85 100644 --- a/src/zen/mods/ZenStyleSheetCache.h +++ b/src/zen/mods/ZenStyleSheetCache.h @@ -6,11 +6,10 @@ #define mozilla_ZenStyleSheetCache_h__ #include "mozilla/css/Loader.h" -#include "mozilla/NotNull.h" #include "mozilla/StaticPtr.h" #ifndef ZEN_MODS_FILENAME - #define ZEN_MODS_FILENAME u"zen-themes.css"_ns +# define ZEN_MODS_FILENAME u"zen-themes.css"_ns #endif namespace zen { @@ -38,6 +37,7 @@ class ZenStyleSheetCache final : public nsISupports { nsresult RebuildModsStylesheets(const nsACString& aContents); static auto Singleton() -> ZenStyleSheetCache*; + private: ZenStyleSheetCache() = default; ~ZenStyleSheetCache() = default; @@ -46,14 +46,14 @@ class ZenStyleSheetCache final : public nsISupports { * @brief Load the stylesheet from the given file. * @param aFile The file to load the stylesheet from. */ - auto LoadSheetFile(nsIFile* aFile, mozilla::css::SheetParsingMode aParsingMode) - -> void; + auto LoadSheetFile(nsIFile* aFile, + mozilla::css::SheetParsingMode aParsingMode) -> void; static mozilla::StaticRefPtr gZenModsCache; RefPtr mModsSheet; }; -} // namespace zen +} // namespace zen #endif diff --git a/src/zen/mods/nsIZenModsBackend.idl b/src/zen/mods/nsIZenModsBackend.idl index 8a2567fce..90838cf80 100644 --- a/src/zen/mods/nsIZenModsBackend.idl +++ b/src/zen/mods/nsIZenModsBackend.idl @@ -22,4 +22,3 @@ interface nsIZenModsBackend : nsISupports { */ void rebuildModsStyles(in ACString aContents); }; - diff --git a/src/zen/mods/nsZenModsBackend.cpp b/src/zen/mods/nsZenModsBackend.cpp index 7280d00a8..635bc3331 100644 --- a/src/zen/mods/nsZenModsBackend.cpp +++ b/src/zen/mods/nsZenModsBackend.cpp @@ -23,14 +23,12 @@ namespace { static auto GetZenStyleSheetCache() -> ZenStyleSheetCache* { return ZenStyleSheetCache::Singleton(); } -} +} // namespace // Use the macro to inject all of the definitions for nsISupports. NS_IMPL_ISUPPORTS(nsZenModsBackend, nsIZenModsBackend) -nsZenModsBackend::nsZenModsBackend() { - (void)CheckEnabled(); -} +nsZenModsBackend::nsZenModsBackend() { (void)CheckEnabled(); } auto nsZenModsBackend::CheckEnabled() -> void { // Check if the mods backend is enabled based on the preference. @@ -44,17 +42,19 @@ auto nsZenModsBackend::CheckEnabled() -> void { !mozilla::Preferences::GetBool("zen.themes.disable-all", false); } -auto nsZenModsBackend::RebuildModsStyles(const nsACString& aContents) -> nsresult { +auto nsZenModsBackend::RebuildModsStyles(const nsACString& aContents) + -> nsresult { // Notify that the mods stylesheets have been rebuilt. return GetZenStyleSheetCache()->RebuildModsStylesheets(aContents); } -} // namespace: zen +} // namespace zen auto nsStyleSheetService::ZenMarkStylesAsChanged() -> void { for (auto& presShell : mPresShells) { if (presShell) { - if (auto doc = presShell->GetDocument(); doc && doc->IsInChromeDocShell()) { + if (auto doc = presShell->GetDocument(); + doc && doc->IsInChromeDocShell()) { // Notify the document that styles have changed. doc->ApplicableStylesChanged(); } diff --git a/src/zen/mods/nsZenModsBackend.h b/src/zen/mods/nsZenModsBackend.h index 2c5e1fa6b..2929d7be1 100644 --- a/src/zen/mods/nsZenModsBackend.h +++ b/src/zen/mods/nsZenModsBackend.h @@ -31,6 +31,6 @@ class nsZenModsBackend final : public nsIZenModsBackend { bool mEnabled = false; }; -} // namespace zen +} // namespace zen #endif diff --git a/src/zen/sessionstore/ZenWindowSync.sys.mjs b/src/zen/sessionstore/ZenWindowSync.sys.mjs index f22d96505..bdd249a7b 100644 --- a/src/zen/sessionstore/ZenWindowSync.sys.mjs +++ b/src/zen/sessionstore/ZenWindowSync.sys.mjs @@ -716,7 +716,6 @@ class nsZenWindowSync { * @param {object} options - Options object. * @param {boolean} options.focus - Indicates if the tab should be focused after the swap. * @param {boolean} options.onClose - Indicates if the swap is done during a tab close operation. - * @returns {Promise|null} A promise that resolves when the tab state is flushed, or null if the swap cannot be performed. */ #swapBrowserDocShellsInner(aOurTab, aOtherTab, { focus = true, onClose = false } = {}) { // Can't swap between chrome and content processes. @@ -724,7 +723,7 @@ class nsZenWindowSync { this.log( `Cannot swap browsers between tabs ${aOurTab.id} and ${aOtherTab.id} due to process mismatch` ); - return null; + return; } // Running `swapBrowsersAndCloseOther` doesn't expect us to use the tab after // the operation, so it doesn't really care about cleaning up the other tab. diff --git a/src/zen/split-view/jar.inc.mn b/src/zen/split-view/jar.inc.mn index cc855a1cc..9aa52e0fc 100644 --- a/src/zen/split-view/jar.inc.mn +++ b/src/zen/split-view/jar.inc.mn @@ -3,4 +3,4 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. * content/browser/zen-styles/zen-decks.css (../../zen/split-view/zen-decks.css) - content/browser/zen-components/ZenViewSplitter.mjs (../../zen/split-view/ZenViewSplitter.mjs) \ No newline at end of file + content/browser/zen-components/ZenViewSplitter.mjs (../../zen/split-view/ZenViewSplitter.mjs) diff --git a/src/zen/split-view/zen-splitview-overlay.inc.xhtml b/src/zen/split-view/zen-splitview-overlay.inc.xhtml index d1c6254d2..f93091ac7 100644 --- a/src/zen/split-view/zen-splitview-overlay.inc.xhtml +++ b/src/zen/split-view/zen-splitview-overlay.inc.xhtml @@ -6,4 +6,4 @@ - \ No newline at end of file + diff --git a/src/zen/tabs/jar.inc.mn b/src/zen/tabs/jar.inc.mn index 30ed24016..ed348b83d 100644 --- a/src/zen/tabs/jar.inc.mn +++ b/src/zen/tabs/jar.inc.mn @@ -5,4 +5,4 @@ content/browser/zen-components/ZenPinnedTabManager.mjs (../../zen/tabs/ZenPinnedTabManager.mjs) content/browser/zen-components/ZenEssentialsPromo.mjs (../../zen/tabs/ZenEssentialsPromo.mjs) * content/browser/zen-styles/zen-tabs.css (../../zen/tabs/zen-tabs.css) - content/browser/zen-styles/zen-tabs/vertical-tabs.css (../../zen/tabs/zen-tabs/vertical-tabs.css) \ No newline at end of file + content/browser/zen-styles/zen-tabs/vertical-tabs.css (../../zen/tabs/zen-tabs/vertical-tabs.css) diff --git a/src/zen/tabs/zen-tabs/vertical-tabs.css b/src/zen/tabs/zen-tabs/vertical-tabs.css index 6e9591802..a125fd84d 100644 --- a/src/zen/tabs/zen-tabs/vertical-tabs.css +++ b/src/zen/tabs/zen-tabs/vertical-tabs.css @@ -30,6 +30,7 @@ Single Toolbar Mode Specific Styles (`zen-single-toolbar='true'`) ========================================================================== */ :root[zen-single-toolbar="true"] { + /* stylelint-disable-next-line media-query-no-invalid */ @media (-moz-platform: macos) and (not -moz-pref("zen.view.mac.show-three-dot-menu")) { &:not([customizing]) #PanelUI-button:not([open]):not([panelopen]) { position: absolute; @@ -51,6 +52,8 @@ /* ========================================================================== Vertical Tabs Mode Specific Styles (`zen.tabs.vertical` pref) ========================================================================== */ + +/* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.tabs.vertical") { :root:not([zen-window-buttons-reversed="true"]) { & .titlebar-buttonbox-container { @@ -160,9 +163,9 @@ } .zen-workspace-pinned-tabs-section[hide-separator] & { - height: 0px; + height: 0; opacity: 0; - padding-bottom: 0px; + padding-bottom: 0; } & toolbarbutton { @@ -196,7 +199,7 @@ & .toolbarbutton-icon { width: 10px; transition: transform 0.15s ease-in-out; - transform: translateY(0px); + transform: translateY(0); @starting-style { transform: translateY(-2px); @@ -293,7 +296,7 @@ --tab-inner-inline-margin: 0; position: relative; - border-bottom: 0px solid transparent !important; + border-bottom: 0 solid transparent !important; --tab-block-margin: 2px; --tab-selected-bgcolor: light-dark(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.18)); @@ -351,7 +354,7 @@ border-radius: var(--border-radius-medium) !important; & .tab-context-line { - margin: 0 0px !important; + margin: 0 0 !important; width: 3px !important; } } @@ -362,8 +365,8 @@ margin: 0 0 0 4px !important; --toolbarbutton-inner-padding: 0; --border-radius-medium: 8px; - width: 24px; - height: 24px; + width: var(--size-item-medium); + height: var(--size-item-medium); --tab-min-height: 24px; --tab-min-width: 24px; @@ -402,9 +405,7 @@ position: absolute; width: 110%; height: 110%; - background-repeat: no-repeat; - opacity: 1; - background: url("chrome://browser/content/zen-images/note-indicator.svg") no-repeat; + background: url("chrome://browser/content/zen-images/note-indicator.svg") no-repeat; top: -70%; left: 50%; transform: translateX(-50%); @@ -419,8 +420,8 @@ /* Additional styles for glance tabs in "essential" mode */ &[zen-essential="true"] .tabbrowser-tab { position: absolute; - top: 0px; - right: 0px; + top: 0; + right: 0; --tab-collapsed-width: 34px; --tab-min-height: 16px; @@ -448,7 +449,7 @@ #tabbrowser-arrowscrollbox { &::part(scrollbox) { - gap: 0px !important; + gap: 0 !important; } &::part(overflow-start-indicator), @@ -478,7 +479,7 @@ opacity 0.1s ease-in-out, margin 0.1s ease-in-out, max-height 0.1s ease-in-out; - max-height: 0px; + max-height: 0; opacity: 0; transform: translateY(-4px); font-size: x-small; @@ -586,8 +587,8 @@ } & image { - height: 16px; - width: 16px; + height: var(--size-item-small); + width: var(--size-item-small); padding: 0 !important; } @@ -923,8 +924,8 @@ color: inherit; fill: currentColor; padding: var(--tab-close-button-padding); - width: 24px; - height: 24px; + width: var(--size-item-medium); + height: var(--size-item-medium); outline: var(--toolbarbutton-outline); &:hover { @@ -951,8 +952,8 @@ & > image { list-style-image: var(--zen-original-tab-icon); - width: 16px; - height: 16px; + width: var(--size-item-small); + height: var(--size-item-small); pointer-events: none; border-radius: 4px; } @@ -961,7 +962,7 @@ content: ""; display: block; width: 2.5px; - height: 16px; + height: var(--size-item-small); background: light-dark(rgba(66, 61, 61, 0.3), rgba(255, 255, 255, 0.3)); position: absolute; right: 0; @@ -1059,6 +1060,7 @@ -moz-user-focus: ignore !important; } +/* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.tabs.show-newtab-vertical") { #tabs-newtab-button { max-height: var(--tab-min-height); @@ -1089,6 +1091,7 @@ --zen-colors-border: var(--zen-colors-tertiary); } + /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.view.show-newtab-button-top") { order: -1; } @@ -1192,6 +1195,7 @@ background: light-dark(rgba(0, 0, 0, 0.1), var(--tab-selected-bgcolor)); } + /* stylelint-disable-next-line media-query-no-invalid */ @media -moz-pref("zen.theme.essentials-favicon-bg") { &[visuallyselected] > .tab-stack > .tab-background { &::after { @@ -1340,6 +1344,7 @@ opacity: 0.7; } +/* stylelint-disable-next-line media-query-no-invalid */ @media (-moz-pref("zen.theme.hide-tab-throbber")) { .tab-throbber { display: none !important; diff --git a/src/zen/tests/compact_mode/browser.toml b/src/zen/tests/compact_mode/browser.toml index f22795810..48649c2bb 100644 --- a/src/zen/tests/compact_mode/browser.toml +++ b/src/zen/tests/compact_mode/browser.toml @@ -2,4 +2,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +[DEFAULT] + ["browser_compact_mode_width.js"] diff --git a/src/zen/tests/container_essentials/browser.toml b/src/zen/tests/container_essentials/browser.toml index ce61074c9..9e70c24a6 100644 --- a/src/zen/tests/container_essentials/browser.toml +++ b/src/zen/tests/container_essentials/browser.toml @@ -6,4 +6,5 @@ prefs = ["zen.workspaces.separate-essentials=true"] ["browser_container_auto_switch.js"] -["browser_container_specific_essentials.js"] \ No newline at end of file + +["browser_container_specific_essentials.js"] diff --git a/src/zen/tests/folders/browser.toml b/src/zen/tests/folders/browser.toml index 1750f50b0..8c09afca2 100644 --- a/src/zen/tests/folders/browser.toml +++ b/src/zen/tests/folders/browser.toml @@ -8,17 +8,28 @@ support-files = [ "head.js", ] -["browser_folder_create.js"] -["browser_folder_subfolder.js"] ["browser_folder_basic_toggle.js"] -["browser_folder_owner_tabs.js"] + +["browser_folder_create.js"] + ["browser_folder_density.js"] -["browser_folder_max_subfolders.js"] + ["browser_folder_empty_tab.js"] -["browser_folder_multiselected.js"] -["browser_folder_visible_tabs.js"] -["browser_folder_level_checks.js"] -["browser_folder_reset_button.js"] ["browser_folder_issue_9885.js"] + ["browser_folder_issue_9981.js"] + +["browser_folder_level_checks.js"] + +["browser_folder_max_subfolders.js"] + +["browser_folder_multiselected.js"] + +["browser_folder_owner_tabs.js"] + +["browser_folder_reset_button.js"] + +["browser_folder_subfolder.js"] + +["browser_folder_visible_tabs.js"] diff --git a/src/zen/tests/glance/browser.toml b/src/zen/tests/glance/browser.toml index 6098fbf07..4e27371a2 100644 --- a/src/zen/tests/glance/browser.toml +++ b/src/zen/tests/glance/browser.toml @@ -8,9 +8,15 @@ support-files = [ ] ["browser_glance_basic.js"] -["browser_glance_expand.js"] + ["browser_glance_close.js"] -["browser_glance_next_tab.js"] -["browser_glance_prev_tab.js"] -["browser_glance_select_parent.js"] + ["browser_glance_close_select.js"] + +["browser_glance_expand.js"] + +["browser_glance_next_tab.js"] + +["browser_glance_prev_tab.js"] + +["browser_glance_select_parent.js"] diff --git a/src/zen/tests/live-folders/browser.toml b/src/zen/tests/live-folders/browser.toml index e4055420b..bd75b3725 100644 --- a/src/zen/tests/live-folders/browser.toml +++ b/src/zen/tests/live-folders/browser.toml @@ -2,6 +2,10 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -["browser_live_folder.js"] -["browser_rss_live_folder.js"] +[DEFAULT] + ["browser_github_live_folder.js"] + +["browser_live_folder.js"] + +["browser_rss_live_folder.js"] diff --git a/src/zen/tests/mochitests/sandbox/mac_register_font.py b/src/zen/tests/mochitests/sandbox/mac_register_font.py index d536abac1..549becf56 100755 --- a/src/zen/tests/mochitests/sandbox/mac_register_font.py +++ b/src/zen/tests/mochitests/sandbox/mac_register_font.py @@ -17,69 +17,69 @@ import CoreText def main(): - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - help="print verbose registration failures", - default=False, - ) - parser.add_argument( - "file", nargs="*", help="font file to register or unregister", default=[] - ) - parser.add_argument( - "-u", - "--unregister", - action="store_true", - help="unregister the provided fonts", - default=False, - ) - parser.add_argument( - "-p", - "--persist-user", - action="store_true", - help="permanently register the font", - default=False, - ) + parser = argparse.ArgumentParser() + parser.add_argument( + "-v", + "--verbose", + action="store_true", + help="print verbose registration failures", + default=False, + ) + parser.add_argument( + "file", nargs="*", help="font file to register or unregister", default=[] + ) + parser.add_argument( + "-u", + "--unregister", + action="store_true", + help="unregister the provided fonts", + default=False, + ) + parser.add_argument( + "-p", + "--persist-user", + action="store_true", + help="permanently register the font", + default=False, + ) - args = parser.parse_args() + args = parser.parse_args() - if args.persist_user: - scope = CoreText.kCTFontManagerScopeUser - scopeDesc = "user" - else: - scope = CoreText.kCTFontManagerScopeSession - scopeDesc = "session" - - failureCount = 0 - for fontPath in args.file: - fontURL = Cocoa.NSURL.fileURLWithPath_(fontPath) - (result, error) = register_or_unregister_font(fontURL, args.unregister, scope) - if result: - print( - "%sregistered font %s with %s scope" - % (("un" if args.unregister else ""), fontPath, scopeDesc) - ) + if args.persist_user: + scope = CoreText.kCTFontManagerScopeUser + scopeDesc = "user" else: - print( - "Failed to %sregister font %s with %s scope" - % (("un" if args.unregister else ""), fontPath, scopeDesc) - ) - if args.verbose: - print(error) - failureCount += 1 + scope = CoreText.kCTFontManagerScopeSession + scopeDesc = "session" - sys.exit(failureCount) + failureCount = 0 + for fontPath in args.file: + fontURL = Cocoa.NSURL.fileURLWithPath_(fontPath) + (result, error) = register_or_unregister_font(fontURL, args.unregister, scope) + if result: + print( + "%sregistered font %s with %s scope" + % (("un" if args.unregister else ""), fontPath, scopeDesc) + ) + else: + print( + "Failed to %sregister font %s with %s scope" + % (("un" if args.unregister else ""), fontPath, scopeDesc) + ) + if args.verbose: + print(error) + failureCount += 1 + + sys.exit(failureCount) def register_or_unregister_font(fontURL, unregister, scope): - return ( - CoreText.CTFontManagerUnregisterFontsForURL(fontURL, scope, None) - if unregister - else CoreText.CTFontManagerRegisterFontsForURL(fontURL, scope, None) - ) + return ( + CoreText.CTFontManagerUnregisterFontsForURL(fontURL, scope, None) + if unregister + else CoreText.CTFontManagerRegisterFontsForURL(fontURL, scope, None) + ) if __name__ == "__main__": - main() + main() diff --git a/src/zen/tests/mochitests/shell/mac_desktop_image.py b/src/zen/tests/mochitests/shell/mac_desktop_image.py index d664a23cb..e3ccc7719 100755 --- a/src/zen/tests/mochitests/shell/mac_desktop_image.py +++ b/src/zen/tests/mochitests/shell/mac_desktop_image.py @@ -31,138 +31,138 @@ from Cocoa import NSURL def main(): - parser = argparse.ArgumentParser( - description="Utility to print, set, or " - + "check the path to image being used as " - + "the desktop background image. By " - + "default, prints the path to the " - + "current desktop background image." - ) - parser.add_argument( - "-v", - "--verbose", - action="store_true", - help="print verbose debugging information", - default=False, - ) - group = parser.add_mutually_exclusive_group() - group.add_argument( - "-s", - "--set-background-image", - dest="newBackgroundImagePath", - required=False, - help="path to the new background image to set. A zero " - + "exit code indicates no errors occurred.", - default=None, - ) - group.add_argument( - "-c", - "--check-background-image", - dest="checkBackgroundImagePath", - required=False, - help="check if the provided background image path " - + "matches the provided path. A zero exit code " - + "indicates the paths match.", - default=None, - ) - args = parser.parse_args() - - # Using logging for verbose output - if args.verbose: - logging.basicConfig(level=logging.DEBUG) - else: - logging.basicConfig(level=logging.CRITICAL) - logger = logging.getLogger("desktopImage") - - # Print what we're going to do - if args.checkBackgroundImagePath is not None: - logger.debug( - "checking provided desktop image %s matches current " - "image" % args.checkBackgroundImagePath + parser = argparse.ArgumentParser( + description="Utility to print, set, or " + + "check the path to image being used as " + + "the desktop background image. By " + + "default, prints the path to the " + + "current desktop background image." ) - elif args.newBackgroundImagePath is not None: - logger.debug("setting image to %s " % args.newBackgroundImagePath) - else: - logger.debug("retrieving desktop image path") - - focussedScreen = NSScreen.mainScreen() - if not focussedScreen: - raise RuntimeError("mainScreen error") - - ws = NSWorkspace.sharedWorkspace() - if not ws: - raise RuntimeError("sharedWorkspace error") - - # If we're just checking the image path, check it and then return. - # A successful exit code (0) indicates the paths match. - if args.checkBackgroundImagePath is not None: - # Get existing desktop image path and resolve it - existingImageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger) - existingImagePath = existingImageURL.path() - existingImagePathReal = os.path.realpath(existingImagePath) - logger.debug("existing desktop image: %s" % existingImagePath) - logger.debug("existing desktop image realpath: %s" % existingImagePath) - - # Resolve the path we're going to check - checkImagePathReal = os.path.realpath(args.checkBackgroundImagePath) - logger.debug("check desktop image: %s" % args.checkBackgroundImagePath) - logger.debug("check desktop image realpath: %s" % checkImagePathReal) - - if existingImagePathReal == checkImagePathReal: - print("desktop image path matches provided path") - return True - - print("desktop image path does NOT match provided path") - return False - - # Log the current desktop image - if args.verbose: - existingImageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger) - logger.debug("existing desktop image: %s" % existingImageURL.path()) - - # Set the desktop image - if args.newBackgroundImagePath is not None: - newImagePath = args.newBackgroundImagePath - if not os.path.exists(newImagePath): - logger.critical("%s does not exist" % newImagePath) - return False - if not os.access(newImagePath, os.R_OK): - logger.critical("%s is not readable" % newImagePath) - return False - - logger.debug("new desktop image to set: %s" % newImagePath) - newImageURL = NSURL.fileURLWithPath_(newImagePath) - logger.debug("new desktop image URL to set: %s" % newImageURL) - - status = False - (status, error) = ws.setDesktopImageURL_forScreen_options_error_( - newImageURL, focussedScreen, None, None + parser.add_argument( + "-v", + "--verbose", + action="store_true", + help="print verbose debugging information", + default=False, ) - if not status: - raise RuntimeError("setDesktopImageURL error") + group = parser.add_mutually_exclusive_group() + group.add_argument( + "-s", + "--set-background-image", + dest="newBackgroundImagePath", + required=False, + help="path to the new background image to set. A zero " + + "exit code indicates no errors occurred.", + default=None, + ) + group.add_argument( + "-c", + "--check-background-image", + dest="checkBackgroundImagePath", + required=False, + help="check if the provided background image path " + + "matches the provided path. A zero exit code " + + "indicates the paths match.", + default=None, + ) + args = parser.parse_args() - # Print the current desktop image - imageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger) - imagePath = imageURL.path() - imagePathReal = os.path.realpath(imagePath) - logger.debug("updated desktop image URL: %s" % imageURL) - logger.debug("updated desktop image path: %s" % imagePath) - logger.debug("updated desktop image path (resolved): %s" % imagePathReal) - print(imagePathReal) - return True + # Using logging for verbose output + if args.verbose: + logging.basicConfig(level=logging.DEBUG) + else: + logging.basicConfig(level=logging.CRITICAL) + logger = logging.getLogger("desktopImage") + + # Print what we're going to do + if args.checkBackgroundImagePath is not None: + logger.debug( + "checking provided desktop image %s matches current " + "image" % args.checkBackgroundImagePath + ) + elif args.newBackgroundImagePath is not None: + logger.debug("setting image to %s " % args.newBackgroundImagePath) + else: + logger.debug("retrieving desktop image path") + + focussedScreen = NSScreen.mainScreen() + if not focussedScreen: + raise RuntimeError("mainScreen error") + + ws = NSWorkspace.sharedWorkspace() + if not ws: + raise RuntimeError("sharedWorkspace error") + + # If we're just checking the image path, check it and then return. + # A successful exit code (0) indicates the paths match. + if args.checkBackgroundImagePath is not None: + # Get existing desktop image path and resolve it + existingImageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger) + existingImagePath = existingImageURL.path() + existingImagePathReal = os.path.realpath(existingImagePath) + logger.debug("existing desktop image: %s" % existingImagePath) + logger.debug("existing desktop image realpath: %s" % existingImagePath) + + # Resolve the path we're going to check + checkImagePathReal = os.path.realpath(args.checkBackgroundImagePath) + logger.debug("check desktop image: %s" % args.checkBackgroundImagePath) + logger.debug("check desktop image realpath: %s" % checkImagePathReal) + + if existingImagePathReal == checkImagePathReal: + print("desktop image path matches provided path") + return True + + print("desktop image path does NOT match provided path") + return False + + # Log the current desktop image + if args.verbose: + existingImageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger) + logger.debug("existing desktop image: %s" % existingImageURL.path()) + + # Set the desktop image + if args.newBackgroundImagePath is not None: + newImagePath = args.newBackgroundImagePath + if not os.path.exists(newImagePath): + logger.critical("%s does not exist" % newImagePath) + return False + if not os.access(newImagePath, os.R_OK): + logger.critical("%s is not readable" % newImagePath) + return False + + logger.debug("new desktop image to set: %s" % newImagePath) + newImageURL = NSURL.fileURLWithPath_(newImagePath) + logger.debug("new desktop image URL to set: %s" % newImageURL) + + status = False + (status, error) = ws.setDesktopImageURL_forScreen_options_error_( + newImageURL, focussedScreen, None, None + ) + if not status: + raise RuntimeError("setDesktopImageURL error") + + # Print the current desktop image + imageURL = getCurrentDesktopImageURL(focussedScreen, ws, logger) + imagePath = imageURL.path() + imagePathReal = os.path.realpath(imagePath) + logger.debug("updated desktop image URL: %s" % imageURL) + logger.debug("updated desktop image path: %s" % imagePath) + logger.debug("updated desktop image path (resolved): %s" % imagePathReal) + print(imagePathReal) + return True def getCurrentDesktopImageURL(focussedScreen, workspace, logger): - imageURL = workspace.desktopImageURLForScreen_(focussedScreen) - if not imageURL: - raise RuntimeError("desktopImageURLForScreen returned invalid URL") - if not imageURL.isFileURL(): - logger.warning("desktop image URL is not a file URL") - return imageURL + imageURL = workspace.desktopImageURLForScreen_(focussedScreen) + if not imageURL: + raise RuntimeError("desktopImageURLForScreen returned invalid URL") + if not imageURL.isFileURL(): + logger.warning("desktop image URL is not a file URL") + return imageURL if __name__ == "__main__": - if not main(): - sys.exit(1) - else: - sys.exit(0) + if not main(): + sys.exit(1) + else: + sys.exit(0) diff --git a/src/zen/tests/pinned/browser.toml b/src/zen/tests/pinned/browser.toml index d0013e231..bd5d6e5bf 100644 --- a/src/zen/tests/pinned/browser.toml +++ b/src/zen/tests/pinned/browser.toml @@ -5,14 +5,22 @@ [DEFAULT] prefs = ["zen.workspaces.separate-essentials=false"] -["browser_pinned_unload_changed.js"] -["browser_pinned_unload_noreset.js"] -["browser_pinned_nounload_reset.js"] -["browser_pinned_switch.js"] -["browser_pinned_reset_noswitch.js"] -["browser_pinned_close.js"] +["browser_issue_8726.js"] + ["browser_pinned_changed.js"] + +["browser_pinned_close.js"] + ["browser_pinned_created.js"] + +["browser_pinned_nounload_reset.js"] + +["browser_pinned_reset_noswitch.js"] + +["browser_pinned_switch.js"] + ["browser_pinned_to_essential.js"] -["browser_issue_8726.js"] +["browser_pinned_unload_changed.js"] + +["browser_pinned_unload_noreset.js"] diff --git a/src/zen/tests/split_view/browser.toml b/src/zen/tests/split_view/browser.toml index d2b498968..af1040a3e 100644 --- a/src/zen/tests/split_view/browser.toml +++ b/src/zen/tests/split_view/browser.toml @@ -9,9 +9,15 @@ support-files = [ ] ["browser_basic_split_view.js"] -["browser_split_inset_checks.js"] -["browser_split_groups.js"] + ["browser_split_browser_duplication.js"] -["browser_split_view_with_glance.js"] -["browser_split_view_with_folders.js"] + +["browser_split_groups.js"] + +["browser_split_inset_checks.js"] + ["browser_split_view_empty.js"] + +["browser_split_view_with_folders.js"] + +["browser_split_view_with_glance.js"] diff --git a/src/zen/tests/tabs/browser.toml b/src/zen/tests/tabs/browser.toml index f383ece5d..ba217cc18 100644 --- a/src/zen/tests/tabs/browser.toml +++ b/src/zen/tests/tabs/browser.toml @@ -7,12 +7,16 @@ support-files = [ "head.js", ] -["browser_tabs_empty_checks.js"] -["browser_tabs_close_recently.js"] -["browser_tabs_fetch_checks.js"] -["browser_tabs_cycle_by_attribute.js"] ["browser_drag_drop_vertical.js"] tags = [ "drag-drop", "vertical-tabs" ] + +["browser_tabs_close_recently.js"] + +["browser_tabs_cycle_by_attribute.js"] + +["browser_tabs_empty_checks.js"] + +["browser_tabs_fetch_checks.js"] diff --git a/src/zen/tests/ub-actions/browser.toml b/src/zen/tests/ub-actions/browser.toml index c3b3936c2..b0915f7ac 100644 --- a/src/zen/tests/ub-actions/browser.toml +++ b/src/zen/tests/ub-actions/browser.toml @@ -2,4 +2,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -["browser_ub_actions_search.js"] \ No newline at end of file +[DEFAULT] + +["browser_ub_actions_search.js"] diff --git a/src/zen/tests/urlbar/browser.toml b/src/zen/tests/urlbar/browser.toml index c451b796e..4f7b7194e 100644 --- a/src/zen/tests/urlbar/browser.toml +++ b/src/zen/tests/urlbar/browser.toml @@ -9,4 +9,5 @@ support-files = [ ] ["browser_floating_urlbar.js"] + ["browser_issue_7385.js"] diff --git a/src/zen/tests/window_sync/browser.toml b/src/zen/tests/window_sync/browser.toml index a25425af3..0a493436d 100644 --- a/src/zen/tests/window_sync/browser.toml +++ b/src/zen/tests/window_sync/browser.toml @@ -8,5 +8,6 @@ support-files = [ "head.js", ] -["browser_sync_tab_open.js"] ["browser_sync_tab_label.js"] + +["browser_sync_tab_open.js"] diff --git a/src/zen/tests/workspaces/browser.toml b/src/zen/tests/workspaces/browser.toml index d97d7ed65..ac77baa44 100644 --- a/src/zen/tests/workspaces/browser.toml +++ b/src/zen/tests/workspaces/browser.toml @@ -9,13 +9,19 @@ support-files = [ ] ["browser_basic_workspaces.js"] -["browser_workspace_bookmarks.js"] -["browser_double_click_newtab.js"] -["browser_overflow_scrollbox.js"] -["browser_issue_8699.js"] -["browser_issue_9900.js"] +["browser_double_click_newtab.js"] + ["browser_issue_10455.js"] +["browser_issue_8699.js"] + +["browser_issue_9900.js"] + +["browser_overflow_scrollbox.js"] + ["browser_private_mode.js"] + ["browser_private_mode_startup.js"] + +["browser_workspace_bookmarks.js"] diff --git a/src/zen/toolkit/common/ZenCommonUtils.cpp b/src/zen/toolkit/common/ZenCommonUtils.cpp index 154f3fbe7..a8d1e478d 100644 --- a/src/zen/toolkit/common/ZenCommonUtils.cpp +++ b/src/zen/toolkit/common/ZenCommonUtils.cpp @@ -25,10 +25,10 @@ using WindowGlobalChild = mozilla::dom::WindowGlobalChild; namespace { /** - * @brief Helper function to fetch the most recent window proxy. - * @param aWindow The window to query. - * @returns The most recent window. - */ + * @brief Helper function to fetch the most recent window proxy. + * @param aWindow The window to query. + * @returns The most recent window. + */ static nsresult GetMostRecentWindowProxy(mozIDOMWindowProxy** aWindow) { nsresult rv; nsCOMPtr med( @@ -40,9 +40,9 @@ static nsresult GetMostRecentWindowProxy(mozIDOMWindowProxy** aWindow) { return NS_ERROR_FAILURE; } /** - * @brief Helper function to query and get a reference to the window. - * @param aWindow The window to query. - */ + * @brief Helper function to query and get a reference to the window. + * @param aWindow The window to query. + */ static nsCOMPtr GetMostRecentWindow() { nsCOMPtr aWindow; nsresult rv = GetMostRecentWindowProxy(getter_AddRefs(aWindow)); @@ -51,12 +51,12 @@ static nsCOMPtr GetMostRecentWindow() { } return aWindow; } -} +} // namespace using mozilla::dom::WindowGlobalChild; #define NS_ZEN_CAN_SHARE_FAILURE() \ - *canShare = false; \ + *canShare = false; \ return NS_OK; NS_IMETHODIMP @@ -80,28 +80,29 @@ ZenCommonUtils::CanShare(bool* canShare) { } NS_IMETHODIMP -ZenCommonUtils::Share(nsIURI* url, const nsACString& title, const nsACString& text, - uint32_t aX, uint32_t aY, uint32_t aWidth, uint32_t aHeight) { +ZenCommonUtils::Share(nsIURI* url, const nsACString& title, + const nsACString& text, uint32_t aX, uint32_t aY, + uint32_t aWidth, uint32_t aHeight) { auto aWindow = GetMostRecentWindow(); if (!aWindow) { return NS_ERROR_NOT_AVAILABLE; } if (!IsSharingSupported()) { - return NS_OK; // We don't want to throw an error here + return NS_OK; // We don't want to throw an error here } return ShareInternal(aWindow, url, title, text, aX, aY, aWidth, aHeight); } -nsresult ZenCommonUtils::ShareInternal(nsCOMPtr& aWindow, nsIURI* url, - const nsACString& title, const nsACString& text, uint32_t aX, uint32_t aY, - uint32_t aWidth, uint32_t aHeight) { +nsresult ZenCommonUtils::ShareInternal(nsCOMPtr& aWindow, + nsIURI* url, const nsACString& title, + const nsACString& text, uint32_t aX, + uint32_t aY, uint32_t aWidth, + uint32_t aHeight) { // We shoud've had done pointer checks before, so we can assume // aWindow is valid. #ifdef NS_ZEN_CAN_SHARE_NATIVE - return ::nsZenNativeShareInternal::ShowNativeDialog( - aWindow, url, title, text, - aX, aY, aWidth, aHeight - ); + return ::nsZenNativeShareInternal::ShowNativeDialog(aWindow, url, title, text, + aX, aY, aWidth, aHeight); #else return NS_ERROR_NOT_IMPLEMENTED; #endif @@ -118,4 +119,4 @@ auto ZenCommonUtils::IsSharingSupported() -> bool { #endif } -} // namespace: zen \ No newline at end of file +} // namespace zen diff --git a/src/zen/toolkit/common/ZenCommonUtils.h b/src/zen/toolkit/common/ZenCommonUtils.h index ac51b5b37..d940d0286 100644 --- a/src/zen/toolkit/common/ZenCommonUtils.h +++ b/src/zen/toolkit/common/ZenCommonUtils.h @@ -40,9 +40,9 @@ class ZenCommonUtils final : public nsIZenCommonUtils { * @returns A promise that resolves when the share is complete. */ static auto ShareInternal(nsCOMPtr& aWindow, nsIURI* url, - const nsACString& title, const nsACString& text, uint32_t aX, uint32_t aY, - uint32_t aWidth, uint32_t aHeight) - -> nsresult; + const nsACString& title, const nsACString& text, + uint32_t aX, uint32_t aY, uint32_t aWidth, + uint32_t aHeight) -> nsresult; /** * @brief Helper function to play haptic feedback. */ @@ -56,6 +56,6 @@ class ZenCommonUtils final : public nsIZenCommonUtils { #endif }; -} // namespace zen +} // namespace zen #endif diff --git a/src/zen/toolkit/common/ZenShareInternal.h b/src/zen/toolkit/common/ZenShareInternal.h index fd0bee5cf..c3c53f5b7 100644 --- a/src/zen/toolkit/common/ZenShareInternal.h +++ b/src/zen/toolkit/common/ZenShareInternal.h @@ -12,26 +12,27 @@ #include "nsIURI.h" #if defined(XP_WIN) || defined(XP_MACOSX) -#define NS_ZEN_CAN_SHARE_NATIVE true +# define NS_ZEN_CAN_SHARE_NATIVE true class nsZenNativeShareInternal final { public: /** - * @brief Use the native share dialog. This only works on Windows and MacOS - * since the native share dialog is not available on other platforms. - * Macos does need pointer coordinates to show the share dialog while - * Windows does not since it just displays a dialog on the middle of the - * screen. - * @param aWindow The window to use for the share dialog. - * @param aUrl The URL to share. - * @param aTitle The title of the share. - * @param aText The text to share. - * @returns void - */ - static auto ShowNativeDialog(nsCOMPtr& aWindow, nsIURI* aUrl, - const nsACString& aTitle, const nsACString& aText, uint32_t aX = 0, uint32_t aY = 0, - uint32_t aWidth = 0, uint32_t aHeight = 0) - -> nsresult; + * @brief Use the native share dialog. This only works on Windows and MacOS + * since the native share dialog is not available on other platforms. + * Macos does need pointer coordinates to show the share dialog while + * Windows does not since it just displays a dialog on the middle of the + * screen. + * @param aWindow The window to use for the share dialog. + * @param aUrl The URL to share. + * @param aTitle The title of the share. + * @param aText The text to share. + * @returns void + */ + static auto ShowNativeDialog(nsCOMPtr& aWindow, + nsIURI* aUrl, const nsACString& aTitle, + const nsACString& aText, uint32_t aX = 0, + uint32_t aY = 0, uint32_t aWidth = 0, + uint32_t aHeight = 0) -> nsresult; nsZenNativeShareInternal() = default; ~nsZenNativeShareInternal() = default; diff --git a/src/zen/toolkit/common/cocoa/ZenHapticFeedback.mm b/src/zen/toolkit/common/cocoa/ZenHapticFeedback.mm index 060b6a426..ae8f3fc16 100644 --- a/src/zen/toolkit/common/cocoa/ZenHapticFeedback.mm +++ b/src/zen/toolkit/common/cocoa/ZenHapticFeedback.mm @@ -21,7 +21,8 @@ namespace zen { nsresult ZenCommonUtils::PlayHapticFeedbackInternal() { NS_OBJC_BEGIN_TRY_BLOCK_RETURN; if (@available(macOS 10.14, *)) { - id performer = [NSHapticFeedbackManager defaultPerformer]; + id performer = + [NSHapticFeedbackManager defaultPerformer]; [performer performFeedbackPattern:NSHapticFeedbackPatternAlignment performanceTime:NSHapticFeedbackPerformanceTimeDefault]; } @@ -29,4 +30,4 @@ nsresult ZenCommonUtils::PlayHapticFeedbackInternal() { NS_OBJC_END_TRY_BLOCK_RETURN(NS_OK); } -} +} // namespace zen diff --git a/src/zen/toolkit/common/cocoa/ZenShareInternal.mm b/src/zen/toolkit/common/cocoa/ZenShareInternal.mm index b59904b69..76f073510 100644 --- a/src/zen/toolkit/common/cocoa/ZenShareInternal.mm +++ b/src/zen/toolkit/common/cocoa/ZenShareInternal.mm @@ -26,8 +26,8 @@ using ::mozilla::widget::WidgetUtils; * @param a_nativeWindow The pointer to the native NSWindow. * @return NS_OK on success, or an error code on failure. */ -static nsresult GetNativeWindowPointerFromDOMWindow(mozIDOMWindowProxy* a_window, - NSWindow** a_nativeWindow) { +static nsresult GetNativeWindowPointerFromDOMWindow( + mozIDOMWindowProxy* a_window, NSWindow** a_nativeWindow) { *a_nativeWindow = nil; if (!a_window) return NS_ERROR_INVALID_ARG; nsPIDOMWindowOuter* win = nsPIDOMWindowOuter::From(a_window); @@ -38,12 +38,12 @@ static nsresult GetNativeWindowPointerFromDOMWindow(mozIDOMWindowProxy* a_window *a_nativeWindow = (NSWindow*)widget->GetNativeData(NS_NATIVE_WINDOW); return NS_OK; } -} +} // namespace zen -auto nsZenNativeShareInternal::ShowNativeDialog(nsCOMPtr& aWindow, - nsIURI* aUrl, const nsACString& aTitle, const nsACString& aText, uint32_t aX, uint32_t aY, - uint32_t aWidth, uint32_t aHeight) - -> nsresult { +auto nsZenNativeShareInternal::ShowNativeDialog( + nsCOMPtr& aWindow, nsIURI* aUrl, + const nsACString& aTitle, const nsACString& aText, uint32_t aX, uint32_t aY, + uint32_t aWidth, uint32_t aHeight) -> nsresult { // Just use the URL since apple doesn't support sharing text // and title in the share dialog nsAutoCString pageUrlAsStringTemp; @@ -53,9 +53,8 @@ auto nsZenNativeShareInternal::ShowNativeDialog(nsCOMPtr& aW } else { pageUrlAsStringTemp.SetIsVoid(true); } - NSURL* pageUrl = nsCocoaUtils::ToNSURL( - NS_ConvertUTF8toUTF16(pageUrlAsStringTemp) - ); + NSURL* pageUrl = + nsCocoaUtils::ToNSURL(NS_ConvertUTF8toUTF16(pageUrlAsStringTemp)); if (!pageUrl || (![pageUrl.scheme isEqualToString:@"https"] && ![pageUrl.scheme isEqualToString:@"http"])) { return NS_ERROR_FAILURE; diff --git a/src/zen/toolkit/common/nsIZenCommonUtils.idl b/src/zen/toolkit/common/nsIZenCommonUtils.idl index 1ceb714c2..bdfa2ac70 100644 --- a/src/zen/toolkit/common/nsIZenCommonUtils.idl +++ b/src/zen/toolkit/common/nsIZenCommonUtils.idl @@ -20,7 +20,7 @@ interface nsIZenCommonUtils : nsISupports { * @param y The y coordinate of the share dialog. * @returns A promise that resolves when the share is complete. */ - void share(in nsIURI url, in ACString title, in ACString text, + void share(in nsIURI url, in ACString title, in ACString text, in uint32_t x, in uint32_t y, in uint32_t width, in uint32_t height); /* * @brief Check if the current context can share data. @@ -33,4 +33,3 @@ interface nsIZenCommonUtils : nsISupports { */ void playHapticFeedback(); }; - diff --git a/src/zen/toolkit/common/windows/ZenShareInternal.cpp b/src/zen/toolkit/common/windows/ZenShareInternal.cpp index 3d7248ac4..29dfcd66b 100644 --- a/src/zen/toolkit/common/windows/ZenShareInternal.cpp +++ b/src/zen/toolkit/common/windows/ZenShareInternal.cpp @@ -7,22 +7,22 @@ namespace zen { /** -* @brief Helper function to convert UTF-8 to UTF-16. -* @param aStr The UTF-8 string to convert. -* @returns The converted UTF-16 string. -*/ + * @brief Helper function to convert UTF-8 to UTF-16. + * @param aStr The UTF-8 string to convert. + * @returns The converted UTF-16 string. + */ inline NS_ConvertUTF8toUTF16 NS_ConvertUTF8toUTF16_MaybeVoid( const nsACString& aStr) { auto str = NS_ConvertUTF8toUTF16(aStr); str.SetIsVoid(aStr.IsVoid()); return str; } -} // namespace: zen +} // namespace zen auto nsZenNativeShareInternal::ShowNativeDialog( - nsCOMPtr& aWindow, nsIURI* aUrl, const nsACString& aTitle, - const nsACString& aText, uint32_t aX, uint32_t aY, uint32_t aWidth, uint32_t aHeight) - -> nsresult { + nsCOMPtr& aWindow, nsIURI* aUrl, + const nsACString& aTitle, const nsACString& aText, uint32_t aX, uint32_t aY, + uint32_t aWidth, uint32_t aHeight) -> nsresult { nsAutoCString urlString; if (aUrl) { nsresult rv = aUrl->GetSpec(urlString); diff --git a/src/zen/vendor/motion.min.mjs b/src/zen/vendor/motion.min.mjs index aa1b6d592..80c0c23f6 100644 --- a/src/zen/vendor/motion.min.mjs +++ b/src/zen/vendor/motion.min.mjs @@ -1 +1,5 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Motion={})}(this,function(t){"use strict";function e(t,e){-1===t.indexOf(e)&&t.push(e)}function n(t,e){const n=t.indexOf(e);n>-1&&t.splice(n,1)}const i=(t,e,n)=>n>e?e:n{},t.invariant=()=>{},"undefined"!=typeof process&&"production"!==process.env?.NODE_ENV&&(t.warning=(t,e,n)=>{t||"undefined"==typeof console||console.warn(s(e,n))},t.invariant=(t,e,n)=>{if(!t)throw new Error(s(e,n))});const o={},r=t=>/^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(t);function a(t){return"object"==typeof t&&null!==t}const l=t=>/^0[^.\s]+$/u.test(t);function c(t){let e;return()=>(void 0===e&&(e=t()),e)}const u=t=>t,h=(t,e)=>n=>e(t(n)),d=(...t)=>t.reduce(h),p=(t,e,n)=>{const i=e-t;return 0===i?1:(n-t)/i};class m{constructor(){this.subscriptions=[]}add(t){return e(this.subscriptions,t),()=>n(this.subscriptions,t)}notify(t,e,n){const i=this.subscriptions.length;if(i)if(1===i)this.subscriptions[0](t,e,n);else for(let s=0;s1e3*t,y=t=>t/1e3;function g(t,e){return e?t*(1e3/e):0}const v=new Set;const x=(t,e,n)=>{const i=e-t;return((n-t)%i+i)%i+t},T=(t,e,n)=>(((1-3*n+3*e)*t+(3*n-6*e))*t+3*e)*t;function w(t,e,n,i){if(t===e&&n===i)return u;const s=e=>function(t,e,n,i,s){let o,r,a=0;do{r=e+(n-e)/2,o=T(r,i,s)-t,o>0?n=r:e=r}while(Math.abs(o)>1e-7&&++a<12);return r}(e,0,1,t,n);return t=>0===t||1===t?t:T(s(t),e,i)}const b=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,S=t=>e=>1-t(1-e),A=w(.33,1.53,.69,.99),V=S(A),P=b(V),E=t=>(t*=2)<1?.5*V(t):.5*(2-Math.pow(2,-10*(t-1))),M=t=>1-Math.sin(Math.acos(t)),k=S(M),D=b(M),R=w(.42,0,1,1),B=w(0,0,.58,1),C=w(.42,0,.58,1);const j=t=>Array.isArray(t)&&"number"!=typeof t[0];function L(t,e){return j(t)?t[x(0,t.length,e)]:t}const O=t=>Array.isArray(t)&&"number"==typeof t[0],F={linear:u,easeIn:R,easeInOut:C,easeOut:B,circIn:M,circInOut:D,circOut:k,backIn:V,backInOut:P,backOut:A,anticipate:E},I=e=>{if(O(e)){t.invariant(4===e.length,"Cubic bezier arrays must contain four numerical values.","cubic-bezier-length");const[n,i,s,o]=e;return w(n,i,s,o)}return"string"==typeof e?(t.invariant(void 0!==F[e],`Invalid easing type '${e}'`,"invalid-easing-type"),F[e]):e},W=["setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender"],N={value:null,addProjectionMetrics:null};function U(t,e){let n=!1,i=!0;const s={delta:0,timestamp:0,isProcessing:!1},r=()=>n=!0,a=W.reduce((t,n)=>(t[n]=function(t,e){let n=new Set,i=new Set,s=!1,o=!1;const r=new WeakSet;let a={delta:0,timestamp:0,isProcessing:!1},l=0;function c(e){r.has(e)&&(u.schedule(e),t()),l++,e(a)}const u={schedule:(t,e=!1,o=!1)=>{const a=o&&s?n:i;return e&&r.add(t),a.has(t)||a.add(t),t},cancel:t=>{i.delete(t),r.delete(t)},process:t=>{a=t,s?o=!0:(s=!0,[n,i]=[i,n],n.forEach(c),e&&N.value&&N.value.frameloop[e].push(l),l=0,n.clear(),s=!1,o&&(o=!1,u.process(t)))}};return u}(r,e?n:void 0),t),{}),{setup:l,read:c,resolveKeyframes:u,preUpdate:h,update:d,preRender:p,render:m,postRender:f}=a,y=()=>{const r=o.useManualTiming?s.timestamp:performance.now();n=!1,o.useManualTiming||(s.delta=i?1e3/60:Math.max(Math.min(r-s.timestamp,40),1)),s.timestamp=r,s.isProcessing=!0,l.process(s),c.process(s),u.process(s),h.process(s),d.process(s),p.process(s),m.process(s),f.process(s),s.isProcessing=!1,n&&e&&(i=!1,t(y))};return{schedule:W.reduce((e,o)=>{const r=a[o];return e[o]=(e,o=!1,a=!1)=>(n||(n=!0,i=!0,s.isProcessing||t(y)),r.schedule(e,o,a)),e},{}),cancel:t=>{for(let e=0;e(void 0===X&&G.set(K.isProcessing||o.useManualTiming?K.timestamp:performance.now()),X),set:t=>{X=t,queueMicrotask(H)}},q={layout:0,mainThread:0,waapi:0},Z=t=>e=>"string"==typeof e&&e.startsWith(t),_=Z("--"),J=Z("var(--"),Q=t=>!!J(t)&&tt.test(t.split("/*")[0].trim()),tt=/var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;function et(t){return"string"==typeof t&&t.split("/*")[0].includes("var(--")}const nt={test:t=>"number"==typeof t,parse:parseFloat,transform:t=>t},it={...nt,transform:t=>i(0,1,t)},st={...nt,default:1},ot=t=>Math.round(1e5*t)/1e5,rt=/-?(?:\d+(?:\.\d+)?|\.\d+)/gu;const at=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu,lt=(t,e)=>n=>Boolean("string"==typeof n&&at.test(n)&&n.startsWith(t)||e&&!function(t){return null==t}(n)&&Object.prototype.hasOwnProperty.call(n,e)),ct=(t,e,n)=>i=>{if("string"!=typeof i)return i;const[s,o,r,a]=i.match(rt);return{[t]:parseFloat(s),[e]:parseFloat(o),[n]:parseFloat(r),alpha:void 0!==a?parseFloat(a):1}},ut={...nt,transform:t=>Math.round((t=>i(0,255,t))(t))},ht={test:lt("rgb","red"),parse:ct("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:i=1})=>"rgba("+ut.transform(t)+", "+ut.transform(e)+", "+ut.transform(n)+", "+ot(it.transform(i))+")"};const dt={test:lt("#"),parse:function(t){let e="",n="",i="",s="";return t.length>5?(e=t.substring(1,3),n=t.substring(3,5),i=t.substring(5,7),s=t.substring(7,9)):(e=t.substring(1,2),n=t.substring(2,3),i=t.substring(3,4),s=t.substring(4,5),e+=e,n+=n,i+=i,s+=s),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(i,16),alpha:s?parseInt(s,16)/255:1}},transform:ht.transform},pt=t=>({test:e=>"string"==typeof e&&e.endsWith(t)&&1===e.split(" ").length,parse:parseFloat,transform:e=>`${e}${t}`}),mt=pt("deg"),ft=pt("%"),yt=pt("px"),gt=pt("vh"),vt=pt("vw"),xt=(()=>({...ft,parse:t=>ft.parse(t)/100,transform:t=>ft.transform(100*t)}))(),Tt={test:lt("hsl","hue"),parse:ct("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:i=1})=>"hsla("+Math.round(t)+", "+ft.transform(ot(e))+", "+ft.transform(ot(n))+", "+ot(it.transform(i))+")"},wt={test:t=>ht.test(t)||dt.test(t)||Tt.test(t),parse:t=>ht.test(t)?ht.parse(t):Tt.test(t)?Tt.parse(t):dt.parse(t),transform:t=>"string"==typeof t?t:t.hasOwnProperty("red")?ht.transform(t):Tt.transform(t),getAnimatableNone:t=>{const e=wt.parse(t);return e.alpha=0,wt.transform(e)}},bt=/(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu;const St="number",At="color",Vt=/var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu;function Pt(t){const e=t.toString(),n=[],i={color:[],number:[],var:[]},s=[];let o=0;const r=e.replace(Vt,t=>(wt.test(t)?(i.color.push(o),s.push(At),n.push(wt.parse(t))):t.startsWith("var(")?(i.var.push(o),s.push("var"),n.push(t)):(i.number.push(o),s.push(St),n.push(parseFloat(t))),++o,"${}")).split("${}");return{values:n,split:r,indexes:i,types:s}}function Et(t){return Pt(t).values}function Mt(t){const{split:e,types:n}=Pt(t),i=e.length;return t=>{let s="";for(let o=0;o"number"==typeof t?0:wt.test(t)?wt.getAnimatableNone(t):t;const Dt={test:function(t){return isNaN(t)&&"string"==typeof t&&(t.match(rt)?.length||0)+(t.match(bt)?.length||0)>0},parse:Et,createTransformer:Mt,getAnimatableNone:function(t){const e=Et(t);return Mt(t)(e.map(kt))}};function Rt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Bt({hue:t,saturation:e,lightness:n,alpha:i}){t/=360,n/=100;let s=0,o=0,r=0;if(e/=100){const i=n<.5?n*(1+e):n+e-n*e,a=2*n-i;s=Rt(a,i,t+1/3),o=Rt(a,i,t),r=Rt(a,i,t-1/3)}else s=o=r=n;return{red:Math.round(255*s),green:Math.round(255*o),blue:Math.round(255*r),alpha:i}}function Ct(t,e){return n=>n>0?e:t}const jt=(t,e,n)=>t+(e-t)*n,Lt=(t,e,n)=>{const i=t*t,s=n*(e*e-i)+i;return s<0?0:Math.sqrt(s)},Ot=[dt,ht,Tt];function Ft(e){const n=(i=e,Ot.find(t=>t.test(i)));var i;if(t.warning(Boolean(n),`'${e}' is not an animatable color. Use the equivalent color code instead.`,"color-not-animatable"),!Boolean(n))return!1;let s=n.parse(e);return n===Tt&&(s=Bt(s)),s}const It=(t,e)=>{const n=Ft(t),i=Ft(e);if(!n||!i)return Ct(t,e);const s={...n};return t=>(s.red=Lt(n.red,i.red,t),s.green=Lt(n.green,i.green,t),s.blue=Lt(n.blue,i.blue,t),s.alpha=jt(n.alpha,i.alpha,t),ht.transform(s))},Wt=new Set(["none","hidden"]);function Nt(t,e){return Wt.has(t)?n=>n<=0?t:e:n=>n>=1?e:t}function Ut(t,e){return n=>jt(t,e,n)}function $t(t){return"number"==typeof t?Ut:"string"==typeof t?Q(t)?Ct:wt.test(t)?It:Yt:Array.isArray(t)?zt:"object"==typeof t?wt.test(t)?It:Kt:Ct}function zt(t,e){const n=[...t],i=n.length,s=t.map((t,n)=>$t(t)(t,e[n]));return t=>{for(let e=0;e{for(const e in i)n[e]=i[e](t);return n}}const Yt=(e,n)=>{const i=Dt.createTransformer(n),s=Pt(e),o=Pt(n);return s.indexes.var.length===o.indexes.var.length&&s.indexes.color.length===o.indexes.color.length&&s.indexes.number.length>=o.indexes.number.length?Wt.has(e)&&!o.values.length||Wt.has(n)&&!s.values.length?Nt(e,n):d(zt(function(t,e){const n=[],i={color:0,var:0,number:0};for(let s=0;s{const e=({timestamp:e})=>t(e);return{start:(t=!0)=>$.update(e,t),stop:()=>z(e),now:()=>K.isProcessing?K.timestamp:G.now()}},Gt=(t,e,n=10)=>{let i="";const s=Math.max(Math.round(e/n),2);for(let e=0;e=qt?1/0:e}function _t(t,e=100,n){const i=n({...t,keyframes:[0,e]}),s=Math.min(Zt(i),qt);return{type:"keyframes",ease:t=>i.next(s*t).value/e,duration:y(s)}}function Jt(t,e,n){const i=Math.max(e-5,0);return g(n-t(i),e-i)}const Qt=100,te=10,ee=1,ne=0,ie=800,se=.3,oe=.3,re={granular:.01,default:2},ae={granular:.005,default:.5},le=.01,ce=10,ue=.05,he=1,de=.001;function pe({duration:e=ie,bounce:n=se,velocity:s=ne,mass:o=ee}){let r,a;t.warning(e<=f(ce),"Spring duration must be 10 seconds or less","spring-duration-limit");let l=1-n;l=i(ue,he,l),e=i(le,ce,y(e)),l<1?(r=t=>{const n=t*l,i=n*e,o=n-s,r=fe(t,l),a=Math.exp(-i);return de-o/r*a},a=t=>{const n=t*l*e,i=n*s+s,o=Math.pow(l,2)*Math.pow(t,2)*e,a=Math.exp(-n),c=fe(Math.pow(t,2),l);return(-r(t)+de>0?-1:1)*((i-o)*a)/c}):(r=t=>Math.exp(-t*e)*((t-s)*e+1)-.001,a=t=>Math.exp(-t*e)*(e*e*(s-t)));const c=function(t,e,n){let i=n;for(let n=1;nvoid 0!==t[e])}function xe(t=oe,e=se){const n="object"!=typeof t?{visualDuration:t,keyframes:[0,1],bounce:e}:t;let{restSpeed:s,restDelta:o}=n;const r=n.keyframes[0],a=n.keyframes[n.keyframes.length-1],l={done:!1,value:r},{stiffness:c,damping:u,mass:h,duration:d,velocity:p,isResolvedFromDuration:m}=function(t){let e={velocity:ne,stiffness:Qt,damping:te,mass:ee,isResolvedFromDuration:!1,...t};if(!ve(t,ge)&&ve(t,ye))if(e.velocity=0,t.visualDuration){const n=t.visualDuration,s=2*Math.PI/(1.2*n),o=s*s,r=2*i(.05,1,1-(t.bounce||0))*Math.sqrt(o);e={...e,mass:ee,stiffness:o,damping:r}}else{const n=pe({...t,velocity:0});e={...e,...n,mass:ee},e.isResolvedFromDuration=!0}return e}({...n,velocity:-y(n.velocity||0)}),g=p||0,v=u/(2*Math.sqrt(c*h)),x=a-r,T=y(Math.sqrt(c/h)),w=Math.abs(x)<5;let b;if(s||(s=w?re.granular:re.default),o||(o=w?ae.granular:ae.default),v<1){const t=fe(T,v);b=e=>{const n=Math.exp(-v*T*e);return a-n*((g+v*T*x)/t*Math.sin(t*e)+x*Math.cos(t*e))}}else if(1===v)b=t=>a-Math.exp(-T*t)*(x+(g+T*x)*t);else{const t=T*Math.sqrt(v*v-1);b=e=>{const n=Math.exp(-v*T*e),i=Math.min(t*e,300);return a-n*((g+v*T*x)*Math.sinh(i)+t*x*Math.cosh(i))/t}}const S={calculatedDuration:m&&d||null,next:t=>{const e=b(t);if(m)l.done=t>=d;else{let n=0===t?g:0;v<1&&(n=0===t?f(g):Jt(b,t,e));const i=Math.abs(n)<=s,r=Math.abs(a-e)<=o;l.done=i&&r}return l.value=l.done?a:e,l},toString:()=>{const t=Math.min(Zt(S),qt),e=Gt(e=>S.next(t*e).value,t,30);return t+"ms "+e},toTransition:()=>{}};return S}function Te({keyframes:t,velocity:e=0,power:n=.8,timeConstant:i=325,bounceDamping:s=10,bounceStiffness:o=500,modifyTarget:r,min:a,max:l,restDelta:c=.5,restSpeed:u}){const h=t[0],d={done:!1,value:h},p=t=>void 0===a?l:void 0===l||Math.abs(a-t)-m*Math.exp(-t/i),v=t=>y+g(t),x=t=>{const e=g(t),n=v(t);d.done=Math.abs(e)<=c,d.value=d.done?y:n};let T,w;const b=t=>{var e;(e=d.value,void 0!==a&&el)&&(T=t,w=xe({keyframes:[d.value,p(d.value)],velocity:Jt(v,t,d.value),damping:s,stiffness:o,restDelta:c,restSpeed:u}))};return b(0),{calculatedDuration:null,next:t=>{let e=!1;return w||void 0!==T||(e=!0,x(t),b(t)),void 0!==T&&t>=T?w.next(t-T):(!e&&x(t),d)}}}function we(e,n,{clamp:s=!0,ease:r,mixer:a}={}){const l=e.length;if(t.invariant(l===n.length,"Both input and output ranges must be the same length","range-length"),1===l)return()=>n[0];if(2===l&&n[0]===n[1])return()=>n[1];const c=e[0]===e[1];e[0]>e[l-1]&&(e=[...e].reverse(),n=[...n].reverse());const h=function(t,e,n){const i=[],s=n||o.mix||Xt,r=t.length-1;for(let n=0;n{if(c&&t1)for(;if(i(e[0],e[l-1],t)):f}function be(t,e){const n=t[t.length-1];for(let i=1;i<=e;i++){const s=p(0,e,i);t.push(jt(n,1,s))}}function Se(t){const e=[0];return be(e,t.length-1),e}function Ae(t,e){return t.map(t=>t*e)}function Ve(t,e){return t.map(()=>e||C).splice(0,t.length-1)}function Pe({duration:t=300,keyframes:e,times:n,ease:i="easeInOut"}){const s=j(i)?i.map(I):I(i),o={done:!1,value:e[0]},r=we(Ae(n&&n.length===e.length?n:Se(e),t),e,{ease:Array.isArray(s)?s:Ve(e,s)});return{calculatedDuration:t,next:e=>(o.value=r(e),o.done=e>=t,o)}}xe.applyToOptions=t=>{const e=_t(t,100,xe);return t.ease=e.ease,t.duration=f(e.duration),t.type="keyframes",t};const Ee=t=>null!==t;function Me(t,{repeat:e,repeatType:n="loop"},i,s=1){const o=t.filter(Ee),r=s<0||e&&"loop"!==n&&e%2==1?0:o.length-1;return r&&void 0!==i?i:o[r]}const ke={decay:Te,inertia:Te,tween:Pe,keyframes:Pe,spring:xe};function De(t){"string"==typeof t.type&&(t.type=ke[t.type])}class Re{constructor(){this.updateFinished()}get finished(){return this._finished}updateFinished(){this._finished=new Promise(t=>{this.resolve=t})}notifyFinished(){this.resolve()}then(t,e){return this.finished.then(t,e)}}const Be=t=>t/100;class Ce extends Re{constructor(t){super(),this.state="idle",this.startTime=null,this.isStopped=!1,this.currentTime=0,this.holdTime=null,this.playbackSpeed=1,this.stop=()=>{const{motionValue:t}=this.options;t&&t.updatedAt!==G.now()&&this.tick(G.now()),this.isStopped=!0,"idle"!==this.state&&(this.teardown(),this.options.onStop?.())},q.mainThread++,this.options=t,this.initAnimation(),this.play(),!1===t.autoplay&&this.pause()}initAnimation(){const{options:t}=this;De(t);const{type:e=Pe,repeat:n=0,repeatDelay:i=0,repeatType:s,velocity:o=0}=t;let{keyframes:r}=t;const a=e||Pe;a!==Pe&&"number"!=typeof r[0]&&(this.mixKeyframes=d(Be,Xt(r[0],r[1])),r=[0,100]);const l=a({...t,keyframes:r});"mirror"===s&&(this.mirroredGenerator=a({...t,keyframes:[...r].reverse(),velocity:-o})),null===l.calculatedDuration&&(l.calculatedDuration=Zt(l));const{calculatedDuration:c}=l;this.calculatedDuration=c,this.resolvedDuration=c+i,this.totalDuration=this.resolvedDuration*(n+1)-i,this.generator=l}updateTime(t){const e=Math.round(t-this.startTime)*this.playbackSpeed;null!==this.holdTime?this.currentTime=this.holdTime:this.currentTime=e}tick(t,e=!1){const{generator:n,totalDuration:s,mixKeyframes:o,mirroredGenerator:r,resolvedDuration:a,calculatedDuration:l}=this;if(null===this.startTime)return n.next(0);const{delay:c=0,keyframes:u,repeat:h,repeatType:d,repeatDelay:p,type:m,onUpdate:f,finalKeyframe:y}=this.options;this.speed>0?this.startTime=Math.min(this.startTime,t):this.speed<0&&(this.startTime=Math.min(t-s/this.speed,this.startTime)),e?this.currentTime=t:this.updateTime(t);const g=this.currentTime-c*(this.playbackSpeed>=0?1:-1),v=this.playbackSpeed>=0?g<0:g>s;this.currentTime=Math.max(g,0),"finished"===this.state&&null===this.holdTime&&(this.currentTime=s);let x=this.currentTime,T=n;if(h){const t=Math.min(this.currentTime,s)/a;let e=Math.floor(t),n=t%1;!n&&t>=1&&(n=1),1===n&&e--,e=Math.min(e,h+1);Boolean(e%2)&&("reverse"===d?(n=1-n,p&&(n-=p/a)):"mirror"===d&&(T=r)),x=i(0,1,n)*a}const w=v?{done:!1,value:u[0]}:T.next(x);o&&(w.value=o(w.value));let{done:b}=w;v||null===l||(b=this.playbackSpeed>=0?this.currentTime>=s:this.currentTime<=0);const S=null===this.holdTime&&("finished"===this.state||"running"===this.state&&b);return S&&m!==Te&&(w.value=Me(u,this.options,y,this.speed)),f&&f(w.value),S&&this.finish(),w}then(t,e){return this.finished.then(t,e)}get duration(){return y(this.calculatedDuration)}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+y(t)}get time(){return y(this.currentTime)}set time(t){t=f(t),this.currentTime=t,null===this.startTime||null!==this.holdTime||0===this.playbackSpeed?this.holdTime=t:this.driver&&(this.startTime=this.driver.now()-t/this.playbackSpeed),this.driver?.start(!1)}get speed(){return this.playbackSpeed}set speed(t){this.updateTime(G.now());const e=this.playbackSpeed!==t;this.playbackSpeed=t,e&&(this.time=y(this.currentTime))}play(){if(this.isStopped)return;const{driver:t=Ht,startTime:e}=this.options;this.driver||(this.driver=t(t=>this.tick(t))),this.options.onPlay?.();const n=this.driver.now();"finished"===this.state?(this.updateFinished(),this.startTime=n):null!==this.holdTime?this.startTime=n-this.holdTime:this.startTime||(this.startTime=e??n),"finished"===this.state&&this.speed<0&&(this.startTime+=this.calculatedDuration),this.holdTime=null,this.state="running",this.driver.start()}pause(){this.state="paused",this.updateTime(G.now()),this.holdTime=this.currentTime}complete(){"running"!==this.state&&this.play(),this.state="finished",this.holdTime=null}finish(){this.notifyFinished(),this.teardown(),this.state="finished",this.options.onComplete?.()}cancel(){this.holdTime=null,this.startTime=0,this.tick(0),this.teardown(),this.options.onCancel?.()}teardown(){this.state="idle",this.stopDriver(),this.startTime=this.holdTime=null,q.mainThread--}stopDriver(){this.driver&&(this.driver.stop(),this.driver=void 0)}sample(t){return this.startTime=0,this.tick(t,!0)}attachTimeline(t){return this.options.allowFlatten&&(this.options.type="keyframes",this.options.ease="linear",this.initAnimation()),this.driver?.stop(),t.observe(this)}}function je(t){for(let e=1;e180*t/Math.PI,Oe=t=>{const e=Le(Math.atan2(t[1],t[0]));return Ie(e)},Fe={x:4,y:5,translateX:4,translateY:5,scaleX:0,scaleY:3,scale:t=>(Math.abs(t[0])+Math.abs(t[3]))/2,rotate:Oe,rotateZ:Oe,skewX:t=>Le(Math.atan(t[1])),skewY:t=>Le(Math.atan(t[2])),skew:t=>(Math.abs(t[1])+Math.abs(t[2]))/2},Ie=t=>((t%=360)<0&&(t+=360),t),We=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]),Ne=t=>Math.sqrt(t[4]*t[4]+t[5]*t[5]),Ue={x:12,y:13,z:14,translateX:12,translateY:13,translateZ:14,scaleX:We,scaleY:Ne,scale:t=>(We(t)+Ne(t))/2,rotateX:t=>Ie(Le(Math.atan2(t[6],t[5]))),rotateY:t=>Ie(Le(Math.atan2(-t[2],t[0]))),rotateZ:Oe,rotate:Oe,skewX:t=>Le(Math.atan(t[4])),skewY:t=>Le(Math.atan(t[1])),skew:t=>(Math.abs(t[1])+Math.abs(t[4]))/2};function $e(t){return t.includes("scale")?1:0}function ze(t,e){if(!t||"none"===t)return $e(e);const n=t.match(/^matrix3d\(([-\d.e\s,]+)\)$/u);let i,s;if(n)i=Ue,s=n;else{const e=t.match(/^matrix\(([-\d.e\s,]+)\)$/u);i=Fe,s=e}if(!s)return $e(e);const o=i[e],r=s[1].split(",").map(Ye);return"function"==typeof o?o(r):r[o]}const Ke=(t,e)=>{const{transform:n="none"}=getComputedStyle(t);return ze(n,e)};function Ye(t){return parseFloat(t.trim())}const Xe=["transformPerspective","x","y","z","translateX","translateY","translateZ","scale","scaleX","scaleY","rotate","rotateX","rotateY","rotateZ","skew","skewX","skewY"],He=(()=>new Set(Xe))(),Ge=t=>t===nt||t===yt,qe=new Set(["x","y","z"]),Ze=Xe.filter(t=>!qe.has(t));const _e={width:({x:t},{paddingLeft:e="0",paddingRight:n="0"})=>t.max-t.min-parseFloat(e)-parseFloat(n),height:({y:t},{paddingTop:e="0",paddingBottom:n="0"})=>t.max-t.min-parseFloat(e)-parseFloat(n),top:(t,{top:e})=>parseFloat(e),left:(t,{left:e})=>parseFloat(e),bottom:({y:t},{top:e})=>parseFloat(e)+(t.max-t.min),right:({x:t},{left:e})=>parseFloat(e)+(t.max-t.min),x:(t,{transform:e})=>ze(e,"x"),y:(t,{transform:e})=>ze(e,"y")};_e.translateX=_e.x,_e.translateY=_e.y;const Je=new Set;let Qe=!1,tn=!1,en=!1;function nn(){if(tn){const t=Array.from(Je).filter(t=>t.needsMeasurement),e=new Set(t.map(t=>t.element)),n=new Map;e.forEach(t=>{const e=function(t){const e=[];return Ze.forEach(n=>{const i=t.getValue(n);void 0!==i&&(e.push([n,i.get()]),i.set(n.startsWith("scale")?1:0))}),e}(t);e.length&&(n.set(t,e),t.render())}),t.forEach(t=>t.measureInitialState()),e.forEach(t=>{t.render();const e=n.get(t);e&&e.forEach(([e,n])=>{t.getValue(e)?.set(n)})}),t.forEach(t=>t.measureEndState()),t.forEach(t=>{void 0!==t.suspendedScrollY&&window.scrollTo(0,t.suspendedScrollY)})}tn=!1,Qe=!1,Je.forEach(t=>t.complete(en)),Je.clear()}function sn(){Je.forEach(t=>{t.readKeyframes(),t.needsMeasurement&&(tn=!0)})}function on(){en=!0,sn(),nn(),en=!1}class rn{constructor(t,e,n,i,s,o=!1){this.state="pending",this.isAsync=!1,this.needsMeasurement=!1,this.unresolvedKeyframes=[...t],this.onComplete=e,this.name=n,this.motionValue=i,this.element=s,this.isAsync=o}scheduleResolve(){this.state="scheduled",this.isAsync?(Je.add(this),Qe||(Qe=!0,$.read(sn),$.resolveKeyframes(nn))):(this.readKeyframes(),this.complete())}readKeyframes(){const{unresolvedKeyframes:t,name:e,element:n,motionValue:i}=this;if(null===t[0]){const s=i?.get(),o=t[t.length-1];if(void 0!==s)t[0]=s;else if(n&&e){const i=n.readValue(e,o);null!=i&&(t[0]=i)}void 0===t[0]&&(t[0]=o),i&&void 0===s&&i.set(t[0])}je(t)}setFinalKeyframe(){}measureInitialState(){}renderEndStyles(){}measureEndState(){}complete(t=!1){this.state="complete",this.onComplete(this.unresolvedKeyframes,this.finalKeyframe,t),Je.delete(this)}cancel(){"scheduled"===this.state&&(Je.delete(this),this.state="pending")}resume(){"pending"===this.state&&this.scheduleResolve()}}const an=t=>t.startsWith("--");function ln(t,e,n){an(e)?t.style.setProperty(e,n):t.style[e]=n}const cn={};function un(t,e){const n=c(t);return()=>cn[e]??n()}const hn=un(()=>void 0!==window.ScrollTimeline,"scrollTimeline"),dn=un(()=>{try{document.createElement("div").animate({opacity:0},{easing:"linear(0, 1)"})}catch(t){return!1}return!0},"linearEasing"),pn=([t,e,n,i])=>`cubic-bezier(${t}, ${e}, ${n}, ${i})`,mn={linear:"linear",ease:"ease",easeIn:"ease-in",easeOut:"ease-out",easeInOut:"ease-in-out",circIn:pn([0,.65,.55,1]),circOut:pn([.55,0,1,.45]),backIn:pn([.31,.01,.66,-.59]),backOut:pn([.33,1.53,.69,.99])};function fn(t,e){return t?"function"==typeof t?dn()?Gt(t,e):"ease-out":O(t)?pn(t):Array.isArray(t)?t.map(t=>fn(t,e)||mn.easeOut):mn[t]:void 0}function yn(t,e,n,{delay:i=0,duration:s=300,repeat:o=0,repeatType:r="loop",ease:a="easeOut",times:l}={},c=void 0){const u={[e]:n};l&&(u.offset=l);const h=fn(a,s);Array.isArray(h)&&(u.easing=h),N.value&&q.waapi++;const d={delay:i,duration:s,easing:Array.isArray(h)?"linear":h,fill:"both",iterations:o+1,direction:"reverse"===r?"alternate":"normal"};c&&(d.pseudoElement=c);const p=t.animate(u,d);return N.value&&p.finished.finally(()=>{q.waapi--}),p}function gn(t){return"function"==typeof t&&"applyToOptions"in t}function vn({type:t,...e}){return gn(t)&&dn()?t.applyToOptions(e):(e.duration??(e.duration=300),e.ease??(e.ease="easeOut"),e)}class xn extends Re{constructor(e){if(super(),this.finishedTime=null,this.isStopped=!1,this.manualStartTime=null,!e)return;const{element:n,name:i,keyframes:s,pseudoElement:o,allowFlatten:r=!1,finalKeyframe:a,onComplete:l}=e;this.isPseudoElement=Boolean(o),this.allowFlatten=r,this.options=e,t.invariant("string"!=typeof e.type,'Mini animate() doesn\'t support "type" as a string.',"mini-spring");const c=vn(e);this.animation=yn(n,i,s,c,o),!1===c.autoplay&&this.animation.pause(),this.animation.onfinish=()=>{if(this.finishedTime=this.time,!o){const t=Me(s,this.options,a,this.speed);this.updateMotionValue?this.updateMotionValue(t):ln(n,i,t),this.animation.cancel()}l?.(),this.notifyFinished()}}play(){this.isStopped||(this.manualStartTime=null,this.animation.play(),"finished"===this.state&&this.updateFinished())}pause(){this.animation.pause()}complete(){this.animation.finish?.()}cancel(){try{this.animation.cancel()}catch(t){}}stop(){if(this.isStopped)return;this.isStopped=!0;const{state:t}=this;"idle"!==t&&"finished"!==t&&(this.updateMotionValue?this.updateMotionValue():this.commitStyles(),this.isPseudoElement||this.cancel())}commitStyles(){const t=this.options?.element;!this.isPseudoElement&&t?.isConnected&&this.animation.commitStyles?.()}get duration(){const t=this.animation.effect?.getComputedTiming?.().duration||0;return y(Number(t))}get iterationDuration(){const{delay:t=0}=this.options||{};return this.duration+y(t)}get time(){return y(Number(this.animation.currentTime)||0)}set time(t){this.manualStartTime=null,this.finishedTime=null,this.animation.currentTime=f(t)}get speed(){return this.animation.playbackRate}set speed(t){t<0&&(this.finishedTime=null),this.animation.playbackRate=t}get state(){return null!==this.finishedTime?"finished":this.animation.playState}get startTime(){return this.manualStartTime??Number(this.animation.startTime)}set startTime(t){this.manualStartTime=this.animation.startTime=t}attachTimeline({timeline:t,observe:e}){return this.allowFlatten&&this.animation.effect?.updateTiming({easing:"linear"}),this.animation.onfinish=null,t&&hn()?(this.animation.timeline=t,u):e(this)}}const Tn={anticipate:E,backInOut:P,circInOut:D};function wn(t){"string"==typeof t.ease&&t.ease in Tn&&(t.ease=Tn[t.ease])}class bn extends xn{constructor(t){wn(t),De(t),super(t),void 0!==t.startTime&&(this.startTime=t.startTime),this.options=t}updateMotionValue(t){const{motionValue:e,onUpdate:n,onComplete:s,element:o,...r}=this.options;if(!e)return;if(void 0!==t)return void e.set(t);const a=new Ce({...r,autoplay:!1}),l=Math.max(10,G.now()-this.startTime),c=i(0,10,l-10);e.setWithVelocity(a.sample(Math.max(0,l-c)).value,a.sample(l).value,c),a.stop()}}const Sn=(t,e)=>"zIndex"!==e&&(!("number"!=typeof t&&!Array.isArray(t))||!("string"!=typeof t||!Dt.test(t)&&"0"!==t||t.startsWith("url(")));function An(t){t.duration=0,t.type="keyframes"}const Vn=new Set(["opacity","clipPath","filter","transform"]),Pn=c(()=>Object.hasOwnProperty.call(Element.prototype,"animate"));function En(t){const{motionValue:e,name:n,repeatDelay:i,repeatType:s,damping:o,type:r}=t,a=e?.owner?.current;if(!(a instanceof HTMLElement))return!1;const{onUpdate:l,transformTemplate:c}=e.owner.getProps();return Pn()&&n&&Vn.has(n)&&("transform"!==n||!c)&&!l&&!i&&"mirror"!==s&&0!==o&&"inertia"!==r}class Mn extends Re{constructor({autoplay:t=!0,delay:e=0,type:n="keyframes",repeat:i=0,repeatDelay:s=0,repeatType:o="loop",keyframes:r,name:a,motionValue:l,element:c,...u}){super(),this.stop=()=>{this._animation&&(this._animation.stop(),this.stopTimeline?.()),this.keyframeResolver?.cancel()},this.createdAt=G.now();const h={autoplay:t,delay:e,type:n,repeat:i,repeatDelay:s,repeatType:o,name:a,motionValue:l,element:c,...u},d=c?.KeyframeResolver||rn;this.keyframeResolver=new d(r,(t,e,n)=>this.onKeyframesResolved(t,e,h,!n),a,l,c),this.keyframeResolver?.scheduleResolve()}onKeyframesResolved(e,n,i,s){this.keyframeResolver=void 0;const{name:r,type:a,velocity:l,delay:c,isHandoff:h,onUpdate:d}=i;this.resolvedAt=G.now(),function(e,n,i,s){const o=e[0];if(null===o)return!1;if("display"===n||"visibility"===n)return!0;const r=e[e.length-1],a=Sn(o,n),l=Sn(r,n);return t.warning(a===l,`You are trying to animate ${n} from "${o}" to "${r}". "${a?r:o}" is not an animatable value.`,"value-not-animatable"),!(!a||!l)&&(function(t){const e=t[0];if(1===t.length)return!0;for(let n=0;n40?this.resolvedAt:this.createdAt:void 0,finalKeyframe:n,...i,keyframes:e},m=!h&&En(p),f=p.motionValue?.owner?.current,y=m?new bn({...p,element:f}):new Ce(p);y.finished.then(()=>{this.notifyFinished()}).catch(u),this.pendingTimeline&&(this.stopTimeline=y.attachTimeline(this.pendingTimeline),this.pendingTimeline=void 0),this._animation=y}get finished(){return this._animation?this.animation.finished:this._finished}then(t,e){return this.finished.finally(t).then(()=>{})}get animation(){return this._animation||(this.keyframeResolver?.resume(),on()),this._animation}get duration(){return this.animation.duration}get iterationDuration(){return this.animation.iterationDuration}get time(){return this.animation.time}set time(t){this.animation.time=t}get speed(){return this.animation.speed}get state(){return this.animation.state}set speed(t){this.animation.speed=t}get startTime(){return this.animation.startTime}attachTimeline(t){return this._animation?this.stopTimeline=this.animation.attachTimeline(t):this.pendingTimeline=t,()=>this.stop()}play(){this.animation.play()}pause(){this.animation.pause()}complete(){this.animation.complete()}cancel(){this._animation&&this.animation.cancel(),this.keyframeResolver?.cancel()}}class kn{constructor(t){this.stop=()=>this.runAll("stop"),this.animations=t.filter(Boolean)}get finished(){return Promise.all(this.animations.map(t=>t.finished))}getAll(t){return this.animations[0][t]}setAll(t,e){for(let n=0;ne.attachTimeline(t));return()=>{e.forEach((t,e)=>{t&&t(),this.animations[e].stop()})}}get time(){return this.getAll("time")}set time(t){this.setAll("time",t)}get speed(){return this.getAll("speed")}set speed(t){this.setAll("speed",t)}get state(){return this.getAll("state")}get startTime(){return this.getAll("startTime")}get duration(){return Dn(this.animations,"duration")}get iterationDuration(){return Dn(this.animations,"iterationDuration")}runAll(t){this.animations.forEach(e=>e[t]())}play(){this.runAll("play")}pause(){this.runAll("pause")}cancel(){this.runAll("cancel")}complete(){this.runAll("complete")}}function Dn(t,e){let n=0;for(let i=0;in&&(n=s)}return n}class Rn extends kn{then(t,e){return this.finished.finally(t).then(()=>{})}}class Bn extends xn{constructor(t){super(),this.animation=t,t.onfinish=()=>{this.finishedTime=this.time,this.notifyFinished()}}}const Cn=new WeakMap,jn=(t,e="")=>`${t}:${e}`;function Ln(t){const e=Cn.get(t)||new Map;return Cn.set(t,e),e}function On(t,e,n,i=0,s=1){const o=Array.from(t).sort((t,e)=>t.sortNodePosition(e)).indexOf(e),r=t.size,a=(r-1)*i;return"function"==typeof n?n(o,r):1===s?o*i:a-o*i}const Fn=/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;function In(t){const e=Fn.exec(t);if(!e)return[,];const[,n,i,s]=e;return[`--${n??i}`,s]}function Wn(e,n,i=1){t.invariant(i<=4,`Max CSS variable fallback depth detected in property "${e}". This may indicate a circular fallback dependency.`,"max-css-var-depth");const[s,o]=In(e);if(!s)return;const a=window.getComputedStyle(n).getPropertyValue(s);if(a){const t=a.trim();return r(t)?parseFloat(t):t}return Q(o)?Wn(o,n,i+1):o}const Nn={type:"spring",stiffness:500,damping:25,restSpeed:10},Un={type:"keyframes",duration:.8},$n={type:"keyframes",ease:[.25,.1,.35,1],duration:.3},zn=(t,{keyframes:e})=>e.length>2?Un:He.has(t)?t.startsWith("scale")?{type:"spring",stiffness:550,damping:0===e[1]?2*Math.sqrt(550):30,restSpeed:10}:Nn:$n,Kn=t=>null!==t;function Yn(t,{repeat:e,repeatType:n="loop"},i){const s=t.filter(Kn),o=e&&"loop"!==n&&e%2==1?0:s.length-1;return o&&void 0!==i?i:s[o]}function Xn(t,e){if(t?.inherit&&e){const{inherit:n,...i}=t;return{...e,...i}}return t}function Hn(t,e){const n=t?.[e]??t?.default??t;return n!==t?Xn(n,t):n}function Gn({when:t,delay:e,delayChildren:n,staggerChildren:i,staggerDirection:s,repeat:o,repeatType:r,repeatDelay:a,from:l,elapsed:c,...u}){return!!Object.keys(u).length}const qn=(t,e,n,i={},s,r)=>a=>{const l=Hn(i,t)||{},c=l.delay||i.delay||0;let{elapsed:u=0}=i;u-=f(c);const h={keyframes:Array.isArray(n)?n:[null,n],ease:"easeOut",velocity:e.getVelocity(),...l,delay:-u,onUpdate:t=>{e.set(t),l.onUpdate&&l.onUpdate(t)},onComplete:()=>{a(),l.onComplete&&l.onComplete()},name:t,motionValue:e,element:r?void 0:s};Gn(l)||Object.assign(h,zn(t,h)),h.duration&&(h.duration=f(h.duration)),h.repeatDelay&&(h.repeatDelay=f(h.repeatDelay)),void 0!==h.from&&(h.keyframes[0]=h.from);let d=!1;if((!1===h.type||0===h.duration&&!h.repeatDelay)&&(An(h),0===h.delay&&(d=!0)),(o.instantAnimations||o.skipAnimations||s?.shouldSkipAnimations)&&(d=!0,An(h),h.delay=0),h.allowFlatten=!l.type&&!l.ease,d&&!r&&void 0!==e.get()){const t=Yn(h.keyframes,l);if(void 0!==t)return void $.update(()=>{h.onUpdate(t),h.onComplete()})}return l.isSync?new Ce(h):new Mn(h)};function Zn(t){const e=[{},{}];return t?.values.forEach((t,n)=>{e[0][n]=t.get(),e[1][n]=t.getVelocity()}),e}function _n(t,e,n,i){if("function"==typeof e){const[s,o]=Zn(i);e=e(void 0!==n?n:t.custom,s,o)}if("string"==typeof e&&(e=t.variants&&t.variants[e]),"function"==typeof e){const[s,o]=Zn(i);e=e(void 0!==n?n:t.custom,s,o)}return e}function Jn(t,e,n){const i=t.getProps();return _n(i,e,void 0!==n?n:i.custom,t)}const Qn=new Set(["width","height","top","left","right","bottom",...Xe]),ti={current:void 0};class ei{constructor(t,e={}){this.canTrackVelocity=null,this.events={},this.updateAndNotify=t=>{const e=G.now();if(this.updatedAt!==e&&this.setPrevFrameValue(),this.prev=this.current,this.setCurrent(t),this.current!==this.prev&&(this.events.change?.notify(this.current),this.dependents))for(const t of this.dependents)t.dirty()},this.hasAnimated=!1,this.setCurrent(t),this.owner=e.owner}setCurrent(t){var e;this.current=t,this.updatedAt=G.now(),null===this.canTrackVelocity&&void 0!==t&&(this.canTrackVelocity=(e=this.current,!isNaN(parseFloat(e))))}setPrevFrameValue(t=this.current){this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt}onChange(t){return this.on("change",t)}on(t,e){this.events[t]||(this.events[t]=new m);const n=this.events[t].add(e);return"change"===t?()=>{n(),$.read(()=>{this.events.change.getSize()||this.stop()})}:n}clearListeners(){for(const t in this.events)this.events[t].clear()}attach(t,e){this.passiveEffect=t,this.stopPassiveEffect=e}set(t){this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t)}setWithVelocity(t,e,n){this.set(e),this.prev=void 0,this.prevFrameValue=t,this.prevUpdatedAt=this.updatedAt-n}jump(t,e=!0){this.updateAndNotify(t),this.prev=t,this.prevUpdatedAt=this.prevFrameValue=void 0,e&&this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}dirty(){this.events.change?.notify(this.current)}addDependent(t){this.dependents||(this.dependents=new Set),this.dependents.add(t)}removeDependent(t){this.dependents&&this.dependents.delete(t)}get(){return ti.current&&ti.current.push(this),this.current}getPrevious(){return this.prev}getVelocity(){const t=G.now();if(!this.canTrackVelocity||void 0===this.prevFrameValue||t-this.updatedAt>30)return 0;const e=Math.min(this.updatedAt-this.prevUpdatedAt,30);return g(parseFloat(this.current)-parseFloat(this.prevFrameValue),e)}start(t){return this.stop(),new Promise(e=>{this.hasAnimated=!0,this.animation=t(e),this.events.animationStart&&this.events.animationStart.notify()}).then(()=>{this.events.animationComplete&&this.events.animationComplete.notify(),this.clearAnimation()})}stop(){this.animation&&(this.animation.stop(),this.events.animationCancel&&this.events.animationCancel.notify()),this.clearAnimation()}isAnimating(){return!!this.animation}clearAnimation(){delete this.animation}destroy(){this.dependents?.clear(),this.events.destroy?.notify(),this.clearListeners(),this.stop(),this.stopPassiveEffect&&this.stopPassiveEffect()}}function ni(t,e){return new ei(t,e)}const ii=t=>Array.isArray(t);function si(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,ni(n))}function oi(t){return ii(t)?t[t.length-1]||0:t}function ri(t,e){const n=Jn(t,e);let{transitionEnd:i={},transition:s={},...o}=n||{};o={...o,...i};for(const e in o){si(t,e,oi(o[e]))}}const ai=t=>Boolean(t&&t.getVelocity);function li(t){return Boolean(ai(t)&&t.add)}function ci(t,e){const n=t.getValue("willChange");if(li(n))return n.add(e);if(!n&&o.WillChange){const n=new o.WillChange("auto");t.addValue("willChange",n),n.add(e)}}function ui(t){return t.replace(/([A-Z])/g,t=>`-${t.toLowerCase()}`)}const hi="framerAppearId",di="data-"+ui(hi);function pi(t){return t.props[di]}function mi({protectedKeys:t,needsAnimating:e},n){const i=t.hasOwnProperty(n)&&!0!==e[n];return e[n]=!1,i}function fi(t,e,{delay:n=0,transitionOverride:i,type:s}={}){let{transition:o,transitionEnd:r,...a}=e;const l=t.getDefaultTransition();o=o?Xn(o,l):l;const c=o?.reduceMotion;i&&(o=i);const u=[],h=s&&t.animationState&&t.animationState.getState()[s];for(const e in a){const i=t.getValue(e,t.latestValues[e]??null),s=a[e];if(void 0===s||h&&mi(h,e))continue;const r={delay:n,...Hn(o||{},e)},l=i.get();if(void 0!==l&&!i.isAnimating&&!Array.isArray(s)&&s===l&&!r.velocity)continue;let d=!1;if(window.MotionHandoffAnimation){const n=pi(t);if(n){const t=window.MotionHandoffAnimation(n,e,$);null!==t&&(r.startTime=t,d=!0)}}ci(t,e);const p=c??t.shouldReduceMotion;i.start(qn(e,i,s,p&&Qn.has(e)?{type:!1}:r,t,d));const m=i.animation;m&&u.push(m)}if(r){const e=()=>$.update(()=>{r&&ri(t,r)});u.length?Promise.all(u).then(e):e()}return u}function yi(t,e,n={}){const i=Jn(t,e,"exit"===n.type?t.presenceContext?.custom:void 0);let{transition:s=t.getDefaultTransition()||{}}=i||{};n.transitionOverride&&(s=n.transitionOverride);const o=i?()=>Promise.all(fi(t,i,n)):()=>Promise.resolve(),r=t.variantChildren&&t.variantChildren.size?(i=0)=>{const{delayChildren:o=0,staggerChildren:r,staggerDirection:a}=s;return function(t,e,n=0,i=0,s=0,o=1,r){const a=[];for(const l of t.variantChildren)l.notify("AnimationStart",e),a.push(yi(l,e,{...r,delay:n+("function"==typeof i?0:i)+On(t.variantChildren,l,i,s,o)}).then(()=>l.notify("AnimationComplete",e)));return Promise.all(a)}(t,e,i,o,r,a,n)}:()=>Promise.resolve(),{when:a}=s;if(a){const[t,e]="beforeChildren"===a?[o,r]:[r,o];return t().then(()=>e())}return Promise.all([o(),r(n.delay)])}function gi(t,e,n={}){let i;if(t.notify("AnimationStart",e),Array.isArray(e)){const s=e.map(e=>yi(t,e,n));i=Promise.all(s)}else if("string"==typeof e)i=yi(t,e,n);else{const s="function"==typeof e?Jn(t,e,n.custom):e;i=Promise.all(fi(t,s,n))}return i.then(()=>{t.notify("AnimationComplete",e)})}const vi=t=>e=>e.test(t),xi=[nt,yt,ft,mt,vt,gt,{test:t=>"auto"===t,parse:t=>t}],Ti=t=>xi.find(vi(t));function wi(t){return"number"==typeof t?0===t:null===t||("none"===t||"0"===t||l(t))}const bi=new Set(["brightness","contrast","saturate","opacity"]);function Si(t){const[e,n]=t.slice(0,-1).split("(");if("drop-shadow"===e)return t;const[i]=n.match(rt)||[];if(!i)return t;const s=n.replace(i,"");let o=bi.has(e)?1:0;return i!==n&&(o*=100),e+"("+o+s+")"}const Ai=/\b([a-z-]*)\(.*?\)/gu,Vi={...Dt,getAnimatableNone:t=>{const e=t.match(Ai);return e?e.map(Si).join(" "):t}},Pi={...Dt,getAnimatableNone:t=>{const e=Dt.parse(t);return Dt.createTransformer(t)(e.map(t=>"number"==typeof t?0:"object"==typeof t?{...t,alpha:1}:t))}},Ei={...nt,transform:Math.round},Mi={rotate:mt,rotateX:mt,rotateY:mt,rotateZ:mt,scale:st,scaleX:st,scaleY:st,scaleZ:st,skew:mt,skewX:mt,skewY:mt,distance:yt,translateX:yt,translateY:yt,translateZ:yt,x:yt,y:yt,z:yt,perspective:yt,transformPerspective:yt,opacity:it,originX:xt,originY:xt,originZ:yt},ki={borderWidth:yt,borderTopWidth:yt,borderRightWidth:yt,borderBottomWidth:yt,borderLeftWidth:yt,borderRadius:yt,borderTopLeftRadius:yt,borderTopRightRadius:yt,borderBottomRightRadius:yt,borderBottomLeftRadius:yt,width:yt,maxWidth:yt,height:yt,maxHeight:yt,top:yt,right:yt,bottom:yt,left:yt,inset:yt,insetBlock:yt,insetBlockStart:yt,insetBlockEnd:yt,insetInline:yt,insetInlineStart:yt,insetInlineEnd:yt,padding:yt,paddingTop:yt,paddingRight:yt,paddingBottom:yt,paddingLeft:yt,paddingBlock:yt,paddingBlockStart:yt,paddingBlockEnd:yt,paddingInline:yt,paddingInlineStart:yt,paddingInlineEnd:yt,margin:yt,marginTop:yt,marginRight:yt,marginBottom:yt,marginLeft:yt,marginBlock:yt,marginBlockStart:yt,marginBlockEnd:yt,marginInline:yt,marginInlineStart:yt,marginInlineEnd:yt,fontSize:yt,backgroundPositionX:yt,backgroundPositionY:yt,...Mi,zIndex:Ei,fillOpacity:it,strokeOpacity:it,numOctaves:Ei},Di={...ki,color:wt,backgroundColor:wt,outlineColor:wt,fill:wt,stroke:wt,borderColor:wt,borderTopColor:wt,borderRightColor:wt,borderBottomColor:wt,borderLeftColor:wt,filter:Vi,WebkitFilter:Vi,mask:Pi,WebkitMask:Pi},Ri=t=>Di[t],Bi=new Set([Vi,Pi]);function Ci(t,e){let n=Ri(t);return Bi.has(n)||(n=Dt),n.getAnimatableNone?n.getAnimatableNone(e):void 0}const ji=new Set(["auto","none","0"]);class Li extends rn{constructor(t,e,n,i,s){super(t,e,n,i,s,!0)}readKeyframes(){const{unresolvedKeyframes:t,element:e,name:n}=this;if(!e||!e.current)return;super.readKeyframes();for(let n=0;n{t.getValue(e).set(n)}),this.resolveNoneKeyframes()}}const Oi=new Set(["borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","width","maxWidth","height","maxHeight","top","right","bottom","left","inset","insetBlock","insetBlockStart","insetBlockEnd","insetInline","insetInlineStart","insetInlineEnd","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingBlock","paddingBlockStart","paddingBlockEnd","paddingInline","paddingInlineStart","paddingInlineEnd","margin","marginTop","marginRight","marginBottom","marginLeft","marginBlock","marginBlockStart","marginBlockEnd","marginInline","marginInlineStart","marginInlineEnd","fontSize","backgroundPositionX","backgroundPositionY"]);function Fi(t,e){for(let n=0;n{try{document.createElement("div").animate({opacity:[1]})}catch(t){return!1}return!0}),Wi=new Set(["opacity","clipPath","filter","transform"]);function Ni(t,e,n){if(null==t)return[];if(t instanceof EventTarget)return[t];if("string"==typeof t){let i=document;e&&(i=e.current);const s=n?.[t]??i.querySelectorAll(t);return s?Array.from(s):[]}return Array.from(t).filter(t=>null!=t)}function Ui(t){return(e,n)=>{const i=Ni(e),s=[];for(const e of i){const i=t(e,n);s.push(i)}return()=>{for(const t of s)t()}}}const $i=(t,e)=>e&&"number"==typeof t?e.transform(t):t;class zi{constructor(){this.latest={},this.values=new Map}set(t,e,n,i,s=!0){const o=this.values.get(t);o&&o.onRemove();const r=()=>{const i=e.get();this.latest[t]=s?$i(i,ki[t]):i,n&&$.render(n)};r();const a=e.on("change",r);i&&e.addDependent(i);const l=()=>{a(),n&&z(n),this.values.delete(t),i&&e.removeDependent(i)};return this.values.set(t,{value:e,onRemove:l}),l}get(t){return this.values.get(t)?.value}destroy(){for(const t of this.values.values())t.onRemove()}}function Ki(t){const e=new WeakMap,n=[];return(i,s)=>{const o=e.get(i)??new zi;e.set(i,o);for(const e in s){const r=s[e],a=t(i,o,e,r);n.push(a)}return()=>{for(const t of n)t()}}}const Yi=(t,e,n,i)=>{const s=function(t,e){if(!(e in t))return!1;const n=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t),e)||Object.getOwnPropertyDescriptor(t,e);return n&&"function"==typeof n.set}(t,n),o=s?n:n.startsWith("data")||n.startsWith("aria")?ui(n):n,r=s?()=>{t[o]=e.latest[n]}:()=>{const i=e.latest[n];null==i?t.removeAttribute(o):t.setAttribute(o,String(i))};return e.set(n,i,r)},Xi=Ui(Ki(Yi)),Hi=Ki((t,e,n,i)=>e.set(n,i,()=>{t[n]=e.latest[n]},void 0,!1));function Gi(t){return a(t)&&"offsetHeight"in t}const qi={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};const Zi=new Set(["originX","originY","originZ"]),_i=(t,e,n,i)=>{let s,o;return He.has(n)?(e.get("transform")||(Gi(t)||e.get("transformBox")||_i(t,e,"transformBox",new ei("fill-box")),e.set("transform",new ei("none"),()=>{t.style.transform=function(t){let e="",n=!0;for(let i=0;i{const n=e.latest.originX??"50%",i=e.latest.originY??"50%",s=e.latest.originZ??0;t.style.transformOrigin=`${n} ${i} ${s}`}),o=e.get("transformOrigin")):s=an(n)?()=>{t.style.setProperty(n,e.latest[n])}:()=>{t.style[n]=e.latest[n]},e.set(n,i,s,o)},Ji=Ui(Ki(_i));const Qi=Ui(Ki((t,e,n,i)=>{if(n.startsWith("path"))return function(t,e,n,i){return $.render(()=>t.setAttribute("pathLength","1")),"pathOffset"===n?e.set(n,i,()=>{const i=e.latest[n];t.setAttribute("stroke-dashoffset",""+-i)}):(e.get("stroke-dasharray")||e.set("stroke-dasharray",new ei("1 1"),()=>{const{pathLength:n=1,pathSpacing:i}=e.latest;t.setAttribute("stroke-dasharray",`${n} ${i??1-Number(n)}`)}),e.set(n,i,void 0,e.get("stroke-dasharray")))}(t,e,n,i);if(n.startsWith("attr"))return Yi(t,e,function(t){return t.replace(/^attr([A-Z])/,(t,e)=>e.toLowerCase())}(n),i);return(n in t.style?_i:Yi)(t,e,n,i)}));const{schedule:ts,cancel:es}=U(queueMicrotask,!1),ns={x:!1,y:!1};function is(){return ns.x||ns.y}function ss(t,e){const n=Ni(t),i=new AbortController;return[n,{passive:!0,...e,signal:i.signal},()=>i.abort()]}const os=(t,e)=>!!e&&(t===e||os(t,e.parentElement)),rs=t=>"mouse"===t.pointerType?"number"!=typeof t.button||t.button<=0:!1!==t.isPrimary,as=new Set(["BUTTON","INPUT","SELECT","TEXTAREA","A"]);function ls(t){return as.has(t.tagName)||!0===t.isContentEditable}const cs=new Set(["INPUT","SELECT","TEXTAREA"]);const us=new WeakSet;function hs(t){return e=>{"Enter"===e.key&&t(e)}}function ds(t,e){t.dispatchEvent(new PointerEvent("pointer"+e,{isPrimary:!0,bubbles:!0}))}function ps(t){return rs(t)&&!is()}const ms=new WeakSet;function fs(t,e){const n=window.getComputedStyle(t);return an(e)?n.getPropertyValue(e):n[e]}function ys(t){return a(t)&&"ownerSVGElement"in t}const gs=new WeakMap;let vs;const xs=(t,e,n)=>(i,s)=>s&&s[0]?s[0][t+"Size"]:ys(i)&&"getBBox"in i?i.getBBox()[e]:i[n],Ts=xs("inline","width","offsetWidth"),ws=xs("block","height","offsetHeight");function bs({target:t,borderBoxSize:e}){gs.get(t)?.forEach(n=>{n(t,{get width(){return Ts(t,e)},get height(){return ws(t,e)}})})}function Ss(t){t.forEach(bs)}function As(t,e){vs||"undefined"!=typeof ResizeObserver&&(vs=new ResizeObserver(Ss));const n=Ni(t);return n.forEach(t=>{let n=gs.get(t);n||(n=new Set,gs.set(t,n)),n.add(e),vs?.observe(t)}),()=>{n.forEach(t=>{const n=gs.get(t);n?.delete(e),n?.size||vs?.unobserve(t)})}}const Vs=new Set;let Ps;function Es(t){return Vs.add(t),Ps||(Ps=()=>{const t={get width(){return window.innerWidth},get height(){return window.innerHeight}};Vs.forEach(e=>e(t))},window.addEventListener("resize",Ps)),()=>{Vs.delete(t),Vs.size||"function"!=typeof Ps||(window.removeEventListener("resize",Ps),Ps=void 0)}}function Ms(t,e){return"function"==typeof t?Es(t):As(t,e)}function ks(t,e){let n;const i=()=>{const{currentTime:i}=e,s=(null===i?0:i.value)/100;n!==s&&t(s),n=s};return $.preUpdate(i,!0),()=>z(i)}function Ds(){const{value:t}=N;null!==t?(t.frameloop.rate.push(K.delta),t.animations.mainThread.push(q.mainThread),t.animations.waapi.push(q.waapi),t.animations.layout.push(q.layout)):z(Ds)}function Rs(t){return t.reduce((t,e)=>t+e,0)/t.length}function Bs(t,e=Rs){return 0===t.length?{min:0,max:0,avg:0}:{min:Math.min(...t),max:Math.max(...t),avg:e(t)}}const Cs=t=>Math.round(1e3/t);function js(){N.value=null,N.addProjectionMetrics=null}function Ls(){const{value:t}=N;if(!t)throw new Error("Stats are not being measured");js(),z(Ds);const e={frameloop:{setup:Bs(t.frameloop.setup),rate:Bs(t.frameloop.rate),read:Bs(t.frameloop.read),resolveKeyframes:Bs(t.frameloop.resolveKeyframes),preUpdate:Bs(t.frameloop.preUpdate),update:Bs(t.frameloop.update),preRender:Bs(t.frameloop.preRender),render:Bs(t.frameloop.render),postRender:Bs(t.frameloop.postRender)},animations:{mainThread:Bs(t.animations.mainThread),waapi:Bs(t.animations.waapi),layout:Bs(t.animations.layout)},layoutProjection:{nodes:Bs(t.layoutProjection.nodes),calculatedTargetDeltas:Bs(t.layoutProjection.calculatedTargetDeltas),calculatedProjections:Bs(t.layoutProjection.calculatedProjections)}},{rate:n}=e.frameloop;return n.min=Cs(n.min),n.max=Cs(n.max),n.avg=Cs(n.avg),[n.min,n.max]=[n.max,n.min],e}function Os(t){return ys(t)&&"svg"===t.tagName}function Fs(t,e){if("first"===t)return 0;{const n=e-1;return"last"===t?n:n/2}}function Is(...t){const e=!Array.isArray(t[0]),n=e?0:-1,i=t[0+n],s=we(t[1+n],t[2+n],t[3+n]);return e?s(i):s}function Ws(t,e){const n=ni(ai(t)?t.get():t);return Ns(n,t,e),n}function Ns(t,e,n={}){const i=t.get();let s,o=null,r=i;const a="string"==typeof i?i.replace(/[\d.-]/g,""):void 0,l=()=>{o&&(o.stop(),o=null)};if(t.attach((e,i)=>{r=e,s=t=>i(Us(t,a)),$.postRender(()=>{(()=>{l();const e=$s(t.get()),i=$s(r);e!==i&&(o=new Ce({keyframes:[e,i],velocity:t.getVelocity(),type:"spring",restDelta:.001,restSpeed:.01,...n,onUpdate:s}))})(),t.events.animationStart?.notify(),o?.then(()=>{t.events.animationComplete?.notify()})})},l),ai(e)){const n=e.on("change",e=>t.set(Us(e,a))),i=t.on("destroy",n);return()=>{n(),i()}}return l}function Us(t,e){return e?t+e:t}function $s(t){return"number"==typeof t?t:parseFloat(t)}function zs(t){const e=[];ti.current=e;const n=t();ti.current=void 0;const i=ni(n);return function(t,e,n){const i=()=>e.set(n()),s=()=>$.preRender(i,!1,!0),o=t.map(t=>t.on("change",s));e.on("destroy",()=>{o.forEach(t=>t()),z(i)})}(e,i,t),i}const Ks=[...xi,wt,Dt],Ys=t=>Ks.find(vi(t));function Xs(t){return"layout"===t?"group":"enter"===t||"new"===t?"new":"exit"===t||"old"===t?"old":"group"}let Hs={},Gs=null;const qs=(t,e)=>{Hs[t]=e},Zs=()=>{Gs||(Gs=document.createElement("style"),Gs.id="motion-view");let t="";for(const e in Hs){const n=Hs[e];t+=`${e} {\n`;for(const[e,i]of Object.entries(n))t+=` ${e}: ${i};\n`;t+="}\n"}Gs.textContent=t,document.head.appendChild(Gs),Hs={}},_s=()=>{Gs&&Gs.parentElement&&Gs.parentElement.removeChild(Gs)};function Js(t){const e=t.match(/::view-transition-(old|new|group|image-pair)\((.*?)\)/);return e?{layer:e[2],type:e[1]}:null}function Qs(t){const{effect:e}=t;return!!e&&(e.target===document.documentElement&&e.pseudoElement?.startsWith("::view-transition"))}function to(){return document.getAnimations().filter(Qs)}const eo=["layout","enter","exit","new","old"];function no(t){const{update:e,targets:n,options:i}=t;if(!document.startViewTransition)return new Promise(async t=>{await e(),t(new kn([]))});(function(t,e){return e.has(t)&&Object.keys(e.get(t)).length>0})("root",n)||qs(":root",{"view-transition-name":"none"}),qs("::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*)",{"animation-timing-function":"linear !important"}),Zs();const s=document.startViewTransition(async()=>{await e()});return s.finished.finally(()=>{_s()}),new Promise(t=>{s.ready.then(()=>{const e=to(),s=[];n.forEach((t,e)=>{for(const n of eo){if(!t[n])continue;const{keyframes:o,options:r}=t[n];for(let[t,a]of Object.entries(o)){if(!a)continue;const o={...Hn(i,t),...Hn(r,t)},l=Xs(n);if("opacity"===t&&!Array.isArray(a)){a=["new"===l?0:1,a]}"function"==typeof o.delay&&(o.delay=o.delay(0,1)),o.duration&&(o.duration=f(o.duration)),o.delay&&(o.delay=f(o.delay));const c=new xn({...o,element:document.documentElement,name:t,pseudoElement:`::view-transition-${l}(${e})`,keyframes:a});s.push(c)}}});for(const t of e){if("finished"===t.playState)continue;const{effect:e}=t;if(!(e&&e instanceof KeyframeEffect))continue;const{pseudoElement:o}=e;if(!o)continue;const r=Js(o);if(!r)continue;const a=n.get(r.layer);if(a)io(a,"enter")&&io(a,"exit")&&e.getKeyframes().some(t=>t.mixBlendMode)?s.push(new Bn(t)):t.cancel();else{const n="group"===r.type?"layout":"";let o={...Hn(i,n)};o.duration&&(o.duration=f(o.duration)),o=vn(o);const a=fn(o.ease,o.duration);e.updateTiming({delay:f(o.delay??0),duration:o.duration,easing:a}),s.push(new Bn(t))}}t(new kn(s))})})}function io(t,e){return t?.[e]?.keyframes.opacity}let so=[],oo=null;function ro(){oo=null;const[t]=so;var e;t&&(n(so,e=t),oo=e,no(e).then(t=>{e.notifyReady(t),t.finished.finally(ro)}))}function ao(){for(let t=so.length-1;t>=0;t--){const e=so[t],{interrupt:n}=e.options;if("immediate"===n){const n=so.slice(0,t+1).map(t=>t.update),i=so.slice(t+1);e.update=()=>{n.forEach(t=>t())},so=[e,...i];break}}oo&&"immediate"!==so[0]?.options.interrupt||ro()}class lo{constructor(t,e={}){var n;this.currentSubject="root",this.targets=new Map,this.notifyReady=u,this.readyPromise=new Promise(t=>{this.notifyReady=t}),this.update=t,this.options={interrupt:"wait",...e},n=this,so.push(n),ts.render(ao)}get(t){return this.currentSubject=t,this}layout(t,e){return this.updateTarget("layout",t,e),this}new(t,e){return this.updateTarget("new",t,e),this}old(t,e){return this.updateTarget("old",t,e),this}enter(t,e){return this.updateTarget("enter",t,e),this}exit(t,e){return this.updateTarget("exit",t,e),this}crossfade(t){return this.updateTarget("enter",{opacity:1},t),this.updateTarget("exit",{opacity:0},t),this}updateTarget(t,e,n={}){const{currentSubject:i,targets:s}=this;s.has(i)||s.set(i,{});s.get(i)[t]={keyframes:e,options:n}}then(t,e){return this.readyPromise.then(t,e)}}const co=()=>({translate:0,scale:1,origin:0,originPoint:0}),uo=()=>({x:{translate:0,scale:1,origin:0,originPoint:0},y:{translate:0,scale:1,origin:0,originPoint:0}}),ho=()=>({min:0,max:0}),po=()=>({x:{min:0,max:0},y:{min:0,max:0}}),mo=new WeakMap;function fo(t){return null!==t&&"object"==typeof t&&"function"==typeof t.start}function yo(t){return"string"==typeof t||Array.isArray(t)}const go=["animate","whileInView","whileFocus","whileHover","whileTap","whileDrag","exit"],vo=["initial",...go];function xo(t){return fo(t.animate)||vo.some(e=>yo(t[e]))}function To(t){return Boolean(xo(t)||t.variants)}function wo(t,e,n){for(const i in e){const s=e[i],o=n[i];if(ai(s))t.addValue(i,s);else if(ai(o))t.addValue(i,ni(s,{owner:t}));else if(o!==s)if(t.hasValue(i)){const e=t.getValue(i);!0===e.liveStyle?e.jump(s):e.hasAnimated||e.set(s)}else{const e=t.getStaticValue(i);t.addValue(i,ni(void 0!==e?e:s,{owner:t}))}}for(const i in n)void 0===e[i]&&t.removeValue(i);return e}const bo={current:null},So={current:!1},Ao="undefined"!=typeof window;function Vo(){if(So.current=!0,Ao)if(window.matchMedia){const t=window.matchMedia("(prefers-reduced-motion)"),e=()=>bo.current=t.matches;t.addEventListener("change",e),e()}else bo.current=!1}const Po=["AnimationStart","AnimationComplete","Update","BeforeLayoutMeasure","LayoutMeasure","LayoutAnimationStart","LayoutAnimationComplete"];let Eo={};class Mo{scrapeMotionValuesFromProps(t,e,n){return{}}constructor({parent:t,props:e,presenceContext:n,reducedMotionConfig:i,skipAnimations:s,blockInitialAnimation:o,visualState:r},a={}){this.current=null,this.children=new Set,this.isVariantNode=!1,this.isControllingVariants=!1,this.shouldReduceMotion=null,this.shouldSkipAnimations=!1,this.values=new Map,this.KeyframeResolver=rn,this.features={},this.valueSubscriptions=new Map,this.prevMotionValues={},this.hasBeenMounted=!1,this.events={},this.propEventSubscriptions={},this.notifyUpdate=()=>this.notify("Update",this.latestValues),this.render=()=>{this.current&&(this.triggerBuild(),this.renderInstance(this.current,this.renderState,this.props.style,this.projection))},this.renderScheduledAt=0,this.scheduleRender=()=>{const t=G.now();this.renderScheduledAtthis.bindToMotionValue(e,t)),"never"===this.reducedMotionConfig?this.shouldReduceMotion=!1:"always"===this.reducedMotionConfig?this.shouldReduceMotion=!0:(So.current||Vo(),this.shouldReduceMotion=bo.current),this.shouldSkipAnimations=this.skipAnimationsConfig??!1,this.parent?.addChild(this),this.update(this.props,this.presenceContext),this.hasBeenMounted=!0}unmount(){this.projection&&this.projection.unmount(),z(this.notifyUpdate),z(this.render),this.valueSubscriptions.forEach(t=>t()),this.valueSubscriptions.clear(),this.removeFromVariantTree&&this.removeFromVariantTree(),this.parent?.removeChild(this);for(const t in this.events)this.events[t].clear();for(const t in this.features){const e=this.features[t];e&&(e.unmount(),e.isMounted=!1)}this.current=null}addChild(t){this.children.add(t),this.enteringChildren??(this.enteringChildren=new Set),this.enteringChildren.add(t)}removeChild(t){this.children.delete(t),this.enteringChildren&&this.enteringChildren.delete(t)}bindToMotionValue(t,e){if(this.valueSubscriptions.has(t)&&this.valueSubscriptions.get(t)(),e.accelerate&&Wi.has(t)&&this.current instanceof HTMLElement){const{factory:n,keyframes:i,times:s,ease:o,duration:r}=e.accelerate,a=new xn({element:this.current,name:t,keyframes:i,times:s,ease:o,duration:f(r)}),l=n(a);return void this.valueSubscriptions.set(t,()=>{l(),a.cancel()})}const n=He.has(t);n&&this.onBindTransform&&this.onBindTransform();const i=e.on("change",e=>{this.latestValues[t]=e,this.props.onUpdate&&$.preRender(this.notifyUpdate),n&&this.projection&&(this.projection.isTransformDirty=!0),this.scheduleRender()});let s;"undefined"!=typeof window&&window.MotionCheckAppearSync&&(s=window.MotionCheckAppearSync(this,t,e)),this.valueSubscriptions.set(t,()=>{i(),s&&s(),e.owner&&e.stop()})}sortNodePosition(t){return this.current&&this.sortInstanceNodePosition&&this.type===t.type?this.sortInstanceNodePosition(this.current,t.current):0}updateFeatures(){let t="animation";for(t in Eo){const e=Eo[t];if(!e)continue;const{isEnabled:n,Feature:i}=e;if(!this.features[t]&&i&&n(this.props)&&(this.features[t]=new i(this)),this.features[t]){const e=this.features[t];e.isMounted?e.update():(e.mount(),e.isMounted=!0)}}}triggerBuild(){this.build(this.renderState,this.latestValues,this.props)}measureViewportBox(){return this.current?this.measureInstanceViewportBox(this.current,this.props):{x:{min:0,max:0},y:{min:0,max:0}}}getStaticValue(t){return this.latestValues[t]}setStaticValue(t,e){this.latestValues[t]=e}update(t,e){(t.transformTemplate||this.props.transformTemplate)&&this.scheduleRender(),this.prevProps=this.props,this.props=t,this.prevPresenceContext=this.presenceContext,this.presenceContext=e;for(let e=0;ee.variantChildren.delete(t)}addValue(t,e){const n=this.values.get(t);e!==n&&(n&&this.removeValue(t),this.bindToMotionValue(t,e),this.values.set(t,e),this.latestValues[t]=e.get())}removeValue(t){this.values.delete(t);const e=this.valueSubscriptions.get(t);e&&(e(),this.valueSubscriptions.delete(t)),delete this.latestValues[t],this.removeValueFromRenderState(t,this.renderState)}hasValue(t){return this.values.has(t)}getValue(t,e){if(this.props.values&&this.props.values[t])return this.props.values[t];let n=this.values.get(t);return void 0===n&&void 0!==e&&(n=ni(null===e?void 0:e,{owner:this}),this.addValue(t,n)),n}readValue(t,e){let n=void 0===this.latestValues[t]&&this.current?this.getBaseTargetFromProps(this.props,t)??this.readValueFromInstance(this.current,t,this.options):this.latestValues[t];return null!=n&&("string"==typeof n&&(r(n)||l(n))?n=parseFloat(n):!Ys(n)&&Dt.test(e)&&(n=Ci(t,e)),this.setBaseTarget(t,ai(n)?n.get():n)),ai(n)?n.get():n}setBaseTarget(t,e){this.baseTarget[t]=e}getBaseTarget(t){const{initial:e}=this.props;let n;if("string"==typeof e||"object"==typeof e){const i=_n(this.props,e,this.presenceContext?.custom);i&&(n=i[t])}if(e&&void 0!==n)return n;const i=this.getBaseTargetFromProps(this.props,t);return void 0===i||ai(i)?void 0!==this.initialValues[t]&&void 0===n?void 0:this.baseTarget[t]:i}on(t,e){return this.events[t]||(this.events[t]=new m),this.events[t].add(e)}notify(t,...e){this.events[t]&&this.events[t].notify(...e)}scheduleRenderMicrotask(){ts.render(this.render)}}class ko extends Mo{constructor(){super(...arguments),this.KeyframeResolver=Li}sortInstanceNodePosition(t,e){return 2&t.compareDocumentPosition(e)?1:-1}getBaseTargetFromProps(t,e){const n=t.style;return n?n[e]:void 0}removeValueFromRenderState(t,{vars:e,style:n}){delete e[t],delete n[t]}handleChildMotionValue(){this.childSubscription&&(this.childSubscription(),delete this.childSubscription);const{children:t}=this.props;ai(t)&&(this.childSubscription=t.on("change",t=>{this.current&&(this.current.textContent=`${t}`)}))}}function Do({top:t,left:e,right:n,bottom:i}){return{x:{min:e,max:n},y:{min:t,max:i}}}function Ro(t,e){if(!e)return t;const n=e({x:t.left,y:t.top}),i=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:i.y,right:i.x}}function Bo(t){return void 0===t||1===t}function Co({scale:t,scaleX:e,scaleY:n}){return!Bo(t)||!Bo(e)||!Bo(n)}function jo(t){return Co(t)||Lo(t)||t.z||t.rotate||t.rotateX||t.rotateY||t.skewX||t.skewY}function Lo(t){return Oo(t.x)||Oo(t.y)}function Oo(t){return t&&"0%"!==t}function Fo(t,e,n){return n+e*(t-n)}function Io(t,e,n,i,s){return void 0!==s&&(t=Fo(t,s,i)),Fo(t,n,i)+e}function Wo(t,e=0,n=1,i,s){t.min=Io(t.min,e,n,i,s),t.max=Io(t.max,e,n,i,s)}function No(t,{x:e,y:n}){Wo(t.x,e.translate,e.scale,e.originPoint),Wo(t.y,n.translate,n.scale,n.originPoint)}const Uo=.999999999999,$o=1.0000000000001;function zo(t,e,n,i=!1){const s=n.length;if(!s)return;let o,r;e.x=e.y=1;for(let a=0;aUo&&(e.x=1),e.y<$o&&e.y>Uo&&(e.y=1)}function Ko(t,e){t.min=t.min+e,t.max=t.max+e}function Yo(t,e,n,i,s=.5){Wo(t,e,n,jt(t.min,t.max,s),i)}function Xo(t,e){Yo(t.x,e.x,e.scaleX,e.scale,e.originX),Yo(t.y,e.y,e.scaleY,e.scale,e.originY)}function Ho(t,e){return Do(Ro(t.getBoundingClientRect(),e))}const Go={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"},qo=Xe.length;function Zo(t,e,n){let i="",s=!0;for(let o=0;o{if(!e.target)return t;if("string"==typeof t){if(!yt.test(t))return t;t=parseFloat(t)}return`${Qo(t,e.target.x)}% ${Qo(t,e.target.y)}%`}},er={correct:(t,{treeScale:e,projectionDelta:n})=>{const i=t,s=Dt.parse(t);if(s.length>5)return i;const o=Dt.createTransformer(t),r="number"!=typeof s[0]?1:0,a=n.x.scale*e.x,l=n.y.scale*e.y;s[0+r]/=a,s[1+r]/=l;const c=jt(a,l,.5);return"number"==typeof s[2+r]&&(s[2+r]/=c),"number"==typeof s[3+r]&&(s[3+r]/=c),o(s)}},nr={borderRadius:{...tr,applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]},borderTopLeftRadius:tr,borderTopRightRadius:tr,borderBottomLeftRadius:tr,borderBottomRightRadius:tr,boxShadow:er};function ir(t,{layout:e,layoutId:n}){return He.has(t)||t.startsWith("origin")||(e||void 0!==n)&&(!!nr[t]||"opacity"===t)}function sr(t,e,n){const i=t.style,s=e?.style,o={};if(!i)return o;for(const e in i)(ai(i[e])||s&&ai(s[e])||ir(e,t)||void 0!==n?.getValue(e)?.liveStyle)&&(o[e]=i[e]);return o}class or extends ko{constructor(){super(...arguments),this.type="html",this.renderInstance=Jo}readValueFromInstance(t,e){if(He.has(e))return this.projection?.isProjecting?$e(e):Ke(t,e);{const i=(n=t,window.getComputedStyle(n)),s=(_(e)?i.getPropertyValue(e):i[e])||0;return"string"==typeof s?s.trim():s}var n}measureInstanceViewportBox(t,{transformPagePoint:e}){return Ho(t,e)}build(t,e,n){_o(t,e,n.transformTemplate)}scrapeMotionValuesFromProps(t,e,n){return sr(t,e,n)}}class rr extends Mo{constructor(){super(...arguments),this.type="object"}readValueFromInstance(t,e){if(function(t,e){return t in e}(e,t)){const n=t[e];if("string"==typeof n||"number"==typeof n)return n}}getBaseTargetFromProps(){}removeValueFromRenderState(t,e){delete e.output[t]}measureInstanceViewportBox(){return{x:{min:0,max:0},y:{min:0,max:0}}}build(t,e){Object.assign(t.output,e)}renderInstance(t,{output:e}){Object.assign(t,e)}sortInstanceNodePosition(){return 0}}const ar={offset:"stroke-dashoffset",array:"stroke-dasharray"},lr={offset:"strokeDashoffset",array:"strokeDasharray"};function cr(t,e,n=1,i=0,s=!0){t.pathLength=1;const o=s?ar:lr;t[o.offset]=""+-i,t[o.array]=`${e} ${n}`}const ur=["offsetDistance","offsetPath","offsetRotate","offsetAnchor"];function hr(t,{attrX:e,attrY:n,attrScale:i,pathLength:s,pathSpacing:o=1,pathOffset:r=0,...a},l,c,u){if(_o(t,a,c),l)return void(t.style.viewBox&&(t.attrs.viewBox=t.style.viewBox));t.attrs=t.style,t.style={};const{attrs:h,style:d}=t;h.transform&&(d.transform=h.transform,delete h.transform),(d.transform||h.transformOrigin)&&(d.transformOrigin=h.transformOrigin??"50% 50%",delete h.transformOrigin),d.transform&&(d.transformBox=u?.transformBox??"fill-box",delete h.transformBox);for(const t of ur)void 0!==h[t]&&(d[t]=h[t],delete h[t]);void 0!==e&&(h.x=e),void 0!==n&&(h.y=n),void 0!==i&&(h.scale=i),void 0!==s&&cr(h,s,o,r,!1)}const dr=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength","startOffset","textLength","lengthAdjust"]),pr=t=>"string"==typeof t&&"svg"===t.toLowerCase();function mr(t,e,n,i){Jo(t,e,void 0,i);for(const n in e.attrs)t.setAttribute(dr.has(n)?n:ui(n),e.attrs[n])}function fr(t,e,n){const i=sr(t,e,n);for(const n in t)if(ai(t[n])||ai(e[n])){i[-1!==Xe.indexOf(n)?"attr"+n.charAt(0).toUpperCase()+n.substring(1):n]=t[n]}return i}class yr extends ko{constructor(){super(...arguments),this.type="svg",this.isSVGTag=!1,this.measureInstanceViewportBox=po}getBaseTargetFromProps(t,e){return t[e]}readValueFromInstance(t,e){if(He.has(e)){const t=Ri(e);return t&&t.default||0}return e=dr.has(e)?e:ui(e),t.getAttribute(e)}scrapeMotionValuesFromProps(t,e,n){return fr(t,e,n)}build(t,e,n){hr(t,e,this.isSVGTag,n.transformTemplate,n.style)}renderInstance(t,e,n,i){mr(t,e,0,i)}mount(t){this.isSVGTag=pr(t.tagName),super.mount(t)}}const gr=vo.length;function vr(t){if(!t)return;if(!t.isControllingVariants){const e=t.parent&&vr(t.parent)||{};return void 0!==t.props.initial&&(e.initial=t.props.initial),e}const e={};for(let n=0;n=.9999&&t.scale<=1.0001||isNaN(t.scale))&&(t.scale=1),(t.translate>=-.01&&t.translate<=.01||isNaN(t.translate))&&(t.translate=0)}function Rr(t,e,n,i){Dr(t.x,e.x,n.x,i?i.originX:void 0),Dr(t.y,e.y,n.y,i?i.originY:void 0)}function Br(t,e,n){t.min=n.min+e.min,t.max=t.min+Mr(e)}function Cr(t,e,n){Br(t.x,e.x,n.x),Br(t.y,e.y,n.y)}function jr(t,e,n){t.min=e.min-n.min,t.max=t.min+Mr(e)}function Lr(t,e,n){jr(t.x,e.x,n.x),jr(t.y,e.y,n.y)}function Or(t,e,n,i,s){return t=Fo(t-=e,1/n,i),void 0!==s&&(t=Fo(t,1/s,i)),t}function Fr(t,e=0,n=1,i=.5,s,o=t,r=t){if(ft.test(e)){e=parseFloat(e);e=jt(r.min,r.max,e/100)-r.min}if("number"!=typeof e)return;let a=jt(o.min,o.max,i);t===o&&(a-=e),t.min=Or(t.min,e,n,a,s),t.max=Or(t.max,e,n,a,s)}function Ir(t,e,[n,i,s],o,r){Fr(t,e[n],e[i],e[s],e.scale,o,r)}const Wr=["x","scaleX","originX"],Nr=["y","scaleY","originY"];function Ur(t,e,n,i){Ir(t.x,e,Wr,n?n.x:void 0,i?i.x:void 0),Ir(t.y,e,Nr,n?n.y:void 0,i?i.y:void 0)}function $r(t){return 0===t.translate&&1===t.scale}function zr(t){return $r(t.x)&&$r(t.y)}function Kr(t,e){return t.min===e.min&&t.max===e.max}function Yr(t,e){return Kr(t.x,e.x)&&Kr(t.y,e.y)}function Xr(t,e){return Math.round(t.min)===Math.round(e.min)&&Math.round(t.max)===Math.round(e.max)}function Hr(t,e){return Xr(t.x,e.x)&&Xr(t.y,e.y)}function Gr(t){return Mr(t.x)/Mr(t.y)}function qr(t,e){return t.translate===e.translate&&t.scale===e.scale&&t.originPoint===e.originPoint}function Zr(t){return[t("x"),t("y")]}function _r(t,e,n){let i="";const s=t.x.translate/e.x,o=t.y.translate/e.y,r=n?.z||0;if((s||o||r)&&(i=`translate3d(${s}px, ${o}px, ${r}px) `),1===e.x&&1===e.y||(i+=`scale(${1/e.x}, ${1/e.y}) `),n){const{transformPerspective:t,rotate:e,rotateX:s,rotateY:o,skewX:r,skewY:a}=n;t&&(i=`perspective(${t}px) ${i}`),e&&(i+=`rotate(${e}deg) `),s&&(i+=`rotateX(${s}deg) `),o&&(i+=`rotateY(${o}deg) `),r&&(i+=`skewX(${r}deg) `),a&&(i+=`skewY(${a}deg) `)}const a=t.x.scale*e.x,l=t.y.scale*e.y;return 1===a&&1===l||(i+=`scale(${a}, ${l})`),i||"none"}const Jr=["TopLeft","TopRight","BottomLeft","BottomRight"],Qr=Jr.length,ta=t=>"string"==typeof t?parseFloat(t):t,ea=t=>"number"==typeof t||yt.test(t);function na(t,e,n,i,s,o){s?(t.opacity=jt(0,n.opacity??1,sa(i)),t.opacityExit=jt(e.opacity??1,0,oa(i))):o&&(t.opacity=jt(e.opacity??1,n.opacity??1,i));for(let s=0;sie?1:n(p(t,e,i))}function aa(t,e,n){const i=ai(t)?t:ni(t);return i.start(qn("",i,e,n)),i.animation}function la(t,e,n,i={passive:!0}){return t.addEventListener(e,n,i),()=>t.removeEventListener(e,n)}const ca=(t,e)=>t.depth-e.depth;class ua{constructor(){this.children=[],this.isDirty=!1}add(t){e(this.children,t),this.isDirty=!0}remove(t){n(this.children,t),this.isDirty=!0}forEach(t){this.isDirty&&this.children.sort(ca),this.isDirty=!1,this.children.forEach(t)}}function ha(t,e){const n=G.now(),i=({timestamp:s})=>{const o=s-n;o>=e&&(z(i),t(o-e))};return $.setup(i,!0),()=>z(i)}function da(t,e){return ha(t,f(e))}function pa(t){return ai(t)?t.get():t}class ma{constructor(){this.members=[]}add(t){e(this.members,t);for(let e=this.members.length-1;e>=0;e--){const i=this.members[e];if(i===t||i===this.lead||i===this.prevLead)continue;const s=i.instance;s&&!1===s.isConnected&&!1!==i.isPresent&&!i.snapshot&&n(this.members,i)}t.scheduleRender()}remove(t){if(n(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){const t=this.members[this.members.length-1];t&&this.promote(t)}}relegate(t){const e=this.members.findIndex(e=>t===e);if(0===e)return!1;let n;for(let t=e;t>=0;t--){const e=this.members[t],i=e.instance;if(!1!==e.isPresent&&(!i||!1!==i.isConnected)){n=e;break}}return!!n&&(this.promote(n),!0)}promote(t,e){const n=this.lead;if(t!==n&&(this.prevLead=n,this.lead=t,t.show(),n)){n.instance&&n.scheduleRender(),t.scheduleRender();const i=n.options.layoutDependency,s=t.options.layoutDependency;if(!(void 0!==i&&void 0!==s&&i===s)){const i=n.instance;i&&!1===i.isConnected&&!n.snapshot||(t.resumeFrom=n,e&&(t.resumeFrom.preserveOpacity=!0),n.snapshot&&(t.snapshot=n.snapshot,t.snapshot.latestValues=n.animationValues||n.latestValues),t.root&&t.root.isUpdating&&(t.isLayoutDirty=!0))}const{crossfade:o}=t.options;!1===o&&n.hide()}}exitAnimationComplete(){this.members.forEach(t=>{const{options:e,resumingFrom:n}=t;e.onExitComplete&&e.onExitComplete(),n&&n.options.onExitComplete&&n.options.onExitComplete()})}scheduleRender(){this.members.forEach(t=>{t.instance&&t.scheduleRender(!1)})}removeLeadSnapshot(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)}}const fa={hasAnimatedSinceResize:!0,hasEverUpdated:!1},ya={nodes:0,calculatedTargetDeltas:0,calculatedProjections:0},ga=["","X","Y","Z"];let va=0;function xa(t,e,n,i){const{latestValues:s}=e;s[t]&&(n[t]=s[t],e.setStaticValue(t,0),i&&(i[t]=0))}function Ta(t){if(t.hasCheckedOptimisedAppear=!0,t.root===t)return;const{visualElement:e}=t.options;if(!e)return;const n=pi(e);if(window.MotionHasOptimisedAnimation(n,"transform")){const{layout:e,layoutId:i}=t.options;window.MotionCancelOptimisedAnimation(n,"transform",$,!(e||i))}const{parent:i}=t;i&&!i.hasCheckedOptimisedAppear&&Ta(i)}function wa({attachResizeListener:t,defaultParent:e,measureScroll:n,checkIsScrollRoot:s,resetTransform:o}){return class{constructor(t={},n=e?.()){this.id=va++,this.animationId=0,this.animationCommitId=0,this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.isProjectionDirty=!1,this.isSharedProjectionDirty=!1,this.isTransformDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.hasCheckedOptimisedAppear=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.hasTreeAnimated=!1,this.layoutVersion=0,this.updateScheduled=!1,this.scheduleUpdate=()=>this.update(),this.projectionUpdateScheduled=!1,this.checkUpdateFailed=()=>{this.isUpdating&&(this.isUpdating=!1,this.clearAllSnapshots())},this.updateProjection=()=>{this.projectionUpdateScheduled=!1,N.value&&(ya.nodes=ya.calculatedTargetDeltas=ya.calculatedProjections=0),this.nodes.forEach(Aa),this.nodes.forEach(Ra),this.nodes.forEach(Ba),this.nodes.forEach(Va),N.addProjectionMetrics&&N.addProjectionMetrics(ya)},this.resolvedRelativeTargetAt=0,this.linkedParentVersion=0,this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.latestValues=t,this.root=n?n.root||n:this,this.path=n?[...n.path,n]:[],this.parent=n,this.depth=n?n.depth+1:0;for(let t=0;tthis.root.updateBlockedByResize=!1;$.read(()=>{i=window.innerWidth}),t(e,()=>{const t=window.innerWidth;t!==i&&(i=t,this.root.updateBlockedByResize=!0,n&&n(),n=ha(s,250),fa.hasAnimatedSinceResize&&(fa.hasAnimatedSinceResize=!1,this.nodes.forEach(Da)))})}n&&this.root.registerSharedNode(n,this),!1!==this.options.animate&&s&&(n||i)&&this.addEventListener("didUpdate",({delta:t,hasLayoutChanged:e,hasRelativeLayoutChanged:n,layout:i})=>{if(this.isTreeAnimationBlocked())return this.target=void 0,void(this.relativeTarget=void 0);const o=this.options.transition||s.getDefaultTransition()||Ia,{onLayoutAnimationStart:r,onLayoutAnimationComplete:a}=s.getProps(),l=!this.targetLayout||!Hr(this.targetLayout,i),c=!e&&n;if(this.options.layoutRoot||this.resumeFrom||c||e&&(l||!this.currentAnimation)){this.resumeFrom&&(this.resumingFrom=this.resumeFrom,this.resumingFrom.resumingFrom=void 0);const e={...Hn(o,"layout"),onPlay:r,onComplete:a};(s.shouldReduceMotion||this.options.layoutRoot)&&(e.delay=0,e.type=!1),this.startAnimation(e),this.setAnimationOrigin(t,c)}else e||Da(this),this.isLead()&&this.options.onExitComplete&&this.options.onExitComplete();this.targetLayout=i})}unmount(){this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this);const t=this.getStack();t&&t.remove(this),this.parent&&this.parent.children.delete(this),this.instance=void 0,this.eventHandlers.clear(),z(this.updateProjection)}blockUpdate(){this.updateManuallyBlocked=!0}unblockUpdate(){this.updateManuallyBlocked=!1}isUpdateBlocked(){return this.updateManuallyBlocked||this.updateBlockedByResize}isTreeAnimationBlocked(){return this.isAnimationBlocked||this.parent&&this.parent.isTreeAnimationBlocked()||!1}startUpdate(){this.isUpdateBlocked()||(this.isUpdating=!0,this.nodes&&this.nodes.forEach(Ca),this.animationId++)}getTransformTemplate(){const{visualElement:t}=this.options;return t&&t.getProps().transformTemplate}willUpdate(t=!0){if(this.root.hasTreeAnimated=!0,this.root.isUpdateBlocked())return void(this.options.onExitComplete&&this.options.onExitComplete());if(window.MotionCancelOptimisedAnimation&&!this.hasCheckedOptimisedAppear&&Ta(this),!this.root.isUpdating&&this.root.startUpdate(),this.isLayoutDirty)return;this.isLayoutDirty=!0;for(let t=0;t{this.isLayoutDirty?this.root.didUpdate():this.root.checkUpdateFailed()})}updateSnapshot(){!this.snapshot&&this.instance&&(this.snapshot=this.measure(),!this.snapshot||Mr(this.snapshot.measuredBox.x)||Mr(this.snapshot.measuredBox.y)||(this.snapshot=void 0))}updateLayout(){if(!this.instance)return;if(this.updateScroll(),!(this.options.alwaysMeasureLayout&&this.isLead()||this.isLayoutDirty))return;if(this.resumeFrom&&!this.resumeFrom.instance)for(let t=0;t{const n=e/1e3;var l,d,p,m;La(o.x,t.x,n),La(o.y,t.y,n),this.setTargetDelta(o),this.relativeTarget&&this.relativeTargetOrigin&&this.layout&&this.relativeParent&&this.relativeParent.layout&&(Lr(r,this.layout.layoutBox,this.relativeParent.layout.layoutBox),l=this.relativeTarget,d=this.relativeTargetOrigin,p=r,m=n,Oa(l.x,d.x,p.x,m),Oa(l.y,d.y,p.y,m),h&&Yr(this.relativeTarget,h)&&(this.isProjectionDirty=!1),h||(h={x:{min:0,max:0},y:{min:0,max:0}}),Pr(h,this.relativeTarget)),a&&(this.animationValues=s,na(s,i,this.latestValues,n,u,c)),this.root.scheduleUpdateProjection(),this.scheduleRender(),this.animationProgress=n},this.mixTargetDelta(this.options.layoutRoot?1e3:0)}startAnimation(t){this.notifyListeners("animationStart"),this.currentAnimation?.stop(),this.resumingFrom?.currentAnimation?.stop(),this.pendingAnimation&&(z(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=$.update(()=>{fa.hasAnimatedSinceResize=!0,q.layout++,this.motionValue||(this.motionValue=ni(0)),this.motionValue.jump(0,!1),this.currentAnimation=aa(this.motionValue,[0,1e3],{...t,velocity:0,isSync:!0,onUpdate:e=>{this.mixTargetDelta(e),t.onUpdate&&t.onUpdate(e)},onStop:()=>{q.layout--},onComplete:()=>{q.layout--,t.onComplete&&t.onComplete(),this.completeAnimation()}}),this.resumingFrom&&(this.resumingFrom.currentAnimation=this.currentAnimation),this.pendingAnimation=void 0})}completeAnimation(){this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0);const t=this.getStack();t&&t.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")}finishAnimation(){this.currentAnimation&&(this.mixTargetDelta&&this.mixTargetDelta(1e3),this.currentAnimation.stop()),this.completeAnimation()}applyTransformsToTarget(){const t=this.getLead();let{targetWithTransforms:e,target:n,layout:i,latestValues:s}=t;if(e&&n&&i){if(this!==t&&this.layout&&i&&$a(this.options.animationType,this.layout.layoutBox,i.layoutBox)){n=this.target||{x:{min:0,max:0},y:{min:0,max:0}};const e=Mr(this.layout.layoutBox.x);n.x.min=t.target.x.min,n.x.max=n.x.min+e;const i=Mr(this.layout.layoutBox.y);n.y.min=t.target.y.min,n.y.max=n.y.min+i}Pr(e,n),Xo(e,s),Rr(this.projectionDeltaWithTransform,this.layoutCorrected,e,s)}}registerSharedNode(t,e){this.sharedNodes.has(t)||this.sharedNodes.set(t,new ma);this.sharedNodes.get(t).add(e);const n=e.options.initialPromotionConfig;e.promote({transition:n?n.transition:void 0,preserveFollowOpacity:n&&n.shouldPreserveFollowOpacity?n.shouldPreserveFollowOpacity(e):void 0})}isLead(){const t=this.getStack();return!t||t.lead===this}getLead(){const{layoutId:t}=this.options;return t&&this.getStack()?.lead||this}getPrevLead(){const{layoutId:t}=this.options;return t?this.getStack()?.prevLead:void 0}getStack(){const{layoutId:t}=this.options;if(t)return this.root.sharedNodes.get(t)}promote({needsReset:t,transition:e,preserveFollowOpacity:n}={}){const i=this.getStack();i&&i.promote(this,n),t&&(this.projectionDelta=void 0,this.needsReset=!0),e&&this.setOptions({transition:e})}relegate(){const t=this.getStack();return!!t&&t.relegate(this)}resetSkewAndRotation(){const{visualElement:t}=this.options;if(!t)return;let e=!1;const{latestValues:n}=t;if((n.z||n.rotate||n.rotateX||n.rotateY||n.rotateZ||n.skewX||n.skewY)&&(e=!0),!e)return;const i={};n.z&&xa("z",t,i,this.animationValues);for(let e=0;et.currentAnimation?.stop()),this.root.nodes.forEach(Ea),this.root.sharedNodes.clear()}}}function ba(t){t.updateLayout()}function Sa(t){const e=t.resumeFrom?.snapshot||t.snapshot;if(t.isLead()&&t.layout&&e&&t.hasListeners("didUpdate")){const{layoutBox:n,measuredBox:i}=t.layout,{animationType:s}=t.options,o=e.source!==t.layout.source;"size"===s?Zr(t=>{const i=o?e.measuredBox[t]:e.layoutBox[t],s=Mr(i);i.min=n[t].min,i.max=i.min+s}):$a(s,e.layoutBox,n)&&Zr(i=>{const s=o?e.measuredBox[i]:e.layoutBox[i],r=Mr(n[i]);s.max=s.min+r,t.relativeTarget&&!t.currentAnimation&&(t.isProjectionDirty=!0,t.relativeTarget[i].max=t.relativeTarget[i].min+r)});const r={x:{translate:0,scale:1,origin:0,originPoint:0},y:{translate:0,scale:1,origin:0,originPoint:0}};Rr(r,n,e.layoutBox);const a={x:{translate:0,scale:1,origin:0,originPoint:0},y:{translate:0,scale:1,origin:0,originPoint:0}};o?Rr(a,t.applyTransform(i,!0),e.measuredBox):Rr(a,n,e.layoutBox);const l=!zr(r);let c=!1;if(!t.resumeFrom){const i=t.getClosestProjectingParent();if(i&&!i.resumeFrom){const{snapshot:s,layout:o}=i;if(s&&o){const r={x:{min:0,max:0},y:{min:0,max:0}};Lr(r,e.layoutBox,s.layoutBox);const a={x:{min:0,max:0},y:{min:0,max:0}};Lr(a,n,o.layoutBox),Hr(r,a)||(c=!0),i.options.layoutRoot&&(t.relativeTarget=a,t.relativeTargetOrigin=r,t.relativeParent=i)}}}t.notifyListeners("didUpdate",{layout:n,snapshot:e,delta:a,layoutDelta:r,hasLayoutChanged:l,hasRelativeLayoutChanged:c})}else if(t.isLead()){const{onExitComplete:e}=t.options;e&&e()}t.options.transition=void 0}function Aa(t){N.value&&ya.nodes++,t.parent&&(t.isProjecting()||(t.isProjectionDirty=t.parent.isProjectionDirty),t.isSharedProjectionDirty||(t.isSharedProjectionDirty=Boolean(t.isProjectionDirty||t.parent.isProjectionDirty||t.parent.isSharedProjectionDirty)),t.isTransformDirty||(t.isTransformDirty=t.parent.isTransformDirty))}function Va(t){t.isProjectionDirty=t.isSharedProjectionDirty=t.isTransformDirty=!1}function Pa(t){t.clearSnapshot()}function Ea(t){t.clearMeasurements()}function Ma(t){t.isLayoutDirty=!1}function ka(t){const{visualElement:e}=t.options;e&&e.getProps().onBeforeLayoutMeasure&&e.notify("BeforeLayoutMeasure"),t.resetTransform()}function Da(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0,t.isProjectionDirty=!0}function Ra(t){t.resolveTargetDelta()}function Ba(t){t.calcProjection()}function Ca(t){t.resetSkewAndRotation()}function ja(t){t.removeLeadSnapshot()}function La(t,e,n){t.translate=jt(e.translate,0,n),t.scale=jt(e.scale,1,n),t.origin=e.origin,t.originPoint=e.originPoint}function Oa(t,e,n,i){t.min=jt(e.min,n.min,i),t.max=jt(e.max,n.max,i)}function Fa(t){return t.animationValues&&void 0!==t.animationValues.opacityExit}const Ia={duration:.45,ease:[.4,0,.1,1]},Wa=t=>"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().includes(t),Na=Wa("applewebkit/")&&!Wa("chrome/")?Math.round:u;function Ua(t){t.min=Na(t.min),t.max=Na(t.max)}function $a(t,e,n){return"position"===t||"preserve-aspect"===t&&!kr(Gr(e),Gr(n),.2)}function za(t){return t!==t.root&&t.scroll?.wasRoot}const Ka=wa({attachResizeListener:(t,e)=>la(t,"resize",e),measureScroll:()=>({x:document.documentElement.scrollLeft||document.body?.scrollLeft||0,y:document.documentElement.scrollTop||document.body?.scrollTop||0}),checkIsScrollRoot:()=>!0}),Ya=t=>!t.isLayoutDirty&&t.willUpdate(!1);const Xa={current:void 0},Ha=wa({measureScroll:t=>({x:t.scrollLeft,y:t.scrollTop}),defaultParent:()=>{if(!Xa.current){const t=new Ka({});t.mount(window),t.setOptions({layoutScroll:!0}),Xa.current=t}return Xa.current},resetTransform:(t,e)=>{t.style.transform=void 0!==e?e:"none"},checkIsScrollRoot:t=>Boolean("fixed"===window.getComputedStyle(t).position)}),Ga="[data-layout], [data-layout-id]",qa=()=>{};function Za(t){const e=Array.from(t.querySelectorAll(Ga));return t instanceof Element&&t.matches(Ga)&&(e.includes(t)||e.unshift(t)),e}function _a(t){const e=t.getAttribute("data-layout-id")||void 0,n=t.getAttribute("data-layout");let i;return""===n||"true"===n?i=!0:n&&(i=n),{layout:i,layoutId:e}}function Ja(t,e,n){const i=mo.get(t),s=i??new or({props:{},presenceContext:null,visualState:{latestValues:{},renderState:{transform:{},transformOrigin:{},style:{},vars:{}}}},{allowProjection:!0});return i&&s.projection||(s.projection=new Ha(s.latestValues,e)),s.projection.setOptions({...n,visualElement:s}),s.current?s.projection.instance||s.projection.mount(t):s.mount(t),i||mo.set(t,s),{element:t,visualElement:s,projection:s.projection}}function Qa(t,e,n){let i=t.parentElement;for(;i;){const t=e.get(i);if(t)return t;if(i===n)break;i=i.parentElement}}const tl=$,el=W.reduce((t,e)=>(t[e]=t=>z(t),t),{});function nl(t){return"object"==typeof t&&!Array.isArray(t)}function il(t,e,n,i){return null==t?[]:"string"==typeof t&&nl(e)?Ni(t,n,i):t instanceof NodeList?Array.from(t):Array.isArray(t)?t.filter(t=>null!=t):[t]}function sl(t,e,n){return t*(e+1)}function ol(t,e,n,i){return"number"==typeof e?e:e.startsWith("-")||e.startsWith("+")?Math.max(0,t+parseFloat(e)):"<"===e?n:e.startsWith("<")?Math.max(0,n+parseFloat(e.slice(1))):i.get(e)??t}function rl(t,e,i,s,o,r){!function(t,e,i){for(let s=0;se&&o.at"number"==typeof t,ml=t=>t.every(pl);function fl(t){const e={presenceContext:null,props:{},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},n=ys(t)&&!Os(t)?new yr(e):new or(e);n.mount(t),mo.set(t,n)}function yl(t){const e=new rr({presenceContext:null,props:{},visualState:{renderState:{output:{}},latestValues:{}}});e.mount(t),mo.set(t,e)}function gl(e,n,i,s){const o=[];if(function(t,e){return ai(t)||"number"==typeof t||"string"==typeof t&&!nl(e)}(e,n))o.push(aa(e,nl(n)&&n.default||n,i&&i.default||i));else{if(null==e)return o;const r=il(e,n,s),a=r.length;t.invariant(Boolean(a),"No valid elements provided.","no-valid-elements");for(let t=0;t{const c=hl(e),{delay:u=0,times:h=Se(c),type:p=n.type||"keyframes",repeat:y,repeatType:g,repeatDelay:x=0,...T}=i;let{ease:w=n.ease||"easeOut",duration:b}=i;const S="function"==typeof u?u(a,l):u,A=c.length,V=gn(p)?p:o?.[p||"keyframes"];if(A<=2&&V){let t=100;if(2===A&&ml(c)){const e=c[1]-c[0];t=Math.abs(e)}const e={...n,...T};void 0!==b&&(e.duration=f(b));const i=_t(e,t,V);w=i.ease,b=i.duration}b??(b=r);const P=d+S;1===h.length&&0===h[0]&&(h[1]=1);const E=h.length-c.length;if(E>0&&be(h,E),1===c.length&&c.unshift(null),y){t.invariant(y<20,"Repeat count too high, must be less than 20","repeat-count-high"),b=sl(b,y);const e=[...c],n=[...h];w=Array.isArray(w)?[...w]:[w];const i=[...w];for(let t=0;t{for(const s in t){const o=t[s];o.sort(ll);const r=[],l=[],c=[];for(let t=0;t{if(Array.isArray(t)&&"function"==typeof t[0]){const e=t[0],n=ni(0);return n.on("change",e),1===t.length?[n,[0,1]]:2===t.length?[n,[0,1],t[1]]:[n,t[1],t[2]]}return t}),n,i,{spring:xe});return o.forEach(({keyframes:t,transition:e},n)=>{s.push(...gl(n,t,e))}),s}function xl(t={}){const{scope:e,reduceMotion:i}=t;return function(t,s,o){let r,a=[];if(l=t,Array.isArray(l)&&l.some(Array.isArray))a=vl(t,void 0!==i?{reduceMotion:i,...s}:s,e);else{const{onComplete:n,...l}=o||{};"function"==typeof n&&(r=n),a=gl(t,s,void 0!==i?{reduceMotion:i,...l}:l,e)}var l;const c=new Rn(a);return r&&c.finished.then(r),e&&(e.animations.push(c),c.finished.then(()=>{n(e.animations,c)})),c}}const Tl=xl();const wl=e=>function(n,i,s){return new Rn(function(e,n,i,s){if(null==e)return[];const o=Ni(e,s),r=o.length;t.invariant(Boolean(r),"No valid elements provided.","no-valid-elements");const a=[];for(let t=0;te.delete(n)),l.push(s)}return l}(n,i,s,e))},bl=wl(),Sl={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}};function Al(t,e,n,i){const s=n[e],{length:o,position:r}=Sl[e],a=s.current,l=n.time;s.current=t[`scroll${r}`],s.scrollLength=t[`scroll${o}`]-t[`client${o}`],s.offset.length=0,s.offset[0]=0,s.offset[1]=s.scrollLength,s.progress=p(0,s.scrollLength,s.current);const c=i-l;s.velocity=c>50?0:g(s.current-a,c)}const Vl={start:0,center:.5,end:1};function Pl(t,e,n=0){let i=0;if(t in Vl&&(t=Vl[t]),"string"==typeof t){const e=parseFloat(t);t.endsWith("px")?i=e:t.endsWith("%")?t=e/100:t.endsWith("vw")?i=e/100*document.documentElement.clientWidth:t.endsWith("vh")?i=e/100*document.documentElement.clientHeight:t=e}return"number"==typeof t&&(i=e*t),n+i}const El=[0,0];function Ml(t,e,n,i){let s=Array.isArray(t)?t:El,o=0,r=0;return"number"==typeof t?s=[t,t]:"string"==typeof t&&(s=(t=t.trim()).includes(" ")?t.split(" "):[t,Vl[t]?t:"0"]),o=Pl(s[0],n,i),r=Pl(s[1],e),o-r}const kl={Enter:[[0,1],[1,1]],Exit:[[0,0],[1,0]],Any:[[1,0],[0,1]],All:[[0,0],[1,1]]},Dl={x:0,y:0};function Rl(t,e,n){const{offset:s=kl.All}=n,{target:o=t,axis:r="y"}=n,a="y"===r?"height":"width",l=o!==t?function(t,e){const n={x:0,y:0};let i=t;for(;i&&i!==e;)if(Gi(i))n.x+=i.offsetLeft,n.y+=i.offsetTop,i=i.offsetParent;else if("svg"===i.tagName){const t=i.getBoundingClientRect();i=i.parentElement;const e=i.getBoundingClientRect();n.x+=t.left-e.left,n.y+=t.top-e.top}else{if(!(i instanceof SVGGraphicsElement))break;{const{x:t,y:e}=i.getBBox();n.x+=t,n.y+=e;let s=null,o=i.parentNode;for(;!s;)"svg"===o.tagName&&(s=o),o=i.parentNode;i=s}}return n}(o,t):Dl,c=o===t?{width:t.scrollWidth,height:t.scrollHeight}:function(t){return"getBBox"in t&&"svg"!==t.tagName?t.getBBox():{width:t.clientWidth,height:t.clientHeight}}(o),u={width:t.clientWidth,height:t.clientHeight};e[r].offset.length=0;let h=!e[r].interpolate;const d=s.length;for(let t=0;t{!function(t,e=t,n){if(n.x.targetOffset=0,n.y.targetOffset=0,e!==t){let i=e;for(;i&&i!==t;)n.x.targetOffset+=i.offsetLeft,n.y.targetOffset+=i.offsetTop,i=i.offsetParent}n.x.targetLength=e===t?e.scrollWidth:e.clientWidth,n.y.targetLength=e===t?e.scrollHeight:e.clientHeight,n.x.containerLength=t.clientWidth,n.y.containerLength=t.clientHeight}(t,i.target,n),function(t,e,n){Al(t,"x",e,n),Al(t,"y",e,n),e.time=n}(t,n,e),(i.offset||i.target)&&Rl(t,n,i)},notify:()=>e(n)}}const Cl=new WeakMap,jl=new WeakMap,Ll=new WeakMap,Ol=new WeakMap,Fl=new WeakMap,Il=t=>t===document.scrollingElement?window:t;function Wl(t,{container:e=document.scrollingElement,trackContentSize:n=!1,...i}={}){if(!e)return u;let s=Ll.get(e);s||(s=new Set,Ll.set(e,s));const o=Bl(e,t,{time:0,x:{current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0},y:{current:0,offset:[],progress:0,scrollLength:0,targetOffset:0,targetLength:0,containerLength:0,velocity:0}},i);if(s.add(o),!Cl.has(e)){const t=()=>{for(const t of s)t.measure(K.timestamp);$.preUpdate(n)},n=()=>{for(const t of s)t.notify()},i=()=>$.read(t);Cl.set(e,i);const o=Il(e);window.addEventListener("resize",i),e!==document.documentElement&&jl.set(e,Ms(e,i)),o.addEventListener("scroll",i),i()}if(n&&!Fl.has(e)){const t=Cl.get(e),n={width:e.scrollWidth,height:e.scrollHeight};Ol.set(e,n);const i=()=>{const i=e.scrollWidth,s=e.scrollHeight;n.width===i&&n.height===s||(t(),n.width=i,n.height=s)},s=$.read(i,!0);Fl.set(e,s)}const r=Cl.get(e);return $.read(r,!1,!0),()=>{z(r);const t=Ll.get(e);if(!t)return;if(t.delete(o),t.size)return;const n=Cl.get(e);Cl.delete(e),n&&(Il(e).removeEventListener("scroll",n),jl.get(e)?.(),window.removeEventListener("resize",n));const i=Fl.get(e);i&&(z(i),Fl.delete(e)),Ol.delete(e)}}const Nl=new Map;function Ul({source:t,container:e,...n}){const{axis:i}=n;t&&(e=t);const s=Nl.get(e)??new Map;Nl.set(e,s);const o=n.target??"self",r=s.get(o)??{},a=i+(n.offset??[]).join(",");var l;return r[a]||(r[a]=(l=n.target,"undefined"!=typeof window&&!l&&hn()?new ScrollTimeline({source:e,axis:i}):function(t){const e={value:0},n=Wl(n=>{e.value=100*n[t.axis].progress},t);return{currentTime:e,cancel:n}}({container:e,...n}))),r[a]}const $l={some:0,all:1};const zl=(t,e)=>Math.abs(t-e);t.AsyncMotionValueAnimation=Mn,t.DOMKeyframesResolver=Li,t.DOMVisualElement=ko,t.DocumentProjectionNode=Ka,t.Feature=class{constructor(t){this.isMounted=!1,this.node=t}update(){}},t.FlatTree=ua,t.GroupAnimation=kn,t.GroupAnimationWithThen=Rn,t.HTMLProjectionNode=Ha,t.HTMLVisualElement=or,t.JSAnimation=Ce,t.KeyframeResolver=rn,t.LayoutAnimationBuilder=class{constructor(t,e,n){this.sharedTransitions=new Map,this.notifyReady=qa,this.rejectReady=qa,this.scope=t,this.updateDom=e,this.defaultOptions=n,this.readyPromise=new Promise((t,e)=>{this.notifyReady=t,this.rejectReady=e}),$.postRender(()=>{this.start().then(this.notifyReady).catch(this.rejectReady)})}shared(t,e){return this.sharedTransitions.set(t,e),this}then(t,e){return this.readyPromise.then(t,e)}async start(){const t=Za(this.scope),e=this.buildRecords(t);e.forEach(({projection:t})=>{const e=Boolean(t.currentAnimation),n=Boolean(t.options.layoutId);if(e&&n){const e=function(t){const e=t.targetWithTransforms||t.target;if(!e)return;const n={x:{min:0,max:0},y:{min:0,max:0}},i={x:{min:0,max:0},y:{min:0,max:0}};return Pr(n,e),Pr(i,e),{animationId:t.root?.animationId??0,measuredBox:n,layoutBox:i,latestValues:t.animationValues||t.latestValues||{},source:t.id}}(t);e?t.snapshot=e:t.snapshot&&(t.snapshot=void 0)}else t.snapshot&&(t.currentAnimation||t.isProjecting())&&(t.snapshot=void 0);t.isPresent=!0,t.willUpdate()}),await this.updateDom();const n=Za(this.scope),i=this.buildRecords(n);this.handleExitingElements(e,i),i.forEach(({projection:t})=>{const e=t.instance,n=t.resumeFrom?.instance;if(!e||!n)return;if(!("style"in e))return;const i=e.style.transform,s=n.style.transform;i&&s&&i===s&&(e.style.transform="",e.style.transformOrigin="")}),i.forEach(({projection:t})=>{t.isPresent=!0});const s=function(t,e){const n=t[0]||e[0];return n?.projection.root}(i,e);s?.didUpdate(),await new Promise(t=>{$.postRender(()=>t())});const o=function(t){const e=new Set;return t.forEach(t=>{const n=t.projection.currentAnimation;n&&e.add(n)}),Array.from(e)}(i);return new kn(o)}buildRecords(t){const e=[],n=new Map;for(const i of t){const t=Qa(i,n,this.scope),{layout:s,layoutId:o}=_a(i),r=(o?this.sharedTransitions.get(o):void 0)||this.defaultOptions,a=Ja(i,t?.projection,{layout:s,layoutId:o,animationType:"string"==typeof s?s:"both",transition:r});n.set(i,a),e.push(a)}return e}handleExitingElements(t,e){const n=new Set(e.map(t=>t.element));t.forEach(t=>{n.has(t.element)||(t.projection.options.layoutId&&(t.projection.isPresent=!1,t.projection.relegate()),t.visualElement.unmount(),mo.delete(t.element))});const i=new Set(t.map(t=>t.element));e.forEach(({element:t,projection:e})=>{i.has(t)&&e.resumeFrom&&!e.resumeFrom.instance&&!e.isLead()&&(e.resumeFrom=void 0,e.snapshot=void 0)})}},t.MotionGlobalConfig=o,t.MotionValue=ei,t.NativeAnimation=xn,t.NativeAnimationExtended=bn,t.NativeAnimationWrapper=Bn,t.NodeStack=ma,t.ObjectVisualElement=rr,t.SVGVisualElement=yr,t.SubscriptionManager=m,t.ViewTransitionBuilder=lo,t.VisualElement=Mo,t.acceleratedValues=Wi,t.activeAnimations=q,t.addAttrValue=Yi,t.addDomEvent=la,t.addScaleCorrector=function(t){for(const e in t)nr[e]=t[e],_(e)&&(nr[e].isCSSVariable=!0)},t.addStyleValue=_i,t.addUniqueItem=e,t.addValueToWillChange=ci,t.alpha=it,t.analyseComplexValue=Pt,t.animate=Tl,t.animateMini=bl,t.animateMotionValue=qn,t.animateSingleValue=aa,t.animateTarget=fi,t.animateValue=function(t){return new Ce(t)},t.animateVariant=yi,t.animateView=function(t,e={}){return new lo(t,e)},t.animateVisualElement=gi,t.animationMapKey=jn,t.anticipate=E,t.applyAxisDelta=Wo,t.applyBoxDelta=No,t.applyGeneratorOptions=vn,t.applyPointDelta=Io,t.applyPxDefaults=Fi,t.applyTreeDeltas=zo,t.aspectRatio=Gr,t.attachFollow=Ns,t.attachSpring=function(t,e,n){return Ns(t,e,{type:"spring",...n})},t.attrEffect=Xi,t.axisDeltaEquals=qr,t.axisEquals=Kr,t.axisEqualsRounded=Xr,t.backIn=V,t.backInOut=P,t.backOut=A,t.boxEquals=Yr,t.boxEqualsRounded=Hr,t.buildHTMLStyles=_o,t.buildProjectionTransform=_r,t.buildSVGAttrs=hr,t.buildSVGPath=cr,t.buildTransform=Zo,t.calcAxisDelta=Dr,t.calcBoxDelta=Rr,t.calcChildStagger=On,t.calcGeneratorDuration=Zt,t.calcLength=Mr,t.calcRelativeAxis=Br,t.calcRelativeAxisPosition=jr,t.calcRelativeBox=Cr,t.calcRelativePosition=Lr,t.camelCaseAttributes=dr,t.camelToDash=ui,t.cancelFrame=z,t.cancelMicrotask=es,t.cancelSync=el,t.checkVariantsDidChange=br,t.circIn=M,t.circInOut=D,t.circOut=k,t.clamp=i,t.cleanDirtyNodes=Va,t.collectMotionValues=ti,t.color=wt,t.compareByDepth=ca,t.complex=Dt,t.containsCSSVariable=et,t.convertBoundingBoxToBox=Do,t.convertBoxToBoundingBox=function({x:t,y:e}){return{top:e.min,right:t.max,bottom:e.max,left:t.min}},t.convertOffsetToTimes=Ae,t.copyAxisDeltaInto=Er,t.copyAxisInto=Vr,t.copyBoxInto=Pr,t.correctBorderRadius=tr,t.correctBoxShadow=er,t.createAnimationState=function(t){let e=function(t){return e=>Promise.all(e.map(({animation:e,options:n})=>gi(t,e,n)))}(t),n=Ar(),i=!0;const s=e=>(n,i)=>{const s=Jn(t,i,"exit"===e?t.presenceContext?.custom:void 0);if(s){const{transition:t,transitionEnd:e,...i}=s;n={...n,...i,...e}}return n};function o(o){const{props:r}=t,a=vr(t.parent)||{},l=[],c=new Set;let u={},h=1/0;for(let e=0;eh&&f,T=!1;const w=Array.isArray(m)?m:[m];let b=w.reduce(s(d),{});!1===y&&(b={});const{prevResolvedValues:S={}}=p,A={...S,...b},V=e=>{x=!0,c.has(e)&&(T=!0,c.delete(e)),p.needsAnimating[e]=!0;const n=t.getValue(e);n&&(n.liveStyle=!1)};for(const t in A){const e=b[t],n=S[t];if(u.hasOwnProperty(t))continue;let i=!1;i=ii(e)&&ii(n)?!xr(e,n):e!==n,i?null!=e?V(t):c.add(t):void 0!==e&&c.has(t)?V(t):p.protectedKeys[t]=!0}p.prevProp=m,p.prevResolvedValues=b,p.isActive&&(u={...u,...b}),i&&t.blockInitialAnimation&&(x=!1);const P=g&&v;x&&(!P||T)&&l.push(...w.map(e=>{const n={type:d};if("string"==typeof e&&i&&!P&&t.manuallyAnimateOnMount&&t.parent){const{parent:i}=t,s=Jn(i,e);if(i.enteringChildren&&s){const{delayChildren:e}=s.transition||{};n.delay=On(i.enteringChildren,t,e)}}return{animation:e,options:n}}))}if(c.size){const e={};if("boolean"!=typeof r.initial){const n=Jn(t,Array.isArray(r.initial)?r.initial[0]:r.initial);n&&n.transition&&(e.transition=n.transition)}c.forEach(n=>{const i=t.getBaseTarget(n),s=t.getValue(n);s&&(s.liveStyle=!0),e[n]=i??null}),l.push({animation:e})}let d=Boolean(l.length);return!i||!1!==r.initial&&r.initial!==r.animate||t.manuallyAnimateOnMount||(d=!1),i=!1,d?e(l):Promise.resolve()}return{animateChanges:o,setActive:function(e,i){if(n[e].isActive===i)return Promise.resolve();t.variantChildren?.forEach(t=>t.animationState?.setActive(e,i)),n[e].isActive=i;const s=o(e);for(const t in n)n[t].protectedKeys={};return s},setAnimateFunction:function(n){e=n(t)},getState:()=>n,reset:()=>{n=Ar()}}},t.createAxis=ho,t.createAxisDelta=co,t.createBox=po,t.createDelta=uo,t.createGeneratorEasing=_t,t.createProjectionNode=wa,t.createRenderBatcher=U,t.createScopedAnimate=xl,t.cubicBezier=w,t.cubicBezierAsString=pn,t.defaultEasing=Ve,t.defaultOffset=Se,t.defaultTransformValue=$e,t.defaultValueTypes=Di,t.degrees=mt,t.delay=da,t.delayInSeconds=da,t.dimensionValueTypes=xi,t.distance=zl,t.distance2D=function(t,e){const n=zl(t.x,e.x),i=zl(t.y,e.y);return Math.sqrt(n**2+i**2)},t.eachAxis=Zr,t.easeIn=R,t.easeInOut=C,t.easeOut=B,t.easingDefinitionToFunction=I,t.fillOffset=be,t.fillWildcards=je,t.findDimensionValueType=Ti,t.findValueType=Ys,t.flushKeyframeResolvers=on,t.followValue=Ws,t.frame=$,t.frameData=K,t.frameSteps=Y,t.generateLinearEasing=Gt,t.getAnimatableNone=Ci,t.getAnimationMap=Ln,t.getComputedStyle=fs,t.getDefaultTransition=zn,t.getDefaultValueType=Ri,t.getEasingForSegment=L,t.getFeatureDefinitions=function(){return Eo},t.getFinalKeyframe=Yn,t.getMixer=$t,t.getOptimisedAppearId=pi,t.getOriginIndex=Fs,t.getValueAsType=$i,t.getValueTransition=Hn,t.getVariableValue=Wn,t.getVariantContext=vr,t.getViewAnimationLayerInfo=Js,t.getViewAnimations=to,t.globalProjectionState=fa,t.has2DTranslate=Lo,t.hasReducedMotionListener=So,t.hasScale=Co,t.hasTransform=jo,t.hasWarned=function(t){return v.has(t)},t.hex=dt,t.hover=function(t,e,n={}){const[i,s,o]=ss(t,n);return i.forEach(t=>{let n,i=!1,o=!1;const r=e=>{n&&(n(e),n=void 0),t.removeEventListener("pointerleave",l)},a=t=>{i=!1,window.removeEventListener("pointerup",a),window.removeEventListener("pointercancel",a),o&&(o=!1,r(t))},l=t=>{"touch"!==t.pointerType&&(i?o=!0:r(t))};t.addEventListener("pointerenter",i=>{if("touch"===i.pointerType||is())return;o=!1;const r=e(t,i);"function"==typeof r&&(n=r,t.addEventListener("pointerleave",l,s))},s),t.addEventListener("pointerdown",()=>{i=!0,window.addEventListener("pointerup",a,s),window.addEventListener("pointercancel",a,s)},s)}),o},t.hsla=Tt,t.hslaToRgba=Bt,t.inView=function(t,e,{root:n,margin:i,amount:s="some"}={}){const o=Ni(t),r=new WeakMap,a=new IntersectionObserver(t=>{t.forEach(t=>{const n=r.get(t.target);if(t.isIntersecting!==Boolean(n))if(t.isIntersecting){const n=e(t.target,t);"function"==typeof n?r.set(t.target,n):a.unobserve(t.target)}else"function"==typeof n&&(n(t),r.delete(t.target))})},{root:n,rootMargin:i,threshold:"number"==typeof s?s:$l[s]});return o.forEach(t=>a.observe(t)),()=>a.disconnect()},t.inertia=Te,t.initPrefersReducedMotion=Vo,t.interpolate=we,t.invisibleValues=Wt,t.isAnimationControls=fo,t.isBezierDefinition=O,t.isCSSVariableName=_,t.isCSSVariableToken=Q,t.isControllingVariants=xo,t.isDeltaZero=zr,t.isDragActive=is,t.isDragging=ns,t.isEasingArray=j,t.isElementKeyboardAccessible=ls,t.isElementTextInput=function(t){return cs.has(t.tagName)||!0===t.isContentEditable},t.isForcedMotionValue=ir,t.isGenerator=gn,t.isHTMLElement=Gi,t.isKeyframesTarget=ii,t.isMotionValue=ai,t.isNear=kr,t.isNodeOrChild=os,t.isNumericalString=r,t.isObject=a,t.isPrimaryPointer=rs,t.isSVGElement=ys,t.isSVGSVGElement=Os,t.isSVGTag=pr,t.isTransitionDefined=Gn,t.isVariantLabel=yo,t.isVariantNode=To,t.isWaapiSupportedEasing=function t(e){return Boolean("function"==typeof e&&dn()||!e||"string"==typeof e&&(e in mn||dn())||O(e)||Array.isArray(e)&&e.every(t))},t.isWillChangeMotionValue=li,t.isZeroValueString=l,t.keyframes=Pe,t.makeAnimationInstant=An,t.mapEasingToNativeEasing=fn,t.mapValue=function(t,e,n,i){const s=Is(e,n,i);return zs(()=>s(t.get()))},t.maxGeneratorDuration=qt,t.measurePageBox=function(t,e,n){const i=Ho(t,n),{scroll:s}=e;return s&&(Ko(i.x,s.offset.x),Ko(i.y,s.offset.y)),i},t.measureViewportBox=Ho,t.memo=c,t.microtask=ts,t.millisecondsToSeconds=y,t.mirrorEasing=b,t.mix=Xt,t.mixArray=zt,t.mixColor=It,t.mixComplex=Yt,t.mixImmediate=Ct,t.mixLinearColor=Lt,t.mixNumber=jt,t.mixObject=Kt,t.mixValues=na,t.mixVisibility=Nt,t.motionValue=ni,t.moveItem=function([...t],e,n){const i=e<0?t.length+e:e;if(i>=0&&it.forEach(Ya);return{add:i=>{t.add(i),e.set(i,i.addEventListener("willUpdate",n))},remove:i=>{t.delete(i);const s=e.get(i);s&&(s(),e.delete(i)),n()},dirty:n}},t.noop=u,t.number=nt,t.numberValueTypes=ki,t.observeTimeline=ks,t.optimizedAppearDataAttribute=di,t.optimizedAppearDataId=hi,t.parseAnimateLayoutArgs=function(t,e,n){return"function"==typeof t?{scope:document,updateDom:t,defaultOptions:e}:{scope:Ni(t)[0]||document,updateDom:e,defaultOptions:n}},t.parseCSSVariable=In,t.parseValueFromTransform=ze,t.percent=ft,t.pipe=d,t.pixelsToPercent=Qo,t.positionalKeys=Qn,t.prefersReducedMotion=bo,t.press=function(t,e,n={}){const[i,s,o]=ss(t,n),r=t=>{const i=t.currentTarget;if(!ps(t))return;if(ms.has(t))return;us.add(i),n.stopPropagation&&ms.add(t);const o=e(i,t),r=(t,e)=>{window.removeEventListener("pointerup",a),window.removeEventListener("pointercancel",l),us.has(i)&&us.delete(i),ps(t)&&"function"==typeof o&&o(t,{success:e})},a=t=>{r(t,i===window||i===document||n.useGlobalTarget||os(i,t.target))},l=t=>{r(t,!1)};window.addEventListener("pointerup",a,s),window.addEventListener("pointercancel",l,s)};return i.forEach(t=>{(n.useGlobalTarget?window:t).addEventListener("pointerdown",r,s),Gi(t)&&(t.addEventListener("focus",t=>((t,e)=>{const n=t.currentTarget;if(!n)return;const i=hs(()=>{if(us.has(n))return;ds(n,"down");const t=hs(()=>{ds(n,"up")});n.addEventListener("keyup",t,e),n.addEventListener("blur",()=>ds(n,"cancel"),e)});n.addEventListener("keydown",i,e),n.addEventListener("blur",()=>n.removeEventListener("keydown",i),e)})(t,s)),ls(t)||t.hasAttribute("tabindex")||(t.tabIndex=0))}),o},t.progress=p,t.progressPercentage=xt,t.propEffect=Hi,t.propagateDirtyNodes=Aa,t.px=yt,t.readTransformValue=Ke,t.recordStats=function(){if(N.value)throw js(),new Error("Stats are already being measured");const t=N;return t.value={frameloop:{setup:[],rate:[],read:[],resolveKeyframes:[],preUpdate:[],update:[],preRender:[],render:[],postRender:[]},animations:{mainThread:[],waapi:[],layout:[]},layoutProjection:{nodes:[],calculatedTargetDeltas:[],calculatedProjections:[]}},t.addProjectionMetrics=e=>{const{layoutProjection:n}=t.value;n.nodes.push(e.nodes),n.calculatedTargetDeltas.push(e.calculatedTargetDeltas),n.calculatedProjections.push(e.calculatedProjections)},$.postRender(Ds,!0),Ls},t.removeAxisDelta=Fr,t.removeAxisTransforms=Ir,t.removeBoxTransforms=Ur,t.removeItem=n,t.removePointDelta=Or,t.renderHTML=Jo,t.renderSVG=mr,t.resize=Ms,t.resolveElements=Ni,t.resolveMotionValue=pa,t.resolveTransition=Xn,t.resolveVariant=Jn,t.resolveVariantFromProps=_n,t.reverseEasing=S,t.rgbUnit=ut,t.rgba=ht,t.rootProjectionNode=Xa,t.scale=st,t.scaleCorrectors=nr,t.scalePoint=Fo,t.scrapeHTMLMotionValuesFromProps=sr,t.scrapeSVGMotionValuesFromProps=fr,t.scroll=function(t,{axis:e="y",container:n=document.scrollingElement,...i}={}){if(!n)return u;const s={axis:e,container:n,...i};return"function"==typeof t?function(t,e){return function(t){return 2===t.length}(t)?Wl(n=>{t(n[e.axis].progress,n)},e):ks(t,Ul(e))}(t,s):function(t,e){const n=Ul(e);return t.attachTimeline({timeline:e.target?void 0:n,observe:t=>(t.pause(),ks(e=>{t.time=t.iterationDuration*e},n))})}(t,s)},t.scrollInfo=Wl,t.secondsToMilliseconds=f,t.setDragLock=function(t){return"x"===t||"y"===t?ns[t]?null:(ns[t]=!0,()=>{ns[t]=!1}):ns.x||ns.y?null:(ns.x=ns.y=!0,()=>{ns.x=ns.y=!1})},t.setFeatureDefinitions=function(t){Eo=t},t.setStyle=ln,t.setTarget=ri,t.spring=xe,t.springValue=function(t,e){return Ws(t,{type:"spring",...e})},t.stagger=function(t=.1,{startDelay:e=0,from:n=0,ease:i}={}){return(s,o)=>{const r="number"==typeof n?n:Fs(n,o),a=Math.abs(r-s);let l=t*a;if(i){const e=o*t;l=I(i)(l/e)*e}return e+l}},t.startWaapiAnimation=yn,t.statsBuffer=N,t.steps=function(t,e="end"){return n=>{const s=(n="end"===e?Math.min(n,.999):Math.max(n,.001))*t,o="end"===e?Math.floor(s):Math.ceil(s);return i(0,1,o/t)}},t.styleEffect=Ji,t.supportedWaapiEasing=mn,t.supportsBrowserAnimation=En,t.supportsFlags=cn,t.supportsLinearEasing=dn,t.supportsPartialKeyframes=Ii,t.supportsScrollTimeline=hn,t.svgEffect=Qi,t.sync=tl,t.testValueType=vi,t.time=G,t.transform=Is,t.transformAxis=Yo,t.transformBox=Xo,t.transformBoxPoints=Ro,t.transformPropOrder=Xe,t.transformProps=He,t.transformValue=zs,t.transformValueTypes=Mi,t.translateAxis=Ko,t.updateMotionValuesFromProps=wo,t.variantPriorityOrder=go,t.variantProps=vo,t.velocityPerSecond=g,t.vh=gt,t.visualElementStore=mo,t.vw=vt,t.warnOnce=function(t,e,n){t||v.has(e)||(console.warn(s(e,n)),v.add(e))},t.wrap=x}); \ No newline at end of file diff --git a/src/zen/welcome/jar.inc.mn b/src/zen/welcome/jar.inc.mn index 9e7fc185b..7295cfbaf 100644 --- a/src/zen/welcome/jar.inc.mn +++ b/src/zen/welcome/jar.inc.mn @@ -3,4 +3,4 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. content/browser/zen-components/ZenWelcome.mjs (../../zen/welcome/ZenWelcome.mjs) - content/browser/zen-styles/zen-welcome.css (../../zen/welcome/zen-welcome.css) \ No newline at end of file + content/browser/zen-styles/zen-welcome.css (../../zen/welcome/zen-welcome.css) diff --git a/src/zen/welcome/zen-welcome.css b/src/zen/welcome/zen-welcome.css index 456f2aee0..54d2c7f10 100644 --- a/src/zen/welcome/zen-welcome.css +++ b/src/zen/welcome/zen-welcome.css @@ -62,7 +62,6 @@ display: none; background: var(--zen-branding-bg); border-radius: 1em; - overflow: hidden; position: relative; width: 60%; height: 60%; @@ -83,7 +82,7 @@ @media (max-width: 1000px) { width: 100%; height: 100%; - border-radius: 0px; + border-radius: 0; } #zen-welcome-page-sidebar { diff --git a/src/zen/workspaces/create-workspace-form.css b/src/zen/workspaces/create-workspace-form.css index 4e3ad350f..de51a4737 100644 --- a/src/zen/workspaces/create-workspace-form.css +++ b/src/zen/workspaces/create-workspace-form.css @@ -60,8 +60,8 @@ zen-workspace-creation { & .zen-workspace-creation-icon-label { position: relative; - width: 24px; - height: 20px; + width: var(--size-item-medium); + height: var(--icon-size-medium); justify-content: center; align-items: center; cursor: pointer; @@ -73,8 +73,8 @@ zen-workspace-creation { & image { position: absolute; - width: 16px; - height: 16px; + width: var(--size-item-small); + height: var(--size-item-small); -moz-context-properties: fill-opacity, fill; fill: currentColor; } @@ -132,7 +132,6 @@ zen-workspace-creation { & .zen-workspace-creation-profile { margin: 0; padding: 6px !important; - border-radius: 99px; padding-inline-end: 0; appearance: none; background: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1)); diff --git a/src/zen/workspaces/jar.inc.mn b/src/zen/workspaces/jar.inc.mn index bbf8beb04..32c9919ab 100644 --- a/src/zen/workspaces/jar.inc.mn +++ b/src/zen/workspaces/jar.inc.mn @@ -9,4 +9,4 @@ content/browser/zen-components/ZenWorkspaceBookmarksStorage.js (../../zen/workspaces/ZenWorkspaceBookmarksStorage.js) content/browser/zen-components/ZenGradientGenerator.mjs (../../zen/workspaces/ZenGradientGenerator.mjs) * content/browser/zen-styles/zen-workspaces.css (../../zen/workspaces/zen-workspaces.css) - content/browser/zen-styles/zen-gradient-generator.css (../../zen/workspaces/zen-gradient-generator.css) \ No newline at end of file + content/browser/zen-styles/zen-gradient-generator.css (../../zen/workspaces/zen-gradient-generator.css) diff --git a/src/zen/workspaces/zen-gradient-generator.css b/src/zen/workspaces/zen-gradient-generator.css index c523951e7..9ba5bf9c5 100644 --- a/src/zen/workspaces/zen-gradient-generator.css +++ b/src/zen/workspaces/zen-gradient-generator.css @@ -158,8 +158,8 @@ background: var(--zen-theme-picker-dot-color); border: 1px solid var(--zen-colors-border); border-radius: 5px; - width: 20px; - height: 20px; + width: var(--icon-size-medium); + height: var(--icon-size-medium); margin-right: 10px; } @@ -200,7 +200,7 @@ content: ""; position: absolute; width: calc(100% - 8px); - height: 16px; + height: var(--size-item-small); background: light-dark(rgba(0, 0, 0, 0.1), rgba(255, 255, 255, 0.1)); border-radius: 999px; pointer-events: none; @@ -257,8 +257,8 @@ & .zen-theme-picker-dot { position: fixed; z-index: 2; - width: 20px; - height: 20px; + width: var(--icon-size-medium); + height: var(--icon-size-medium); border-radius: 50%; background: var(--zen-theme-picker-dot-color); @media (-prefers-color-scheme: dark) { @@ -275,7 +275,6 @@ width: 38px; height: 38px; border-width: 4px; - z-index: 2; pointer-events: all; transition: transform 0.2s; z-index: 999; @@ -314,7 +313,7 @@ #PanelUI-zen-gradient-generator-scheme { display: flex; position: absolute; - bottom: 12px; + bottom: var(--size-item-xsmall); left: 50%; z-index: 1; transform: translateX(-50%); @@ -323,7 +322,6 @@ & button { border: none !important; padding: 0 !important; - min-width: fit-content !important; transition: background 0.2s; appearance: none; max-height: 30px; @@ -353,9 +351,10 @@ #PanelUI-zen-gradient-generator-scheme { top: 15px; - max-height: 32px; + max-height: var(--size-item-large); } +/* stylelint-disable-next-line media-query-no-invalid */ @media not -moz-pref("zen.theme.gradient.show-custom-colors") { #PanelUI-zen-gradient-generator-custom-colors { display: none !important; @@ -420,7 +419,7 @@ & #PanelUI-zen-gradient-generator-texture-handler { width: 6px; - height: 12px; + height: var(--size-item-xsmall); background: light-dark(#757575, #d1d1d1); position: absolute; transition: height 0.1s; diff --git a/src/zen/workspaces/zen-workspaces.css b/src/zen/workspaces/zen-workspaces.css index 8838ece39..45a81ecb5 100644 --- a/src/zen/workspaces/zen-workspaces.css +++ b/src/zen/workspaces/zen-workspaces.css @@ -55,7 +55,7 @@ &:is(img) { width: 14px; } - + &[no-icon='true'] { width: 6px; height: 6px; @@ -109,7 +109,7 @@ scale: 1 !important; } - /* Inlcude separately since ther'es a bug in the + /* Include separately since ther'es a bug in the * rendering of XUL in firefox */ & toolbarbutton:not([active='true']) { %include overflow-icons.inc.css @@ -298,7 +298,7 @@ } :root[zen-unsynced-window='true'] - #navigator-toolbox[zen-has-implicit-hover='true'] + #navigator-toolbox[zen-has-implicit-hover='true'] & .zen-workspaces-actions, :root:not([zen-unsynced-window]) &:hover .zen-workspaces-actions, & .zen-workspaces-actions[open='true'] {