diff --git a/.eslintrc b/.eslintrc index 490f6b11..5a90fe4f 100644 --- a/.eslintrc +++ b/.eslintrc @@ -12,7 +12,9 @@ "plugin:import/typescript", "plugin:tailwindcss/recommended", "plugin:promise/recommended", - "plugin:perfectionist/recommended-natural" + "plugin:perfectionist/recommended-natural", + "plugin:react-hooks/recommended", + "plugin:prettier/recommended" ], "root": true, "parser": "@typescript-eslint/parser", @@ -31,6 +33,7 @@ "@typescript-eslint/no-unused-vars": ["error"], "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/restrict-template-expressions": "off", "quotes": ["error", "double", { "avoidEscape": true, "allowTemplateLiterals": true }], "semi": ["error", "always"], "prefer-const": [ @@ -54,7 +57,7 @@ "no-empty": ["error", { "allowEmptyCatch": true }], "no-mixed-spaces-and-tabs": ["error", "smart-tabs"], "import/first": ["error"], - "no-secrets/no-secrets": "error", + "no-secrets/no-secrets": ["error", { "tolerance": 5.0 }], "import/no-unresolved": "off", "tailwindcss/no-custom-classname": "off", "tailwindcss/classnames-order": "error", diff --git a/.prettierignore b/.prettierignore index f06235c4..8212fd4b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,8 @@ node_modules dist +.all-contributorsrc +CHANGELOG.md +README.md +package.json +package-lock.json +yarn.lock diff --git a/.vscode/settings.json b/.vscode/settings.json index 0f9e1c25..8bbb6365 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,5 +5,7 @@ "source.fixAll": "always" }, "eslint.codeActionsOnSave.mode": "all", - "editor.snippets.codeActions.enabled": true + "editor.snippets.codeActions.enabled": true, + "typescript.validate.enable": true, + "typescript.tsserver.experimental.enableProjectDiagnostics": true } diff --git a/bun.lockb b/bun.lockb new file mode 100644 index 00000000..c9701585 Binary files /dev/null and b/bun.lockb differ diff --git a/package-lock.json b/package-lock.json index e8453303..520d4412 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "youtube-enhancer", - "version": "1.22.0", + "version": "1.23.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "youtube-enhancer", - "version": "1.22.0", + "version": "1.23.3", "license": "MIT", "dependencies": { "@formkit/auto-animate": "^0.8.1", @@ -14,9 +14,12 @@ "@tanstack/react-query": "^5.18.0", "dotenv": "^16.3.1", "i18next": "^23.7.3", - "monaco-editor": "^0.45.0", + "monaco-editor": "^0.47.0", "react": "^18.2.0", + "react-colorful": "^5.6.1", "react-dom": "^18.2.0", + "react-icons": "^5.0.1", + "use-debouncy": "^5.0.1", "vite-plugin-css-injected-by-js": "^3.3.0", "webextension-polyfill": "^0.10.0" }, @@ -27,13 +30,13 @@ "@thedutchcoder/postcss-rem-to-px": "^0.0.2", "@total-typescript/ts-reset": "^0.5.1", "@types/archiver": "^6.0.1", - "@types/chrome": "^0.0.260", + "@types/chrome": "^0.0.263", "@types/node": "^20.9.0", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "@types/webextension-polyfill": "^0.10.6", "@types/youtube-player": "^5.5.10", - "@typescript-eslint/eslint-plugin": "^6.10.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^6.10.0", "@vitejs/plugin-react-swc": "^3.4.1", "archiver": "^6.0.1", @@ -868,151 +871,147 @@ } }, "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.0.1.tgz", + "integrity": "sha512-RTmWsLfig8SBoiSdgvCht4BXl1CHU89Co5xiQ5JF19my/sIRDFCQ1RPrmK0exgqUZuNm39C/bV8+/83+MJEjGg==", "dev": true, "engines": { "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.0.tgz", - "integrity": "sha512-YbAtMWIrbZ9FCXbLwT9wWB8TyLjq9mxpKdgB3dUNxQcIVTf9hJ70gRPwAcqGZdY6WdJPZ0I7jLaaNDCiloGN2A==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.0.1.tgz", + "integrity": "sha512-MIpPQXu8Y8GjHwXM81JLveiV+DHJZtLMcB5nKekBGOl3iAtk0HT3i12Xl8Biybu+bCS1+k4qbuKEq5d0RxNRnQ==", "dev": true, "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.0.0", + "@octokit/request": "^9.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^12.0.0", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/endpoint": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.0.tgz", - "integrity": "sha512-szrQhiqJ88gghWY2Htt8MqUDO6++E/EIXqJ2ZEp5ma3uGS46o7LZAzSLt49myB7rT+Hfw5Y6gO3LmOxGzHijAQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.0.0.tgz", + "integrity": "sha512-emBcNDxBdC1y3+knJonS5zhUB/CG6TihubxM2U1/pG/Z1y3a4oV0Gzz3lmkCvWWQI6h3tqBAX9MgCBFp+M68Jw==", "dev": true, "dependencies": { - "@octokit/types": "^11.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/types": "^12.0.0", + "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/graphql": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.1.tgz", - "integrity": "sha512-T5S3oZ1JOE58gom6MIcrgwZXzTaxRnxBso58xhozxHpOqSTgDS6YNeEUvZ/kRvXgPrRz/KHnZhtb7jUMRi9E6w==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.0.1.tgz", + "integrity": "sha512-lLDb6LhC1gBj2CxEDa5Xk10+H/boonhs+3Mi6jpRyetskDKNHe6crMeKmUE2efoLofMP8ruannLlCUgpTFmVzQ==", "dev": true, "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^11.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/request": "^9.0.0", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-8.0.0.tgz", - "integrity": "sha512-2xZ+baZWUg+qudVXnnvXz7qfrTmDeYPCzangBVq/1gXxii/OiS//4shJp9dnCCvj1x+JAm9ji1Egwm1BA47lPQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-10.0.0.tgz", + "integrity": "sha512-G1Z67qOiFneKDJyMafHQkWnKm1kU3FfbRZLzxgsFg4dOa3pRNdABbdk+xo/oev6P88lnbt7GKdBNB6dJZuPphA==", "dev": true, "dependencies": { - "@octokit/types": "^11.0.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-retry": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.0.tgz", - "integrity": "sha512-a1/A4A+PB1QoAHQfLJxGHhLfSAT03bR1jJz3GgQJZvty2ozawFWs93MiBQXO7SL2YbO7CIq0Goj4qLOBj8JeMQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.0.3.tgz", + "integrity": "sha512-T9l5Z7XnDZ7dkyNmhJPSUq0YjbqUT/xn4yQbhcSuv4WGC/LqM73/mKwkl68VDPoLw20e8oz4L7qQopWt9v6sow==", "dev": true, "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/request-error": "^6.0.0", + "@octokit/types": "^12.0.0", "bottleneck": "^2.15.3" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-throttling": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-7.0.0.tgz", - "integrity": "sha512-KL2k/d0uANc8XqP5S64YcNFCudR3F5AaKO39XWdUtlJIjT9Ni79ekWJ6Kj5xvAw87udkOMEPcVf9xEge2+ahew==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.0.3.tgz", + "integrity": "sha512-DReKamrLBJOzld73dmmxV2H137QKJfsxszAczEZXeAJQ/Po6bzQacKajPdodA6T1jfmP9+waImus+d/R2j+R7Q==", "dev": true, "dependencies": { - "@octokit/types": "^11.0.0", + "@octokit/types": "^12.6.0", "bottleneck": "^2.15.3" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": "^5.0.0" + "@octokit/core": "^6.0.0" } }, "node_modules/@octokit/request": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.1.tgz", - "integrity": "sha512-8N+tdUz4aCqQmXl8FpHYfKG9GelDFd7XGVzyN8rc6WxVlYcfpHECnuRkgquzz+WzvHTK62co5di8gSXnzASZPQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.0.1.tgz", + "integrity": "sha512-kL+cAcbSl3dctYLuJmLfx6Iku2MXXy0jszhaEIjQNaCp4zjHXrhVAHeuaRdNvJjW9qjl3u1MJ72+OuBP0YW/pg==", "dev": true, "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.1.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/endpoint": "^10.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^12.0.0", + "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/request-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.0.tgz", - "integrity": "sha512-1ue0DH0Lif5iEqT52+Rf/hf0RmGO9NWFjrzmrkArpG9trFfDM/efx00BJHdLGuro4BR/gECxCU2Twf5OKrRFsQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.0.2.tgz", + "integrity": "sha512-WtRVpoHcNXs84+s9s/wqfHaxM68NGMg8Av7h59B50OVO0PwwMx+2GgQ/OliUd0iQBSNWgR6N8afi/KjSHbXHWw==", "dev": true, "dependencies": { - "@octokit/types": "^11.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@octokit/types": "^12.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^18.0.0" + "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@pkgr/core": { @@ -1315,30 +1314,30 @@ } }, "node_modules/@semantic-release/github": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.0.4.tgz", - "integrity": "sha512-kQCGFAsBErvCR6hzNuzu63cj4erQN2krm9zQlg8vl4j5X0mL0d/Ras0wmL5Gkr1TuSS2lweME7M4J5zvtDDDSA==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.0.2.tgz", + "integrity": "sha512-SP5ihhv/uQa8vPuWKmbJrrzfv8lRUkDFC6qwgaWoorrflN1DEW0IGCa9w/PxUp8Ad3dbvXZPmpXdGiP3eyTzhg==", "dev": true, "dependencies": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^8.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^7.0.0", + "@octokit/core": "^6.0.0", + "@octokit/plugin-paginate-rest": "^10.0.0", + "@octokit/plugin-retry": "^7.0.0", + "@octokit/plugin-throttling": "^9.0.0", "@semantic-release/error": "^4.0.0", - "aggregate-error": "^4.0.1", + "aggregate-error": "^5.0.0", "debug": "^4.3.4", "dir-glob": "^3.0.1", - "globby": "^13.1.4", + "globby": "^14.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", - "issue-parser": "^6.0.0", + "issue-parser": "^7.0.0", "lodash-es": "^4.17.21", - "mime": "^3.0.0", - "p-filter": "^3.0.0", + "mime": "^4.0.0", + "p-filter": "^4.0.0", "url-join": "^5.0.0" }, "engines": { - "node": ">=18" + "node": ">=20.8.1" }, "peerDependencies": { "semantic-release": ">=20.1.0" @@ -1354,31 +1353,31 @@ } }, "node_modules/@semantic-release/github/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz", + "integrity": "sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==", "dev": true, "dependencies": { - "clean-stack": "^4.0.0", + "clean-stack": "^5.2.0", "indent-string": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@semantic-release/github/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz", + "integrity": "sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==", "dev": true, "dependencies": { "escape-string-regexp": "5.0.0" }, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1397,19 +1396,20 @@ } }, "node_modules/@semantic-release/github/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", + "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1427,10 +1427,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/github/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/@semantic-release/github/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, "engines": { "node": ">=12" @@ -1439,10 +1439,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@semantic-release/github/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@semantic-release/npm": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-11.0.1.tgz", - "integrity": "sha512-nFcT0pgVwpXsPkzjqP3ObH+pILeN1AbYscCDuYwgZEPZukL+RsGhrtdT4HA1Gjb/y1bVbE90JNtMIcgRi5z/Fg==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.0.tgz", + "integrity": "sha512-72TVYQCH9NvVsO/y13eF8vE4bNnfls518+4KcFwJUKi7AtA/ZXoNgSg9gTTfw5eMZMkiH0izUrpGXgZE/cSQhA==", "dev": true, "dependencies": { "@semantic-release/error": "^4.0.0", @@ -1452,7 +1464,7 @@ "lodash-es": "^4.17.21", "nerf-dart": "^1.0.0", "normalize-url": "^8.0.0", - "npm": "^10.0.0", + "npm": "^10.5.0", "rc": "^1.2.8", "read-pkg": "^9.0.0", "registry-auth-token": "^5.0.0", @@ -1460,7 +1472,7 @@ "tempy": "^3.0.0" }, "engines": { - "node": "^18.17 || >=20" + "node": ">=20.8.1" }, "peerDependencies": { "semantic-release": ">=20.1.0" @@ -1599,9 +1611,9 @@ } }, "node_modules/@semantic-release/npm/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "dependencies": { "path-key": "^4.0.0" @@ -1712,14 +1724,26 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@swc/core": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.96.tgz", - "integrity": "sha512-zwE3TLgoZwJfQygdv2SdCK9mRLYluwDOM53I+dT6Z5ZvrgVENmY3txvWDvduzkV+/8IuvrRbVezMpxcojadRdQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.1.tgz", + "integrity": "sha512-3y+Y8js+e7BbM16iND+6Rcs3jdiL28q3iVtYsCviYSSpP2uUVKkp5sJnCY4pg8AaVvyN7CGQHO7gLEZQ5ByozQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@swc/counter": "^0.1.1", + "@swc/counter": "^0.1.2", "@swc/types": "^0.1.5" }, "engines": { @@ -1730,16 +1754,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.96", - "@swc/core-darwin-x64": "1.3.96", - "@swc/core-linux-arm-gnueabihf": "1.3.96", - "@swc/core-linux-arm64-gnu": "1.3.96", - "@swc/core-linux-arm64-musl": "1.3.96", - "@swc/core-linux-x64-gnu": "1.3.96", - "@swc/core-linux-x64-musl": "1.3.96", - "@swc/core-win32-arm64-msvc": "1.3.96", - "@swc/core-win32-ia32-msvc": "1.3.96", - "@swc/core-win32-x64-msvc": "1.3.96" + "@swc/core-darwin-arm64": "1.4.1", + "@swc/core-darwin-x64": "1.4.1", + "@swc/core-linux-arm-gnueabihf": "1.4.1", + "@swc/core-linux-arm64-gnu": "1.4.1", + "@swc/core-linux-arm64-musl": "1.4.1", + "@swc/core-linux-x64-gnu": "1.4.1", + "@swc/core-linux-x64-musl": "1.4.1", + "@swc/core-win32-arm64-msvc": "1.4.1", + "@swc/core-win32-ia32-msvc": "1.4.1", + "@swc/core-win32-x64-msvc": "1.4.1" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -1751,9 +1775,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.96.tgz", - "integrity": "sha512-8hzgXYVd85hfPh6mJ9yrG26rhgzCmcLO0h1TIl8U31hwmTbfZLzRitFQ/kqMJNbIBCwmNH1RU2QcJnL3d7f69A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.1.tgz", + "integrity": "sha512-ePyfx0348UbR4DOAW24TedeJbafnzha8liXFGuQ4bdXtEVXhLfPngprrxKrAddCuv42F9aTxydlF6+adD3FBhA==", "cpu": [ "arm64" ], @@ -1767,9 +1791,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.96.tgz", - "integrity": "sha512-mFp9GFfuPg+43vlAdQZl0WZpZSE8sEzqL7sr/7Reul5McUHP0BaLsEzwjvD035ESfkY8GBZdLpMinblIbFNljQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.1.tgz", + "integrity": "sha512-eLf4JSe6VkCMdDowjM8XNC5rO+BrgfbluEzAVtKR8L2HacNYukieumN7EzpYCi0uF1BYwu1ku6tLyG2r0VcGxA==", "cpu": [ "x64" ], @@ -1783,9 +1807,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.96.tgz", - "integrity": "sha512-8UEKkYJP4c8YzYIY/LlbSo8z5Obj4hqcv/fUTHiEePiGsOddgGf7AWjh56u7IoN/0uEmEro59nc1ChFXqXSGyg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.1.tgz", + "integrity": "sha512-K8VtTLWMw+rkN/jDC9o/Q9SMmzdiHwYo2CfgkwVT29NsGccwmNhCQx6XoYiPKyKGIFKt4tdQnJHKUFzxUqQVtQ==", "cpu": [ "arm" ], @@ -1799,9 +1823,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.96.tgz", - "integrity": "sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.1.tgz", + "integrity": "sha512-0e8p4g0Bfkt8lkiWgcdiENH3RzkcqKtpRXIVNGOmVc0OBkvc2tpm2WTx/eoCnes2HpTT4CTtR3Zljj4knQ4Fvw==", "cpu": [ "arm64" ], @@ -1815,9 +1839,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.96.tgz", - "integrity": "sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.1.tgz", + "integrity": "sha512-b/vWGQo2n7lZVUnSQ7NBq3Qrj85GrAPPiRbpqaIGwOytiFSk8VULFihbEUwDe0rXgY4LDm8z8wkgADZcLnmdUA==", "cpu": [ "arm64" ], @@ -1831,9 +1855,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.96.tgz", - "integrity": "sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.1.tgz", + "integrity": "sha512-AFMQlvkKEdNi1Vk2GFTxxJzbICttBsOQaXa98kFTeWTnFFIyiIj2w7Sk8XRTEJ/AjF8ia8JPKb1zddBWr9+bEQ==", "cpu": [ "x64" ], @@ -1847,9 +1871,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.96.tgz", - "integrity": "sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.1.tgz", + "integrity": "sha512-QX2MxIECX1gfvUVZY+jk528/oFkS9MAl76e3ZRvG2KC/aKlCQL0KSzcTSm13mOxkDKS30EaGRDRQWNukGpMeRg==", "cpu": [ "x64" ], @@ -1863,9 +1887,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.96.tgz", - "integrity": "sha512-hjGvvAduA3Un2cZ9iNP4xvTXOO4jL3G9iakhFsgVhpkU73SGmK7+LN8ZVBEu4oq2SUcHO6caWvnZ881cxGuSpg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.1.tgz", + "integrity": "sha512-OklkJYXXI/tntD2zaY8i3iZldpyDw5q+NAP3k9OlQ7wXXf37djRsHLV0NW4+ZNHBjE9xp2RsXJ0jlOJhfgGoFA==", "cpu": [ "arm64" ], @@ -1879,9 +1903,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.96.tgz", - "integrity": "sha512-Far2hVFiwr+7VPCM2GxSmbh3ikTpM3pDombE+d69hkedvYHYZxtTF+2LTKl/sXtpbUnsoq7yV/32c9R/xaaWfw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.1.tgz", + "integrity": "sha512-MBuc3/QfKX9FnLOU7iGN+6yHRTQaPQ9WskiC8s8JFiKQ+7I2p25tay2RplR9dIEEGgVAu6L7auv96LbNTh+FaA==", "cpu": [ "ia32" ], @@ -1895,9 +1919,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.96.tgz", - "integrity": "sha512-4VbSAniIu0ikLf5mBX81FsljnfqjoVGleEkCQv4+zRlyZtO3FHoDPkeLVoy6WRlj7tyrRcfUJ4mDdPkbfTO14g==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.1.tgz", + "integrity": "sha512-lu4h4wFBb/bOK6N2MuZwg7TrEpwYXgpQf5R7ObNSXL65BwZ9BG8XRzD+dLJmALu8l5N08rP/TrpoKRoGT4WSxw==", "cpu": [ "x64" ], @@ -1998,9 +2022,9 @@ } }, "node_modules/@types/chrome": { - "version": "0.0.260", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.260.tgz", - "integrity": "sha512-lX6QpgfsZRTDpNcCJ+3vzfFnFXq9bScFRTlfhbK5oecSAjamsno+ejFTCbNtc5O/TPnVK9Tja/PyecvWQe0F2w==", + "version": "0.0.263", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.263.tgz", + "integrity": "sha512-As0vzv99ov3M6ZR7R6VzhMWFZXkPMrFrCEXXVrMN576Cm70fTkj7Df2CF+qEo170JepX50pd11cX6O4DSAtl2Q==", "dev": true, "dependencies": { "@types/filesystem": "*", @@ -2046,9 +2070,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", - "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", "devOptional": true, "dependencies": { "undici-types": "~5.26.4" @@ -2067,9 +2091,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.48", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", - "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "version": "18.2.67", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz", + "integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -2078,9 +2102,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", - "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.21.tgz", + "integrity": "sha512-gnvBA/21SA4xxqNXEwNiVcP0xSGHh/gi1VhWv9Bl46a0ItbTT5nFY+G9VSQpaG/8N/qdJpJ+vftQ4zflTtnjLw==", "dev": true, "dependencies": { "@types/react": "*" @@ -2120,16 +2144,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.0.tgz", + "integrity": "sha512-M72SJ0DkcQVmmsbqlzc6EJgb/3Oz2Wdm6AyESB4YkGgCxP8u5jt5jn4/OBMPK3HLOxcttZq5xbBBU7e2By4SZQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "7.0.0", + "@typescript-eslint/type-utils": "7.0.0", + "@typescript-eslint/utils": "7.0.0", + "@typescript-eslint/visitor-keys": "7.0.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -2146,7 +2170,7 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -2155,13 +2179,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.0.tgz", + "integrity": "sha512-IxTStwhNDPO07CCrYuAqjuJ3Xf5MrMaNgbAZPxFXAUpAtwqFxiuItxUaVtP/SJQeCdJjwDGh9/lMOluAndkKeg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "7.0.0", + "@typescript-eslint/visitor-keys": "7.0.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2172,25 +2196,78 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.0.tgz", + "integrity": "sha512-9ZIJDqagK1TTs4W9IyeB2sH/s1fFhN9958ycW8NRTg1vXGzzH5PQNzq6KbsbVGMT+oyyfa17DfchHDidcmf5cg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.0.tgz", + "integrity": "sha512-JzsOzhJJm74aQ3c9um/aDryHgSHfaX8SHFIu9x4Gpik/+qxLvxUylhTsO9abcNu39JIdhY2LgYrFxTii3IajLA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.0.0", + "@typescript-eslint/visitor-keys": "7.0.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.0.tgz", + "integrity": "sha512-kuPZcPAdGcDBAyqDn/JVeJVhySvpkxzfXjJq1X1BFSTYo1TTuo4iyb937u457q4K0In84p6u2VHQGaFnv7VYqg==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.0.0", + "@typescript-eslint/types": "7.0.0", + "@typescript-eslint/typescript-estree": "7.0.0", + "semver": "^7.5.4" + }, "engines": { "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.0.tgz", + "integrity": "sha512-JZP0uw59PRHp7sHQl3aF/lFgwOW2rgNVnXUksj1d932PMita9wFBd3621vHQRDvHwPsSY9FMAAHVc8gTvLYY4w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/types": "7.0.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2201,6 +2278,30 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@typescript-eslint/parser": { "version": "6.18.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", @@ -2247,13 +2348,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.0.tgz", + "integrity": "sha512-FIM8HPxj1P2G7qfrpiXvbHeHypgo2mFpFGoh5I73ZlqmJOsloSa1x0ZyXCer43++P1doxCgNqIOLqmZR6SOT8g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/typescript-estree": "7.0.0", + "@typescript-eslint/utils": "7.0.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -2265,7 +2366,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -2273,10 +2374,27 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.0.tgz", + "integrity": "sha512-IxTStwhNDPO07CCrYuAqjuJ3Xf5MrMaNgbAZPxFXAUpAtwqFxiuItxUaVtP/SJQeCdJjwDGh9/lMOluAndkKeg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.0.0", + "@typescript-eslint/visitor-keys": "7.0.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.0.tgz", + "integrity": "sha512-9ZIJDqagK1TTs4W9IyeB2sH/s1fFhN9958ycW8NRTg1vXGzzH5PQNzq6KbsbVGMT+oyyfa17DfchHDidcmf5cg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2287,13 +2405,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.0.tgz", + "integrity": "sha512-JzsOzhJJm74aQ3c9um/aDryHgSHfaX8SHFIu9x4Gpik/+qxLvxUylhTsO9abcNu39JIdhY2LgYrFxTii3IajLA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "7.0.0", + "@typescript-eslint/visitor-keys": "7.0.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2314,13 +2432,38 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.0.tgz", + "integrity": "sha512-kuPZcPAdGcDBAyqDn/JVeJVhySvpkxzfXjJq1X1BFSTYo1TTuo4iyb937u457q4K0In84p6u2VHQGaFnv7VYqg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.0.0", + "@typescript-eslint/types": "7.0.0", + "@typescript-eslint/typescript-estree": "7.0.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.0.tgz", + "integrity": "sha512-JZP0uw59PRHp7sHQl3aF/lFgwOW2rgNVnXUksj1d932PMita9wFBd3621vHQRDvHwPsSY9FMAAHVc8gTvLYY4w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/types": "7.0.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2568,12 +2711,12 @@ "dev": true }, "node_modules/@vitejs/plugin-react-swc": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.5.0.tgz", - "integrity": "sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", + "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", "dev": true, "dependencies": { - "@swc/core": "^1.3.96" + "@swc/core": "^1.3.107" }, "peerDependencies": { "vite": "^4 || ^5" @@ -2857,13 +3000,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2903,6 +3049,25 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", + "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.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.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -2958,31 +3123,44 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -3004,19 +3182,10 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/autoprefixer": { - "version": "10.4.17", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", - "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", "dev": true, "funding": [ { @@ -3033,8 +3202,8 @@ } ], "dependencies": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -3051,10 +3220,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "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, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3093,9 +3265,9 @@ "dev": true }, "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", "dev": true }, "node_modules/binary-extensions": { @@ -3136,9 +3308,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "dev": true, "funding": [ { @@ -3155,8 +3327,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -3177,14 +3349,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3209,9 +3386,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001581", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz", - "integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==", + "version": "1.0.30001596", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz", + "integrity": "sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==", "dev": true, "funding": [ { @@ -3714,6 +3891,57 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -3763,17 +3991,20 @@ "dev": true }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "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, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "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": { @@ -3793,12 +4024,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -3866,14 +4091,14 @@ } }, "node_modules/dotenv": { - "version": "16.4.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", - "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/duplexer2": { @@ -3886,9 +4111,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.648", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.648.tgz", - "integrity": "sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==", + "version": "1.4.699", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz", + "integrity": "sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==", "dev": true }, "node_modules/emoji-regex": { @@ -4069,50 +4294,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -4121,49 +4353,85 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", "dev": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -4459,9 +4727,9 @@ } }, "node_modules/eslint-plugin-perfectionist": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-2.5.0.tgz", - "integrity": "sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-2.7.0.tgz", + "integrity": "sha512-RpSMc0T0DT9DlOj4APzwlAjCqQMxFdsIYlupe73eDkKLn1mMK7fVw2z3nj2y822szKOpvHA7bDa56ySOlr4GXw==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^6.13.0", @@ -4557,27 +4825,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" @@ -4611,12 +4881,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "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, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -4637,9 +4907,9 @@ } }, "node_modules/eslint-plugin-tailwindcss": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.14.2.tgz", - "integrity": "sha512-fNzdf4poZP2yQC0xC2prQxMuArMSb5mnellLQvwb9HC3NcLzxs+0IVKWIg1BqUqyui0c+bbjMmhWcKUWK67SLQ==", + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.14.3.tgz", + "integrity": "sha512-1MKT8CrVuqVJleHxb7ICHsF2QwO0G+VJ28athTtlcOkccp0qmwK7nCUa1C9paCZ+VVgQU4fonsjLz/wUxoMHJQ==", "dev": true, "dependencies": { "fast-glob": "^3.2.5", @@ -4781,9 +5051,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5047,16 +5317,20 @@ "dev": true }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5080,13 +5354,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -5245,18 +5520,6 @@ "uglify-js": "^3.1.4" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -5276,21 +5539,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "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, "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -5312,12 +5575,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -5327,9 +5590,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -5384,9 +5647,9 @@ } }, "node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "dependencies": { "agent-base": "^7.1.0", @@ -5397,9 +5660,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -5419,9 +5682,9 @@ } }, "node_modules/i18next": { - "version": "23.7.7", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.7.7.tgz", - "integrity": "sha512-peTvdT+Lma+o0LfLFD7IC2M37N9DJ04dH0IJYOyOHRhDfLo6nK36v7LkrQH35C2l8NHiiXZqGirhKESlEb/5PA==", + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.0.tgz", + "integrity": "sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==", "funding": [ { "type": "individual", @@ -5547,13 +5810,13 @@ "dev": true }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -5577,14 +5840,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5675,6 +5940,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -5757,9 +6037,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -5810,15 +6090,6 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5857,12 +6128,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5923,12 +6197,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -6008,9 +6282,9 @@ "dev": true }, "node_modules/issue-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.0.tgz", + "integrity": "sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==", "dev": true, "dependencies": { "lodash.capitalize": "^4.2.1", @@ -6020,7 +6294,7 @@ "lodash.uniqby": "^4.7.0" }, "engines": { - "node": ">=10.13" + "node": "^18.17 || >=20.6.1" } }, "node_modules/iterator.prototype": { @@ -6437,15 +6711,18 @@ } }, "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.1.tgz", + "integrity": "sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa" + ], "bin": { - "mime": "cli.js" + "mime": "bin/cli.js" }, "engines": { - "node": ">=10.0.0" + "node": ">=16" } }, "node_modules/mimic-fn": { @@ -6479,9 +6756,9 @@ } }, "node_modules/monaco-editor": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.45.0.tgz", - "integrity": "sha512-mjv1G1ZzfEE3k9HZN0dQ2olMdwIfaeAAjFiwNprLfYNRSz7ctv9XuCT7gPtBGrMUeV1/iZzYKj17Khu1hxoHOA==" + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.47.0.tgz", + "integrity": "sha512-VabVvHvQ9QmMwXu4du008ZDuyLnHs9j7ThVFsiJoXSOQk18+LF89N4ADzPbFenm0W4V2bGHnFBztIRQTgBfxzw==" }, "node_modules/ms": { "version": "2.1.2", @@ -6563,9 +6840,9 @@ "dev": true }, "node_modules/nodemon": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz", - "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz", + "integrity": "sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==", "dev": true, "dependencies": { "chokidar": "^3.5.2", @@ -6660,9 +6937,9 @@ } }, "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, "engines": { "node": ">=14.16" @@ -6672,9 +6949,9 @@ } }, "node_modules/npm": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.2.3.tgz", - "integrity": "sha512-GbUui/rHTl0mW8HhJSn4A0Xg89yCR3I9otgJT1i0z1QBPOVlgbh6rlcUTpHT8Gut9O1SJjWRUU0nEcAymhG2tQ==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.0.tgz", + "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -6738,7 +7015,6 @@ "semver", "spdx-expression-parse", "ssri", - "strip-ansi", "supports-color", "tar", "text-table", @@ -6752,18 +7028,18 @@ "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^7.2.1", - "@npmcli/config": "^8.0.1", + "@npmcli/config": "^8.0.2", "@npmcli/fs": "^3.1.0", "@npmcli/map-workspaces": "^3.0.4", "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.2", - "@sigstore/tuf": "^2.1.0", + "@npmcli/promise-spawn": "^7.0.1", + "@npmcli/run-script": "^7.0.4", + "@sigstore/tuf": "^2.3.1", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^18.0.0", + "cacache": "^18.0.2", "chalk": "^5.3.0", - "ci-info": "^3.9.0", + "ci-info": "^4.0.0", "cli-columns": "^4.0.0", "cli-table3": "^0.6.3", "columnify": "^1.6.0", @@ -6774,16 +7050,16 @@ "hosted-git-info": "^7.0.1", "ini": "^4.1.1", "init-package-json": "^6.0.0", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^3.0.0", + "is-cidr": "^5.0.3", + "json-parse-even-better-errors": "^3.0.1", "libnpmaccess": "^8.0.1", "libnpmdiff": "^6.0.3", - "libnpmexec": "^7.0.3", + "libnpmexec": "^7.0.4", "libnpmfund": "^5.0.1", "libnpmhook": "^10.0.0", "libnpmorg": "^6.0.1", "libnpmpack": "^6.0.3", - "libnpmpublish": "^9.0.1", + "libnpmpublish": "^9.0.2", "libnpmsearch": "^7.0.0", "libnpmteam": "^6.0.0", "libnpmversion": "^5.0.1", @@ -6804,15 +7080,14 @@ "npm-user-validate": "^2.0.0", "npmlog": "^7.0.1", "p-map": "^4.0.0", - "pacote": "^17.0.4", + "pacote": "^17.0.6", "parse-conflict-json": "^3.0.1", "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", "read": "^2.1.0", - "semver": "^7.5.4", + "semver": "^7.6.0", "spdx-expression-parse": "^3.0.1", "ssri": "^10.0.5", - "strip-ansi": "^6.0.1", "supports-color": "^9.4.0", "tar": "^6.2.0", "text-table": "~0.2.0", @@ -6938,9 +7213,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.0.tgz", - "integrity": "sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==", + "version": "2.2.1", "dev": true, "inBundle": true, "license": "ISC", @@ -6955,121 +7228,63 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "7.4.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "debug": "^4.3.4" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^7.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/query": "^3.1.0", + "@npmcli/run-script": "^7.0.2", + "bin-links": "^4.0.1", + "cacache": "^18.0.0", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^7.0.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^11.0.1", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^16.0.0", + "npmlog": "^7.0.1", + "pacote": "^17.0.4", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.5", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" }, "engines": { - "node": ">= 14" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { - "version": "8.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.2.1.tgz", - "integrity": "sha512-o1QIAX56FC8HEPF+Hf4V4/hck9j0a3UiLnMX4aDHPbtU4Po1tUOUSmc2GAx947VWT+acrdMYTDkqUt2CaSXt7A==", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/query": "^3.0.1", - "@npmcli/run-script": "^7.0.2", - "bin-links": "^4.0.1", - "cacache": "^18.0.0", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.5", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.0.1.tgz", - "integrity": "sha512-NKGmMYv/YTLwJr+qK9CvADSe82NTM9AFwFFpsZpVcPCT3XTdxvJBdXi8xvXWjHSCMb0Cb+7FtU/a5qqguCOhxA==", + "node_modules/npm/node_modules/@npmcli/config": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-8.2.0.tgz", + "integrity": "sha512-YoEYZFg0hRSRP/Chmq+J4FvULFvji6SORUYWQc10FiJ+ReAnViXcDCENg6kM6dID04bAoKNUygrby798+gYBbQ==", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", - "ci-info": "^3.8.0", + "ci-info": "^4.0.0", "ini": "^4.1.0", "nopt": "^7.0.0", "proc-log": "^3.0.0", @@ -7095,6 +7310,21 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@npmcli/disparity-colors/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", @@ -7110,9 +7340,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.3.tgz", - "integrity": "sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -7225,9 +7453,9 @@ } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.0.tgz", - "integrity": "sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.1.tgz", + "integrity": "sha512-P4KkF9jX3y+7yFUxgcUdDtLy+t4OlDGuEBLNs57AZsfSfg+uV6MLndqGpnl4831ggaEdXwR50XFoZP4VFtHolg==", "dev": true, "inBundle": true, "license": "ISC", @@ -7239,9 +7467,7 @@ } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.1.tgz", - "integrity": "sha512-0jE8iHBogf/+bFDj+ju6/UMLbJ39c8h6nSe6qile+dB7PJ0iV3gNqcb2vtt6WWCBrxv9uAjzUT/8vroluulidA==", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -7253,17 +7479,17 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", - "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz", + "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", - "read-package-json-fast": "^3.0.0", "which": "^4.0.0" }, "engines": { @@ -7283,23 +7509,34 @@ } }, "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz", - "integrity": "sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.2.0.tgz", + "integrity": "sha512-5VI58qgNs76RDrwXNhpmyN/jKpq9evV/7f1XrcqcAfvxDl5SeVY/I5Rmfe96ULAV7/FK5dge9RBKGBJPhL1WsQ==", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1" + "@sigstore/protobuf-specs": "^0.3.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.0.0.tgz", + "integrity": "sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", - "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.0.tgz", + "integrity": "sha512-zxiQ66JFOjVvP9hbhGj/F/qNdsZfkGb/dVXSanNRNuAzMlr4MC95voPUBX8//ZNnmv3uSYzdfR/JSkrgvZTGxA==", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -7308,13 +7545,16 @@ } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.1.0", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.2.3.tgz", + "integrity": "sha512-LqlA+ffyN02yC7RKszCdMTS6bldZnIodiox+IkT8B2f8oRYXCB3LQ9roXeiEL21m64CVH1wyveYAORfD65WoSw==", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.0", - "@sigstore/protobuf-specs": "^0.2.1", + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0", "make-fetch-happen": "^13.0.0" }, "engines": { @@ -7322,13 +7562,31 @@ } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.1.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.1.tgz", + "integrity": "sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q==", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.0", + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.1.0.tgz", + "integrity": "sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg==", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1", - "tuf-js": "^2.1.0" + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -7371,18 +7629,18 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" + "debug": "^4.3.4" }, "engines": { - "node": ">=6.5" + "node": ">= 14" } }, "node_modules/npm/node_modules/aggregate-error": { @@ -7412,17 +7670,14 @@ } }, "node_modules/npm/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -7445,16 +7700,10 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.1.tgz", - "integrity": "sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -7467,28 +7716,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.3.tgz", @@ -7528,32 +7755,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", @@ -7566,9 +7767,9 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.0.tgz", - "integrity": "sha512-I7mVOPl3PUCeRub1U8YoGz2Lqv9WOBpobZ8RyWFXmReuILz+3OAyTa5oH3QPdtKZD7N0Yk00aLfzn0qvp8dZ1w==", + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", + "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", "dev": true, "inBundle": true, "license": "ISC", @@ -7578,7 +7779,7 @@ "glob": "^10.2.2", "lru-cache": "^10.0.1", "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", @@ -7616,9 +7817,9 @@ } }, "node_modules/npm/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true, "funding": [ { @@ -7633,17 +7834,17 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz", - "integrity": "sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-4.0.3.tgz", + "integrity": "sha512-HOwDIy/rhKeMf6uOzxtv7FAbrz8zPjmVKfSpM+U7/bNBXC5rtOyr758jxcptiSx6ZZn5LOhPJT5WWxPAGDV8dw==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "ip-regex": "^4.1.0" + "ip-regex": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/npm/node_modules/clean-stack": { @@ -7793,8 +7994,6 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "inBundle": true, "license": "ISC", @@ -7843,8 +8042,6 @@ }, "node_modules/npm/node_modules/debug/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "inBundle": true, "license": "MIT" @@ -7863,18 +8060,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "version": "5.2.0", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -7929,28 +8116,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", @@ -8003,10 +8168,15 @@ } }, "node_modules/npm/node_modules/function-bind": { - "version": "1.1.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", @@ -8061,20 +8231,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -8083,6 +8239,18 @@ "inBundle": true, "license": "ISC" }, + "node_modules/npm/node_modules/hasown": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/npm/node_modules/hosted-git-info": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", @@ -8105,6 +8273,34 @@ "inBundle": true, "license": "BSD-2-Clause" }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -8120,32 +8316,8 @@ "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "version": "6.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -8209,46 +8381,62 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause" }, "node_modules/npm/node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/is-cidr": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz", - "integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-5.0.3.tgz", + "integrity": "sha512-lKkM0tmz07dAxNsr8Ii9MGreExa9ZR34N9j8mTG5op824kcwBqinZPowNjcVWWc7j+jR8XAMMItOmBkniN0jOA==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "^3.1.1" + "cidr-regex": "4.0.3" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.13.0", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8301,10 +8489,16 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", "dev": true, "inBundle": true, "license": "MIT", @@ -8351,9 +8545,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.1.tgz", - "integrity": "sha512-MWbnWIfxLKol+BgC1NR1as1JwM5ufZASd6CaENJjNe4JpJ0gx71xhpYY5SvNMZnVBahocYZWP6+SPQdyD0abEQ==", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -8366,9 +8558,7 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-6.0.3.tgz", - "integrity": "sha512-Xy4ZFueaYb7CNMxH7i/SoQDg7VyDOESFWZp/MU3f3qtAasEWhdTYBSHmb18ehp8MxTjox7c7U6ws7l3r+LTBFA==", + "version": "6.0.7", "dev": true, "inBundle": true, "license": "ISC", @@ -8388,16 +8578,16 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/libnpmexec/-/libnpmexec-7.0.3.tgz", - "integrity": "sha512-hEVk4RHhBpvKAoDCFhq66yXFy9T4aQZ5WpvLnlaavMFKNmvD6azid/7nLQtQqnAigUyQcpKTRowoMKzNBF4Ogw==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/libnpmexec/-/libnpmexec-7.0.8.tgz", + "integrity": "sha512-xDzWoYpV1Ok0TIdrY4wuWGxriEv/O3/d8QG924yErBE0sMkkzKsin2dAmlEBsSlR7YRilObs8q+5uNtxKNQHAQ==", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/arborist": "^7.2.1", "@npmcli/run-script": "^7.0.2", - "ci-info": "^3.7.1", + "ci-info": "^4.0.0", "npm-package-arg": "^11.0.1", "npmlog": "^7.0.1", "pacote": "^17.0.4", @@ -8412,9 +8602,7 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/libnpmfund/-/libnpmfund-5.0.1.tgz", - "integrity": "sha512-4s7jdjiYE4SCf87n5UOrRlsUpF0Xw8DWtBwP53EaNQdvqR1579nOv1nwakMLmkq5HFKNOJyZcAH/rf5wVRRz5A==", + "version": "5.0.5", "dev": true, "inBundle": true, "license": "ISC", @@ -8426,9 +8614,7 @@ } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-10.0.0.tgz", - "integrity": "sha512-PdEuOC1woGbrmxsvMdZCLYFirwtroIaxCzire/h55BfnqHOC73yQylIe9V2T9/1WL6f+PXIoZETR0dhJpLLFWQ==", + "version": "10.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -8441,9 +8627,7 @@ } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-6.0.1.tgz", - "integrity": "sha512-yP3Moge82n3va2Y2dm7qWqwUGp2oZr+vPCyOr+YChGQx6zMtmUYdQA3nGMyF1mWWEmx2QCzyp2N6HmdTUnvRmQ==", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -8456,9 +8640,7 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/libnpmpack/-/libnpmpack-6.0.3.tgz", - "integrity": "sha512-+XV6/KVGYJ2TvqeJfBhSJgrXWV3OiFPYCKGavNwNBFmAtRRrj7OoV6a/+C0HDo7D0PFEDktdBHW47EciUgHx+g==", + "version": "6.0.7", "dev": true, "inBundle": true, "license": "ISC", @@ -8473,20 +8655,20 @@ } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.1.tgz", - "integrity": "sha512-w5Ev46SnPaEpjfa0a5+p2vYSB19nONF/mRX8RcIRp2gpPxMWldFVZy/fXei/uflMLQq33mjKMqiVoNcz6ZJCYg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.4.tgz", + "integrity": "sha512-330o6pVsCCg77jQ/+kidyG/RiohXYQKpqmzOC4BjUDWcimb+mXptRBh1Kvy27/Zb/CStZLVrfgGc6tXf5+PE3Q==", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ci-info": "^3.6.1", + "ci-info": "^4.0.0", "normalize-package-data": "^6.0.0", "npm-package-arg": "^11.0.1", "npm-registry-fetch": "^16.0.0", "proc-log": "^3.0.0", "semver": "^7.3.7", - "sigstore": "^2.1.0", + "sigstore": "^2.2.0", "ssri": "^10.0.5" }, "engines": { @@ -8494,9 +8676,7 @@ } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-7.0.0.tgz", - "integrity": "sha512-gMSev/ZYP96C/73vVJSBfc/dfK65xKHs1QS/u/0NHmos19Td+XopKaMFbY4Xkfbdsau21DRTwM5kQdjuj9DbIw==", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -8508,9 +8688,7 @@ } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-6.0.0.tgz", - "integrity": "sha512-d63ahIq7cZy3ZO8hhXiIigZTjaeV5WGfz1HkTbh6IfqNYNDhGiVLKu5ehOGdUQgUHcjxkdAwUzNNjMS1VJQ/mQ==", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -8523,9 +8701,7 @@ } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/libnpmversion/-/libnpmversion-5.0.1.tgz", - "integrity": "sha512-OXiju5vvL22QUBKizAyo5d+FOUkt9xN9+UOPE8alsZw+O9gLjnJrMmRW8P8uxMLS6/K415em15meVEbjG26Fzg==", + "version": "5.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -8541,9 +8717,7 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "version": "10.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -8603,30 +8777,18 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/npm/node_modules/minipass-fetch": { @@ -8949,14 +9111,12 @@ } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.0.tgz", - "integrity": "sha512-ErAGFB5kJUciPy1mmx/C2YFbvxoJ0QJ9uwkCZOeR6CqLLISPZBOiFModAbSXnjjlwW5lOhuhXva+fURsSGJqyw==", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ignore-walk": "^6.0.0" + "ignore-walk": "^6.0.4" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -9060,9 +9220,9 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "17.0.4", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.4.tgz", - "integrity": "sha512-eGdLHrV/g5b5MtD5cTPyss+JxOlaOloSMG3UwPMAvL8ywaLJ6beONPF40K4KKl/UI6q5hTKCJq5rCu8tkF+7Dg==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", + "integrity": "sha512-cJKrW21VRE8vVTRskJo78c/RCvwJCn1f4qgfxL4w77SOWrTCRcmfkYHlHtS0gqpgjv3zhXflRtgsrUCX5xwNnQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -9082,7 +9242,7 @@ "promise-retry": "^2.0.1", "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", - "sigstore": "^2.0.0", + "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, @@ -9139,9 +9299,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.15", "dev": true, "inBundle": true, "license": "MIT", @@ -9164,17 +9322,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", @@ -9187,9 +9334,7 @@ } }, "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", - "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -9301,24 +9446,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -9330,28 +9457,6 @@ "node": ">= 4" } }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9362,9 +9467,9 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "inBundle": true, "license": "ISC", @@ -9380,8 +9485,6 @@ }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "inBundle": true, "license": "ISC", @@ -9426,7 +9529,9 @@ } }, "node_modules/npm/node_modules/signal-exit": { - "version": "4.0.2", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "inBundle": true, "license": "ISC", @@ -9438,17 +9543,19 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.1.0.tgz", - "integrity": "sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.2.2.tgz", + "integrity": "sha512-2A3WvXkQurhuMgORgT60r6pOWiCOO5LlEqY2ADxGBDGVYLSo5HN0uLtb68YpVpuL/Vi8mLTe7+0Dx2Fq8lLqEg==", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.0", - "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.1.0", - "@sigstore/tuf": "^2.1.0" + "@sigstore/bundle": "^2.2.0", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.0", + "@sigstore/sign": "^2.2.3", + "@sigstore/tuf": "^2.3.1", + "@sigstore/verify": "^1.1.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -9467,21 +9574,35 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 16.0.0", "npm": ">= 3.0.0" } }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", @@ -9495,9 +9616,7 @@ } }, "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", "dev": true, "inBundle": true, "license": "CC-BY-3.0" @@ -9515,9 +9634,7 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.17", "dev": true, "inBundle": true, "license": "CC0-1.0" @@ -9536,17 +9653,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -9703,9 +9809,9 @@ } }, "node_modules/npm/node_modules/tuf-js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.1.0.tgz", - "integrity": "sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", + "integrity": "sha512-ZSDngmP1z6zw+FIkIBjvOp/II/mIub/O7Pp12j1WNsiCpg5R5wAc//i555bBQsE44O94btLt0xM/Zr2LQjwdCg==", "dev": true, "inBundle": true, "license": "MIT", @@ -9875,22 +9981,25 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "inBundle": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "inBundle": true, "license": "MIT", @@ -9898,7 +10007,7 @@ "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { @@ -10003,13 +10112,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -10064,13 +10173,13 @@ } }, "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10147,15 +10256,15 @@ } }, "node_modules/p-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-4.1.0.tgz", + "integrity": "sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==", "dev": true, "dependencies": { - "p-map": "^5.1.0" + "p-map": "^7.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10201,70 +10310,12 @@ } }, "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.1.tgz", + "integrity": "sha512-2wnaR0XL/FDOj+TgpDuRb2KTjLnu3Fma6b1ZUwGY7LcqenMcvP/YFpjpbPKY6WVGsbuJZRuoUz8iPrt8ORnAFw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10487,6 +10538,15 @@ "node": ">=4" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", @@ -10752,6 +10812,15 @@ "node": ">=0.10.0" } }, + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", @@ -10764,6 +10833,14 @@ "react": "^18.2.0" } }, + "node_modules/react-icons": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz", + "integrity": "sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -10955,14 +11032,15 @@ "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -11107,13 +11185,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -11131,15 +11209,18 @@ "dev": true }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11153,15 +11234,15 @@ } }, "node_modules/semantic-release": { - "version": "23.0.2", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.2.tgz", - "integrity": "sha512-OnVYJ6Xgzwe1x8MKswba7RU9+5djS1MWRTrTn5qsq3xZYpslroZkV9Pt0dA2YcIuieeuSZWJhn+yUWoBUHO5Fw==", + "version": "23.0.4", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.4.tgz", + "integrity": "sha512-UlcgO6SEcFtwSF/JMVXKswK+4Af2ypu55WRdLL6IhnKHPCZ9Zap7CV8PN2+wmvAdAPTI76CqouJyGZyb1fp9VA==", "dev": true, "dependencies": { "@semantic-release/commit-analyzer": "^11.0.0", "@semantic-release/error": "^4.0.0", - "@semantic-release/github": "^9.0.0", - "@semantic-release/npm": "^11.0.0", + "@semantic-release/github": "^10.0.0", + "@semantic-release/npm": "^12.0.0", "@semantic-release/release-notes-generator": "^12.0.0", "aggregate-error": "^5.0.0", "cosmiconfig": "^9.0.0", @@ -11457,15 +11538,17 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "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, "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "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.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11790,18 +11873,19 @@ "dev": true }, "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { @@ -11809,14 +11893,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -11826,14 +11911,14 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12365,29 +12450,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -12397,16 +12483,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -12416,23 +12503,29 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -12491,6 +12584,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", @@ -12507,9 +12612,9 @@ } }, "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", "dev": true }, "node_modules/universalify": { @@ -12569,6 +12674,14 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/use-debouncy": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/use-debouncy/-/use-debouncy-5.0.1.tgz", + "integrity": "sha512-Y67Ms+feWonusFVKm/AgajoyHHTmtjpC6lBaNAAK65oe1dB59G3JoQzKedFzb6DCeJm71epHBrTsNTev37YO3g==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -12731,16 +12844,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" diff --git a/package.json b/package.json index ceea0018..fac662aa 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,12 @@ "@tanstack/react-query": "^5.18.0", "dotenv": "^16.3.1", "i18next": "^23.7.3", - "monaco-editor": "^0.45.0", + "monaco-editor": "^0.47.0", "react": "^18.2.0", + "react-colorful": "^5.6.1", "react-dom": "^18.2.0", + "react-icons": "^5.0.1", + "use-debouncy": "^5.0.1", "vite-plugin-css-injected-by-js": "^3.3.0", "webextension-polyfill": "^0.10.0" }, @@ -38,13 +41,13 @@ "@thedutchcoder/postcss-rem-to-px": "^0.0.2", "@total-typescript/ts-reset": "^0.5.1", "@types/archiver": "^6.0.1", - "@types/chrome": "^0.0.260", + "@types/chrome": "^0.0.263", "@types/node": "^20.9.0", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "@types/webextension-polyfill": "^0.10.6", "@types/youtube-player": "^5.5.10", - "@typescript-eslint/eslint-plugin": "^6.10.0", + "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^6.10.0", "@vitejs/plugin-react-swc": "^3.4.1", "archiver": "^6.0.1", @@ -77,4 +80,4 @@ "zod": "^3.22.4", "zod-error": "^1.5.0" } -} \ No newline at end of file +} diff --git a/postcss.config.cjs b/postcss.config.cjs index aae0c6e6..a291f2f4 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,6 +1,8 @@ +/* eslint-disable perfectionist/sort-objects */ module.exports = { plugins: { "@thedutchcoder/postcss-rem-to-px": {}, + "tailwindcss/nesting": {}, autoprefixer: {}, tailwindcss: {} } diff --git a/public/contentStyle.css b/public/contentStyle.css index ba0f4d38..a4f5e061 100644 --- a/public/contentStyle.css +++ b/public/contentStyle.css @@ -67,4 +67,4 @@ body.no-scroll .yte-button-tooltip { .yte-hide-shorts { display: none !important; -} \ No newline at end of file +} diff --git a/public/locales/ca-ES.json b/public/locales/ca-ES.json index 98bab5b4..18baf266 100644 --- a/public/locales/ca-ES.json +++ b/public/locales/ca-ES.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" }, "videoHistory": { "resumeButton": "Resume", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/cs-CZ.json b/public/locales/cs-CZ.json index 8d54ca80..debeee0c 100644 --- a/public/locales/cs-CZ.json +++ b/public/locales/cs-CZ.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" }, "videoHistory": { "resumeButton": "Resume", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/de-DE.json b/public/locales/de-DE.json index 05f53cbb..cce4ff33 100644 --- a/public/locales/de-DE.json +++ b/public/locales/de-DE.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Funktions-Menü" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Dauerschleife", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Vergrößern", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot in Zwischenablage kopiert", - "label": "Bildschirmfoto" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot in Zwischenablage kopiert" }, "videoHistory": { "resumeButton": "Fortsetzen", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Lautsärke Verstärkung", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Einstellungen zurücksetzen", "value": "Bestätigen" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Setzt alle Einstellungen auf ihre Standardwerte zurück. Klicken Sie auf die Bestätigungs-Schaltfläche, um die Änderungen zu speichern", "value": "Zurücksetzen" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Erzwungene Wiedergabegeschwindigkeit", "title": "Setzt die Videogeschwindigkeit auf das, was du unten wählst" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Video Geschwindigkeit", "title": "Die Geschwindigkeit auf die das Video gestellt wird" @@ -390,6 +425,49 @@ } }, "title": "´Lautstärke-Boost Einstellungen" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 9dfbe38c..21e49dac 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" }, "videoHistory": { "resumeButton": "Resume", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/en-US.json.d.ts b/public/locales/en-US.json.d.ts index 0ea41e80..f55ee651 100644 --- a/public/locales/en-US.json.d.ts +++ b/public/locales/en-US.json.d.ts @@ -8,15 +8,26 @@ interface EnUS { pages: { content: { features: { - featureMenu: { label: "Feature menu" }; - loopButton: { label: "Loop"; toggle: { off: "Loop off"; on: "Loop on" } }; - maximizePlayerButton: { label: "Maximize"; toggle: { off: "Maximize off"; on: "Maximize on" } }; - openTranscriptButton: { label: "Open transcript" }; - screenshotButton: { copiedToClipboard: "Screenshot copied to clipboard"; label: "Screenshot" }; + featureMenu: { button: { label: "Feature menu" } }; + loopButton: { button: { label: "Loop"; toggle: { off: "Loop off"; on: "Loop on" } } }; + maximizePlayerButton: { button: { label: "Maximize"; toggle: { off: "Maximize off"; on: "Maximize on" } } }; + openTranscriptButton: { button: { label: "Open transcript" } }; + playbackSpeedButtons: { + buttons: { + decreasePlaybackSpeedButton: { label: "Decrease Speed by {{SPEED}}" }; + increasePlaybackSpeedButton: { label: "Increase Speed by {{SPEED}}" }; + }; + }; + screenshotButton: { + button: { label: "Screenshot" }; + copiedToClipboard: "Screenshot copied to clipboard"; + }; videoHistory: { resumeButton: "Resume"; resumePrompt: { close: "Close" } }; volumeBoostButton: { - label: "Volume Boost"; - toggle: { off: "Volume boost off"; on: "Volume boost on" }; + button: { + label: "Volume Boost"; + toggle: { off: "Volume boost off"; on: "Volume boost on" }; + }; }; }; }; @@ -57,6 +68,7 @@ interface EnUS { value: "Clear Data"; }; confirm: { title: "Confirm setting reset"; value: "Confirm" }; + openTab: { title: "Open extension settings in a new tab" }; reset: { title: "Resets all settings to their defaults, Click the confirm button to save the changes"; value: "Reset"; @@ -65,6 +77,8 @@ interface EnUS { buttonPlacement: { select: { buttonNames: { + decreasePlaybackSpeedButton: "Decrease Speed button"; + increasePlaybackSpeedButton: "Increase Speed button"; loopButton: "Loop button"; maximizePlayerButton: "Maximize button"; openTranscriptButton: "Open Transcript button"; @@ -214,6 +228,14 @@ interface EnUS { label: "Forced playback speed"; title: "Sets the video speed to what you choose below"; }; + playbackSpeedButtons: { + label: "Playback speed buttons"; + select: { + label: "Playback buttons speed"; + title: "Amount of speed to be changed per click"; + }; + title: "Adds buttons to increase or decrease the playback speed of the video you're watching"; + }; select: { label: "Player speed"; title: "The speed to set the video to" }; title: "Playback speed settings"; }; @@ -288,6 +310,25 @@ interface EnUS { }; title: "Volume boost settings"; }; + youtubeDeepDark: { + author: "Author"; + "co-authors": "Co-authors"; + colors: { + colorShadow: { label: "Shadow color"; title: "Color for shadows" }; + dimmerText: { label: "Secondary text color"; title: "Color for secondary text" }; + hoverBackground: { label: "Hover background"; title: "Color for hover background" }; + mainBackground: { label: "Main background color"; title: "Color for main background" }; + mainColor: { label: "Accent color"; title: "Color for accent" }; + mainText: { label: "Main text color"; title: "Color for main text" }; + secondBackground: { label: "Secondary background"; title: "Color for secondary background" }; + }; + enable: { + label: "Enable selected theme"; + title: "Activate the selected theme for the page"; + }; + select: { label: "Select theme"; title: "Select a theme to be applied to the page" }; + title: "YouTube Deep Dark Settings"; + }; }; }; } diff --git a/public/locales/es-ES.json b/public/locales/es-ES.json index d6f4e450..d2e794d4 100644 --- a/public/locales/es-ES.json +++ b/public/locales/es-ES.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Menú de funciones" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Bucle", - "toggle": { - "off": "Desactivar repetición", - "on": "Activar repetición" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximizar", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Abrir transcripción" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Captura de pantalla copiada al portapapeles", - "label": "Capturar pantalla" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Captura de pantalla copiada al portapapeles" }, "videoHistory": { "resumeButton": "Reanudar", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Potenciar volumen", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirma el restablecimiento de los ajustes", "value": "Confirmar" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Restablece todos los ajustes a sus valores predeterminados, haga clic en el botón de confirmar para guardar los cambios", "value": "Reestablecer" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Botón de repetición", "maximizePlayerButton": "Maximizar botón", "openTranscriptButton": "Abrir botón de transcripción", @@ -284,6 +311,14 @@ "label": "Velocidad de reproducción forzada", "title": "Establece la velocidad del video a lo que elijas a continuación" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Velocidad del reproductor", "title": "La velocidad a la que ajustar el vídeo" @@ -390,6 +425,49 @@ } }, "title": "Ajustes de potenciado de volumen" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/fa-IR.json b/public/locales/fa-IR.json index 4b53f597..7d3c8cd9 100644 --- a/public/locales/fa-IR.json +++ b/public/locales/fa-IR.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" }, "videoHistory": { "resumeButton": "Resume", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/fr-FR.json b/public/locales/fr-FR.json index bc23e0c4..2084acea 100644 --- a/public/locales/fr-FR.json +++ b/public/locales/fr-FR.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Menu des fonctionnalités" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Lire en boucle", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Agrandir", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Ouvrir la transcription" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Capture d'écran copiée dans le presse-papiers", - "label": "Capture d'écran" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Capture d'écran copiée dans le presse-papiers" }, "videoHistory": { "resumeButton": "Reprendre", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Gain sonore", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirmer la réinitialisation des réglages", "value": "Confirmer" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Réinitialise tous les paramètres par défaut, cliquez sur le bouton de confirmation pour enregistrer les modifications", "value": "Réinitialiser" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Vitesse de lecture forcée", "title": "Définit la vitesse de la vidéo comme choisie ci-dessous" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Vitesse de la vidéo", "title": "La vitesse à laquelle la vidéo est définie" @@ -390,6 +425,49 @@ } }, "title": "Réglages de du gain du volume" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/he-IL.json b/public/locales/he-IL.json index 5a972baa..77e0deb0 100644 --- a/public/locales/he-IL.json +++ b/public/locales/he-IL.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" }, "videoHistory": { "resumeButton": "Resume", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/hi-IN.json b/public/locales/hi-IN.json index d8290dcb..59f830e9 100644 --- a/public/locales/hi-IN.json +++ b/public/locales/hi-IN.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" }, "videoHistory": { "resumeButton": "Resume", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/it-IT.json b/public/locales/it-IT.json index 85b23f30..a29aa737 100644 --- a/public/locales/it-IT.json +++ b/public/locales/it-IT.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Screenshot copied to clipboard", - "label": "Screenshot" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Screenshot copied to clipboard" }, "videoHistory": { "resumeButton": "Resume", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/ja-JP.json b/public/locales/ja-JP.json index 0ef22f68..428d0981 100644 --- a/public/locales/ja-JP.json +++ b/public/locales/ja-JP.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "フィーチャー・メニュー" + "button": { + "label": "フィーチャー・メニュー" + } }, "loopButton": { - "label": "ループ", - "toggle": { - "off": "ループオフ", - "on": "ループオン" + "button": { + "label": "ループ", + "toggle": { + "off": "ループオフ", + "on": "ループオン" + } } }, "maximizePlayerButton": { - "label": "最大表示", - "toggle": { - "off": "最大表示オフ", - "on": "最大表示オン" + "button": { + "label": "最大表示", + "toggle": { + "off": "最大表示オフ", + "on": "最大表示オン" + } } }, "openTranscriptButton": { - "label": "文字起こしを見せる" + "button": { + "label": "文字起こしを見せる" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "再生速度を{{SPEED}}で下げする" + }, + "increasePlaybackSpeedButton": { + "label": "再生速度を{{SPEED}}で上げする" + } + } }, "screenshotButton": { - "copiedToClipboard": "スクリーンショットをクリップボードにコピーしました", - "label": "スクリーンショット" + "button": { + "label": "スクリーンショット" + }, + "copiedToClipboard": "スクリーンショットをクリップボードにコピーしました" }, "videoHistory": { "resumeButton": "レジューム", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "音量ブースト", - "toggle": { - "off": "音量ブーストオフ", - "on": "音量ブーストオン" + "button": { + "label": "音量ブースト", + "toggle": { + "off": "音量ブーストオフ", + "on": "音量ブーストオン" + } } } } @@ -92,6 +114,9 @@ "title": "設定リセットを確認する", "value": "確認" }, + "openTab": { + "title": "新しいブラウザタブに拡張機能設定を開けるする" + }, "reset": { "title": "すべての設定をデフォルトにリセットします。「確認」ボタンをクリックして変更を保存します。", "value": "リセット" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "速度を下げるボタン", + "increasePlaybackSpeedButton": "速度を上げるボタン", "loopButton": "ループボタン", "maximizePlayerButton": "最大表示ボタン", "openTranscriptButton": "文字起こしを見せるボタン", @@ -187,8 +214,8 @@ "title": "ページのスクロールバーを隠す" }, "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" + "label": "ショートを隠す", + "title": "全ショートを隠す" }, "loopButton": { "label": "動画ループボタン", @@ -284,6 +311,14 @@ "label": "強制再生速度", "title": "強制再生速度を可能にする" }, + "playbackSpeedButtons": { + "label": "再生速度ボタン", + "select": { + "label": "再生ボタン速度", + "title": "マウスクリックに速度を変化する量" + }, + "title": "動画の再生速度を上げか下げボタンに追加する" + }, "select": { "label": "動画の再生速度", "title": "動画の速度に設定する" @@ -390,6 +425,49 @@ } }, "title": "音量ブーストの設定" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/pl-PL.json b/public/locales/pl-PL.json index 78248c0e..dd4df04f 100644 --- a/public/locales/pl-PL.json +++ b/public/locales/pl-PL.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Feature menu" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Loop", - "toggle": { - "off": "Loop off", - "on": "Loop on" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximize", - "toggle": { - "off": "Maximize off", - "on": "Maximize on" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Open transcript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Zrzut ekranu skopiowany do schowka", - "label": "Zrzut ekranu" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Zrzut ekranu skopiowany do schowka" }, "videoHistory": { "resumeButton": "Wznów", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volume Boost", - "toggle": { - "off": "Volume boost off", - "on": "Volume boost on" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirm setting reset", "value": "Confirm" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Resets all settings to their defaults, Click the confirm button to save the changes", "value": "Reset" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Loop button", "maximizePlayerButton": "Maximize button", "openTranscriptButton": "Open Transcript button", @@ -284,6 +311,14 @@ "label": "Forced playback speed", "title": "Sets the video speed to what you choose below" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Player speed", "title": "The speed to set the video to" @@ -390,6 +425,49 @@ } }, "title": "Volume boost settings" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index 3fb12c57..f24171c7 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Menu de recursos" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Repetir", - "toggle": { - "off": "Repetição inativa", - "on": "Repetição ativa" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximizar", - "toggle": { - "off": "Maximização inativa", - "on": "Maximização ativa" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Abrir Transcrição" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Captura de tela copiada para a área de transferência", - "label": "Captura de tela" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Captura de tela copiada para a área de transferência" }, "videoHistory": { "resumeButton": "Continuar", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Impulsionador de volume", - "toggle": { - "off": "Impulso de Volume inativo", - "on": "Impulso de Volume ativo" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Confirmar redefinição de configuração", "value": "Confirmar" }, + "openTab": { + "title": "Open extension settings in a new tab" + }, "reset": { "title": "Redefinir todas as configurações para seus padrões, Clique no botão confirmar para salvar as alterações", "value": "Redefinir" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Botão de Repetir", "maximizePlayerButton": "Botão de Maximizar", "openTranscriptButton": "Abrir botão de transcrição", @@ -284,6 +311,14 @@ "label": "Velocidade de reprodução forçada", "title": "Define a velocidade do vídeo para a que você escolher abaixo" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Velocidade do reprodutor", "title": "A velocidade a ser definida para o vídeo" @@ -390,6 +425,49 @@ } }, "title": "Configurações de impulso de volume" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/ru-RU.json b/public/locales/ru-RU.json index c9b04ab5..c41fccae 100644 --- a/public/locales/ru-RU.json +++ b/public/locales/ru-RU.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Меню функций" + "button": { + "label": "Меню функций" + } }, "loopButton": { - "label": "Зациклить", - "toggle": { - "off": "Зацикливание выключено", - "on": "Зацикливание включено" + "button": { + "label": "Зациклить", + "toggle": { + "off": "Зацикливание выключено", + "on": "Зацикливание включено" + } } }, "maximizePlayerButton": { - "label": "Развернуть", - "toggle": { - "off": "Проигрыватель свернут", - "on": "Проигрыватель развернут" + "button": { + "label": "Развернуть", + "toggle": { + "off": "Проигрыватель свернут", + "on": "Проигрыватель развернут" + } } }, "openTranscriptButton": { - "label": "Открыть стенограмму" + "button": { + "label": "Открыть стенограмму" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Уменьшить скорость на {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Увеличить скорость на {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Скриншот скопирован в буфер обмена", - "label": "Скриншот" + "button": { + "label": "Скриншот" + }, + "copiedToClipboard": "Скриншот скопирован в буфер обмена" }, "videoHistory": { "resumeButton": "Возобновить", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Усиление громкости", - "toggle": { - "off": "Увеличение громкости выключено", - "on": "Увеличение громкости включено" + "button": { + "label": "Усиление громкости", + "toggle": { + "off": "Увеличение громкости выключено", + "on": "Увеличение громкости включено" + } } } } @@ -92,6 +114,9 @@ "title": "Подтвердить сброс настроек", "value": "Подтвердить" }, + "openTab": { + "title": "Открывать настройки расширения в новой вкладке" + }, "reset": { "title": "Сбрасывает все параметры до значений по умолчанию. Нажмите \"Подтвердить\", чтобы сохранить изменения", "value": "Сброс" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Кнопка уменьшения скорости видео", + "increasePlaybackSpeedButton": "Кнопка увеличения скорости видео", "loopButton": "Кнопка «Зациклить»", "maximizePlayerButton": "Кнопка «Развернуть»", "openTranscriptButton": "Кнопка «Открыть стенограмму»", @@ -187,8 +214,8 @@ "title": "Скрывает полосу прокрутки страницы" }, "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" + "label": "Скрыть Shorts", + "title": "Скрывает все Shorts" }, "loopButton": { "label": "Включить кнопку «Зациклить»", @@ -284,6 +311,14 @@ "label": "Включить принудительную скорость воспроизведения", "title": "Устанавливает скорость проигрывания видео на ту, что вы выбрали ниже" }, + "playbackSpeedButtons": { + "label": "Кнопки регулирования скорости видео", + "select": { + "label": "Дельта кнопок регулирования скорости", + "title": "Число, на которое будет изменена скорость за клик" + }, + "title": "Добавляет кнопки для увеличения или уменьшения скорости воспроизведения просматриваемого видео" + }, "select": { "label": "Скорость проигрывателя", "title": "Скорость, которая будет задаваться для видео" @@ -390,6 +425,49 @@ } }, "title": "Настройки усиления громкости" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/sv-SE.json b/public/locales/sv-SE.json index f39b9585..7ff45920 100644 --- a/public/locales/sv-SE.json +++ b/public/locales/sv-SE.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "Funktionsmeny" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "Slinga", - "toggle": { - "off": "Slinga av", - "on": "Slinga på" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "Maximera", - "toggle": { - "off": "Maximera av", - "on": "Maximera på" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "Öppna transkript" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Skärmbild kopierad till urklipp", - "label": "Skärmbild" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Skärmbild kopierad till urklipp" }, "videoHistory": { "resumeButton": "Återuppta", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Volymökning", - "toggle": { - "off": "Volymökning av", - "on": "Volymökning på" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Bekräfta återställning av inställningar", "value": "Bekräfta" }, + "openTab": { + "title": "Öppna tilläggsinställningar i en ny flik" + }, "reset": { "title": "Återställer alla inställningar till sina standardinställningar, Klicka på bekräftelseknappen för att spara ändringarna", "value": "Återställ" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Slingknapp", "maximizePlayerButton": "Maximeraknapp", "openTranscriptButton": "Öppna transkriptknapp", @@ -187,8 +214,8 @@ "title": "Döljer sidornas rullningsfält" }, "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" + "label": "Dölj shorts", + "title": "Döljer alla shorts" }, "loopButton": { "label": "Slingknapp", @@ -215,7 +242,7 @@ "title": "Kommer ihåg volymen på den senaste videon du tittade på och ställer in den när du öppnar en ny video" }, "removeRedirect": { - "label": "Ta bort YouTube /omdirigeringswebbadresser", + "label": "Ta bort YouTube-omdirigeringswebbadresser", "title": "Ersätter YouTube-omdirigering genom faktiska webbadresser, hoppar över omdirigeringsvarningsdialog" }, "shareShortener": { @@ -284,6 +311,14 @@ "label": "Tvingad uppspelningshastighet", "title": "Ställer in videohastigheten till det du väljer nedan" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Uppspelningshastighet", "title": "Hastigheten att spela upp videon i" @@ -390,6 +425,49 @@ } }, "title": "Inställningar för volymökning" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/tr-TR.json b/public/locales/tr-TR.json index 73c2ff87..c8081484 100644 --- a/public/locales/tr-TR.json +++ b/public/locales/tr-TR.json @@ -3,34 +3,54 @@ "langName": "Türkçe", "messages": { "resumingVideo": "{{VIDEO_TIME}} tarihinde videoyu devam ettir", - "settingVolume": "Setting volume boost to {{VOLUME_BOOST_AMOUNT}}" + "settingVolume": "Ses güçlendirmesini {{VOLUME_BOOST_AMOUNT}} olarak ayarla" }, "pages": { "content": { "features": { "featureMenu": { - "label": "Özellik menüsü" + "button": { + "label": "Özellik menüsü" + } }, "loopButton": { - "label": "Döngü", - "toggle": { - "off": "Döngü kapalı", - "on": "Düngü açık" + "button": { + "label": "Tekrarla", + "toggle": { + "off": "Tekrarlama kapalı", + "on": "Tekrarlama açık" + } } }, "maximizePlayerButton": { - "label": "Ekranı Kapla", - "toggle": { - "off": "Tam ekran kapalı", - "on": "Tam ekran açık" + "button": { + "label": "Ekranı kapla", + "toggle": { + "off": "Tam ekran kapalı", + "on": "Tam ekran açıl" + } } }, "openTranscriptButton": { - "label": "Not dökümünü aç" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "Decrease Speed by {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "Increase Speed by {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "Ekran görüntüsü panoya kopyalandı", - "label": "Ekran Görüntüsü" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "Ekran görüntüsü panoya kopyalandı" }, "videoHistory": { "resumeButton": "Devam Et", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "Ses Güçlendirmesi", - "toggle": { - "off": "Ses güçlendirmesi kapalı", - "on": "Ses güçlendirmesi açık" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "Ayarı sıfırlamayı onayla", "value": "Onayla" }, + "openTab": { + "title": "Uzantı ayarlarını yeni bir sekmede açın" + }, "reset": { "title": "Tüm ayarları varsayılan değerlerine sıfırlar. Değişiklikleri kaydetmek için onayla düğmesine tıklayın", "value": "Sıfırla" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "Decrease Speed button", + "increasePlaybackSpeedButton": "Increase Speed button", "loopButton": "Döngü düğmesi", "maximizePlayerButton": "Tam ekran düğmesi", "openTranscriptButton": "Open Transcript button", @@ -136,7 +163,7 @@ }, "enable": { "label": "Özel CSS'yi etkinleştir", - "title": "Enables custom CSS to be applied to the page" + "title": "Özel CSS'nin sayfaya uygulanmasını sağlar" }, "title": "Özel CSS Ayarları" }, @@ -187,8 +214,8 @@ "title": "Sayfa kaydırma çubuğunu gizler" }, "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" + "label": "Kısa videoları gizle", + "title": "Tüm kısa videoları gizler" }, "loopButton": { "label": "Tekrarlama düğmesi", @@ -200,7 +227,7 @@ }, "openTranscriptButton": { "label": "Not dökümü düğmesini gizle", - "title": "Adds a button to the feature menu to open the transcript of the video you're watching" + "title": "İzlediğiniz videonun metnini açmak için özellik menüsüne bir düğme ekler" }, "openYouTubeSettingsOnHover": { "label": "Fare ile üzerine gelerek Youtube ayarlarını açın", @@ -208,11 +235,11 @@ }, "remainingTime": { "label": "Kalan süre", - "title": "Shows the remaining time of the video you're watching" + "title": "İzlediğiniz videonun kalan süresini gösterir" }, "rememberLastVolume": { "label": "Son ses hacmini hatırla", - "title": "Remembers the volume of the last video you were watching and sets it when you open a new video" + "title": "İzlediğiniz son videonun ses seviyesini hatırlar ve yeni bir video açtığınızda bu ses seviyesine ayarlar" }, "removeRedirect": { "label": "YouTube yönlendirme bağlantılarını kaldır", @@ -242,7 +269,7 @@ "white": "Beyaz", "yellow": "Sarı" }, - "title": "Select the color for the On-Screen Display" + "title": "Ekran göstergesinin rengini seçin" }, "hide": { "label": "Gecikmeyi Gizle", @@ -284,9 +311,17 @@ "label": "Zorunlu oynatma hızını etkinleştir", "title": "Video hızını aşağıda seçtiğiniz hıza ayarlar" }, + "playbackSpeedButtons": { + "label": "Playback speed buttons", + "select": { + "label": "Playback buttons speed", + "title": "Amount of speed to be changed per click" + }, + "title": "Adds buttons to increase or decrease the playback speed of the video you're watching" + }, "select": { "label": "Oynatma hızı", - "title": "The speed to set the video to" + "title": "Video oynatma hızını ayarlar" }, "title": "Oynatma hızı ayarları" }, @@ -311,38 +346,38 @@ }, "scrollWheelSpeedControl": { "adjustmentSteps": { - "label": "Speed Change Per Scroll", - "title": "Adjust the speed change per scroll" + "label": "Kaydırma başına hız değişimi", + "title": "Kaydırma başına hız değiştirmeyi ayarlar" }, "enable": { "label": "Kaydırma tekerleği hız kontrolü", - "title": "Press a modifier key to enable speed adjustment with the scroll wheel." + "title": "Kaydırma tekerleği ile hız ayarını etkinleştirmek için değiştirici tuşlarından birine basın." }, "optionLabel": "{{KEY}} anahtarı", "select": { "label": "Düzenleyici anahtar", - "title": "The modifier key to use" + "title": "Kullanılacak kısayol düğmesi" }, "title": "Scroll wheel speed control settings" }, "scrollWheelVolumeControl": { "adjustmentSteps": { - "label": "Volume Change Per Scroll", - "title": "Adjust the volume change per scroll" + "label": "Her kaydırmada değiştirilecek ses düzeyi", + "title": "Her kaydırmada değiştirilecek ses düzeyini ayarlayın" }, "enable": { "label": "Kaydırma tekerleği ile ses kontrolü", - "title": "Lets you use the scroll wheel to control the volume of the video you're watching" + "title": "İzlediğiniz videonun ses düzeyini kontrol etmek için kaydırma tekerleğini kullanmanızı sağlar" }, "holdModifierKey": { "enable": { "label": "Enable when holding modifier key", - "title": "Press a modifier key to enable volume adjustment with the scroll wheel." + "title": "Kaydırma tekerleği ile ses düzeyi ayarını etkinleştirmek için değiştirici tuşlardan birine basın" }, "optionLabel": "{{KEY}} anahtarı", "select": { "label": "Düzenleyici anahtar", - "title": "The modifier key to use" + "title": "Kullanılacak kısayol düğmesi" } }, "holdRightClick": { @@ -355,25 +390,25 @@ }, "videoHistory": { "enable": { - "label": "Track watched videos", - "title": "Keeps track of where you left off on videos you were watching and enables resuming playback" + "label": "İzlenen videoları takip edin", + "title": "İzlediğiniz videolarda en son nerede kaldığınızı takip eder ve oynatmaya oradan devam etmenizi sağlar" }, "resumeType": { "select": { - "label": "Resume type", + "label": "Devam etme türü", "options": { - "automatic": "Automatic", + "automatic": "Otomatik", "prompt": "Prompt" }, - "title": "Select how you want to resume videos" + "title": "Videoları nasıl devam ettirmek istediğinizi seçin" } }, - "title": "Video history settings" + "title": "Video geçmişi ayarları" }, "volumeBoost": { "boostAmount": { - "label": "Volume boost amount (dB)", - "title": "The amount to boost the volume by" + "label": "Ses güçlendirme miktarı (dB)", + "title": "Ses güçlendirme miktarı" }, "enable": { "label": "Ses güçlendirmeyi etkinleştir", @@ -390,6 +425,49 @@ } }, "title": "Ses güçlendirme ayarları" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 766c1aa8..bf536a60 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "功能单" + "button": { + "label": "功能菜单" + } }, "loopButton": { - "label": "循环播放", - "toggle": { - "off": "取消循环", - "on": "启用循环" + "button": { + "label": "循环播放", + "toggle": { + "off": "取消循环", + "on": "启用循环" + } } }, "maximizePlayerButton": { - "label": "网页全屏", - "toggle": { - "off": "最大化关闭", - "on": "最大化开启" + "button": { + "label": "最大化", + "toggle": { + "off": "最大化关闭", + "on": "最大化开启" + } } }, "openTranscriptButton": { - "label": "打开转写文稿" + "button": { + "label": "打开转写文稿" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "降低 {{SPEED}} 播放速度" + }, + "increasePlaybackSpeedButton": { + "label": "增加 {{SPEED}} 播放速度" + } + } }, "screenshotButton": { - "copiedToClipboard": "截图已复制到剪贴板", - "label": "截图" + "button": { + "label": "屏幕截图" + }, + "copiedToClipboard": "截图已复制到剪贴板" }, "videoHistory": { "resumeButton": "继续播放", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "音量增强", - "toggle": { - "off": "关闭音量增强", - "on": "开启音量增强" + "button": { + "label": "音量增强", + "toggle": { + "off": "关闭音量增强", + "on": "开启音量增强" + } } } } @@ -92,6 +114,9 @@ "title": "确认重置设置", "value": "确认" }, + "openTab": { + "title": "在新标签中打开扩展设置" + }, "reset": { "title": "重置所有设置为默认设置,点击确认按钮以保存更改", "value": "重新开始" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "降低速度按钮", + "increasePlaybackSpeedButton": "增加速度按钮", "loopButton": "循环按钮", "maximizePlayerButton": "最大化按钮", "openTranscriptButton": "转写文稿按钮", @@ -187,8 +214,8 @@ "title": "隐藏页面滚动条" }, "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" + "label": "隐藏短视频", + "title": "隐藏所有短视频" }, "loopButton": { "label": "循环按钮", @@ -284,6 +311,14 @@ "label": "强制播放速度", "title": "将视频速度设置为您在下面选择的内容" }, + "playbackSpeedButtons": { + "label": "播放速度按钮", + "select": { + "label": "播放按钮的速度", + "title": "每次点击要更改的速度量" + }, + "title": "添加按钮以增加或降低您观看的视频的播放速度" + }, "select": { "label": "播放速度", "title": "将视频播放速度设为" @@ -390,6 +425,49 @@ } }, "title": "音量增强设置" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index d101e2f8..a5a8ffd0 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -9,28 +9,48 @@ "content": { "features": { "featureMenu": { - "label": "功能選單" + "button": { + "label": "Feature menu" + } }, "loopButton": { - "label": "循環播放", - "toggle": { - "off": "關閉循環播放", - "on": "啟用循環播放" + "button": { + "label": "Loop", + "toggle": { + "off": "Loop off", + "on": "Loop on" + } } }, "maximizePlayerButton": { - "label": "最大化", - "toggle": { - "off": "關閉最大化", - "on": "啟用最大化" + "button": { + "label": "Maximize", + "toggle": { + "off": "Maximize off", + "on": "Maximize on" + } } }, "openTranscriptButton": { - "label": "打開文字記錄" + "button": { + "label": "Open transcript" + } + }, + "playbackSpeedButtons": { + "buttons": { + "decreasePlaybackSpeedButton": { + "label": "減慢播放速度 {{SPEED}}" + }, + "increasePlaybackSpeedButton": { + "label": "加快播放速度 {{SPEED}}" + } + } }, "screenshotButton": { - "copiedToClipboard": "螢幕截圖已複製剪貼簿", - "label": "螢幕截圖" + "button": { + "label": "Screenshot" + }, + "copiedToClipboard": "螢幕截圖已複製剪貼簿" }, "videoHistory": { "resumeButton": "繼續", @@ -39,10 +59,12 @@ } }, "volumeBoostButton": { - "label": "音量增強", - "toggle": { - "off": "關閉音量增強", - "on": "啟用音量增強" + "button": { + "label": "Volume Boost", + "toggle": { + "off": "Volume boost off", + "on": "Volume boost on" + } } } } @@ -92,6 +114,9 @@ "title": "確認重設設定", "value": "確認" }, + "openTab": { + "title": "於新頁面開啟擴充套件設定" + }, "reset": { "title": "將所以設定回復到初始值,按確認儲存變更", "value": "重置" @@ -100,6 +125,8 @@ "buttonPlacement": { "select": { "buttonNames": { + "decreasePlaybackSpeedButton": "減慢速度按鈕", + "increasePlaybackSpeedButton": "加快速度按妞", "loopButton": "循環播放按鈕", "maximizePlayerButton": "最大化按鈕", "openTranscriptButton": "開啟文字記錄按鈕", @@ -187,8 +214,8 @@ "title": "隱藏頁面捲軸" }, "hideShorts": { - "label": "Hide shorts", - "title": "Hides all shorts" + "label": "隱藏 Shorts", + "title": "隱藏全部 Shorts" }, "loopButton": { "label": "循環按鈕", @@ -284,6 +311,14 @@ "label": "強制播放速度", "title": "設定影片播放速度如下" }, + "playbackSpeedButtons": { + "label": "播放速度按鈕", + "select": { + "label": "Playback buttons speed", + "title": "每次按下時改變的速度" + }, + "title": "加入加快或減慢播放速度按鈕" + }, "select": { "label": "播放速度", "title": "設定影片播放速度為" @@ -390,6 +425,49 @@ } }, "title": "音量增強設定" + }, + "youtubeDeepDark": { + "author": "Author", + "co-authors": "Co-authors", + "colors": { + "colorShadow": { + "label": "Shadow color", + "title": "Color for shadows" + }, + "dimmerText": { + "label": "Secondary text color", + "title": "Color for secondary text" + }, + "hoverBackground": { + "label": "Hover background", + "title": "Color for hover background" + }, + "mainBackground": { + "label": "Main background color", + "title": "Color for main background" + }, + "mainColor": { + "label": "Accent color", + "title": "Color for accent" + }, + "mainText": { + "label": "Main text color", + "title": "Color for main text" + }, + "secondBackground": { + "label": "Secondary background", + "title": "Color for secondary background" + } + }, + "enable": { + "label": "Enable selected theme", + "title": "Activate the selected theme for the page" + }, + "select": { + "label": "Select theme", + "title": "Select a theme to be applied to the page" + }, + "title": "YouTube Deep Dark Settings" } } } diff --git a/src/components/Inputs/CSSEditor/CSSEditor.tsx b/src/components/Inputs/CSSEditor/CSSEditor.tsx index b16296d4..6048c25d 100644 --- a/src/components/Inputs/CSSEditor/CSSEditor.tsx +++ b/src/components/Inputs/CSSEditor/CSSEditor.tsx @@ -1,3 +1,4 @@ +import { type Nullable } from "@/src/types"; import { type editor, monaco } from "@/src/utils/monaco"; import { cn, debounce } from "@/src/utils/utilities"; import { Editor, type Monaco } from "@monaco-editor/react"; @@ -26,11 +27,12 @@ type CSSEditorState = { cursorPosition: CursorPosition; }; // TODO: add share custom css button with integration with yt-enhancer.dev + const CSSEditor: React.FC = ({ className, id, onChange, value }) => { - const editorRef = useRef(null); - const monacoRef = useRef(null); - const editorProblemsRef = useRef(null); - const expandButtonRef = useRef(null); + const editorRef = useRef>(null); + const monacoRef = useRef>(null); + const editorProblemsRef = useRef>(null); + const expandButtonRef = useRef>(null); const [isEditorExpanded, setEditorExpanded] = useState(false); const [editorState, setEditorState] = useState({ @@ -39,7 +41,8 @@ const CSSEditor: React.FC = ({ className, id, onChange, value }) const [pageScrollPosition, setPageScrollPosition] = useState({ x: 0, y: 0 }); const [problems, setProblems] = useState([]); const [editorHeight, setEditorHeight] = useState(700); - + const editorPosition = editorRef.current?.getPosition(); + const editorScrollTop = editorRef.current?.getScrollTop(); const getEditorHeight = () => { const { documentElement: { clientHeight: documentHeight } @@ -54,7 +57,10 @@ const CSSEditor: React.FC = ({ className, id, onChange, value }) monacoRef.current = monaco; setEditorHeight(getEditorHeight()); }; - const handleEditorChange = useCallback(debounce(onChange, 250), []); + const handleEditorChange = useCallback( + (value: string | undefined, ev: editor.IModelContentChangedEvent) => debounce(onChange, 250)(value, ev), + [onChange] + ); const expandEditor = () => { const currentScrollPosition = { x: window.scrollX, y: window.scrollY }; @@ -85,12 +91,12 @@ const CSSEditor: React.FC = ({ className, id, onChange, value }) } }); } - }, [editorRef.current?.getPosition(), editorRef.current?.getScrollTop()]); + }, [editorPosition, editorScrollTop]); useLayoutEffect(() => { if (!isEditorExpanded) { window.scrollTo(pageScrollPosition.x, pageScrollPosition.y); } - }, [isEditorExpanded]); + }, [isEditorExpanded, pageScrollPosition]); useEffect(() => { if (editorRef.current) { const { current: editor } = editorRef; @@ -100,7 +106,7 @@ const CSSEditor: React.FC = ({ className, id, onChange, value }) const position = new monaco.Position(lineNumber, columnNumber); editor.setPosition(position); } - }, [value]); + }, [value, editorState]); useEffect(() => { if (editorProblemsRef.current && expandButtonRef.current) { setEditorHeight(getEditorHeight()); @@ -142,7 +148,7 @@ const CSSEditor: React.FC = ({ className, id, onChange, value }) ref={expandButtonRef} /> ; problems: editor.IMarker[]; }; const EditorProblems = forwardRef(({ className, editor, problems }, ref) => { diff --git a/src/components/Inputs/CSSEditor/ExpandButton/index.tsx b/src/components/Inputs/CSSEditor/ExpandButton/index.tsx index 52972304..529b2b1d 100644 --- a/src/components/Inputs/CSSEditor/ExpandButton/index.tsx +++ b/src/components/Inputs/CSSEditor/ExpandButton/index.tsx @@ -13,7 +13,7 @@ const ExpandButton = forwardRef(({ isExpand return ( = ({ checked, className, id, label, onCh
) => void; + title: string; + value: string; +}; +const ColorPicker: React.FC = ({ className, disabled, id, label, onChange, title, value }) => { + const handleChange = useDebouncyFn((value: string) => onChange({ currentTarget: { value } } as ChangeEvent), 200); + const colorPickerRef = useRef(null); + const { isComponentVisible: isColorPickerVisible, setIsComponentVisible: setIsColorPickerVisible } = useComponentVisible( + colorPickerRef, + false + ); + const togglePickerVisibility = () => setIsColorPickerVisible(!isColorPickerVisible); + useClickOutside(colorPickerRef, togglePickerVisibility); + return ( +
+ +
+ <> + + {isColorPickerVisible && ( +
+ + +
+ )} + +
+
+ ); +}; +export default ColorPicker; diff --git a/src/components/Inputs/ColorPicker/index.css b/src/components/Inputs/ColorPicker/index.css new file mode 100644 index 00000000..2b550d9a --- /dev/null +++ b/src/components/Inputs/ColorPicker/index.css @@ -0,0 +1,30 @@ +.react-colorful { + cursor: pointer !important; + width: 150px !important; + height: 150px !important; + margin: 4px !important; +} + +.react-colorful__saturation { + border-radius: 6px 6px 0 0 !important; +} + +.react-colorful__hue, +.react-colorful__alpha { + height: 16px !important; +} + +.react-colorful__alpha { + border-radius: 0 0 6px 6px !important; +} + +.react-colorful__pointer { + height: 18px !important; + width: 18px !important; + border: 1px solid #fff !important; +} + +input#color-picker-input { + margin: 4px; + width: 150px; +} \ No newline at end of file diff --git a/src/components/Inputs/ColorPicker/index.tsx b/src/components/Inputs/ColorPicker/index.tsx new file mode 100644 index 00000000..c3a5739d --- /dev/null +++ b/src/components/Inputs/ColorPicker/index.tsx @@ -0,0 +1,3 @@ +import ColorPicker from "./ColorPicker"; + +export { ColorPicker }; diff --git a/src/components/Inputs/Number/Arrow.tsx b/src/components/Inputs/Number/Arrow.tsx index f8e3a470..b7e9dbe7 100644 --- a/src/components/Inputs/Number/Arrow.tsx +++ b/src/components/Inputs/Number/Arrow.tsx @@ -4,7 +4,7 @@ type RotationDirection = "down" | "left" | "right" | "up"; export default function Arrow({ rotation }: { rotation: RotationDirection }) { return ( = ({ className, disabled, id, label, max = undefined, min = 0, onChange, step = 1, value }) => { - const inputElement: MutableRefObject = useRef(null); - const inputDiv: MutableRefObject = useRef(null); + const inputElement = useRef>(null); + const inputDiv = useRef>(null); const { direction } = useSettings(); const NumberPlus = () => { if (inputElement.current) { diff --git a/src/components/Inputs/Select/Select.tsx b/src/components/Inputs/Select/Select.tsx index ff640ce2..3ce0dff5 100644 --- a/src/components/Inputs/Select/Select.tsx +++ b/src/components/Inputs/Select/Select.tsx @@ -1,9 +1,10 @@ +import type { PathValue, configuration, configurationId } from "@/src/types"; import type { ClassValue } from "clsx"; import type { ChangeEvent } from "react"; import { useComponentVisible } from "@/hooks"; import { cn } from "@/src/utils/utilities"; -import React from "react"; +import React, { useRef } from "react"; import Loader from "../../Loader"; import Arrow from "../Number/Arrow"; @@ -14,31 +15,36 @@ interface SelectOptionProps { id?: string; value: string; } - -export type SelectOption = { +export type SelectOption = { element?: React.ReactElement; label: string; - value: string; + value: Extract, string>; }; -export type SelectProps = { +export type SelectProps = { className?: string; disabled?: boolean; id?: string; label: string; loading?: boolean; onChange: (value: ChangeEvent) => void; - options: SelectOption[]; + options: SelectOption[]; selectedOption: string | undefined; title: string; }; -const Select: React.FC = ({ className, disabled = false, id, label, loading = false, onChange, options, selectedOption }) => { - const { - isComponentVisible: isSelectVisible, - ref: selectRef, - setIsComponentVisible: setIsSelectVisible - } = useComponentVisible(false); +const Select = ({ + className, + disabled = false, + id, + label, + loading = false, + onChange, + options, + selectedOption +}: SelectProps) => { + const selectRef = useRef(null); + const { isComponentVisible: isSelectVisible, setIsComponentVisible: setIsSelectVisible } = useComponentVisible(selectRef, false); const toggleSelect = () => { setIsSelectVisible(!isSelectVisible); @@ -51,14 +57,9 @@ const Select: React.FC = ({ className, disabled = false, id, label, const disabledButtonClasses = { "dark:text-[#4b5563] text-[#4b5563]": disabled } satisfies ClassValue; return ( -
+
-
+
<> {isSelectVisible && ( -
+
{options.map((option, index) => (
, HTMLAnchorElement>; +export default function Link({ children, className, ...props }: LinkProps) { + return ( + + {children} + + ); +} diff --git a/src/components/Loader.tsx b/src/components/Loader.tsx index 9496b9ec..a47cd0c4 100644 --- a/src/components/Loader.tsx +++ b/src/components/Loader.tsx @@ -7,6 +7,6 @@ type LoaderProps = { }; export default function Loader({ className }: LoaderProps) { return ( -
+
); } diff --git a/src/components/Settings/Settings.css b/src/components/Settings/Settings.css index e09bffb4..64e4d808 100644 --- a/src/components/Settings/Settings.css +++ b/src/components/Settings/Settings.css @@ -51,7 +51,8 @@ --transition-border-color: border-color 200ms var(--transition-timing-ease-out); --transition-box-shadow: box-shadow 200ms var(--transition-timing-ease-out); --transition-color: color 200ms var(--transition-timing-ease-out); - --transition-opacity: opacity 200ms var(--transition-timing-linear); /* Timing opacity looks weird */ + --transition-opacity: opacity 200ms var(--transition-timing-linear); + /* Timing opacity looks weird */ --transition-transform: transform 200ms var(--transition-timing-ease-out); /* Misc */ @@ -73,7 +74,7 @@ html { } /* https://stackoverflow.com/questions/11243337/a-taller-than-its-img-child */ -a > img { +a>img { display: block; } @@ -93,15 +94,11 @@ fieldset { padding-left: 0 !important; } -fieldset + fieldset { - margin-top: 12px !important; -} - -fieldset > p:first-of-type { +fieldset>p:first-of-type { margin-top: 0 !important; } -fieldset > p:last-of-type { +fieldset>p:last-of-type { margin-bottom: 0 !important; } @@ -114,9 +111,11 @@ legend { .left { float: left; } + .right { float: right; } + .clear { clear: both; } @@ -129,18 +128,23 @@ legend { .accent { color: var(--accent); } + .success { color: var(--success); } + .warning { color: var(--warning); } + .danger { color: var(--danger); } + .light { color: var(--foreground-light); } + .inverse { color: var(--foreground-inverse); } @@ -149,12 +153,15 @@ legend { .bg-accent { background: var(--accent); } + .bg-success { background: var(--success); } + .bg-warning { background: var(--warning); } + .bg-danger { background: var(--danger); } @@ -180,6 +187,7 @@ hr { /* inputs */ input[type="text"], input[type="button"], +button[id="openinnewtab_button"], select { border-radius: var(--border-radius-md); margin-bottom: 4px; @@ -187,6 +195,7 @@ select { } input[type="text"], +button[id="openinnewtab_button"], select { border: 0; background: var(--input-background); @@ -199,36 +208,46 @@ select { } input[type="button"], +button[id="openinnewtab_button"], input[type="checkbox"] { cursor: pointer; } -input[type="button"] { +input[type="button"], +button[id="openinnewtab_button"] { min-width: 50px; color: var(--neutral-lightest); border: 0; padding: 8px 12px; transition: var(--transition-background); } + input[type="button"]:disabled { cursor: help; opacity: 0.6; } + input[type="button"].loading:disabled { cursor: wait; } /* accent */ -input[type="button"].accent { +input[type="button"].accent, +button[id="openinnewtab_button"].accent { background: var(--accent); } + input[type="button"].accent:hover, input[type="button"].accent:focus, -input[type="button"].accent:active { +input[type="button"].accent:active, +button[id="openinnewtab_button"].accent:hover, +button[id="openinnewtab_button"].accent:focus, +button[id="openinnewtab_button"].accent:active { background: var(--accent); } -input[type="button"].accent.ghost { +input[type="button"].accent.ghost, +button[id="openinnewtab_button"].accent.ghost { border: 2px solid var(--accent); background: var(--neutral-lightest); color: var(--accent); @@ -239,6 +258,7 @@ input[type="button"].success { border: 2px solid var(--success-light); background: var(--success-light); } + input[type="button"].success:hover, input[type="button"].success:focus, input[type="button"].success:active { @@ -257,6 +277,7 @@ input[type="button"].warning { border: 2px solid var(--warning-light); background: var(--warning-light); } + input[type="button"].warning:hover, input[type="button"].warning:focus, input[type="button"].warning:active { @@ -275,6 +296,7 @@ input[type="button"].danger { border: 2px solid var(--danger-light); background: var(--danger-light); } + input[type="button"].danger:hover, input[type="button"].danger:focus, input[type="button"].danger:active { @@ -320,7 +342,8 @@ input[type="color"] { width: 80px; } -input[type="button"] { +input[type="button"], +button[id="openinnewtab_button"] { min-width: 60px; } @@ -336,7 +359,7 @@ input[type="button"] { z-index: 100; } -#notifications > .notification { +#notifications>.notification { border-radius: var(--border-radius-md); padding: 10px 14px; -} +} \ No newline at end of file diff --git a/src/components/Settings/Settings.tsx b/src/components/Settings/Settings.tsx index 8fd36948..c23ee30c 100644 --- a/src/components/Settings/Settings.tsx +++ b/src/components/Settings/Settings.tsx @@ -1,37 +1,38 @@ -import type { ButtonPlacement, ModifierKey, Path, VideoHistoryResumeType, VolumeBoostMode, configuration, configurationKeys } from "@/src/types"; +import type { AllButtonNames, Nullable, Path, configuration, configurationKeys } from "@/src/types"; import type EnUS from "public/locales/en-US.json"; import type { ChangeEvent, ChangeEventHandler } from "react"; import "@/assets/styles/tailwind.css"; import "@/components/Settings/Settings.css"; import { useNotifications } from "@/hooks"; +import Link from "@/src/components/Link"; +import { deepDarkPreset } from "@/src/deepDarkPresets"; import { availableLocales, type i18nInstanceType, i18nService, localeDirection, localePercentages } from "@/src/i18n"; -import { featuresThatHaveButtons, youtubePlayerSpeedRate } from "@/src/types"; +import { buttonNames, youtubePlaybackSpeedButtonsRates, youtubePlayerSpeedRates } from "@/src/types"; import { configurationImportSchema, defaultConfiguration as defaultSettings } from "@/src/utils/constants"; -import { cn, getPathValue, parseStoredValue } from "@/src/utils/utilities"; +import { cn, deepMerge, formatDateForFileName, getPathValue, parseStoredValue } from "@/src/utils/utilities"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { Suspense, createContext, useContext, useEffect, useRef, useState } from "react"; +import { MdOutlineOpenInNew } from "react-icons/md"; import { generateErrorMessage } from "zod-error"; import type { SelectOption } from "../Inputs"; -import { defaultConfiguration } from "../../utils/constants"; -import { formatDateForFileName } from "../../utils/utilities"; import Loader from "../Loader"; import Setting from "./components/Setting"; import SettingsNotifications from "./components/SettingNotifications"; import SettingSection from "./components/SettingSection"; import SettingTitle from "./components/SettingTitle"; - async function getLanguageOptions() { const promises = availableLocales.map(async (locale) => { try { const response = await fetch(`${chrome.runtime.getURL("")}locales/${locale}.json`); const localeData = await response.json(); - return Promise.resolve({ + const languageOption: SelectOption<"language"> = { label: `${(localeData as EnUS).langName} (${localePercentages[locale]}%)`, value: locale - } as SelectOption); + }; + return Promise.resolve(languageOption); } catch (err) { return Promise.reject(err); } @@ -39,8 +40,8 @@ async function getLanguageOptions() { const results = await Promise.allSettled(promises); - const languageOptions: SelectOption[] = results - .filter((result): result is PromiseFulfilledResult => result.status === "fulfilled") + const languageOptions: SelectOption<"language">[] = results + .filter((result): result is PromiseFulfilledResult> => result.status === "fulfilled") .map((result) => result.value); return languageOptions; @@ -54,7 +55,7 @@ function LanguageOptions({ setValueOption: (key: configurationKeys) => ({ currentTarget }: ChangeEvent) => void; t: i18nInstanceType["t"]; }) { - const [languageOptions, setLanguageOptions] = useState([]); + const [languageOptions, setLanguageOptions] = useState[]>([]); const [languagesLoading, setLanguagesLoading] = useState(true); useEffect(() => { void (async () => { @@ -107,7 +108,7 @@ async function fetchSettings() { return settings; } catch (error) { console.error("Failed to get settings:", error); - throw new Error("Failed to fetch settings"); // + throw new Error("Failed to fetch settings"); } } async function setSettings(settings: configuration) { @@ -136,7 +137,7 @@ export default function Settings() { addNotification("success", "pages.options.notifications.success.saved"); } }); - const [i18nInstance, setI18nInstance] = useState(null); + const [i18nInstance, setI18nInstance] = useState>(null); const settingsImportRef = useRef(null); const { addNotification, notifications, removeNotification } = useNotifications(); @@ -206,69 +207,70 @@ export default function Settings() { addNotification("success", "settings.clearData.allDataDeleted"); } } - const scrollWheelControlModifierKeyOptions = [ - { - label: t("settings.sections.scrollWheelVolumeControl.holdModifierKey.optionLabel", { - KEY: "Alt" - }), - value: "altKey" - }, - { - label: t("settings.sections.scrollWheelVolumeControl.holdModifierKey.optionLabel", { - KEY: "Ctrl" - }), - value: "ctrlKey" - }, - { - label: t("settings.sections.scrollWheelVolumeControl.holdModifierKey.optionLabel", { - KEY: "Shift" - }), - value: "shiftKey" - } - ] as { label: string; value: ModifierKey }[] as SelectOption[]; - const colorOptions: SelectOption[] = [ + const scrollWheelControlModifierKeyOptions: SelectOption<"scroll_wheel_speed_control_modifier_key" | "scroll_wheel_volume_control_modifier_key">[] = + [ + { + label: t("settings.sections.scrollWheelVolumeControl.holdModifierKey.optionLabel", { + KEY: "Alt" + }), + value: "altKey" + }, + { + label: t("settings.sections.scrollWheelVolumeControl.holdModifierKey.optionLabel", { + KEY: "Ctrl" + }), + value: "ctrlKey" + }, + { + label: t("settings.sections.scrollWheelVolumeControl.holdModifierKey.optionLabel", { + KEY: "Shift" + }), + value: "shiftKey" + } + ]; + const colorOptions: SelectOption<"osd_display_color">[] = [ { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.red"), value: "red" }, { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.green"), value: "green" }, { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.blue"), value: "blue" }, { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.yellow"), value: "yellow" }, { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.orange"), value: "orange" }, { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.purple"), value: "purple" }, { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.pink"), value: "pink" }, { - element:
, + element:
, label: t("settings.sections.onScreenDisplaySettings.color.options.white"), value: "white" } ]; - const OSD_DisplayTypeOptions: SelectOption[] = [ + const OSD_DisplayTypeOptions: SelectOption<"osd_display_type">[] = [ { label: t("settings.sections.onScreenDisplaySettings.type.options.no_display"), value: "no_display" @@ -286,7 +288,7 @@ export default function Settings() { value: "round" } ]; - const OSD_PositionOptions: SelectOption[] = [ + const OSD_PositionOptions: SelectOption<"osd_display_position">[] = [ { label: t("settings.sections.onScreenDisplaySettings.position.options.top_left"), value: "top_left" @@ -308,7 +310,7 @@ export default function Settings() { value: "center" } ]; - const YouTubePlayerQualityOptions: SelectOption[] = [ + const YouTubePlayerQualityOptions = [ { label: "144p", value: "tiny" }, { label: "240p", value: "small" }, { label: "360p", value: "medium" }, @@ -320,18 +322,28 @@ export default function Settings() { { label: "2880p", value: "hd2880" }, { label: "4320p", value: "highres" }, { label: "auto", value: "auto" } - ].reverse(); - const YouTubePlayerSpeedOptions: SelectOption[] = youtubePlayerSpeedRate.map((rate) => ({ label: rate?.toString(), value: rate?.toString() })); - const ScreenshotFormatOptions: SelectOption[] = [ + // This cast is here because otherwise it would require marking all the options 'as const' + ].reverse() as SelectOption<"player_quality">[]; + const YouTubePlayerSpeedOptions = youtubePlayerSpeedRates.map((rate) => ({ + label: rate?.toString(), + value: rate?.toString() + // This cast is here because I'm not sure what the proper type is + })) as SelectOption<"player_speed">[]; + const YouTubePlaybackSpeedButtonsOptions = youtubePlaybackSpeedButtonsRates.map((rate) => ({ + label: rate?.toString(), + value: rate?.toString() + // This cast is here because I'm not sure what the proper type is + })) as SelectOption<"playback_buttons_speed">[]; + const ScreenshotFormatOptions: SelectOption<"screenshot_format">[] = [ { label: "PNG", value: "png" }, { label: "JPEG", value: "jpeg" }, { label: "WebP", value: "webp" } ]; - const ScreenshotSaveAsOptions: SelectOption[] = [ + const ScreenshotSaveAsOptions: SelectOption<"screenshot_save_as">[] = [ { label: t("settings.sections.screenshotButton.saveAs.file"), value: "file" }, { label: t("settings.sections.screenshotButton.saveAs.clipboard"), value: "clipboard" } ]; - const VolumeBoostModeOptions: SelectOption[] = [ + const VolumeBoostModeOptions: SelectOption<"volume_boost_mode">[] = [ { label: t("settings.sections.volumeBoost.mode.select.options.global"), value: "global" @@ -340,8 +352,16 @@ export default function Settings() { label: t("settings.sections.volumeBoost.mode.select.options.perVideo"), value: "per_video" } - ] as { label: string; value: VolumeBoostMode }[] as SelectOption[]; - const buttonPlacementOptions: SelectOption[] = [ + ]; + const buttonPlacementOptions: SelectOption< + | "button_placements.decreasePlaybackSpeedButton" + | "button_placements.increasePlaybackSpeedButton" + | "button_placements.loopButton" + | "button_placements.maximizePlayerButton" + | "button_placements.openTranscriptButton" + | "button_placements.screenshotButton" + | "button_placements.volumeBoostButton" + >[] = [ { label: t("settings.sections.buttonPlacement.select.options.below_player.value"), value: "below_player" }, { label: t("settings.sections.buttonPlacement.select.options.feature_menu.value"), value: "feature_menu" }, { @@ -352,11 +372,8 @@ export default function Settings() { label: t("settings.sections.buttonPlacement.select.options.player_controls_right.value"), value: "player_controls_right" } - ] as { - label: string; - value: ButtonPlacement; - }[] as SelectOption[]; - const videoHistoryResumeTypeOptions: SelectOption[] = [ + ]; + const videoHistoryResumeTypeOptions: SelectOption<"video_history_resume_type">[] = [ { label: t("settings.sections.videoHistory.resumeType.select.options.automatic"), value: "automatic" @@ -365,7 +382,13 @@ export default function Settings() { label: t("settings.sections.videoHistory.resumeType.select.options.prompt"), value: "prompt" } - ] as { label: string; value: VideoHistoryResumeType }[] as SelectOption[]; + ]; + const youtubeDeepDarkThemeOptions: SelectOption<"deep_dark_preset">[] = deepDarkPreset.map((value) => { + return { + label: value, + value + }; + }); const settingsImportChange: ChangeEventHandler = (event): void => { void (async () => { const { target } = event; @@ -387,9 +410,7 @@ export default function Settings() { }) ); } else { - const castSettings = { ...defaultConfiguration, ...(importedSettings as configuration) }; - // Set the imported settings in your state. - settingsMutate.mutate(castSettings); + const castSettings = deepMerge(defaultSettings, importedSettings as configuration) as configuration; for (const key of Object.keys(castSettings)) { if (typeof castSettings[key] !== "string") { localStorage.setItem(key, JSON.stringify(castSettings[key])); @@ -399,6 +420,8 @@ export default function Settings() { void chrome.storage.local.set({ [key]: castSettings[key] as string }); } } + // Set the imported settings in your state. + settingsMutate.mutate(castSettings); // Show a success notification. addNotification("success", "settings.sections.importExportSettings.importButton.success"); } @@ -413,6 +436,13 @@ export default function Settings() { // Import settings from a JSON file. function importSettings() { if (settingsImportRef.current === null) return; + const isFirefox = navigator.userAgent.toLowerCase().indexOf("firefox") > -1; + if (isFirefox && isPopup) { + // If user is currently on a popup, opens extensions page in a new tab to prevent settings not being imported. + openInNewTab("src/pages/options/index.html"); + window.close(); + return; + } // Trigger the file input dialog. settingsImportRef.current.click(); } @@ -447,12 +477,21 @@ export default function Settings() { addNotification("success", "settings.sections.importExportSettings.exportButton.success"); } }; + const isPopup = window.location.href.match(/.+\/src\/pages\/popup\/index\.html/g); + const openInNewTab = (path: string) => { + const url = chrome.runtime.getURL(path); + void chrome.tabs.create({ url }); + }; + const isOSDDisabled = + settings.enable_scroll_wheel_volume_control?.toString() !== "true" && + settings.enable_scroll_wheel_speed_control?.toString() !== "true" && + settings.enable_playback_speed_buttons?.toString() !== "true"; // TODO: add "default player mode" setting (theater, fullscreen, etc.) feature return ( -
+

- + YouTube Enhancer v{chrome.runtime.getManifest().version}

@@ -477,12 +516,12 @@ export default function Settings() { - {featuresThatHaveButtons.map((feature) => { + {buttonNames.map((feature) => { // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion const label = t(`settings.sections.buttonPlacement.select.buttonNames.${feature}`) as string; return ( + + @@ -922,6 +969,101 @@ export default function Settings() { value={settings.custom_css_code} /> + + + + + + RaitaroH + + + + MechaLynx + MaximeRF + + + + + + + + + + + +
+ {isPopup && ( + + )} ; +type SettingInputProps = { + id: ID; title?: string; } & ( | ({ type: "checkbox" } & CheckboxProps) + | ({ type: "color-picker" } & ColorPickerProps) | ({ type: "css-editor" } & CSSEditorProps) | ({ type: "number" } & NumberInputProps) - | ({ type: "select" } & SelectProps) + | ({ type: "select" } & SelectProps) | ({ type: "slider" } & SliderProps) ); -function SettingInput(settingProps: SettingInputProps) { +function SettingInput(settingProps: SettingInputProps) { const { type } = settingProps; switch (type) { case "checkbox": { @@ -65,9 +67,13 @@ function SettingInput(settingProps: SettingInputProps) { const { className, id, onChange, value } = settingProps; return ; } + case "color-picker": { + const { className, disabled, id, label, onChange, title, value } = settingProps; + return ; + } } } -export default function Setting(settingProps: SettingInputProps) { +export default function Setting(settingProps: SettingInputProps) { return (
diff --git a/src/components/Settings/components/SettingNotifications.tsx b/src/components/Settings/components/SettingNotifications.tsx index 3f481e9d..4ce5bef5 100644 --- a/src/components/Settings/components/SettingNotifications.tsx +++ b/src/components/Settings/components/SettingNotifications.tsx @@ -1,56 +1,64 @@ +import type { Notification } from "@/src/types"; + import { useNotifications } from "@/src/hooks"; import { cn } from "@/src/utils/utilities"; import { useAutoAnimate } from "@formkit/auto-animate/react"; import { useSettings } from "../Settings"; - -export default function SettingsNotifications() { - const { notifications, removeNotification } = useNotifications(); - const [parentRef] = useAutoAnimate({ duration: 300 }); +function NotificationCloseButton({ notification }: { notification: Notification }) { + const { removeNotification } = useNotifications(); + return ( + + ); +} +function ToastNotification({ key, notification }: { key: number; notification: Notification }) { const { i18nInstance: { t } } = useSettings(); + const message: string = t(notification.message); return ( -
- {notifications.map((notification, index) => { - const message: string = t(notification.message); - return ( -
- {notification.action ? - notification.action === "reset_settings" ? - <> - {message.split("\n").map((line, index) => ( -

{line}

- ))} - - - : null - : <> - {message} - - - } -
-
- ); +
+ {notification.action ? + notification.action === "reset_settings" ? + <> + {message.split("\n").map((line, index) => ( +

{line}

+ ))} + + + : null + : <> + {message} + + + } +
+
+ ); +} +export default function SettingsNotifications() { + const { notifications } = useNotifications(); + const [parentRef] = useAutoAnimate({ duration: 300 }); + return ( +
+ {notifications.map((notification, index) => ( + + ))}
); } diff --git a/src/components/Settings/components/SettingSection.tsx b/src/components/Settings/components/SettingSection.tsx index 58ecf4d4..e3a2b775 100644 --- a/src/components/Settings/components/SettingSection.tsx +++ b/src/components/Settings/components/SettingSection.tsx @@ -1,6 +1,9 @@ +import { cn } from "@/src/utils/utilities"; + interface SettingSectionProps { children: React.ReactNode; + className?: string; } -export default function SettingSection({ children }: SettingSectionProps) { - return
{children}
; +export default function SettingSection({ children, className }: SettingSectionProps) { + return
{children}
; } diff --git a/src/deepDarkMaterialCSS.ts b/src/deepDarkMaterialCSS.ts new file mode 100644 index 00000000..388ee494 --- /dev/null +++ b/src/deepDarkMaterialCSS.ts @@ -0,0 +1,4298 @@ +/** + * Version 4.1.8 + * Author: https://github.com/RaitaroH + * Co-authors: https://github.com/MechaLynx https://github.com/MaximeRF + * Repository: https://github.com/RaitaroH/YouTube-DeepDark + */ +export const deepDarkMaterial = ` +/* Author : Theme made by RaitaroH */ +/* Co-authors : https://github.com/MechaLynx https://github.com/MaximeRF */ +/* Home : https://github.com/RaitaroH/YouTube-DeepDark */ +/* License : GNU General Public License v3.0 */ + +/*Error page*/ +#error-page { + background-color: var(--main-background) !important; + color: var(--main-text) !important; +} + +* { + /*Scrollbar for firefox*/ + scrollbar-color: rgba(79, 80, 85, 1) transparent !important; + scrollbar-width: 8px !important; + + --yt-spec-text-primary: var(--main-text) !important; + --yt-spec-text-secondary: var(--dimmer-text) !important; + --paper-spinner-color: var(--dimmer-text) !important; + + --paper-input-container-color: var(--dimmer-text) !important; + + --paper-radio-button-unchecked-color: var(--dimmer-text) !important; + --paper-radio-button-unchecked-background-color: transparent !important; + --paper-radio-button-checked-color: var(--main-color) !important; + --paper-radio-button-checked-ink-color: var(--main-color) !important; + --paper-radio-button-unchecked-ink-color: var(--main-color) !important; + + --paper-checkbox-unchecked-color: var(--dimmer-text) !important; + --paper-checkbox-checked-color: var(--main-color) !important; + --paper-checkbox-checkmark-color: none !important; + --paper-checkbox-checked-ink-color: var(--main-color) !important; + --paper-checkbox-unchecked-ink-color: var(--main-color) !important; + --yt-spec-call-to-action: var(--main-color) !important; + --yt-spec-suggested-action: var(--hover-background) !important; + --yt-spec-outline: var(--hover-background) !important; + --yt-spec-brand-button-background: var(--main-color) !important; + /*in incognito this may be used as subscribe button but is inconsistent .yt-spec-button-shape-next--brand.yt-spec-button-shape-next--filled*/ + + --yt-formatted-string-bold-color: var(--dimmer-text) !important; + /*this affects number of views*/ + + --yt-lightsource-section1-color: var(--main-background) !important; + /* watch history header */ + + /*clip icon hover*/ + --yt-spec-icon-active-other: var(--main-text) !important; + --iron-icon-fill-color: var(--main-text) !important; + + --yt-spec-base-background: var(--second-background) !important; +} + +/*Scrollbar fix for chrome*/ +*:not([hide-scrollbar]) ::-webkit-scrollbar-thumb { + background: rgba(79, 80, 85, 1) !important; +} + +*:not([hide-scrollbar]) ::-webkit-scrollbar { + width: 8px !important; +} + +::-webkit-scrollbar-track { + background: transparent !important; +} + +::-webkit-scrollbar-thumb { + background: var(--main-color) !important; +} + +/*Background for the entire page*/ +html, +ytd-browse, +ytd-watch, +ytd-search, +ytd-app, +ytd-app[is-watch-page], +[class*="ytd-watch-flexy"]:not(#engagement-panel-scrim), +.style-scope.ytd-page-manager.hide-skeleton, +.account-container { + background-color: var(--main-background) !important; +} + +/*Border for the sidemenu*/ +#guide-content.ytd-app { + border-right: 1px solid var(--yt-border-color) !important; +} + +/*Changed text highlight*/ +::selection { + background: var(--main-color) !important; + color: var(--main-text) !important; +} + +::-moz-selection { + background: var(--main-color) !important; + color: var(--main-text) !important; +} + +/*Outline for links*/ +a { + outline-color: var(--main-color) !important; +} + +a:hover { + color: var(--main-color) !important; + fill: var(--main-color) !important; +} + +/*Outline for comments*/ +#content-text.ytd-comment-renderer { + outline: none !important; +} + +/*Placeholder image on pages that need an account - such as Subscriptions*/ +ytd-background-promo-renderer .image.ytd-background-promo-renderer, +ytd-message-renderer yt-icon.ytd-message-renderer { + color: var(--main-text) !important; +} + +/*Nav bar*/ +ytd-masthead, +#yt-masthead-container, +#masthead-positioner-height-offset + +/*account page*/ + { + background-color: var(--second-background) !important; + border-bottom-color: var(--hover-background) !important; +} + +yt-icon-button svg { + fill: var(--dimmer-text) !important; +} + +yt-icon-button:hover svg { + fill: var(--main-color) !important; +} + +#logo-icon-container.ytd-topbar-logo-renderer #youtube-paths.ytd-topbar-logo-renderer path.ytd-topbar-logo-renderer, +#youtube-red-paths + +/*premium*/ + { + fill: var(--main-text) !important; +} + +/*acount settings page*/ +/*logo*/ +.exp-invert-logo.inverted-hdpi #header::before, +.exp-invert-logo.inverted-hdpi .ypc-join-family-header .logo, +.exp-invert-logo.inverted-hdpi #footer-logo .footer-logo-icon, +.exp-invert-logo.inverted-hdpi #yt-masthead #logo-container .logo, +.exp-invert-logo.inverted-hdpi #masthead #logo-container, +.exp-invert-logo.inverted-hdpi .admin-masthead-logo a, +.exp-invert-logo.inverted-hdpi #yt-sidebar-styleguide-logo #logo { + filter: invert(1) grayscale(1); +} + +/*buttons*/ +#yt-masthead-creation-button { + filter: brightness(220%); +} + +#yt-masthead-notifications .yt-uix-button-icon-bell { + filter: invert(1) brightness(720%); +} + +#sections.ytd-multi-page-menu-renderer>.ytd-multi-page-menu-renderer:not(:last-child) { + border-color: var(--hover-background) !important; +} + +/*Chat in the header*/ +ytd-conversation-switcher-item-renderer { + border-color: var(--hover-background) !important; +} + +#last-post.ytd-conversation-switcher-item-renderer { + color: var(--dimmer-text) !important; +} + +/*invite friends*/ +#bar.ytd-copy-connection-invite-url-renderer { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +#icon.ytd-copy-connection-invite-url-renderer { + color: var(--main-text) !important; +} + +/*chat popup*/ +ytd-conversation-section-renderer { + background: var(--second-background) !important; +} + +#title-bar.ytd-conversation-section-renderer { + border-color: var(--hover-background) !important; +} + +ytd-conversation-text-item-renderer[justification-style="JUSTIFICATION_START"] #post-text.ytd-conversation-text-item-renderer, +ytd-conversation-link-item-renderer[justification-style="JUSTIFICATION_START"] #link.ytd-conversation-link-item-renderer, +#bar.ytd-conversation-link-item-renderer, +#thumbnail.ytd-inline-playback-renderer, +#video-data.ytd-inline-playback-renderer { + border-color: var(--hover-background) !important; + background: var(--hover-background) !important; +} + +#post-text.ytd-conversation-text-item-renderer, +textarea.iron-autogrow-textarea { + color: var(--main-text) !important; +} + +#displayed-text.ytd-conversation-link-item-renderer, +#icon.ytd-conversation-link-item-renderer { + color: var(--main-color) !important; +} + +#metadata.ytd-conversation-metadata-item-renderer { + color: var(--dimmer-text) !important; +} + +/*Backgrounds*/ +#like-bar.ytd-sentiment-bar-renderer, +#progress.ytd-thumbnail-overlay-resume-playback-renderer, +#selectionBar.paper-tabs { + background-color: var(--main-color) !important; +} + +/*Sidebar*/ +#guide-content.ytd-app, +#contentContainer.app-drawer, +#guide-wrapper.ytd-app { + background: var(--second-background) !important; +} + +#endpoint.yt-simple-endpoint.ytd-guide-entry-renderer, +#guide-section-title.ytd-guide-section-renderer { + color: var(--main-text) !important; +} + +ytd-guide-entry-renderer:hover #endpoint.yt-simple-endpoint.ytd-guide-entry-renderer, +ytd-guide-entry-renderer:hover svg { + color: var(--main-color) !important; + fill: var(--main-color) !important; +} + +ytd-guide-entry-renderer[active] { + background-color: var(--hover-background) !important; +} + +#sections.ytd-guide-renderer>.ytd-guide-renderer:not(:last-child), +#guide-links-primary.ytd-guide-renderer, +#guide-content.ytd-app { + border-color: var(--hover-background) !important; +} + +#guide-links-primary.ytd-guide-renderer>a, +#guide-links-secondary.ytd-guide-renderer>a, +#footer.ytd-guide-renderer>#copyright, +yt-formatted-string.ytd-guide-signin-promo-renderer { + color: var(--dimmer-text) !important; +} + +#guide-links-primary.ytd-guide-renderer>a:hover, +#guide-links-secondary.ytd-guide-renderer>a:hover { + color: var(--main-color) !important; +} + +/*Compact sidebar fix*/ +ytd-mini-guide-renderer, +a.ytd-mini-guide-entry-renderer, +a.ytd-mini-guide-entry-renderer:hover, +a.ytd-mini-guide-entry-renderer:focus { + background-color: var(--second-background) !important; +} + +ytd-mini-guide-entry-renderer .guide-icon.ytd-mini-guide-entry-renderer, +a.ytd-mini-guide-entry-renderer .guide-icon, +a.ytd-mini-guide-entry-renderer.title.ytd-mini-guide-entry-renderer, +ytd-mini-guide-entry-renderer .title.ytd-mini-guide-entry-renderer { + color: var(--main-text) !important; +} + +ytd-mini-guide-entry-renderer[active] .guide-icon.ytd-mini-guide-entry-renderer, +a.ytd-mini-guide-entry-renderer:hover .guide-icon, +a.ytd-mini-guide-entry-renderer:hover .title.ytd-mini-guide-entry-renderer, +ytd-mini-guide-entry-renderer[active] .title.ytd-mini-guide-entry-renderer { + color: var(--main-color) !important; +} + +#newness-dot.ytd-guide-entry-renderer { + background-color: var(--main-color) !important; +} + +/*Latest YouTube posts*/ +ytd-post-renderer[surface_="backstage-surface-type-home"], +ytd-post-renderer[uses-compact-lockup] { + background-color: var(--second-background) !important; +} + +ytd-post-renderer[surface_="backstage-surface-type-home"] #home-content-text.ytd-post-renderer, +ytd-post-renderer[surface_="backstage-surface-type-home"][attachment="poll"] #vote-count-text.ytd-post-renderer, +ytd-post-renderer[uses-compact-lockup] #home-content-text.ytd-post-renderer { + color: var(--main-text) !important; +} + +ytd-post-renderer[surface_="backstage-surface-type-home"] #author-text.yt-simple-endpoint.ytd-post-renderer { + color: var(--main-color) !important; +} + +ytd-post-renderer[uses-compact-lockup][attachment="poll"] #vote-count-text.ytd-post-renderer { + color: var(--dimmer-text) !important; +} + +/*vote now button*/ +ytd-post-renderer[uses-compact-lockup] ytd-button-renderer.style-suggestive[is-paper-button] #button.ytd-button-renderer { + background-color: var(--main-color) !important; +} + +/*Main page video hover preview*/ +#video-preview-container.ytd-video-preview { + background: var(--second-background) !important; +} + +/*Feed filter*/ +#home-chips + +/*skeleton*/ +, +#chips-wrapper.ytd-feed-filter-chip-bar-renderer { + background-color: var(--main-background) !important; + border-color: var(--hover-background) !important; +} + +yt-chip-cloud-chip-renderer:not([selected]) { + background-color: var(--main-background) !important; + border-color: var(--hover-background) !important; +} + +yt-chip-cloud-chip-renderer[selected], +yt-chip-cloud-chip-renderer:hover { + background-color: var(--hover-background) !important; +} + +yt-chip-cloud-renderer { + background: transparent !important; +} + +#text.yt-chip-cloud-chip-renderer { + color: var(--main-text) !important; +} + +#scroll-container.ytd-feed-filter-chip-bar-renderer::after, +#scroll-container.ytd-feed-filter-chip-bar-renderer::before { + background: transparent !important; +} + +#left-arrow-button.ytd-feed-filter-chip-bar-renderer, +#right-arrow-button.ytd-feed-filter-chip-bar-renderer, +#left-arrow.yt-chip-cloud-renderer, +#right-arrow.yt-chip-cloud-renderer, +#left-arrow-button.yt-chip-cloud-renderer, +#right-arrow-button.yt-chip-cloud-renderer { + background: var(--main-background) !important; +} + +#left-arrow.ytd-feed-filter-chip-bar-renderer::after, +#right-arrow.ytd-feed-filter-chip-bar-renderer::before, +yt-chip-cloud-renderer #right-arrow.yt-chip-cloud-renderer::before, +yt-chip-cloud-renderer #left-arrow.yt-chip-cloud-renderer::after { + display: none; +} + +/*new to you filter on video*/ +#content-wrapper.ytd-feed-nudge-renderer { + background-color: var(--second-background) !important; +} + +yt-chip-cloud-chip-renderer[chip-style="STYLE_REFRESH_TO_NOVEL_CHIP"][selected] { + background-image: none !important; +} + +/*Covid19 big posts aka rich shelves*/ +/*also other borders*/ +ytd-rich-shelf-renderer, +#show-more-button.ytd-rich-shelf-renderer, +ytd-rich-shelf-renderer[is-show-more-hidden] #dismissible.ytd-rich-shelf-renderer, +#contents.ytd-rich-shelf-renderer, +ytd-compact-promoted-item-renderer[view-style="COMPACT_PROMOTED_ITEM_STYLE_RICH_GRID"] #dismissible.ytd-compact-promoted-item-renderer { + border-color: var(--hover-background) !important; +} + +/* poll results */ +/*your selection*/ +tp-yt-paper-item.ytd-backstage-poll-renderer[selected] .progress-bar.ytd-backstage-poll-renderer { + background-color: var(--main-color) !important; +} + +/*other bars*/ +.progress-bar.ytd-backstage-poll-renderer { + background-color: var(--second-background) !important; +} + +ytd-backstage-poll-renderer:not([is-image-poll]) tp-yt-paper-item.ytd-backstage-poll-renderer .choice-info.ytd-backstage-poll-renderer { + border-color: transparent !important; +} + +#title.ytd-grid-channel-renderer { + color: var(--dimmer-text) !important; +} + +/*Channel page*/ +/*header*/ +#channel-header.ytd-c4-tabbed-header-renderer, +#tabs-inner-container.ytd-c4-tabbed-header-renderer { + background: var(--hover-background) !important; +} + +#channel-title.ytd-c4-tabbed-header-renderer { + color: var(--main-text) !important; +} + +#subscriber-count.ytd-c4-tabbed-header-renderer { + color: var(--dimmer-text) !important; +} + +.tab-content.paper-tab, +.tab-content.tp-yt-paper-tab, +.yt-tab-shape-wiz__tab { + color: var(--main-text) !important; +} + +paper-tab:hover .tab-content.paper-tab, +tp-yt-paper-tab:hover>.tab-content.tp-yt-paper-tab, +.yt-tab-shape-wiz__tab--tab-selected { + color: var(--main-color) !important; +} + +tp-yt-paper-tabs { + --paper-tabs-selection-bar-color: var(--main-color) !important; +} + +/* for tab selected */ +.yt-tab-group-shape-wiz__slider { + background-color: var(--main-color) !important; +} + +/* Join button, Sign In, Show Transcript */ +.yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--outline { + color: var(--main-text); + background-color: var(--second-background) !important; +} + +/* vote now / answer now posts */ +.style-scope.ytd-post-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--outline { + background: var(--hover-background) !important; +} + +/*search*/ +.input-content.paper-input-container label, +.input-content.paper-input-container .paper-input-label, +#subtitle, +.style-scope.tp-yt-paper-input { + color: var(--dimmer-text) !important; +} + +/*arrow button*/ +iron-icon { + fill: var(--main-text) !important; +} + +iron-icon:hover { + fill: var(--main-color) !important; +} + +/*side channels*/ +#title:not([class*="ytd-labs"]):not([class*="upsell-offer"]) { + color: var(--main-text) !important; +} + +.title { + color: var(--main-text) !important; +} + +.title:hover { + color: var(--main-color) !important; +} + +#contents>.ytd-browse-secondary-contents-renderer:not(:first-child) { + border-color: var(--hover-background) !important; +} + +/*videos - uploads*/ +#label-text.yt-dropdown-menu { + color: var(--main-text) !important; +} + +paper-menu-button.yt-dropdown-menu:hover #label-text.yt-dropdown-menu, +paper-menu-button.yt-dropdown-menu:hover #label-icon.yt-dropdown-menu svg, +paper-menu-button.yt-dropdown-menu:hover #icon-label.yt-dropdown-menu { + color: var(--main-color) !important; + fill: var(--main-color) !important; +} + +/*community*/ +#message.ytd-message-renderer, +#content-text.ytd-backstage-post-renderer, +#repost-content-text.ytd-shared-post-renderer { + color: var(--dimmer-text) !important; +} + +#author-text, +.more-button, +.less-button, +.align-by-text.ytd-backstage-comments-renderer, +#toggle.ytd-grid-renderer, +#repost-author-text.yt-simple-endpoint.ytd-shared-post-renderer { + color: var(--main-text) !important; +} + +.more-button:hover, +.less-button:hover, +.align-by-text.ytd-backstage-comments-renderer:hover, +#toggle.ytd-grid-renderer:hover, +#author-text.yt-simple-endpoint.ytd-backstage-post-renderer:hover, +#repost-author-text.yt-simple-endpoint.ytd-shared-post-renderer:hover { + color: var(--main-color) !important; +} + +#content-attachment.ytd-backstage-post-renderer ytd-video-renderer.ytd-backstage-post-renderer, +/*normal video*/ +#content-attachment.ytd-backstage-post-renderer ytd-playlist-renderer.ytd-backstage-post-renderer, +/*playlist*/ +#content-attachment.ytd-post-renderer ytd-video-renderer.ytd-post-renderer, +/*normal video, but in cards on home page*/ +#content-attachment.ytd-post-renderer ytd-playlist-renderer.ytd-post-renderer + +/*playlist, but in cards on home page*/ + { + background: var(--hover-background) !important; +} + +#poll-votes.ytd-backstage-poll-renderer { + background: transparent !important; +} + +.vote-percentage.ytd-backstage-poll-renderer, +.choice-text.ytd-backstage-poll-renderer, +#poll-choice-text.ytd-commentbox, +yt-icon.ytd-backstage-poll-renderer { + color: var(--main-text) !important; +} + +paper-item[selected].ytd-backstage-poll-renderer #progress-bar.ytd-backstage-poll-renderer { + background: var(--main-color) !important; +} + +/*about*/ +.subheadline, +#right-column .subheadline { + color: var(--main-text) !important; +} + +#description:not([class*="yt-music"]), +#bio, +#right-column>yt-formatted-string { + color: var(--dimmer-text) !important; +} + +#right-column>yt-formatted-string, +#description-container.ytd-channel-about-metadata-renderer, +#bio-container.ytd-channel-about-metadata-renderer, +#photos-container.ytd-channel-about-metadata-renderer, +#details-container.ytd-channel-about-metadata-renderer, +#links-container.ytd-channel-about-metadata-renderer { + border-color: var(--hover-background) !important; +} + +#link-list-container a { + color: var(--main-color) !important; +} + +#link-list-container:hover a { + filter: brightness(110%); +} + +/*private message*/ +ytd-form-popup-renderer[dialog][dialog][dialog] { + background: var(--main-background) !important; +} + +#buttons.ytd-form-popup-renderer { + border-color: var(--hover-background) !important; +} + +ytd-toggle-menu-service-item-renderer { + color: var(--main-text) !important; +} + +ytd-toggle-menu-service-item-renderer:hover .style-scope.ytd-toggle-menu-service-item-renderer { + color: var(--main-color) !important; +} + +ytd-toggle-menu-service-item-renderer:hover { + background: var(--hover-background) !important; +} + +/*Video page*/ +/*title*/ +.title.ytd-video-primary-info-renderer yt-formatted-string.ytd-video-primary-info-renderer { + color: var(--main-text) !important; +} + +/*views*/ +span.yt-view-count-renderer, +span.ytd-video-view-count-renderer { + color: var(--dimmer-text) !important; +} + +/*published date*/ +#date.ytd-video-primary-info-renderer { + color: var(--dimmer-text) !important; +} + +ytd-video-primary-info-renderer { + border-color: var(--hover-background) !important; +} + +.content-text.ytd-metadata-with-image-row-renderer { + color: var(--main-text) !important; +} + +/*Share*/ +paper-dialog, +tp-yt-paper-dialog { + background: var(--main-background) !important; +} + +#share-url { + color: var(--main-text) !important; +} + +#copy-button:hover #text { + color: var(--main-color) !important; +} + +#bar.yt-copy-link-renderer { + background-color: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +ytd-third-party-network-section-renderer ytd-copy-link-renderer.ytd-third-party-network-section-renderer, +yt-start-at-renderer.yt-third-party-network-section-renderer { + border-color: var(--hover-background) !important; +} + +yt-formatted-string.yt-start-at-renderer, +#text.ytd-sender-id-section-renderer { + color: var(--main-text) !important; +} + +/*share embed*/ +#embed-panel.yt-sharing-embed-renderer { + background: var(--second-background) !important; +} + +#close-panel-icon.yt-sharing-embed-renderer { + color: var(--main-text) !important; +} + +#close-panel-icon.yt-sharing-embed-renderer:hover { + color: var(--main-color) !important; +} + +#title-bar.yt-sharing-embed-renderer, +#additional-info.yt-sharing-embed-renderer, +#action-buttons.yt-sharing-embed-renderer { + border-color: var(--hover-background) !important; +} + +#privacy-mode-info.yt-sharing-embed-renderer { + color: var(--dimmer-text) !important; +} + +/*search for people*/ +#to-field-header.ytd-contact-search-renderer { + color: var(--dimmer-text) !important; +} + +#name.ytd-suggested-contact-renderer { + color: var(--main-text) !important; +} + +/*Make a clip*/ +#container.yt-clip-creation-renderer { + background-color: transparent !important; +} + +input.yt-clip-creation-scrubber-renderer + +/*time*/ + { + border-color: var(--dimmer-text) !important; +} + +#handles.yt-clip-creation-scrubber-view + +/*preview*/ + { + border-color: var(--main-color) !important; +} + +.handle.yt-clip-creation-scrubber-view + +/*preview*/ + { + background-color: var(--main-color) !important; +} + +/*buttons*/ +#footer.yt-clip-creation-renderer { + background-color: var(--second-background) !important; +} + +yt-clip-section-renderer yt-button-renderer.style-primary[is-paper-button], +yt-clip-creation-renderer yt-button-renderer.style-primary[is-paper-button], +yt-clip-section-footer-renderer yt-button-renderer.style-primary[is-paper-button] { + background-color: transparent !important; +} + +yt-button-renderer.style-primary[disabled][is-paper-button] yt-formatted-string.yt-button-renderer { + color: var(--dimmer-text) !important; +} + +yt-button-renderer.yt-clip-creation-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled, +ytd-button-renderer.ytd-clip-section-footer-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + background-color: var(--main-color) !important; + color: var(--main-text) !important; +} + +/*Join this channel panel > Join button, + Settings > Advanced settings > Copy button*/ +yt-button-renderer.ytd-sponsorships-tier-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled, +yt-button-renderer.yt-copy-link-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + background-color: var(--main-color) !important; +} + +/*Playlist creation*/ +#subtext.yt-live-chat-message-renderer, +#label.yt-live-chat-text-input-field-renderer, +.input-content.paper-input-container input, +.input-content.paper-input-container textarea, +.input-content.paper-input-container iron-autogrow-textarea, +.input-content.paper-input-container .paper-input-input { + color: var(--dimmer-text) !important; +} + +.add-on-content.is-highlighted.paper-input-container *, +paper-input-char-counter { + color: var(--dimmer-text) !important; +} + +/*Video cards*/ +/*ttile*/ +ytd-grid-video-renderer.use-ellipsis #details.ytd-grid-video-renderer a.ytd-grid-video-renderer, +ytd-compact-video-renderer.use-ellipsis #video-title.ytd-compact-video-renderer, +#video-title.ytd-video-renderer, +h3.ytd-playlist-renderer, +#video-title.ytd-child-video-renderer, +#length.ytd-child-video-renderer, +#video-title, +#unplayableText, +#length, +#details { + color: var(--main-text) !important; +} + +#items.yt-horizontal-list-renderer>.yt-horizontal-list-renderer:hover a.ytd-grid-video-renderer, +ytd-compact-video-renderer:hover #video-title.ytd-compact-video-renderer, +ytd-video-renderer:hover #video-title.ytd-video-renderer, +ytd-playlist-renderer:hover h3.ytd-playlist-renderer, +#content.ytd-playlist-video-renderer:hover #video-title, +a.yt-simple-endpoint.ytd-playlist-panel-video-renderer:hover #video-title, +a.yt-simple-endpoint.ytd-playlist-panel-video-renderer:hover #unplayableText, +.style-scope.ytd-grid-renderer.use-ellipsis:hover #video-title, +#video-title:hover, +ytd-grid-video-renderer:hover #video-title.yt-simple-endpoint.ytd-grid-video-renderer { + color: var(--main-color) !important; +} + +/*author*/ +yt-formatted-string[ellipsis-truncate] a.yt-formatted-string:last-child, +#byline.ytd-video-meta-block, +#channel-title.ytd-channel-renderer span.ytd-channel-renderer, +#text.ytd-channel-name { + color: var(--main-color) !important; +} + +/*metadata*/ +#metadata-line.ytd-grid-video-renderer, +#metadata-line.ytd-video-meta-block span.ytd-video-meta-block, +#metadata.ytd-channel-renderer, +#description.ytd-channel-renderer, +#thumbnail-attribution.ytd-grid-channel-renderer { + color: var(--dimmer-text) !important; +} + +/*2022 Nov like button*/ +/*not liked yet*/ +yt-animated-icon[animated-icon-type="LIKE"]>ytd-lottie-player>lottie-component>svg>g:nth-child(2)>g:nth-child(2)>g:nth-child(2)>path:nth-child(1), +yt-animated-icon[animated-icon-type="LIKE"]>ytd-lottie-player>lottie-component>svg>g:nth-child(2)>g:nth-child(2)>g:nth-child(4)>path:nth-child(1) { + stroke: var(--main-text) !important; +} + +/*liked*/ +yt-animated-icon[animated-icon-type="LIKE"]>ytd-lottie-player>lottie-component>svg>g:nth-child(2)>g:nth-child(2)>g:nth-child(1)>path:nth-child(1), +yt-animated-icon[animated-icon-type="LIKE"]>ytd-lottie-player>lottie-component>svg>g:nth-child(2)>g:nth-child(2)>g:nth-child(3)>path:nth-child(1) { + fill: var(--main-color) !important; +} + +yt-animated-icon[animated-icon-type="LIKE"]>ytd-lottie-player>lottie-component>svg>g:nth-child(2)>g:nth-child(2)>g:nth-child(1)>path:nth-child(2), +yt-animated-icon[animated-icon-type="LIKE"]>ytd-lottie-player>lottie-component>svg>g:nth-child(2)>g:nth-child(2)>g:nth-child(3)>path:nth-child(2) { + stroke: var(--main-color) !important +} + +/*on shorts - so here is filled by default, thus above I am using main-color instead to keep it consistent*/ +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--filled>div>yt-icon>svg>g>path { + fill: var(--main-color) !important; +} + +/*description and other metadata*/ +ytd-watch-metadata[modern-metapanel] #description.ytd-watch-metadata { + background: var(--second-background) !important; + /*--yt-spec-button-chip-background-hover*/ +} + +ytd-watch-metadata[clickable-description][description-collapsed] #description.ytd-watch-metadata:hover { + background: var(--hover-background) !important; + /*--yt-spec-badge-chip-background*/ +} + +ytd-watch-metadata[modern-metapanel] #description.ytd-watch-metadata .yt-simple-endpoint.style-scope.yt-formatted-string, +.yt-core-attributed-string__link--call-to-action-color { + color: var(--main-color) !important; +} + +/*show more / less*/ +#expand.ytd-text-inline-expander:hover, +#collapse.ytd-text-inline-expander:hover { + color: var(--main-color) !important; +} + +/*Recommandation page*/ +/*author*/ +#title.ytd-shelf-renderer { + color: var(--main-color) !important; +} + +#title-annotation.ytd-shelf-renderer { + color: var(--dimmer-text) !important; +} + +a.yt-simple-endpoint.yt-formatted-string:only-of-type:hover { + color: var(--main-color) !important; +} + +a.yt-simple-endpoint.yt-formatted-string:only-of-type { + color: var(--main-text) !important; +} + +/*Borders*/ +#contents.ytd-section-list-renderer>.ytd-section-list-renderer:not(:last-child):not(ytd-page-introduction-renderer) { + border-color: var(--hover-background) !important; +} + +/*Next and prev buttons*/ +.arrow.yt-horizontal-list-renderer, +#scroll-button-forward, +.arrow.ytd-horizontal-card-list-renderer, +.ytd-horizontal-card-list-renderer[arrow], +.scroll-button.yt-third-party-share-target-section-renderer + +/*share link*/ + { + background-color: var(--hover-background) !important; +} + +/*For the outline around the channel name*/ +.style-scope.ytd-comment-renderer.creator { + background-color: var(--main-color) !important; +} + +.style-scope.ytd-comment-renderer.creator:hover { + background-color: var(--hover-background) !important; +} + +#name.ytd-author-comment-badge-renderer { + color: var(--main-text) !important; +} + +#name:hover { + color: var(--main-color) !important; +} + +/*Accounts*/ +yt-formatted-string.ytd-account-item-section-header-renderer a { + color: var(--dimmer-text) !important; +} + +.style-scope.ytd-account-item-section-renderer:hover #channel-title.ytd-account-item-renderer { + color: var(--main-color) !important; +} + +app-drawer.ytd-app:not([persistent]) #header.ytd-app { + border-color: var(--main-color) !important; +} + +/*How is youtube today*/ +ytd-single-option-survey-renderer[dialog][dialog][dialog], +ytd-single-option-survey-renderer, +ytd-survey-follow-up-renderer[dialog][dialog][dialog], +ytd-survey-follow-up-renderer, +ytd-checkbox-survey-renderer[dialog][dialog][dialog] + +/*TODO: forgot to test if the [dialog] is even needed*/ + { + background-color: var(--hover-background) !important; + box-shadow: var(--shadow) !important; +} + +#header.ytd-single-option-survey-renderer, +#header.ytd-survey-follow-up-renderer, +#header.ytd-checkbox-survey-renderer { + color: var(--main-color) !important; +} + +ytd-single-option-survey-option-renderer, +#checkboxLabel.paper-checkbox { + color: var(--main-text) !important; +} + +ytd-single-option-survey-option-renderer:hover { + background-color: var(--hover-background) !important; +} + +/*rate a video to improve youtube*/ +#star-survey.ytd-inline-survey-renderer, +.survey-wrapper.ytd-inline-survey-renderer { + background-color: var(--second-background) !important; +} + +#inline-survey-compact-video-renderer.ytd-inline-survey-renderer { + background-color: var(--hover-background) !important; +} + +ytd-primetime-promo-renderer.ytd-rich-section-renderer, +ytd-inline-survey-renderer.ytd-rich-section-renderer { + border-color: var(--hover-background) !important; +} + +#follow-up-survey.ytd-inline-survey-renderer { + border-left: 4px solid var(--hover-background) !important; +} + +/*submit button*/ +#submit-btn-footer.ytd-inline-survey-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + background-color: var(--main-color) !important; +} + +/*not sure tell us why followup*/ +#title.ytd-inline-survey-renderer, +#follow-up-title.ytd-inline-survey-renderer, +#selected-response-text.ytd-rating-survey-renderer { + color: var(--main-color) !important; +} + +/*checkboxes cards*/ +tp-yt-paper-checkbox.ytd-checkbox-survey-option-renderer { + background-color: var(--hover-background) !important; +} + +/*background and close button*/ +ytd-inline-survey-renderer[expanded] #dismissable.ytd-inline-survey-renderer, +#dismiss-button.ytd-inline-survey-renderer { + background-color: var(--second-background) !important; +} + +paper-checkbox.ytd-checkbox-survey-option-renderer { + background-color: var(--hover-background) !important; +} + +/*thanks*/ +#dismissed.ytd-inline-survey-renderer ytd-message-renderer.ytd-inline-survey-renderer { + background-color: var(--hover-background) !important; +} + +/*info warning - covid19*/ +ytd-clarification-renderer { + background-color: var(--hover-background) !important; +} + +ytd-clarification-renderer[has-action-button] .content.ytd-clarification-renderer, +ytd-clarification-renderer[background-style="info"] { + border-color: var(--hover-background) !important; +} + +.content-title.ytd-clarification-renderer { + color: var(--main-text) !important; +} + +ytd-clarification-renderer[clarify-style="medium"] .description.ytd-clarification-renderer { + color: var(--dimmer-text) !important; +} + +.source.ytd-clarification-renderer { + color: var(--main-color) !important; +} + +ytd-clarification-renderer yt-button-renderer.style-suggestive[is-paper-button] paper-button.yt-button-renderer { + border-color: var(--main-color) !important; +} + +/*Change subtitles settings tooltip*/ +.ytp-promotooltip-container { + background-color: var(--hover-background) !important; + box-shadow: var(--shadow) !important; + color: var(--main-text) !important; +} + +.ytp-promotooltip-pointer { + border-color: var(--hover-background) !important; +} + +/*You are not logged in tooltip*/ +#tooltip.tp-yt-paper-tooltip, +yt-tooltip-renderer { + background-color: var(--hover-background) !important; + box-shadow: var(--shadow) !important; + color: var(--main-text) !important; +} + +yt-tooltip-renderer::before { + border-color: transparent transparent var(--hover-background) transparent !important; +} + +/*Join button tooltip*/ +yt-bubble-hint-renderer[style_="BUBBLE_HINT_STYLE_BLUE_TOOLTIP"] { + background-color: var(--second-background) !important; + box-shadow: var(--shadow) !important; +} + +yt-bubble-hint-renderer[style_="BUBBLE_HINT_STYLE_BLUE_TOOLTIP"] #text.yt-bubble-hint-renderer:not(:empty), +yt-bubble-hint-renderer[style_="BUBBLE_HINT_STYLE_BLUE_TOOLTIP"] #details-text.yt-bubble-hint-renderer { + background-color: var(--second-background) !important; +} + +yt-bubble-hint-renderer[position-type="OPEN_POPUP_POSITION_LEFT"][style_="BUBBLE_HINT_STYLE_BLUE_TOOLTIP"]::before { + border-color: transparent transparent transparent var(--second-background) !important; +} + +/*window*/ +ytd-sponsorships-offer-renderer[dialog][dialog][dialog] { + background-color: var(--main-background) !important; +} + +#background-image-layer.ytd-sponsorships-offer-renderer { + background-image: unset !important; + background-color: var(--hover-background) !important; +} + +/*title*/ +#top-bar.ytd-sponsorships-offer-renderer { + color: var(--main-text) !important; +} + +/*price*/ +#above-purchase-button-text.ytd-sponsorships-tier-renderer { + color: var(--main-color) !important; +} + +/*fine print*/ +.disclaimer.ytd-sponsorships-tier-renderer { + color: var(--main-text) !important; +} + +/*Super Thanks donations*/ +ytd-pdg-buy-flow-renderer { + background-color: var(--main-background) !important; +} + +/*remove white image in the header*/ +yt-pdg-buy-flow-header-renderer { + background: transparent !important; +} + +#container.ytd-pdg-comment-preview-renderer { + border-color: var(--hover-background) !important; +} + +#container.ytd-pdg-comment-preview-renderer:focus-within { + border-color: var(--main-color) !important; +} + +/*bonus*/ +#title-background.ytd-pdg-comment-preview-renderer { + background-color: var(--hover-background) !important; +} + +/*Progress bar*/ +#progress { + background-color: var(--main-color) !important; + border-color: var(--main-color) !important; +} + +yt-page-navigation-progress { + background-color: transparent !important; +} + +/*Button tooltips*/ +#tooltip.paper-tooltip { + background-color: var(--hover-background) !important; + color: var(--main-color) !important; +} + +/*Active grid icon*/ +button.ytd-button-renderer[is="paper-icon-button-light"][disabled] { + color: rgb(255, 255, 255) !important; +} + +/*2022 Nov changes*/ +/*subscribe button*/ +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--filled, +/*Show more on home page*/ +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--outline, +/* as of oct 2023 */ +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--tonal, +/*NOTE: this affects other material buttons - I would say desired effect*/ +.yt-spec-button-shape-next--overlay.yt-spec-button-shape-next--filled, +.yt-spec-button-shape-next--overlay.yt-spec-button-shape-next--filled:hover, +/*on shorts*/ +.yt-spec-button-shape-next--overlay.yt-spec-button-shape-next--tonal, +.yt-spec-button-shape-next--overlay.yt-spec-button-shape-next--tonal:hover, +/*on shorts*/ +.ytp-sb-subscribe, +a.ytp-sb-subscribe + +/*in cards... why yt why*/ + { + background-color: var(--second-background) !important; + border-color: var(--second-background) !important; + box-shadow: var(--shadow) !important; + color: var(--main-text) !important; +} + +/*2024 March*/ +ytd-live-chat-frame #show-hide-button.ytd-live-chat-frame>ytd-button-renderer.ytd-live-chat-frame { + background-color: transparent !important; +} + +/*fix black "personalized" icon*/ +.yt-spec-button-shape-next--icon-leading-trailing svg>g:nth-child(2)>g>g:nth-child(2)>path:nth-child(2) { + fill: var(--main-text) !important; +} + +/* to fix white corners for .yt-spec-button-shape-next--mono.yt-spec-button-shape-next--filled */ +.button-container.ytd-rich-shelf-renderer { + background-color: transparent; +} + +/*unsubscribe confirm dialog*/ +.yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--text { + color: var(--main-color) !important; +} + +.yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--text:hover, +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--tonal:hover { + background-color: var(--yt-spec-10-percent-layer) !important; +} + +/*join button*/ +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--tonal[aria-label="Join this channel"], +.yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled + +/*in window*/ + { + background-color: var(--second-background) !important; + border-color: var(--second-background) !important; +} + +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--outline:hover { + background-color: var(--yt-spec-10-percent-layer) !important; +} + +/*comment button*/ +ytd-button-renderer#submit-button.ytd-commentbox .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + background-color: var(--main-color) !important; + color: var(--main-text) !important; +} + +/* button labels */ +.yt-spec-button-shape-with-label__label { + color: var(--main-text) !important; +} + +/*download panel > get trial button*/ +/*share panel > copy button*/ +ytd-offline-promo-renderer.ytd-popup-container yt-button-renderer#action-button .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled, +yt-third-party-network-section-renderer.ytd-unified-share-panel-renderer yt-button-renderer#copy-button .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + background-color: var(--main-color) !important; + color: var(--main-text) !important; +} + +/*Thanks panel > "Buy and Send" button*/ +/*Thanks panel > About Super Thanks panel > "Got it" button*/ +ytd-button-renderer#buy-button.yt-super-vod-buy-flow-content-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled, +yt-button-renderer#confirm-button.yt-confirm-dialog-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + background-color: var(--main-color) !important; + color: var(--main-text) !important; +} + +/*Toast notification*/ +yt-notification-action-renderer yt-button-renderer.yt-notification-action-renderer .yt-spec-button-shape-next--call-to-action-inverse.yt-spec-button-shape-next--text { + color: var(--main-color) !important; +} + +/*Toast notification hover*/ +yt-notification-action-renderer yt-button-renderer.yt-notification-action-renderer .yt-spec-button-shape-next--call-to-action-inverse.yt-spec-button-shape-next--text:hover { + background-color: var(--main-background) !important; +} + +if join-color + +/*overwriting the above*/ + { + + .yt-spec-button-shape-next--mono.yt-spec-button-shape-next--tonal[aria-label="Join this channel"], + yt-button-shape:nth-child(1)>.yt-spec-button-shape-next--size-m.yt-spec-button-shape-next--outline { + background-color: var(--main-color) !important; + border-color: var(--main-color) !important; + } +} + +if subscribe-color + +/*overwriting the above*/ + { + .yt-spec-button-shape-next--mono.yt-spec-button-shape-next--filled, + .yt-spec-button-shape-next--overlay.yt-spec-button-shape-next--filled, + .yt-spec-button-shape-next--overlay.yt-spec-button-shape-next--filled:hover, + /*on shorts*/ + .ytp-sb-subscribe, + a.ytp-sb-subscribe + + /*in cards*/ + { + background-color: var(--main-color) !important; + border-color: var(--main-color) !important; + } +} + +ytd-button-renderer.style-primary[is-paper-button] { + background-color: transparent !important; +} + +/*Sponsor button*/ +ytd-modal-with-title-and-button-renderer { + background: var(--second-background) !important; +} + +#content.ytd-modal-with-title-and-button-renderer { + color: var(--dimmer-text) !important; +} + +.buttons.ytd-modal-with-title-and-button-renderer { + border-color: var(--hover-background) !important; +} + +/*sponsor popup*/ +#sponsor-button.ytd-membership-offer-renderer ytd-button-renderer.ytd-membership-offer-renderer { + background-color: var(--main-color) !important; +} + +#sponsor-button.ytd-membership-offer-renderer ytd-button-renderer.ytd-membership-offer-renderer:hover { + filter: brightness(110%) !important; +} + +#header.ytd-membership-offer-renderer { + background: var(--main-background) !important; +} + +ytd-perks-section-renderer, +ytd-membership-offer-renderer[dialog][dialog][dialog], +paper-dialog-scrollable.can-scroll:not(.scrolled-to-bottom):not(:last-child)::after, +paper-dialog-scrollable.is-scrolled:not(:first-child)::before { + background: var(--second-background) !important; +} + +.extra-content.ytd-offer-perk-extra { + border-color: var(--hover-background) !important; + background: var(--hover-background) !important; + color: var(--dimmer-text) !important; +} + +.footer.ytd-membership-offer-renderer { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +ytd-membership-offer-renderer * { + border-color: var(--hover-background) !important; +} + +.price.ytd-membership-offer-renderer { + color: var(--main-color) !important; +} + +.style-title.ytd-offer-text-item, +.style-subtitle.ytd-offer-text-item, +.payment-clause.ytd-membership-offer-renderer { + color: var(--main-text) !important; +} + +.perk-item-title.ytd-perk-item-renderer, +.perk-item-public-description.ytd-perk-item-renderer { + color: var(--dimmer-text) !important; +} + +/*Edit button in channel page*/ +#edit-buttons.ytd-c4-tabbed-header-renderer ytd-button-renderer.ytd-c4-tabbed-header-renderer { + background-color: transparent !important; +} + +/*Toggle button to play next*/ +paper-toggle-button[checked]:not([disabled]) .toggle-bar.paper-toggle-button { + background-color: var(--main-color) !important; + opacity: 0.9 !important; +} + +paper-toggle-button[checked]:not([disabled]) .toggle-button.paper-toggle-button { + --paper-toggle-button-checked-button-color: rgb(255, 255, 255) !important; +} + +/*Hover for toggle button*/ +.toggle-button.paper-toggle-button:hover, +paper-toggle-button[checked]:not([disabled]) .toggle-button.paper-toggle-button:hover { + background-color: var(--main-color) !important; +} + +yt-bubble-hint-renderer { + background: var(--hover-background) !important; +} + +yt-bubble-hint-renderer::after { + border-top-color: var(--second-background) !important; +} + +#text.yt-bubble-hint-renderer { + background: var(--hover-background) !important; + color: var(--main-text) !important; +} + +#details-text.yt-bubble-hint-renderer { + background: var(--hover-background) !important; + color: var(--dimmer-text) !important; +} + +.buttons.yt-bubble-hint-renderer { + border-color: var(--hover-background) !important; +} + +/*Filter active*/ +paper-button.ytd-toggle-button-renderer { + color: rgba(255, 255, 255, 0.5) !important; +} + +/*Badges*/ +.badge-style-type-simple.ytd-badge-supported-renderer, +.badge-style-type-disabled.ytd-badge-supported-renderer, +yt-icon.ytd-badge-supported-renderer { + background: transparent !important; + color: var(--main-color) !important; + padding-left: 0px !important; + opacity: .7 !important; +} + +.badge-style-type-simple-strikethrough.ytd-badge-supported-renderer { + color: var(--dimmer-text) !important; +} + +/*Trending badge*/ +.badge-style-type-featured.ytd-badge-supported-renderer { + background: var(--main-color) !important; +} + +/*Author verified badge in comments*/ +ytd-author-comment-badge-renderer:not(.creator) #icon.ytd-author-comment-badge-renderer { + fill: var(--main-color) !important; +} + +/*Live now badge*/ +.badge-style-type-live-now.ytd-badge-supported-renderer, +.badge-style-type-live-now-alternate.ytd-badge-supported-renderer { + color: var(--main-color) !important; + background: transparent !important; + border-color: var(--main-color) !important; +} + +/*Premium*/ +.badge-style-type-red.ytd-badge-supported-renderer { + color: #DA4453 !important; + background: transparent !important; + border-color: var(--main-color) !important; +} + +/*Series name*/ +.badge-style-type-collection.ytd-badge-supported-renderer { + color: var(--main-color) !important; +} + +.yt-simple-endpoint.style-scope.yt-formatted-string { + color: var(--dimmer-text) !important; +} + +/*video hashtags & links in settings page*/ +#super-title .yt-simple-endpoint.style-scope.yt-formatted-string, +ytd-section-list-renderer[page-subtype="WEB_PAGE_TYPE_SETTINGS"] .yt-simple-endpoint.style-scope.yt-formatted-string { + color: var(--main-color) !important; +} + +/*panel links*/ +tp-yt-paper-dialog.ytd-popup-container .yt-simple-endpoint.style-scope.yt-formatted-string { + color: var(--main-color) !important; +} + +/*Dropdown*/ +.dropdown-content.style-scope.ytd-popup-container>*, +tp-yt-paper-listbox, +ytd-menu-popup-renderer { + background: var(--second-background) !important; + color: var(--main-text) !important; +} + +ytd-menu-service-item-renderer:hover, +a.ytd-menu-navigation-item-renderer:hover, +tp-yt-paper-listbox.yt-dropdown-menu .iron-selected.yt-dropdown-menu, +tp-yt-paper-listbox.yt-dropdown-menu tp-yt-paper-item.yt-dropdown-menu:hover, +ytd-menu-service-item-renderer[is-selected] { + background: var(--hover-background) !important; +} + +yt-formatted-string.ytd-menu-service-item-renderer, +yt-formatted-string.ytd-menu-navigation-item-renderer { + color: var(--main-text) !important; +} + +ytd-menu-service-item-renderer:hover yt-formatted-string.ytd-menu-service-item-renderer, +a.ytd-menu-navigation-item-renderer:hover yt-formatted-string.ytd-menu-navigation-item-renderer, +tp-yt-paper-listbox a.yt-simple-endpoint.yt-dropdown-menu:hover .item.yt-dropdown-menu { + color: var(--main-color) !important; +} + +#owner-name.ytd-video-owner-renderer a { + color: var(--main-color) !important; + opacity: .9; +} + +/*share*/ +#header.ytd-add-to-playlist-renderer { + color: var(--main-text) !important; +} + +#label.ytd-playlist-add-to-option-renderer, +paper-item.ytd-compact-link-renderer { + color: var(--dimmer-text) !important; +} + +#header.ytd-add-to-playlist-renderer, +#playlists.ytd-add-to-playlist-renderer { + border-color: var(--hover-background) !important; +} + +paper-item.ytd-compact-link-renderer:hover #label.ytd-compact-link-renderer, +paper-item.ytd-compact-link-renderer:hover yt-icon.ytd-compact-link-renderer { + color: var(--main-color) !important; + fill: var(--main-color) !important; +} + +ytd-playlist-add-to-option-renderer paper-checkbox:hover #label.ytd-playlist-add-to-option-renderer, +ytd-playlist-add-to-option-renderer paper-checkbox[checked] #label.ytd-playlist-add-to-option-renderer, +yt-icon.ytd-playlist-add-to-option-renderer { + color: var(--main-color) !important; +} + +/*Avatars and thumbnails opacity */ +img.yt-img-shadow { + opacity: 0.9 !important; +} + +img.yt-img-shadow:hover { + opacity: 1 !important; +} + +/*Very specific hover for thumbnails*/ +#dismissable.ytd-compact-video-renderer:hover img.yt-img-shadow, +#items.yt-horizontal-list-renderer>.yt-horizontal-list-renderer:hover img.yt-img-shadow, +#items.ytd-grid-renderer>ytd-grid-video-renderer.ytd-grid-renderer:hover img.yt-img-shadow, +ytd-video-renderer.ytd-item-section-renderer:hover img.yt-img-shadow, +.style-scope.ytd-channel-featured-content-renderer:hover img.yt-img-shadow, +#grid-container.ytd-expanded-shelf-contents-renderer>.ytd-expanded-shelf-contents-renderer:hover img.yt-img-shadow, +ytd-playlist-video-renderer:hover img.yt-img-shadow, +iron-list:not([grid]) #items.iron-list>*:hover img.yt-img-shadow { + opacity: 1 !important; +} + +/*Video section*/ +/*2022 Nov*/ +/*this seems to be only in dark mode? */ +#cinematics.ytd-watch-flexy { + display: none !important; +} + +/*Video title hover in html5 video*/ +.html5-video-player a:hover { + color: var(--main-text) !important; + text-shadow: none !important; +} + +/* Code takken from https://userstyles.org/styles/95280 */ +/* scrubber button */ +.html5-scrubber-button:hover, +.ytp-chrome-controls .ytp-button[aria-pressed]::after, +.ytp-scrubber-button:hover, +.html5-video-player:not(.ytp-color-party) .ytp-swatch-background-color, +.ytp-swatch-background-color-secondary, +.PlayerControlsProgressBarHostProgressBarPlayheadDot + +/*shorts*/ + { + background: var(--main-color) !important; +} + +/* progress bar */ +.html5-video-player:not(.ytp-color-party) .html5-play-progress, +.html5-video-player:not(.ytp-color-party) .ytp-play-progress, +.progress-bar-played.ytd-progress-bar-line, +.PlayerControlsProgressBarHostProgressBarPlayed + +/* on shorts*/ + { + background: var(--main-color) !important; +} + +.ytp-volume-slider-track, +.ytp-volume-slider-handle:before { + background: var(--main-color) !important; + z-index: -117; +} + +.ytp-settings-button.ytp-hd-quality-badge::after, +.ytp-settings-button.ytp-4k-quality-badge::after, +.ytp-settings-button.ytp-5k-quality-badge::after, +.ytp-settings-button.ytp-8k-quality-badge::after, +.ytp-settings-button.ytp-3d-badge::after { + background-color: var(--main-color) !important; +} + +.ytp-swatch-color { + color: var(--main-color) !important; +} + +.ytp-menuitem[aria-checked="true"] .ytp-menuitem-toggle-checkbox { + background-color: var(--main-color) !important; +} + +.ytp-chrome-controls .ytp-button.ytp-youtube-button:hover:not([aria-disabled="true"]):not([disabled]) .ytp-svg-fill-logo-tube-lozenge { + fill: var(--main-color) !important; +} + +.ytp-cued-thumbnail-overlay:hover .ytp-large-play-button-bg, +.ytp-large-play-button.ytp-touch-device .ytp-large-play-button-bg { + fill: var(--main-color) !important; +} + +.ytp-large-play-button.ytp-button.ytp-red2:hover, +.ytp-cued-thumbnail-overlay:hover .ytp-large-play-button.ytp-button.ytp-red2 { + /*background-image: url(https://github.com/RaitaroH/YouTube-DeepDark/raw/master/YT_Images/large_play_button_hover_ringo-vfl7vEehF.png) !important;*/ + background-image: url(https://s.ytimg.com/yts/img/large_play_button_ringo-vfljWXIdx.png) !important; + filter: invert(100%) brightness(300%); +} + +.resume-playback-progress-bar { + background: var(--main-color) !important; +} + +/*Added because of this: https://forum.userstyles.org/discussion/53368/solved-fix-this-annoying-youtube-tab-select-bug-thats-been-there-forever#latest*/ +.ytp-keyboard-focus .ytp-progress-bar:focus { + box-shadow: none !important; +} + +/*Video menu - might have issues with lighter colors*/ +.ytp-popup { + background: var(--second-background) !important; + opacity: .9 !important; +} + +.ytp-menuitem:hover:not([aria-disabled="true"]) { + background-color: var(--hover-background) !important; +} + +/*Text*/ +.iv-branding .iv-branding-context-name, +.ytp-menuitem-label, +.ytp-menuitem-label-count, +.ytp-menuitem-content, +.ytp-menu-label-secondary, +.ytp-panel-header { + color: var(--main-text) !important; + text-shadow: none !important; +} + +/*Keyboard focus*/ +.ytp-probably-keyboard-focus .ytp-menuitem:focus .ytp-menuitem-content, +.ytp-probably-keyboard-focus .ytp-menuitem:focus .ytp-menuitem-label { + box-shadow: inset -2px -2px 0 var(--main-color), inset 0 2px 0 var(--main-color) !important; +} + +.ytp-probably-keyboard-focus .ytp-button:focus { + box-shadow: inset 0 0 0 2px var(--main-color) !important; +} + +.ytp-probably-keyboard-focus .ytp-progress-bar:focus { + box-shadow: 0 0 0 2px var(--main-color) !important; +} + +/*Miniplayer*/ +#info-bar.ytd-miniplayer .metadata.ytd-miniplayer, +#info-bar.ytd-miniplayer { + background-color: var(--main-background) !important; +} + +#info-bar.ytd-miniplayer .channel.ytd-miniplayer { + color: var(--main-color) !important; +} + +.ytd-miniplayer .ytp-button:not([aria-disabled="true"]):not([disabled]):not([aria-hidden="true"]):hover svg path { + fill: var(--main-color) !important; +} + +/*added to queue*/ +ytd-miniplayer-toast[opened] { + background-color: var(--second-background) !important; +} + +#label.ytd-miniplayer-toast { + color: var(--main-color) !important; +} + +/*queue / playlist panel closed*/ +ytd-playlist-panel-renderer[collapsible][collapsed][use-color-palette] .title.ytd-playlist-panel-renderer, +ytd-playlist-panel-renderer[collapsible][collapsed][use-color-palette] #next-video-title.ytd-playlist-panel-renderer { + color: var(--main-text) !important; +} + +ytd-playlist-panel-renderer[collapsible][collapsed][use-color-palette] .byline-title.ytd-playlist-panel-renderer, +ytd-playlist-panel-renderer[collapsible][collapsed][use-color-palette] .publisher.ytd-playlist-panel-renderer, +ytd-playlist-panel-renderer[collapsible][collapsed][use-color-palette] .publisher.ytd-playlist-panel-renderer:not([is-empty]).ytd-playlist-panel-renderer+.index-message-wrapper.ytd-playlist-panel-renderer::before, +ytd-playlist-panel-renderer[collapsible][collapsed][use-color-palette] .index-message-wrapper.ytd-playlist-panel-renderer { + color: var(--main-color) !important; +} + +/*Watch later svg*/ +.style-scope.ytd-thumbnail-overlay-toggle-button-renderer:hover { + fill: var(--main-color) !important; +} + +ytd-thumbnail-overlay-toggle-button-renderer:focus yt-icon.ytd-thumbnail-overlay-toggle-button-renderer { + outline-color: var(--main-color) !important; +} + +/*This channel is watched by others*/ +ytd-thumbnail-overlay-endorsement-renderer { + background-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +/*Popup for when you hover over the channel avatar in the video*/ +.iv-branding .branding-context-container-inner { + background-color: var(--main-background) !important; +} + +/*Changing icon for unavailable video*/ +#img.ytd-player-error-message-renderer { + display: block !important; + -moz-box-sizing: border-box !important; + box-sizing: border-box !important; + background: url(https://github.com/RaitaroH/YouTube-DeepDark/raw/master/YT_Images/404.png) no-repeat !important; + width: 140px !important; + height: 100px !important; + padding-left: 140px !important; + position: relative !important; +} + +/*Changing icon for unavailable page (404)*/ +#error-page-hh-illustration { + display: block !important; + -moz-box-sizing: border-box !important; + box-sizing: border-box !important; + background: url(https://github.com/RaitaroH/YouTube-DeepDark/raw/master/YT_Images/404.png) no-repeat !important; + width: 140px !important; + height: 100px !important; + padding-left: 140px !important; + right: -175px !important; + position: relative !important; +} + +/*Some spacing for the logo*/ +#yt-masthead #logo-container { + margin-right: 20px !important; +} + +/*consent page (cookie page)*/ +/*cookies consent dialog*/ +ytd-consent-bump-v2-lightbox ytd-button-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + color: var(--main-color) !important; +} + +ytd-consent-bump-v2-lightbox[darker-dark-theme] .loading-overlay.ytd-consent-bump-v2-lightbox { + background: var(--hover-background) !important; +} + +/*Border color for terms and conditions*/ +ytd-consent-bump-renderer { + border-bottom: 1px solid var(--main-color) !important; +} + +/*New logo*/ +#logo-icon-container.ytd-topbar-logo-renderer svg g path[fill*="#FF0000"], +ytd-topbar-logo-renderer.style-scope>a>div>ytd-logo>yt-icon>yt-icon-shape>icon-shape>div>svg>svg:nth-child(1)>g:nth-child(1)>path:nth-child(1), +/*cookie version*/ +svg.ytd-consent-bump-v2-lightbox>g:nth-child(1)>g:nth-child(1)>path:nth-child(1) { + fill: var(--main-color) !important; +} + +ytd-topbar-logo-renderer.style-scope>a>div>ytd-logo>yt-icon>yt-icon-shape>icon-shape>div>svg>svg:nth-child(1)>g:nth-child(2) + +/*cookie version*/ +g.ytd-consent-bump-v2-lightbox:nth-child(2)>g:nth-child(1)>* { + fill: var(--main-text) !important; +} + +ytd-topbar-logo-renderer.style-scope a svg>g>g:nth-child(2)>g, +#country-code.ytd-topbar-logo-renderer { + color: var(--main-text) !important; +} + +/*Logo hover*/ +#logo-icon:hover { + --yt-swatch-logo-override: var(--main-color) !important; +} + +/*Rewind logo*/ +#animated-yoodle { + filter: invert(90%) grayscale(1); +} + +/*Shorts logo*/ +/*on home page*/ +ytd-rich-section-renderer.style-scope>div>ytd-rich-shelf-renderer yt-icon-shape>icon-shape>div>svg>g>path:nth-child(1), +/*on video page*/ +yt-icon.ytd-reel-shelf-renderer>yt-icon-shape>icon-shape>div>svg>g>path:nth-child(1) { + fill: var(--main-color) !important; +} + +/*Playlist page*/ +/*sidebar*/ +ytd-playlist-sidebar-renderer { + background-color: var(--hover-background) !important; +} + +#stats.ytd-playlist-sidebar-primary-info-renderer, +#description.ytd-playlist-sidebar-primary-info-renderer .bold.yt-formatted-string, +#owner-sub-count.ytd-video-owner-renderer { + color: var(--dimmer-text) !important; +} + +#items.ytd-playlist-sidebar-renderer>.ytd-playlist-sidebar-renderer:not(:last-child) { + border-color: var(--hover-background) !important; +} + +#primary.ytd-two-column-browse-results-renderer { + background-color: var(--main-background) !important; +} + +ytd-button-renderer[is-paper-button] yt-icon.ytd-button-renderer { + color: var(--dimmer-text) !important; +} + +#content.ytd-playlist-video-renderer { + border-color: var(--hover-background) !important; +} + +/*buttons*/ +ytd-playlist-sidebar-renderer ytd-toggle-button-renderer.style-suggestive[is-paper-button], +ytd-playlist-sidebar-renderer paper-button.ytd-toggle-button-renderer { + background-color: var(--hover-background) !important; + border-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +a.yt-simple-endpoint.ytd-button-renderer:hover *, +ytd-playlist-sidebar-renderer ytd-button-renderer #button.ytd-button-renderer:hover, +ytd-playlist-sidebar-renderer ytd-button-renderer #button.ytd-button-renderer:hover>yt-formatted-string.ytd-button-renderer { + color: var(--main-color) !important; +} + +/*playlist page*/ +ytd-browse[page-subtype="playlist"] ytd-two-column-browse-results-renderer.ytd-browse { + background-color: var(--main-background) !important; +} + +.index-message.ytd-playlist-panel-renderer, +.light-text.ytd-playlist-segment-renderer, +#contributor.ytd-playlist-video-renderer { + color: var(--dimmer-text) !important; +} + +#title-container.ytd-playlist-segment-renderer { + border-color: var(--hover-background) !important; +} + +#title-container.ytd-playlist-segment-renderer:hover #title.ytd-playlist-segment-renderer { + color: var(--main-color) !important; +} + +/*Playlist changes*/ +ytd-playlist-panel-video-renderer:hover { + background-color: var(--hover-background) !important; +} + +ytd-playlist-panel-video-renderer[selected] #index.ytd-playlist-panel-video-renderer, +#byline.ytd-playlist-panel-video-renderer, +.ytp-video-menu-item[aria-checked="true"] .ytp-video-menu-item-now-playing, +.ytp-video-menu-item-author { + color: var(--main-color) !important; +} + +ytd-playlist-video-renderer:hover, +ytd-playlist-video-renderer:hover:not(.dragging) { + background-color: var(--second-background) !important; +} + +ytd-playlist-panel-video-renderer[selected][use-color-palette], +ytd-playlist-panel-video-renderer[selected][use-color-palette]:hover:not(.dragging) { + background-color: var(--hover-background) !important; +} + +.header.ytd-playlist-panel-renderer, +.playlist-items.ytd-playlist-panel-renderer, +#header.ytd-engagement-panel-title-header-renderer, +#content.ytd-engagement-panel-section-list-renderer, +ytd-transcript-footer-renderer, +ytd-transcript-segment-list-renderer { + background-color: var(--second-background) !important; +} + +.cue.ytd-transcript-body-renderer, +.cue-group-start-offset.ytd-transcript-body-renderer { + color: var(--dimmer-text) !important; +} + +.cue-group.active.ytd-transcript-body-renderer { + border-left-color: var(--main-color) !important; + background-color: var(--hover-background) !important; +} + +.cue-group.active.ytd-transcript-body-renderer .cue-group-start-offset.ytd-transcript-body-renderer, +.cue.ytd-transcript-body-renderer.active { + color: var(--main-text) !important; +} + +.cue-group.ytd-transcript-body-renderer:hover .cue-group-start-offset.ytd-transcript-body-renderer, +.cue-group.ytd-transcript-body-renderer:hover .cue.ytd-transcript-body-renderer { + color: var(--main-color) !important; +} + +.cue.ytd-transcript-body-renderer:hover, +ytd-transcript-body-renderer:not([refresh]) .cue.active.ytd-transcript-body-renderer { + background-color: transparent !important; + color: var(--main-color) !important +} + +.segment-timestamp.ytd-transcript-segment-renderer { + background-color: var(--hover-background) !important; + color: var(--main-color) !important +} + +/*search transcript*/ +ytd-transcript-search-panel-renderer, +ytd-transcript-search-box-renderer { + background-color: var(--second-background) !important; +} + +.input-container.ytd-transcript-search-box-renderer { + background-color: var(--hover-background) !important; +} + +/*magnifing glass icon*/ +.icon.ytd-transcript-search-box-renderer { + --iron-icon-fill-color: var(--dimmer-text) !important; + --iron-icon-stroke-color: var(--dimmer-text) !important; +} + +#transcript-search-box-input.ytd-transcript-search-box-renderer { + color: var(--main-text) !important; + caret-color: var(--main-color) !important; +} + +.ytp-video-menu-item[aria-checked="true"] .ytp-video-menu-item-thumbnail { + border-color: var(--main-color) !important; +} + +#index.ytd-playlist-video-renderer, +#index.ytd-playlist-panel-video-renderer, +.badge-style-type-medium-grey.ytd-badge-supported-renderer + +/*unlisted*/ + { + color: var(--dimmer-text) !important; +} + +#container.ytd-playlist-panel-renderer { + border-color: var(--second-background) !important; +} + +/*Playlist creation*/ +#create-playlist-form .input-content.paper-input-container label { + color: var(--main-text) !important; +} + +#create-playlist-form input.style-scope.paper-input::placeholder { + color: var(--dimmer-text) !important; +} + +#create-playlist-form .underline.is-highlighted.paper-input-container .focused-line.paper-input-container { + border-bottom-color: var(--main-text) !important; +} + +#create-playlist-form #label.ytd-privacy-dropdown-item-renderer { + color: var(--main-text) !important; +} + +#create-playlist-form ytd-privacy-dropdown-item-renderer.iron-selected { + background-color: var(--hover-background) !important; +} + +/*Chapters*/ +/*title*/ +h4.ytd-macro-markers-list-item-renderer { + color: var(--main-text) !important; +} + +/*timestamp*/ +#time.ytd-macro-markers-list-item-renderer { + color: var(--main-color) !important; + background-color: transparent !important; + padding: 0px !important; +} + +/*show current chapter*/ +#sync-button.ytd-macro-markers-list-renderer { + background-color: var(--main-background) !important; + color: var(--main-text) !important; +} + +#sync-button.ytd-macro-markers-list-renderer:hover { + color: var(--main-color) !important; +} + +/*active indicators*/ +ytd-macro-markers-list-item-renderer[active] #thumbnail.ytd-macro-markers-list-item-renderer { + outline-color: var(--main-color) !important; +} + +#active-indicator.ytd-macro-markers-list-item-renderer { + background-color: var(--main-color) !important; +} + +/*hover for item*/ +ytd-macro-markers-list-item-renderer:hover, +ytd-macro-markers-list-item-renderer[active] { + background-color: var(--hover-background) !important; +} + +ytd-macro-markers-list-item-renderer:hover { + box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.4); +} + +ytd-macro-markers-list-item-renderer:hover h4.ytd-macro-markers-list-item-renderer { + color: var(--main-color) !important; +} + +/*chapter images in description*/ +ytd-macro-markers-list-item-renderer[active][layout="MACRO_MARKERS_LIST_ITEM_RENDERER_LAYOUT_VERTICAL"] { + border-color: var(--main-color) !important; +} + +ytd-horizontal-card-list-renderer.ytd-structured-description-content-renderer:not(:first-child), +ytd-metadata-row-container-renderer.ytd-structured-description-content-renderer:not(:first-child), +ytd-structured-description-content-renderer[inline-structured-description] ytd-horizontal-card-list-renderer.ytd-structured-description-content-renderer { + border-color: var(--hover-background) !important; +} + +/*chapter times in search description*/ +.metadata-snippet-container-one-line.ytd-video-renderer #time.ytd-video-renderer { + color: var(--main-color) !important; + background: var(--second-background) !important; +} + +/*chapter metadata in search results*/ +ytd-expandable-metadata-renderer { + /*this is used on hover, might as well*/ + background-color: var(--yt-spec-badge-chip-background) !important; +} + +/*expanded chapters in search results*/ +ytd-macro-markers-list-item-renderer[layout="MACRO_MARKERS_LIST_ITEM_RENDERER_LAYOUT_VERTICAL"] { + border-color: var(--second-background) !important; +} + +/*chapter buttons button, 🔁 and close*/ +ytd-engagement-panel-section-list-renderer .yt-spec-button-shape-next--mono.yt-spec-button-shape-next--text yt-icon { + fill: var(--dimmer-text) !important; + stroke: var(--dimmer-text) !important; +} + +/*Search bar*/ +ytd-searchbox[mode="legacy"] #container.ytd-searchbox, +ytd-searchbox[mode="material-centered"] #container.ytd-searchbox, +ytd-searchbox[mode="legacy"] #container.ytd-searchbox, +ytd-searchbox[mode="legacy-centered"] #container.ytd-searchbox, +#container.ytd-searchbox, +#masthead-search-terms + +/*account settings page*/ + { + background: var(--main-background) !important; + border-color: var(--main-background) !important; + box-shadow: none !important; +} + +ytd-searchbox[mode="legacy"] #container.ytd-searchbox:hover, +ytd-searchbox[mode=legacy][has-focus] #container.ytd-searchbox, +ytd-searchbox[mode="material-left"] #container.ytd-searchbox, +ytd-searchbox.style-scope[has-focus=""] #container.ytd-searchbox, +ytd-searchbox[mode="material-centered"]:hover #container.ytd-searchbox, +#masthead-search-terms.masthead-search-terms-border + +/*error page*/ + { + border: 1px solid var(--main-color) !important; + box-shadow: none !important; +} + +ytd-searchbox[mode="legacy"] #container.ytd-searchbox input.ytd-searchbox, +#container.ytd-searchbox>input, +ytd-searchbox input, +#masthead-search-terms.masthead-search-terms-border input + +/*error page*/ + { + color: var(--main-text) !important; +} + +/*Right search icon 🔎 */ +#search-icon-legacy.ytd-searchbox, +#masthead-search .search-btn-component, +#masthead-search .search-btn-component .start + +/*account*/ + { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +#search-icon-legacy.ytd-searchbox:hover yt-icon.ytd-searchbox { + color: var(--main-color) !important; +} + +#masthead-search .search-btn-component .yt-uix-button-content + +/*account*/ + { + filter: invert(1); +} + +/*left 🔎 icon - shown on focus*/ +#search-icon.ytd-searchbox { + color: var(--main-text) !important; +} + +#search-icon.ytd-searchbox:hover, +#search-icon.ytd-searchbox:hover { + color: var(--main-color) !important; +} + +/*results 🔎 icon*/ +.sbqs_c::before { + filter: invert(1); +} + +/*Results backgrounds*/ +.sbsb_a, +.sbdd_b { + background: var(--second-background) !important; + border: none !important; +} + +/*Text color*/ +.gsfs { + color: var(--dimmer-text) !important; +} + +/*Hover and keyboard select background*/ +.sbsb_c.gsfs:hover, +.sbsb_d { + background-color: var(--hover-background) !important; +} + +.sbfl_b { + background-color: var(--second-background) !important; +} + +.sbfl_b:hover { + background-color: var(--hover-background) !important; + color: var(--main-color) !important; +} + +.sbpqs_a { + color: var(--main-color) !important; +} + +/*Keyboard select text color and hover text color*/ +.sbsb_c:hover .sbqs_c, +.sbsb_c.gsfs.sbsb_d .sbqs_c { + color: var(--main-color) !important; +} + +/*Keyboard icon in the search bar*/ +#gs_ok50 { + filter: invert(100%); +} + +/*Microphone search*/ +ytd-masthead #voice-search-button.ytd-masthead { + background-color: var(--hover-background) !important; +} + +ytd-voice-search-dialog-renderer[dialog] { + background-color: var(--second-background) !important; +} + +#header-text.ytd-voice-search-dialog-renderer, +#microphone-label.ytd-voice-search-dialog-renderer, +#microphone.ytd-voice-search-dialog-renderer[state="try-again"] #microphone-circle.ytd-voice-search-dialog-renderer yt-icon.ytd-voice-search-dialog-renderer .yt-spec-button-shape-next--mono.yt-spec-button-shape-next--text { + color: var(--main-text) !important; +} + +/*Search results correction*/ +.style-scope.yt-search-query-correction { + color: var(--main-text) !important; +} + +.style-scope.yt-search-query-correction .italic.yt-formatted-string, +.style-scope.yt-search-query-correction:hover { + color: var(--main-color) !important; +} + +/*Similar results*/ +#title.ytd-exploratory-results-renderer { + color: var(--dimmer-text) !important; +} + +/*search results filter border*/ +#filter-menu.ytd-search-sub-menu-renderer { + border-color: var(--hover-background) !important; +} + +#watch-card-header.ytd-generic-watch-card, +#img-endpoint.ytd-watch-card-collage-renderer #overlay-button.ytd-watch-card-collage-renderer { + background: var(--main-color) !important; + color: var(--main-text) !important; +} + +paper-tab, +paper-tab.iron-selected.ytd-generic-watch-card { + color: var(--main-color) !important; +} + +paper-item:hover { + background-color: var(--second-background) !important; +} + +#img-endpoint.ytd-watch-card-collage-renderer #overlay-button.ytd-watch-card-collage-renderer { + opacity: .9; +} + +#img-endpoint.ytd-watch-card-collage-renderer #overlay-button.ytd-watch-card-collage-renderer:hover { + opacity: 1 !important; +} + +/*album*/ +#watch-card-subtitle.ytd-watch-card-rich-header-renderer { + color: var(--main-text) !important; +} + +.duration.ytd-watch-card-compact-video-renderer { + color: var(--dimmer-text) !important; +} + +/*Buttom border for different fields*/ +.unfocused-line.paper-input-container { + background-color: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +.focused-line.paper-input-container { + background-color: var(--main-color) !important; + border-color: var(--main-color) !important; +} + +/*Search page*/ +#result-count.ytd-search-sub-menu-renderer { + color: var(--dimmer-text) !important; +} + +ytd-search-sub-menu-renderer, +ytd-exploratory-results-renderer.ytd-item-section-renderer, +ytd-shelf-renderer.ytd-item-section-renderer { + border-color: var(--hover-background) !important; +} + +/*no results*/ +.promo-title.ytd-background-promo-renderer, +.promo-body-text.ytd-background-promo-renderer { + color: var(--main-text) !important; +} + +/*show more*/ +#more.ytd-vertical-list-renderer yt-formatted-string.ytd-vertical-list-renderer, +#all.ytd-vertical-list-renderer yt-formatted-string.ytd-vertical-list-renderer { + color: var(--main-text) !important; +} + +#more.ytd-vertical-list-renderer yt-formatted-string.ytd-vertical-list-renderer:hover, +#all.ytd-vertical-list-renderer yt-formatted-string.ytd-vertical-list-renderer:hover { + color: var(--main-color) !important; +} + +ytd-search-filter-renderer yt-formatted-string.ytd-search-filter-renderer { + color: var(--dimmer-text) !important; +} + +ytd-search-filter-renderer.selected yt-formatted-string.ytd-search-filter-renderer, +ytd-search-filter-renderer.selected #dismiss-x.ytd-search-filter-renderer, +ytd-search-filter-renderer yt-formatted-string.ytd-search-filter-renderer:hover { + color: var(--main-color) !important; +} + +/*Search music suggestions*/ +ytd-watch-card-rich-header-renderer { + background: var(--hover-background) !important; +} + +#overlay-button { + background: var(--main-color) !important; +} + +#overlay-button:hover { + filter: brightness(110%) !important; +} + +#watch-card-title, +#view-all-endpoint:hover { + color: var(--main-color) !important; +} + +ytd-watch-card-compact-video-renderer[is-condensed], +#view-all-endpoint { + border-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +/*Search results related to item searched*/ +a.ytd-search-refinement-card-renderer { + background-color: var(--second-background) !important; + border-color: var(--hover-background) !important; + border-radius: 8px !important; +} + +a.ytd-search-refinement-card-renderer:hover #card-title.ytd-search-refinement-card-renderer div.ytd-search-refinement-card-renderer { + color: var(--main-color) !important; +} + +#card-title.ytd-search-refinement-card-renderer div.ytd-search-refinement-card-renderer { + color: var(--main-text) !important; +} + +/*Next button*/ +.center-aligned.ytd-horizontal-card-list-renderer { + background-color: var(--second-background) !important; + color: var(--main-text) !important; +} + +.center-aligned.ytd-horizontal-card-list-renderer:hover { + color: var(--main-color) !important; +} + +/*filter*/ +a.yt-simple-endpoint.ytd-toggle-button-renderer:hover * { + color: var(--main-color) !important; + /* fill: var(--main-color) !important; */ +} + +#filter-group-name.ytd-search-filter-group-renderer { + color: var(--main-text) !important; + border-color: var(--hover-background) !important; +} + +#description-text.ytd-video-renderer { + color: var(--dimmer-text) !important; +} + +/*Comments*/ +yt-formatted-string.ytd-comments-header-renderer, +#contenteditable-root.yt-formatted-string[aria-label].yt-formatted-string:empty::before, +#contenteditable-textarea.ytd-commentbox { + color: var(--dimmer-text) !important; +} + +/*sort by*/ +#icon-label.yt-dropdown-menu, +#label-icon.yt-dropdown-menu { + color: var(--main-text) !important; + fill: var(--main-text) !important; +} + +yt-sort-filter-sub-menu-renderer.ytd-comments-header-renderer:hover #icon-label.yt-dropdown-menu, +yt-sort-filter-sub-menu-renderer.ytd-comments-header-renderer:hover #label-icon.yt-dropdown-menu { + color: var(--main-color) !important; + fill: var(--main-color) !important; +} + +/*sort by dropdown*/ +paper-listbox.yt-dropdown-menu { + background: var(--second-background) !important; +} + +.item.yt-dropdown-menu { + color: var(--main-text) !important; +} + +paper-listbox.yt-dropdown-menu paper-item.yt-dropdown-menu:hover, +paper-listbox.yt-dropdown-menu paper-item.yt-dropdown-menu:hover .item.yt-dropdown-menu { + background: var(--hover-background) !important; + color: var(--main-color) !important; +} + +paper-listbox.yt-dropdown-menu .yt-dropdown-menu.iron-selected { + background-color: var(--second-background) !important; +} + +paper-listbox.yt-dropdown-menu .yt-dropdown-menu.iron-selected .item.yt-dropdown-menu { + color: var(--main-color) !important; +} + +/*text box*/ +#simplebox-placeholder.ytd-comment-simplebox-renderer { + color: var(--dimmer-text) !important; +} + +#placeholder-area.ytd-comment-simplebox-renderer { + border-color: var(--hover-background) !important; +} + +#input-container.ytd-commentbox, +ytd-commentbox { + --paper-input-container-underline-color: var(--hover-background) !important; + --paper-input-container-underline-focus-color: var(--main-color) !important; +} + +.focused-line.tp-yt-paper-input-container { + border-color: var(--main-color) !important; +} + +.unfocused-line.tp-yt-paper-input-container { + border-color: var(--dimmer-text) !important; +} + +/*emoji selector*/ +#emojis.ytd-commentbox { + background-color: var(--second-background) !important; +} + +/*comments themselves*/ +#author-text.yt-simple-endpoint.ytd-comment-renderer { + color: var(--main-text) !important; +} + +#author-text.yt-simple-endpoint.ytd-comment-renderer:hover { + color: var(--main-color) !important; +} + +ytd-author-comment-badge-renderer { + background-color: var(--hover-background) !important; +} + +#content-text.ytd-comment-renderer, +ytd-expander[should-use-number-of-lines][collapsed]>#content.ytd-expander { + color: var(--dimmer-text) !important; +} + +/*read more*/ +.more-button-exp.ytd-comment-renderer, +.less-button-exp.ytd-comment-renderer { + color: var(--main-text) !important; +} + +.more-button-exp.ytd-comment-renderer:hover, +.less-button-exp.ytd-comment-renderer:hover { + color: var(--main-color) !important; +} + +/*view replies*/ +paper-button.ytd-comment-replies-renderer, +yt-next-continuation.ytd-comment-replies-renderer, +yt-icon.ytd-comment-replies-renderer { + color: var(--main-text) !important; +} + +.more-button.style-scope.ytd-comment-replies-renderer:hover paper-button.ytd-comment-replies-renderer, +.more-button.style-scope.ytd-comment-replies-renderer:hover yt-next-continuation.ytd-comment-replies-renderer, +.more-button.style-scope.ytd-comment-replies-renderer:hover yt-icon.ytd-comment-replies-renderer { + color: var(--main-color) !important; +} + +/*likes*/ +#vote-count-middle.ytd-comment-action-buttons-renderer { + color: var(--dimmer-text) !important; +} + +ytd-button-renderer yt-formatted-string.ytd-button-renderer:hover { + color: var(--main-color) !important; +} + +.yt-spec-button-shape-next--mono.yt-spec-button-shape-next--text:hover { + /*background-color: var(--hover-background) !important;*/ + background-color: var(--yt-spec-10-percent-layer) !important; +} + +/*Show more videos*/ +yt-next-continuation.ytd-watch-next-secondary-results-renderer { + --paper-button_-_background-color: transparent !important; + --paper-button_-_color: var(--dimmer-text) !important; +} + +.style-scope.yt-next-continuation { + border-color: transparent !important; +} + +.style-scope.yt-next-continuation:hover { + background-color: transparent !important; + color: var(--main-color) !important; +} + +yt-formatted-string.ytd-expanded-shelf-contents-renderer { + color: var(--dimmer-text) !important; +} + +yt-formatted-string.ytd-expanded-shelf-contents-renderer:hover { + color: var(--main-color) !important; +} + +/*View more comments*/ +paper-button.yt-next-continuation { + color: var(--dimmer-text) !important; +} + +/*Links in description and published date for comments*/ +#content.ytd-expander a, +.yt-core-attributed-string--link-inherit-color .yt-core-attributed-string__link--call-to-action-color { + color: var(--main-color) !important; + opacity: 0.9; +} + +#published-time-text.ytd-comment-renderer, +#published-time-text.ytd-comment-renderer a { + --yt-endpoint-color: var(--dimmer-text) !important; + color: var(--dimmer-text) !important; + opacity: .8; +} + +#content.ytd-expander a:hover, +#published-time-text.ytd-comment-renderer a:hover, +#content.ytd-expander #name.ytd-author-comment-badge-renderer:hover, +.yt-core-attributed-string--link-inherit-color .yt-core-attributed-string__link--call-to-action-color:hover { + color: var(--main-color) !important; + opacity: 1 !important; +} + +#content.ytd-expander #name.ytd-author-comment-badge-renderer { + color: var(--main-text) !important; +} + +/*video description text*/ +.yt-core-attributed-string--link-inherit-color { + color: var(--dimmer-text) !important; +} + +/*Heart icon in comments*/ +#hearted-border.ytd-creator-heart-renderer, +#hearted.ytd-creator-heart-renderer { + color: var(--main-color) !important; + fill: var(--main-color) !important; +} + +yt-icon-button#creator-heart-button svg { + fill: var(--main-color) !important; +} + +/*Pinned by*/ +#label.ytd-pinned-comment-badge-renderer { + color: var(--main-color) !important; + opacity: 0.5; +} + +yt-icon.ytd-pinned-comment-badge-renderer { + fill: var(--main-color) !important; + opacity: 0.5; +} + +/*shorts comments background*/ +.watch-while-engagement-panel.ytd-reel-video-renderer, +/*comment window background*/ +ytd-item-section-renderer[static-comments-header] #header.ytd-item-section-renderer + +/*add comment background*/ + { + background-color: var(--second-background) !important; +} + +/*Fundraiser message*/ +#wrapper.ytd-donation-unavailable-renderer { + background-color: var(--hover-background) !important; +} + +/*Chat*/ +/*header*/ +yt-live-chat-header-renderer, +#header.yt-live-chat-participant-list-renderer, +yt-live-chat-message-renderer, +yt-live-chat-ticker-renderer { + background: var(--hover-background) !important; +} + +yt-live-chat-banner-manager[has-active-banner] { + background: linear-gradient(var(--hover-background) 0%, var(--second-background) 100%) !important; +} + +/*live replay*/ +#card.yt-live-chat-viewer-engagement-message-renderer, +yt-live-chat-text-message-renderer[is-highlighted] { + background: var(--hover-background) !important; +} + +#chat, +#participants, +yt-live-chat-renderer { + background: var(--second-background) !important; +} + +/*show mode was enabled*/ +#container.yt-live-chat-restricted-participation-renderer { + background: var(--second-background) !important; +} + +#contents.yt-live-chat-mode-change-message-renderer { + background: var(--hover-background) !important; +} + +#contents.yt-live-chat-mode-change-message-renderer, +#subtext.yt-live-chat-mode-change-message-renderer { + color: var(--dimmer-text) !important; +} + +yt-live-chat-toast-renderer[is-showing-message] + +/*info for show mode*/ + { + background: var(--hover-background) !important; +} + +/*dropmenu*/ +#menu.yt-live-chat-text-message-renderer { + background: transparent !important; +} + +paper-listbox { + background: var(--second-background) !important; +} + +yt-icon.ytd-menu-navigation-item-renderer, +yt-icon.ytd-menu-service-item-renderer, +#header.yt-live-chat-participant-list-renderer, +#author-name.yt-live-chat-author-chip:not(.member):not(.moderator), +.style-scope.yt-live-chat-ninja-message-renderer { + color: var(--main-text) !important; +} + +#deleted-state, +#show-original, +yt-live-chat-text-message-renderer[is-deleted] #message.yt-live-chat-text-message-renderer, +#timestamp { + color: var(--dimmer-text) !important; +} + +/*paid messages*/ +#content.yt-live-chat-paid-message-renderer #message { + color: black !important; +} + +#message.yt-live-chat-text-message-renderer a.yt-live-chat-text-message-renderer { + color: var(--main-color) !important; + text-decoration: none !important; +} + +yt-live-chat-author-chip[is-highlighted] #author-name { + background: var(--main-color) !important; +} + +/*paid arrows*/ +yt-icon.yt-live-chat-ticker-renderer { + background: var(--main-background) !important; + color: var(--main-text) !important; +} + +yt-icon.yt-live-chat-ticker-renderer:hover { + color: var(--main-color) !important; +} + +#right-arrow-container.yt-live-chat-ticker-renderer, +#left-arrow-container.yt-live-chat-ticker-renderer { + background: transparent !important; +} + +/*channel messages*/ +yt-live-chat-text-message-renderer[author-is-owner] { + background: var(--hover-background) !important; + color: var(--main-text) !important; +} + +/*pinned*/ +yt-live-chat-banner-manager[has-visible-banner] { + background: var(--second-background) !important; +} + +#contents.yt-live-chat-banner-renderer>.yt-live-chat-banner-renderer { + background: transparent !important; +} + +/*Confirmantion popup*/ +paper-toast { + background-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +/*button*/ +yt-icon-button.yt-live-chat-item-list-renderer, +yt-live-chat-ninja-message-renderer.yt-live-chat-renderer paper-button.yt-button-renderer, +yt-live-chat-message-renderer.yt-live-chat-message-input-renderer yt-button-renderer.style-dark[is-paper-button] { + background: var(--main-background) !important; + color: var(--main-text) !important; +} + +/*input*/ +yt-live-chat-message-input-renderer { + background-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +#focused.yt-live-chat-text-input-field-renderer { + background: var(--main-color) !important; +} + +#count { + color: var(--dimmer-text) !important; +} + +/*hide chat*/ +#show-hide-button.ytd-live-chat-frame>ytd-toggle-button-renderer.ytd-live-chat-frame { + background: var(--hover-background) !important; +} + +/*emoji*/ +yt-formatted-string.yt-emoji-picker-category-renderer { + background: var(--hover-background) !important; +} + +#search-panel.yt-emoji-picker-renderer { + background: var(--main-background) !important; + color: var(--main-text) !important; +} + +#search-empty { + color: var(--dimmer-text) !important; +} + +/*donations superchats cards*/ +#card.yt-live-chat-donation-announcement-renderer { + background-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +#menu.yt-live-chat-donation-announcement-renderer { + background: transparent !important; +} + +/*for actually donating*/ +#subtext.yt-live-chat-product-button-renderer { + color: var(--dimmer-text) !important; +} + +#container.yt-live-chat-product-button-renderer .yt-icon { + fill: var(--dimmer-text) !important; +} + +/*Fund raiser*/ +#header-section.ytd-donation-shelf-renderer, +#collapse-controls-section.ytd-donation-shelf-renderer { + background-color: var(--hover-background) !important; +} + +#header-text.ytd-donation-shelf-renderer, +#collapse-controls-section.ytd-donation-shelf-renderer { + color: var(--main-text) !important; +} + +#collapse-controls-section.ytd-donation-shelf-renderer:hover { + color: var(--main-color) !important; +} + +#header-section.ytd-donation-shelf-renderer .style-scope.ytd-donation-shelf-renderer.no-transition { + filter: invert(.8); +} + +#donate-section.ytd-donation-shelf-renderer, +#creator-messages-section.ytd-donation-shelf-renderer, +#nonprofit-section.ytd-donation-shelf-renderer, +#nonprofit-title.ytd-donation-shelf-renderer { + background-color: var(--second-background) !important; + border-color: var(--hover-background) !important; +} + +#campaign-title.ytd-donation-shelf-renderer, +.creator-message.ytd-donation-shelf-renderer, +#campaign-subtitle.ytd-donation-shelf-renderer, +.creator-message-name.ytd-donation-shelf-renderer, +#nonprofit-title.ytd-donation-shelf-renderer { + color: var(--main-text) !important; +} + +.creator-message.ytd-donation-shelf-renderer, +#campaign-subtitle.ytd-donation-shelf-renderer, +#nonprofit-subtitle.ytd-donation-shelf-renderer, +#nonprofit-description.ytd-donation-shelf-renderer { + color: var(--dimmer-text) !important; +} + +#amount-raised.ytd-donation-shelf-renderer, +#nonprofit-title.ytd-donation-shelf-renderer yt-icon.ytd-donation-shelf-renderer { + color: var(--main-color) !important; +} + +#nonprofit-link.ytd-donation-shelf-renderer .inline-icon.ytd-donation-shelf-renderer { + fill: var(--main-color) !important; +} + +/*progress*/ +#progress-bar-start.ytd-donation-shelf-renderer, +#progress-bar-end.ytd-donation-shelf-renderer { + color: var(--main-text) !important; +} + +#matching-label.ytd-donation-shelf-renderer { + color: var(--dimmer-text) !important; +} + +#progress-bar.ytd-donation-shelf-renderer { + background-color: var(--dimmer-text) !important; +} + +#progress-bar-fill.ytd-donation-shelf-renderer { + background-color: var(--main-color) !important; +} + +/*donate button*/ +.style-scope.ytd-donation-shelf-renderer .yt-spec-button-shape-next--call-to-action.yt-spec-button-shape-next--filled { + background-color: var(--main-color) !important; + color: var(--main-text) !important; +} + +/*donate window*/ +#top-box.ytd-donation-amount-picker-renderer { + background-color: var(--second-background) !important; +} + +#campaign-title.ytd-donation-amount-picker-renderer, +#nonprofit-title.ytd-donation-amount-picker-renderer { + color: var(--main-color) !important; +} + +#campaign-subtitle.ytd-donation-amount-picker-renderer, +#nonprofit-subtitle.ytd-donation-amount-picker-renderer { + color: var(--main-text) !important; +} + +/*amount buttons*/ +#suggested-amount-buttons-row.ytd-donation-amount-picker-renderer ytd-button-renderer.ytd-donation-amount-picker-renderer[is-paper-button] paper-button.ytd-button-renderer { + background-color: var(--second-background) !important; +} + +#suggested-amount-buttons-row.ytd-donation-amount-picker-renderer ytd-button-renderer.ytd-donation-amount-picker-renderer[is-paper-button] paper-button.ytd-button-renderer { + background-color: var(--second-background) !important; + border-color: var(--second-background) !important; +} + +#suggested-amount-buttons-row.ytd-donation-amount-picker-renderer ytd-button-renderer.ytd-donation-amount-picker-renderer[is-paper-button][selected] paper-button.ytd-button-renderer, +.ytd-donation-amount-picker-renderer ytd-button-renderer.style-primary[is-paper-button] { + background-color: var(--main-color) !important; +} + +/*curency for other amount*/ +span.prefix.style-scope.paper-input-container>div.ytd-donation-amount-picker-renderer { + color: var(--main-text) !important; +} + +/*Payment window*/ +.popup-mode .b3-page-header { + background-color: var(--main-background) !important; +} + +.b3-line-items-mundane-items-container, +.b3-line-items-mundane-items-container { + background-color: var(--hover-background) !important; +} + +.b3-separator { + display: none !important; +} + +.b3-line-item-value { + color: var(--main-color) !important; +} + +.b3-line-item-name, +.b3-line-item-infomessage, +.b3-line-item-subvalue { + color: var(--main-text) !important; +} + +.b3-single-option-form-selector-option-content .b3-existing-instrument-option-label-without-image, +.b3-dropdown-form-selector .b3-existing-instrument-option-label-without-image, +.b3-single-option-form-selector-option-content .b3-additional-instrument-option-label, +.b3-dropdown-form-selector .b3-additional-instrument-option-label, +.b3-input.focused .b3-input-label, +.b3-input.focused .b3-input-label-text, +.b3-input input[type="tel"], +.b3-input input[type="text"], +.b3-input input[type="password"], +.b3-input input[type="email"], +.b3-input.populated .b3-input-label, +.b3-input.invalid .b3-input-label, +.b3-input.autofilled .b3-input-label, +.b3-input-field>.b3-input-label, +.b3-input-field>.b3-input-label.accessible, +.b3-collapsing-form-placeholder-text { + color: var(--main-text) !important; +} + +.countryselector .goog-flat-menu-button-caption, +.countryselector .goog-flat-menu-button-caption .goog-menuitem-content { + color: var(--dimmer-text) !important; +} + +/*icons*/ +.b3-single-option-form-selector-icon, +.b3-collapsing-form-icon { + fill: var(--main-text) !important; +} + +.b3-collapsing-form.focused .b3-collapsing-form-icon { + fill: var(--main-color) !important; +} + +.b3-tooltip-icon { + filter: invert(1) !important; +} + +/*border*/ +.b3-input-status-indicator { + background-color: var(--main-color) !important; +} + +.b3-input-accent { + border-color: var(--hover-background) !important; +} + +/*tooltip*/ +.b3-inline-tooltip-popup-wrapper, +.help-Helpwidgets-TooltipWidget-content-html { + background-color: var(--hover-background) !important; + color: var(--dimmer-text) !important; +} + +.b3-inline-tooltip-popup-wrapper a, +.help-Helpwidgets-TooltipWidget-content-html a { + color: var(--main-color) !important; +} + +/*country choice*/ +.goog-menu, +.goog-menuitem:hover { + background-color: var(--hover-background) !important; +} + +.goog-menuitem, +.goog-tristatemenuitem, +.goog-filterobsmenuitem { + color: var(--main-text) !important; +} + +.goog-menuitem-highlight .goog-menuitem-content { + color: var(--main-color) !important; +} + +.goog-menuitem .countryselector-flag { + border-radius: 4px !important; + /*hiding ugly white corners*/ +} + +/*footer*/ +.b3-legal-message-content, +.b3-info-message-list.b3-buyflow-extra-messages .b3-info-message-component.b3-info-message-unknown, +.b3-info-message-component.b3-info-message-unknown.b3-buyflow-extra-messages .b3-info-message-html { + color: var(--dimmer-text) !important; +} + +.b3-legal-message-content a, +.b3-info-message-component.b3-info-message-unknown.b3-buyflow-extra-messages .b3-info-message-html a { + color: var(--main-color) !important; +} + +/*Notification*/ +/*bell icon notification count*/ +.yt-spec-icon-badge-shape--type-notification .yt-spec-icon-badge-shape__badge { + background-color: var(--main-color) !important; + border: none !important; +} + +button.yt-icon-button:hover .yt-spec-icon-badge-shape--type-notification .yt-spec-icon-badge-shape__badge { + color: var(--main-text) !important; +} + +/*load spinner - also for comments*/ +.spinner-layer.layer-1.tp-yt-paper-spinner, +.spinner-layer.layer-2.tp-yt-paper-spinner, +.spinner-layer.layer-3.tp-yt-paper-spinner, +.spinner-layer.layer-4.tp-yt-paper-spinner { + color: var(--dimmer-text) !important; +} + +#notification-count.ytd-notification-topbar-button-renderer, +ytd-notification-renderer.unread #new.ytd-notification-renderer, +.yt-lockup-notification .unread-dot + +/*account settings*/ + { + background: var(--main-color) !important; + border-color: var(--main-color) !important; +} + +.text.ytd-notification-renderer, +.message.ytd-notification-renderer #yt-masthead-notifications-title, +.yt-lockup-notification .yt-lockup-title a +/*account settings*/ +h2.yt-multi-page-menu-section-renderer + +/*comments and notifications headers*/ + { + color: var(--main-text) !important; +} + +/*gear icon*/ +ytd-simple-menu-header-renderer .yt-spec-button-shape-next__icon { + color: var(--main-text) !important; +} + +ytd-simple-menu-header-renderer .yt-spec-button-shape-next--mono.yt-spec-button-shape-next--text:hover .yt-spec-button-shape-next__icon { + color: var(--main-color) !important; +} + +.metadata.ytd-notification-renderer, +.exp-responsive .yt-lockup-tile .yt-lockup-byline + +/*account settings*/ + { + color: var(--dimmer-text) !important; +} + +ytd-notification-renderer:hover .message.ytd-notification-renderer { + color: var(--main-color) !important; +} + +ytd-watch:not([flexy-fit-to-video_]) #chat.ytd-watch, +ytd-watch:not([flexy-fit-to-video_]) #transcript.ytd-watch { + padding-left: 0 !important; +} + +ytd-simple-menu-header-renderer { + background-color: var(--hover-background) !important; +} + +h2.ytd-simple-menu-header-renderer { + color: var(--main-text) !important; +} + +#sections.ytd-multi-page-menu-renderer>ytd-background-promo-renderer.ytd-multi-page-menu-renderer, +ytd-multi-page-menu-renderer, +#yt-masthead-notifications-content .item-section>li>.yt-lockup-tile, +#yt-masthead-notifications-content .yt-ui-ellipsis, +/*account settings*/ +#yt-masthead-notifications-content + +/*bottom thing - account settings*/ + { + background: var(--second-background) !important; + border-color: var(--second-background) !important; +} + +.browse-items-load-more-button { + background-color: var(--main-background) !important; + border-color: var(--main-background) !important; + color: var(--main-text) !important; +} + +.browse-items-load-more-button:hover { + color: var(--main-color) !important; +} + +.promo-message.ytd-background-promo-renderer, +#message:not([class*="yt-music"]) { + color: var(--dimmer-text) !important; +} + +/*triangle*/ +.yt-uix-clickcard-card-reverse .yt-uix-card-body-arrow-vertical, +.yt-uix-hovercard-card-reverse .yt-uix-card-body-arrow-vertical + +/*account settings*/ + { + border-bottom-color: var(--hover-background) !important; +} + +/*menu*/ +.yt-ui-menu-content + +/*account settings*/ + { + background-color: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +.yt-ui-menu-item + +/*account settings*/ + { + background-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +.yt-ui-menu-item:hover + +/*account settings*/ + { + color: var(--main-color) !important; +} + +/*gear icon*/ +.yt-uix-button-icon-icon-account-settings + +/*account settings*/ + { + filter: brightness(250%) invert(1); +} + +/*Cards*/ +.iv-card-content, +.ytp-ce-expanding-overlay-background, +.ytp-cards-teaser .ytp-cards-teaser-text, +.ytp-cards-teaser .ytp-cards-teaser-box { + background-color: var(--main-background) !important; +} + +.ytp-cards-teaser .ytp-cards-teaser-box, +.iv-card-image { + border: 0px !important; +} + +.iv-card-content> :first-child, +.html5-video-player a, +.iv-card h2, +.ytp-cards-teaser .ytp-cards-teaser-text { + color: var(--main-text) !important; +} + +.iv-card:hover .iv-card-primary-link, +.ytp-ce-website-title { + color: var(--main-color) !important; +} + +.ytp-ce-element:hover { + border-color: var(--main-color) !important; +} + +.ytp-ce-channel-title.ytp-ce-link { + color: var(--main-color) !important; + opacity: 0.9 !important; +} + +.ytp-ce-channel-title.ytp-ce-link:hover, +.ytp-cards-teaser .ytp-cards-teaser-text:hover { + color: var(--main-color) !important; + opacity: 1 !important; +} + +.ytp-ce-channel-metadata.yt-ui-ellipsis.yt-ui-ellipsis-3 { + background: transparent; + color: var(--dimmer-text) !important; +} + +/*Cards border color*/ +.iv-card-message { + border-bottom: 1px solid var(--main-color) !important; +} + +.ytp-ce-channel-this .ytp-ce-channel-metadata { + border-color: var(--hover-background) !important; +} + +/*Poll*/ +.iv-card-poll label, +.iv-card-poll.iv-card-poll-voted label.iv-card-poll-choice-checked, +.iv-card-poll.iv-card-poll-voted label { + color: var(--main-text) !important; +} + +#vote-info.ytd-backstage-poll-renderer { + color: var(--dimmer-text) !important; +} + +.iv-card-poll .iv-card-poll-result .iv-card-poll-result-bar { + background-color: var(--main-color) !important; +} + +ytd-backstage-post-thread-renderer { + border-color: var(--hover-background) !important; +} + +ytd-backstage-poll-renderer[show-poll-choice-border] .choice-info.ytd-backstage-poll-renderer { + border-color: transparent !important; +} + +/*Account menu header*/ +ytd-active-account-header-renderer { + background: var(--second-background) !important; +} + +ytd-active-account-header-renderer:hover { + background-color: var(--hover-background) !important; +} + +#account-name.ytd-active-account-header-renderer, +#channel-title.ytd-account-item-renderer { + color: var(--main-text) !important; +} + +#email.ytd-active-account-header-renderer { + color: var(--dimmer-text) !important; +} + +/*subentries*/ +#label.ytd-toggle-theme-compact-link-renderer, +tp-yt-paper-item.ytd-compact-link-renderer { + color: var(--dimmer-text) !important; +} + +ytd-toggle-theme-compact-link-renderer:hover #label.ytd-toggle-theme-compact-link-renderer, +ytd-toggle-theme-compact-link-renderer:hover yt-icon, +paper-item.ytd-compact-link-renderer:hover #subtitle, +paper-item.ytd-compact-link-renderer:hover .deemphasize.yt-formatted-string, +tp-yt-paper-item.ytd-compact-link-renderer:hover *, +tp-yt-paper-item.ytd-compact-link-renderer:hover #subtitle.ytd-compact-link-renderer { + color: var(--main-color) !important; +} + +#footer.ytd-multi-page-menu-renderer>.ytd-multi-page-menu-renderer { + border-color: var(--hover-background) !important; +} + +.description.ytd-toggle-item-renderer, +#caption.ytd-toggle-item-renderer { + color: var(--dimmer-text) !important; +} + +/*language*/ +#language.ytd-account-settings, +#country.ytd-account-settings, +#restricted.ytd-account-settings, +.container.ytd-account-settings { + background-color: var(--second-background) !important; +} + +paper-item.ytd-account-settings { + color: var(--dimmer-text) !important; +} + +paper-item.ytd-account-settings:hover { + color: var(--main-color) !important; +} + +/*swich account*/ +yt-formatted-string.ytd-account-item-renderer[secondary] { + color: var(--dimmer-text) !important; +} + +#selected.ytd-account-item-renderer { + color: var(--main-color) !important; +} + +/*theme*/ +ytd-compact-link-renderer[compact-link-style="compact-link-style-type-disclaimer"] #label.ytd-compact-link-renderer { + color: var(--dimmer-text) !important; +} + +/*Live background color*/ +ytd-thumbnail-overlay-time-status-renderer[overlay-style="LIVE"] { + background-color: var(--main-color) !important; +} + +.guide-entry-badge.ytd-guide-entry-renderer { + color: var(--main-color) !important; + fill: var(--main-color) !important; +} + +.ytp-live-badge[disabled]:before { + background: var(--main-color) !important; +} + +/*Recolored sidepane icons, menu icons and filter button*/ +.guide-icon.ytd-guide-entry-renderer, +paper-button.ytd-toggle-button-renderer, +yt-icon.ytd-compact-link-renderer, +yt-icon.ytd-toggle-theme-compact-link-renderer { + color: var(--dimmer-text) !important; +} + +/*Sidepane titles*/ +#guide-section-title a { + color: var(--dimmer-text) !important; +} + +#guide-section-title a:hover { + color: var(--main-color) !important; +} + + +/*Autoplay text*/ +#upnext.ytd-compact-autoplay-renderer, +#autoplay.ytd-compact-autoplay-renderer { + color: var(--dimmer-text) !important; + opacity: .8; +} + +ytd-compact-autoplay-renderer { + border-color: var(--hover-background) !important; +} + +/*Video was removed by user - not interested*/ +#text.ytd-notification-multi-action-renderer { + color: var(--dimmer-text) !important; +} + +/*Video was added/removed to/from a playlist by user*/ +yt-notification-action-renderer[ui-refresh] #text.yt-notification-action-renderer, +yt-notification-action-renderer[ui-refresh] #sub-text.yt-notification-action-renderer { + color: var(--dimmer-text) !important; +} + +/*Links in video description*/ +.description.ytd-video-secondary-info-renderer a { + color: var(--main-color) !important; + opacity: .9; +} + +/*Game cards*/ +ytd-rich-metadata-renderer { + background-color: var(--second-background) !important; +} + +#call-to-action.ytd-rich-metadata-renderer { + color: var(--main-text) !important; +} + +#title.ytd-rich-metadata-renderer, +#call-to-action.ytd-rich-metadata-renderer:hover { + color: var(--main-color) !important; +} + +/*Movie cards*/ +#header.ytd-movie-offer-module-renderer { + background-color: var(--second-background) !important; +} + +ytd-button-renderer.ytd-movie-offer-module-renderer.style-primary[is-paper-button] { + background-color: var(--main-color) !important; +} + +#wide-clickable-area.ytd-movie-offer-module-renderer { + background-color: var(--hover-background) !important; +} + +#info.ytd-movie-offer-module-renderer { + color: var(--main-text) !important; +} + +h3.ytd-compact-movie-renderer { + color: var(--main-text) !important; +} + +/*Tour/ticket cards*/ +ytd-ticket-shelf-renderer { + background-color: var(--second-background) !important; +} + +#primary-event.ytd-ticket-shelf-renderer #meta.ytd-ticket-shelf-renderer #tickets-button.ytd-ticket-shelf-renderer { + background: var(--main-color) !important; + color: var(--main-text) !important; +} + +#primary-event.ytd-ticket-shelf-renderer #meta-info.ytd-ticket-shelf-renderer #nearest.ytd-ticket-shelf-renderer, +#primary-event.ytd-ticket-shelf-renderer #meta-info.ytd-ticket-shelf-renderer #subtitle1.ytd-ticket-shelf-renderer, +#primary-event.ytd-ticket-shelf-renderer #meta-info.ytd-ticket-shelf-renderer #subtitle2.ytd-ticket-shelf-renderer, +.where-column-td.ytd-ticket-shelf-renderer .where-column.ytd-ticket-shelf-renderer { + color: var(--main-text) !important; +} + +.when-date-column.ytd-ticket-shelf-renderer, +.link.ytd-ticket-shelf-renderer, +.when-weekday-column.ytd-ticket-shelf-renderer { + color: var(--main-color) !important; +} + +/*separator*/ +#seperator.ytd-ticket-shelf-renderer, +ytd-ticket-shelf-renderer { + border-color: var(--hover-background) !important; +} + + +/*Author name*/ +#owner-name.ytd-video-owner-renderer { + opacity: .9; +} + +#owner-name.ytd-video-owner-renderer:hover { + opacity: 1 !important; +} + +/*Set a memento*/ +ytd-toggle-button-renderer.style-compact-gray[is-paper-button] { + background-color: var(--second-background) !important; + color: var(--dimmer-text) !important; +} + +/*Series name*/ +.super-title.ytd-video-primary-info-renderer a, +#additional-metadata-line.ytd-video-meta-block { + color: var(--dimmer-text) !important; + opacity: .8; +} + +#selectionBar.paper-tabs { + border-color: var(--main-color) !important; +} + +/*"Best" of YouTube icons in sidepane*/ +/*.style-scope.ytd-guide-entry-renderer.no-transition + { + filter: grayscale(100%); + }*/ + +/* Promo page */ +body.yt-new-promo-page-use-launched-copy .yt-new-promo-page-header { + background: var(--main-background) !important; +} + +.yt-new-promo-page-section-text, +.yt-new-promo-page-header { + color: var(--dimmer-text); +} + +.yt-new-promo-page-button { + background-color: var(--main-color) !important; + color: var(--main-text) !important; + opacity: .9; +} + +.yt-new-promo-page-button:hover { + opacity: 1; +} + +/* Crude logo fix */ +.yt-new-promo-page-logo { + filter: grayscale(100%) invert(100%); +} + +/* Fix for active like/dislike buttons */ +ytd-toggle-button-renderer.style-grey-text[is-icon-button] { + color: var(--yt-button-color); +} + +ytd-toggle-button-renderer #button.ytd-toggle-button-renderer { + color: inherit; +} + +/*like/dislike buttons in nested replies*/ +/*.style-scope.ytd-toggle-button-renderer svg + { + fill: var(--dimmer-text) !important; + } + .style-scope.ytd-toggle-button-renderer yt-icon-button.style-default-active svg + { + fill: var(--main-color) !important; + }*/ +ytd-toggle-button-renderer.ytd-comment-action-buttons-renderer #button.ytd-toggle-button-renderer { + color: var(--yt-button-color); +} + +ytd-toggle-button-renderer.ytd-comment-action-buttons-renderer .style-default-active { + color: var(--main-color) !important; +} + +/* Fix for placeholders/skeletons */ +/*ytd-masthead.shell + { + background-color: var(--main-background); + } + ytd-masthead.shell [class*='skeleton'], [id*='skeleton'] [class*='skeleton'], [id*='skeleton'], .shelf-videos, .skeleton-bg-color + { + background-color: var(--hover-background) !important; + border-color: var(--hover-background) !important; + }*/ +/*homepage skeleton*/ +#home-container-skeleton, +html[dark] #home-container-skeleton { + background-color: var(--main-background) !important; +} + +/*sidebar skeleton*/ +#guide-skeleton, +html[dark] #guide-skeleton { + background-color: var(--second-background) !important; +} + +/*homepage videos skeleton*/ +#home-page-skeleton .skeleton-bg-color, +html[dark] #home-page-skeleton .skeleton-bg-color { + background-color: var(--hover-background) !important; +} + +.masthead-skeleton-icon, +html[dark] .masthead-skeleton-icon, +/*ytd-masthead.shell [class*='skeleton'], html[dark] ytd-masthead.shell, + .shelf-videos, html[dark] .shelf-videos,*/ +.skeleton-bg-color, +html[dark] .skeleton-bg-color { + background-color: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +.skeleton-light-border-bottom, +html[dark] .skeleton-light-border-bottom { + border-bottom: 1px solid var(--hover-background) !important; +} + +ytd-alert-with-button-renderer[type="INFO"], +#content-wrapper.yt-alert-with-actions-renderer + +/*TOS*/ + { + background-color: var(--hover-background) !important; +} + +#content-wrapper.yt-alert-with-actions-renderer yt-button-renderer[is-paper-button] yt-icon.yt-button-renderer { + color: var(--main-color) !important; +} + +ytd-alert-with-button-renderer[type="INFO"] #text.ytd-alert-with-button-renderer { + color: var(--main-text) !important; +} + +#alert-message.ytd-consent-bump-renderer { + color: var(--dimmer-text) !important; +} + +/*Paid membership*/ +yt-subscription-product-header-renderer.ytd-item-section-renderer { + color: var(--main-text) !important; +} + +/*Reporting*/ +.introduction-header { + color: var(--main-text) !important; +} + +.introduction-body, +.introduction-bullet-items { + color: var(--dimmer-text) !important; +} + +yt-report-form-modal-renderer[dialog][dialog][dialog] { + background: var(--main-background) !important; +} + +yt-options-renderer[increased-tooltip-target] yt-icon.yt-options-renderer { + color: var(--main-text) !important; +} + +/*Help*/ +.ghp-header-searchBox, +.ghp-autocomplete-label { + color: var(--dimmer-text) !important; +} + +/* + .ghp-header-searchIcon.ghpv-loaded, .ghp-iconTextComponent-icon, .ghp-autocomplete-icon + { + filter: invert(100%) grayscale(100%) brightness(150%); + } + .ghp-autocompleteGlass + { + background: rgba(0,0,0,3) !important; + } + .ghp-card-title + { + color: var(--main-text) !important; + } + .ghp-card, .ghp-content, .ghp-iconTextComponent, .ghp-contentFrame, .hcfe + { + background-color: var(--second-background) !important; + border-color: var(--hover-background) !important; + } + .ghp-iconTextComponent:hover .ghp-iconTextComponent-label, + .ghp-iconTextComponent:hover .ghp-separator + { + color: var(--main-color) !important; + border-color: var(--hover-background) !important; + } + .ghp-separator + { + border-color: var(--hover-background) !important; + } + .ghp-iconTextComponent-label, .hcfe + { + color: var(--dimmer-text) !important; + } + */ + +/*Trending page*/ +ytd-destination-button-renderer { + background-color: var(--hover-background) !important; +} + +#destination-label.ytd-destination-button-renderer { + color: var(--main-text) !important; +} + +ytd-destination-button-renderer:hover #destination-label.ytd-destination-button-renderer { + color: var(--main-color) !important; +} + +/*more - shown on low width*/ +ytd-destination-shelf-renderer[is-show-more-visible] #show-more-button.ytd-destination-shelf-renderer, +#show-more-button.ytd-destination-shelf-renderer { + background: var(--hover-background) !important; +} + +#show-more-button-icon.ytd-destination-shelf-renderer { + color: var(--main-text) !important; +} + +ytd-destination-shelf-renderer[is-show-more-visible] #show-more-button.ytd-destination-shelf-renderer:hover #show-more-button-icon.ytd-destination-shelf-renderer { + color: var(--main-color) !important; +} + +/*Learning*/ +ytd-carousel-header-renderer { + background: var(--main-background) !important; +} + +/*Music*/ +.flex-container.ytd-compact-station-renderer { + background-color: var(--second-background) !important; +} + +h3.ytd-compact-station-renderer { + color: var(--main-text) !important; +} + +.flex-container.ytd-compact-station-renderer:hover h3.ytd-compact-station-renderer { + color: var(--main-color) !important; +} + +#video-count-text.ytd-compact-station-renderer { + color: var(--dimmer-text) !important; +} + +/*Gaming*/ +#live-viewers-count.ytd-game-details-renderer { + color: var(--dimmer-text) !important; +} + +/*History*/ +.page-header-view-model-wiz__page-header-title { + color: var(--main-text) !important; +} + +#channel-header.ytd-tabbed-page-header { + --yt-lightsource-section1-color: var(--main-background); +} + +#channel-header.ytd-tabbed-page-header h1 { + color: var(--main-text) !important; +} + +yt-formatted-string.ytd-sub-feed-option-renderer { + color: var(--dimmer-text) !important; +} + +#title.ytd-sub-feed-selector-renderer, +ytd-sub-feed-option-renderer.ytd-sub-feed-selector-renderer { + border-color: var(--hover-background) !important; +} + +ytd-two-column-browse-results-renderer #secondary.ytd-two-column-browse-results-renderer { + background-color: var(--second-background) !important; +} + +ytd-two-column-browse-results-renderer #primary ytd-text-header-renderer { + color: var(--main-text) !important; +} + +/*dialog confirm*/ +yt-confirm-dialog-renderer[dialog][dialog][dialog] { + background-color: var(--second-background) !important; +} + +#scroller.yt-confirm-dialog-renderer { + color: var(--dimmer-text) !important; +} + +#cancel-button.yt-confirm-dialog-renderer { + color: var(--main-text) !important; +} + +.buttons.yt-confirm-dialog-renderer { + border-color: var(--hover-background) !important; +} + +/*Premium*/ +/*video*/ +#main-title.ytd-unlimited-offer-module-renderer { + color: var(--main-text) !important; +} + +#sub-title.ytd-unlimited-offer-module-renderer { + color: var(--dimmer-text) !important; +} + +/*popup*/ +.ytd-mealbar-promo-renderer-message-title.ytd-mealbar-promo-renderer { + color: var(--main-text) !important; +} + +.ytd-mealbar-promo-renderer-message-text.ytd-mealbar-promo-renderer { + color: var(--dimmer-text) !important; +} + +.button-container.ytd-mealbar-promo-renderer { + border-color: var(--hover-background) !important; +} + +ytd-grid-video-renderer[is-dismissed] #dismissed { + border-color: var(--hover-background) !important; +} + +ytd-grid-video-renderer[is-dismissed] #dismissed .ytd-notification-multi-action-renderer { + color: var(--dimmer-text) !important; +} + +ytd-dismissal-follow-up-renderer[dialog][dialog][dialog] { + background: var(--main-background) !important; +} + +#content.ytd-dismissal-follow-up-renderer #checkboxLabel.paper-checkbox, +#content.ytd-dismissal-follow-up-renderer #label.ytd-dismissal-reason-video-renderer { + color: var(--dimmer-text) !important; +} + +#buttons.ytd-dismissal-follow-up-renderer { + border-top-color: var(--hover-background) !important; +} + +/*New TOS*/ +yt-alert-with-actions-renderer { + background-color: var(--hover-background) !important; +} + +#text.yt-alert-with-actions-renderer, +#alert-message.yt-alert-with-actions-renderer { + color: var(--main-text) !important; +} + +yt-button-renderer yt-formatted-string.yt-button-renderer, +#icon.yt-alert-with-actions-renderer { + color: var(--main-color) !important; +} + +/*actual page for TOS*/ +#yts-article #article-container.ytg-box #summary { + background-color: var(--hover-background) !important; +} + +.separator, +.with-divider, +.header, +#yts-article #header, +#yts-nav { + border-color: var(--hover-background) !important; +} + +#yts-nav .indented .sub-level a, +#yts-nav .top-level a, +#yts-article #header { + color: var(--main-text) !important; +} + +/*Premium page (https://www.youtube.com/premium)*/ +yt-button-renderer#manage-subscription-button yt-formatted-string.yt-button-renderer { + color: inherit !important; +} + +.yt-unlimited-page-header-renderer a.yt-simple-endpoint.yt-formatted-string { + color: var(--main-color) !important; +} + +#header.yt-music-pass-small-feature-info-renderer, +.question.yt-generic-faq-question-renderer, +.answer-arrow.yt-generic-faq-question-renderer { + color: var(--main-text) !important; +} + +#description.yt-music-pass-small-feature-info-renderer, +.container.yt-faq-section-renderer, +.answer.yt-generic-faq-question-renderer, +.text.ytd-simple-text-section-renderer { + color: var(--dimmer-text) !important; +} + +yt-generic-faq-question-renderer .yt-simple-endpoint.style-scope.yt-formatted-string, +yt-generic-faq-question-renderer a.yt-simple-endpoint.yt-formatted-string:only-of-type, +.text.ytd-simple-text-section-renderer a.yt-simple-endpoint.yt-formatted-string:only-of-type { + color: var(--main-color) !important; +} + +/*Paid memberships*/ +paper-card.yt-subscription-product-upsell-offer-renderer { + background-color: var(--second-background) !important; +} + +#title.yt-subscription-product-upsell-offer-renderer, +#description.yt-subscription-product-upsell-offer-renderer, +#additional-info.yt-subscription-product-upsell-offer-renderer { + color: var(--dimmer-text) !important; +} + +/*Gaming page (https://www.youtube.com/gaming) and gaming channels*/ +#channel-details.ytd-carousel-header-renderer, +#channel-header-container.ytd-topic-channel-details-renderer { + background-color: var(--main-background) !important; +} + +#bg.ytd-interactive-tabbed-header-renderer { + fill: var(--main-background) !important; +} + +#tabs-inner-container.ytd-interactive-tabbed-header-renderer { + background-color: transparent !important; +} + +/*Acount page specific*/ +/*Sidebar*/ +#creator-page.account-page, +ytd-settings-sidebar-renderer { + background-color: var(--second-background) !important; +} + +.exp-kevlar-settings .account-page #creator-sidebar h3 { + color: var(--main-text) !important; +} + +.exp-kevlar-settings .account-page #creator-sidebar .creator-sidebar-item a { + color: var(--dimmer-text) !important; +} + +.exp-kevlar-settings .account-page #creator-sidebar .creator-sidebar-item.selected>a, +.exp-kevlar-settings .account-page #creator-sidebar .creator-sidebar-item.selected>a:hover, +.exp-kevlar-settings .account-page #creator-sidebar .creator-sidebar-item:hover a { + background-color: var(--hover-background) !important; + color: var(--main-color) !important; +} + +ytd-compact-link-renderer[compact-link-style="compact-link-style-type-settings-sidebar"][active], +ytd-compact-link-renderer[compact-link-style="compact-link-style-type-settings-sidebar"][active]:hover { + background-color: var(--hover-background) !important; +} + +/*Burger sidebar*/ +#appbar-guide-menu, +.guide-flyout { + background-color: var(--second-background) !important; +} + +#guide-container .guide-item { + color: var(--main-text) !important; +} + +#guide-container .guide-item:hover { + background-color: var(--hover-background) !important; + color: var(--main-color) !important; +} + +/*headers*/ +.exp-invert-logo li.guide-section h3, +.exp-invert-logo li.guide-section h3 a { + color: var(--main-color) !important; +} + +.guide-section-separator + +/*divider*/ + { + border-color: var(--hover-background) !important; +} + +/*Contents - account*/ +.account-page-header, +ytd-section-list-renderer[page-subtype="account-settings"] a.yt-simple-endpoint.yt-formatted-string { + color: var(--main-color) !important; +} + +#account-page-header-title, +h2.account-section-header { + color: var(--main-text) !important; +} + +/*title of the page*/ +#name.ytd-page-introduction-renderer, +#name.ytd-channel-options-renderer, +ytd-settings-options-renderer .yt-formatted-string:not(a).bold { + color: var(--main-text) !important; +} + +.exp-kevlar-settings #account-page-header-subtitle, +.account-info-item .account-info-label, +.account-section .account-email, +.account-content, +.account-section-subtext { + color: var(--dimmer-text) !important; +} + +/*other text*/ +#text.ytd-page-introduction-renderer, +/*email*/ +#text.ytd-settings-options-renderer, +/*descriptions, metadata, below text*/ +#label.ytd-settings-checkbox-renderer, +#label.ytd-settings-radio-option-renderer, +/*playback*/ +#text.ytd-connected-app-renderer + +/*connected accounts*/ + { + color: var(--dimmer-text) !important; +} + +.yt-horizontal-rule + +/*divider*/ + { + border-color: var(--hover-background) !important; +} + +.account-info .account-photo .yt-thumb + +/*avatar*/ + { + border-radius: 100%; +} + +.account-content a, +.account-header a + +/*various links*/ + { + color: var(--main-color) !important; +} + +.yt-thumb { + background-color: var(--hover-background) !important; +} + +/*Notifications*/ +.setting-reminder, +h3.account-section-header { + color: var(--main-text) !important; +} + +.yt-uix-form-input-checkbox-container input:checked+.yt-uix-form-input-checkbox-element { + border-color: #000; + filter: invert(1); +} + +.desktop-notifications .browser { + background-color: var(--hover-background) !important; + color: var(--main-color) !important; + border-color: var(--hover-background) !important; +} + +.desktop-notifications .browser .yt-uix-button.turn-on, +.desktop-notifications .browser .yt-uix-button.turn-off, +.resume-setting-button, +.undo-setting-button-section, +.resume-all-settings-button + +/*turn off*/ + { + background: var(--main-background) !important; + border-color: var(--main-background) !important; + color: var(--main-color) !important; +} + +.yt-uix-form-input-select + +/*dropdowns*/ + { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +/*checkboxes*/ +tp-yt-paper-toggle-button[checked]:not([disabled]) .toggle-bar.tp-yt-paper-toggle-button { + background-color: var(--main-color) !important; + opacity: 1 !important; +} + +tp-yt-paper-toggle-button[checked]:not([disabled]) .toggle-button.tp-yt-paper-toggle-button { + background-color: var(--main-text) !important; +} + +/*language*/ +ytd-dropdown-renderer[has-background] tp-yt-paper-dropdown-menu-light.ytd-dropdown-renderer { + background-color: var(--hover-background) !important; +} + +label.label-is-floating.tp-yt-paper-dropdown-menu-light, +#label.ytd-dropdown-item-renderer { + color: var(--main-text) !important; +} + +#input.tp-yt-paper-dropdown-menu-light { + color: var(--dimmer-text) !important; +} + +/*Playback*/ +.yt-help-icon { + filter: invert(1); +} + +.yt-uix-clickcard-card-content, +.yt-uix-hovercard-card-content { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +.yt-uix-clickcard-card-border, +.yt-uix-hovercard-card-border { + border-color: var(--hover-background) !important; +} + +.yt-uix-clickcard-card-flip .yt-uix-card-body-arrow-horizontal, +.yt-uix-hovercard-card-flip .yt-uix-card-body-arrow-horizontal { + border-right-color: var(--hover-background) !important; +} + +.exp-kevlar-settings .account-page .yt-uix-button + +/*save buttons*/ + { + background: var(--main-color) !important; + border-color: var(--main-color) !important; + color: var(--main-text) !important; + opacity: .9; +} + +.exp-kevlar-settings .account-page .yt-uix-button:hover { + opacity: 1 !important; +} + +/*Social*/ +.social-connector { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +/*TV*/ +.howto-circle { + background-color: var(--hover-background) !important; + color: var(--main-color) !important; +} + +.howto-text { + color: var(--dimmer-text) !important; +} + +.remote-icon { + filter: invert(1) brightness(200%); +} + +h3.pairing-section-header { + color: var(--main-text) +} + +.yt-uix-form-input-select, +.yt-uix-form-input-text, +.yt-uix-form-input-textarea { + border-color: var(--hover-background) !important; +} + +#account-page-header-avatar.howto-promo-image { + filter: invert(1) grayscale(1); +} + +/*TV code*/ +.yt-uix-form-input-select, +.yt-uix-form-input-text, +.yt-uix-form-input-textarea { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +/*Footer*/ +body #footer-container { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; + color: var(--main-text) !important; +} + +#footer-main + +/*divider*/ + { + border-color: var(--hover-background) !important; +} + +/*links*/ +#footer-links-primary a { + color: var(--main-text) !important; +} + +#footer-links-secondary a { + color: var(--dimmer-text) !important; +} + +#footer-links-primary a:hover, +#footer-links-secondary a:hover { + color: var(--main-color) !important; +} + +/*buttons*/ +#footer .yt-uix-button-group .yt-uix-button, +#footer .pickers li, +#footer .footer-history, +#footer #google-help { + background: var(--second-background) !important; + border-color: var(--second-background) !important; + color: var(--main-text) !important; + box-shadow: none !important; +} + +.yt-uix-button-default.yt-uix-button-toggled:hover { + box-shadow: none !important; +} + +#footer .yt-uix-button-icon-footer-language, +#footer .yt-uix-button-icon-footer-history, +#footer .yt-uix-button-icon-questionmark { + filter: invert(1); +} + +.yt-uix-button-arrow { + border-top-color: var(--main-text) !important; +} + +#yt-picker-country-footer, +#yt-picker-language-footer, +#yt-picker-safetymode-footer { + background: var(--second-background) !important; + border-color: var(--second-background) !important; + color: var(--main-text) !important; +} + +.yt-picker-header, +#safety-form p.safety-submit + +/*divider*/ + { + border-color: var(--hover-background) !important; +} + +.yt-picker-header h3.yt, +.yt-picker-content strong { + color: var(--main-text) !important; +} + +#yt-picker-country-footer .yt-default .yt-notes, +p.yt-notes, +#safety-mode-description li { + color: var(--dimmer-text) !important; +} + +#yt-picker-country-footer .yt-picker-content a, +.yt-picker-content button { + color: var(--main-color) !important; +} + +#yt-picker-safetymode-footer button + +/*save*/ + { + background: var(--main-color) !important; + border-color: var(--main-color) !important; + color: var(--main-text) !important; + opacity: .9; +} + +/*Notification buttom corner - for settings, watch later etc*/ +tp-yt-paper-toast { + background: var(--hover-background) !important; + color: var(--main-text) !important; + box-shadow: var(--shadow) !important; +} + +/*Topic auto-generated by youtube*/ +#auto-generated.ytd-interactive-tabbed-header-renderer, +#metadata.ytd-interactive-tabbed-header-renderer { + color: var(--dimmer-text) !important; +} + +/*Keyboard shortcuts Shift-/ */ +ytd-hotkey-dialog-renderer[dialog][dialog][dialog] { + background-color: var(--main-background) !important; +} + +ytd-hotkey-dialog-section-option-renderer { + border-color: var(--hover-background) !important; +} + + +/*SponsorBlock*/ +/*logo change*/ +#sponsorBlockPopupLogo, +.sponsorSkipLogo { + display: block !important; + -moz-box-sizing: border-box !important; + box-sizing: border-box !important; + background: url(https://raw.githubusercontent.com/RaitaroH/YouTube-DeepDark/master/YT_Images/IconSponsorBlocker256px.png) top left no-repeat !important; + background-size: 100% !important; + position: relative !important; +} + +#sponsorBlockPopupLogo { + width: 40px !important; + height: 40px !important; + padding-left: 40px !important; +} + +/*for overlays*/ +.sponsorSkipLogo { + width: 18px !important; + height: 18px !important; + padding-left: 18px !important; +} + +.sponsorBlockTooltip { + background-color: var(--hover-background) !important; +} + +/*Are you sure you want to leave YouTube? redirect*/ +/*seems like youtube will never update this page so, yeah*/ +#invalid-token-redirect-warning-text + +/*h1*/ + { + color: var(--main-text) !important; +} + +/*span*/ +#redirect-main-text { + color: var(--dimmer-text) !important; +} + +#redirect-main-text .bolded { + color: var(--main-color); +} + +/*search*/ +#masthead-search-terms-border { + border-color: var(--hover-background) !important; + background-color: var(--hover-background) !important; + box-shadow: var(--shadow) !important; +} + +#masthead-search-terms { + color: var(--main-text); +} + +.search-button { + background: var(--hover-background) !important; + border-color: var(--hover-background) !important; +} + +/*🔍 is missing, nice*/ +.search-button-content { + background: no-repeat url("data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0xNy4zOTE3IDE2LjgwODNMMTIuNzMzMyAxMi4xNUMxMy42MjUgMTEuMTI1IDE0LjE2NjcgOS43OTE2NyAxNC4xNjY3IDguMzMzMzNDMTQuMTY2NyA1LjEwODMzIDExLjU1ODMgMi41IDguMzMzMzMgMi41QzUuMTA4MzMgMi41IDIuNSA1LjEwODMzIDIuNSA4LjMzMzMzQzIuNSAxMS41NTgzIDUuMTA4MzMgMTQuMTY2NyA4LjMzMzMzIDE0LjE2NjdDOS43OTE2NyAxNC4xNjY3IDExLjEyNSAxMy42MjUgMTIuMTUgMTIuNzQxN0wxNi44MDgzIDE3LjRMMTcuMzkxNyAxNi44MDgzWk04LjMzMzMzIDEzLjMzMzNDNS41NzUgMTMuMzMzMyAzLjMzMzMzIDExLjA5MTcgMy4zMzMzMyA4LjMzMzMzQzMuMzMzMzMgNS41NzUgNS41NzUgMy4zMzMzMyA4LjMzMzMzIDMuMzMzMzNDMTEuMDkxNyAzLjMzMzMzIDEzLjMzMzMgNS41NzUgMTMuMzMzMyA4LjMzMzMzQzEzLjMzMzMgMTEuMDkxNyAxMS4wOTE3IDEzLjMzMzMgOC4zMzMzMyAxMy4zMzMzWiIgZmlsbD0iIzAzMDMwMyIvPjwvc3ZnPg==") !important; + filter: invert(1); +} + +#redirect-backto-safety-button:hover { + color: var(--main-text) !important; +} + +/*logo icon is also missing, but this __should__ change in the future*/ +.logo { + background: no-repeat url("https://raw.githubusercontent.com/RaitaroH/YouTube-DeepDark/master/YT_Images/Logo.png") !important; + background-size: 70% !important; + padding: 10px; + width: 120px !important; + height: 33px !important; + box-sizing: border-box !important; + position: relative; + right: -30px; +} + +#logo-container .content-region { + color: var(--main-text) !important; +}`; diff --git a/src/deepDarkPresets.ts b/src/deepDarkPresets.ts new file mode 100644 index 00000000..6393eb20 --- /dev/null +++ b/src/deepDarkPresets.ts @@ -0,0 +1,349 @@ +/** + * Theme presets are adapted from the "YouTube DeepDark" Stylus theme by RaitaroH. + * Author: https://github.com/RaitaroH + * Co-authors: https://github.com/MechaLynx https://github.com/MaximeRF + * Repository: https://github.com/RaitaroH/YouTube-DeepDark + */ +export const deepDarkPreset = [ + "9anime", + "Adapta-Breath-Nokto", + "Adapta-Nokto", + "Arc-Dark", + "Black-and-White", + "Breeze-Dark", + "Custom", + "Deep-Dark", + "Discord", + "Dracula", + "Firefox-57", + "Firefox-Alpenglow-Dark", + "Firefox-Dark", + "Firefox-Dark-91", + "Gruvbox-Dark", + "Gruvbox-Light", + "HavocOS", + "Inspired-Dark", + "Jisho", + "Mint-Y-Dark", + "NierAutomata-Dark", + "NierAutomata-Light", + "Orange", + "Solarized-Dark", + "Solarized-Light", + "Ubuntu-Grey", + "Ubuntu-Purple", + "Vertex-Dark", + "Yellow", + "Yellow-2", + "YouTube-Dark" +] as const; +export type DeepDarkPreset = (typeof deepDarkPreset)[number]; +export type DeepDarkPresets = Record, string>; +/** + * Theme presets are adapted from the "YouTube DeepDark" Stylus theme by RaitaroH. + * Author: RaitaroH + * Co-authors: https://github.com/MechaLynx https://github.com/MaximeRF + * Repository: https://github.com/RaitaroH/YouTube-DeepDark + */ +export const deepDarkPresets = { + "9anime": ` + :root { + --main-color: #723f8c; + --main-background: #0b0a0d; + --second-background: #17151c; + --hover-background: #1E1c25; + --main-text: #f9f6fb; + --dimmer-text: #cac0cf; + --shadow: 0 1px 0.5px rgba(54, 54, 54, .13); + }`, + "Adapta-Breath-Nokto": ` + :root { + --main-color: #1abc9c; + --main-background: #222d32; + --second-background: #263238; + --hover-background: #2a353b; + --main-text: #fff; + --dimmer-text: #9b9b9b; + --shadow: 0 1px 0.5px rgba(42, 53, 59, .32); + }`, + "Adapta-Nokto": ` + :root { + --main-color: #00bcd4; + --main-background: #222d32; + --second-background: #263238; + --hover-background: #2a353b; + --main-text: #fff; + --dimmer-text: #9b9b9b; + --shadow: 0 1px 0.5px rgba(61, 77, 86, .2); + }`, + "Arc-Dark": ` + :root { + --main-color: #5294e2; + --main-background: #343944; + --second-background: #383c4a; + --hover-background: #414a59; + --main-text: #c1c8d1; + --dimmer-text: #b3bac5; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .13); + }`, + "Black-and-White": ` + :root { + --main-color: #fff; + --main-background: #000; + --second-background: #1e1e1e; + --hover-background: #313131; + --main-text: #fff; + --dimmer-text: #aaa; + --shadow: 0 1px 0.5px rgba(54 ,54 ,54, .2); + }`, + "Breeze-Dark": ` + :root { + --main-color: #3daee9; + --main-background: #232629; + --second-background: #2a2e32; + --hover-background: #31363b; + --main-text: #eff0f1; + --dimmer-text: #bdc3c7; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .13); + }`, + "Deep-Dark": ` + :root { + --main-color: #00adee; + --main-background: #111; + --second-background: #181818; + --hover-background: #232323; + --main-text: #eff0f1; + --dimmer-text: #ccc; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .3); + }`, + Discord: ` + :root { + --main-color: #7289da; + --main-background: #1e2124; + --second-background: #2f3136; + --hover-background: #484b51; + --main-text: #fff; + --dimmer-text: #ada8aa; + --shadow: 0 1px 0.5px rgba(47, 49, 54, .23); + }`, + Dracula: ` + :root { + --main-color: #bd93f9; /*Purple*/ + --main-background: hsl(231, 15%, 18%); /*Background*/ + --second-background: hsl(231, 15%, 22%); /*Manually generated from Background*/ + --hover-background: #44475a; /*Selection*/ + --main-text:#f8f8f2; /*Foreground*/ + --dimmer-text: #bcc2cd; /*From .app-title https://draculatheme.com/*/ + --shadow: 0 1px 0.5px rgba(0, 0, 0, .15); + }`, + "Firefox-57": ` + :root { + --main-color: #4080fb; + --main-background: #0c0c0d; + --second-background: #252526; + --hover-background: #323234; + --main-text: #f9f9fa; + --dimmer-text: #d0d0d0; + --shadow: 0 1px 0.5px rgba(54, 54, 54, .2); + }`, + "Firefox-Alpenglow-Dark": ` + :root { + --main-color: #C488FC; + --main-background: #21133d; + --second-background: #2a1e52; + --hover-background: #2d245b; + --main-text: #ffffff; + --dimmer-text: #E3DBFA; + --shadow: 0 1px .5px rgba(35, 22, 65, .5); + }`, + "Firefox-Dark": ` + :root { + --main-color: #5675b9; + --main-background: #272b35; + --second-background: #181d20; + --hover-background: #353a44; + --main-text: #e3eef9; + --dimmer-text: #bec0cc; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .13); + }`, + "Firefox-Dark-91": ` + :root { + --main-color: #00ddff; + --main-background: #1c1b22; + --second-background: #23222b; + --hover-background: #2b2a33; + --main-text: #fbfbfe; + --dimmer-text: #b8b7bb; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .13); + }`, + "Gruvbox-Dark": ` + :root { + --main-color: #fe8019; + --main-background: #1d2021; + --second-background: #282828; + --hover-background: #3c3836; + --main-text: #fbf1c7; + --dimmer-text: #ebdbb2; + --shadow: 0 1px 0.5px rgba(60, 56, 54, .22); + }`, + "Gruvbox-Light": ` + :root { + --main-color: #af3a03; + --main-background: #f9f5d7; + --second-background: #fbf1c7; + --hover-background: #ebdbb2; + --main-text: #282828; + --dimmer-text: #3c3836; + --shadow: 0 1px 0.5px rgba(235, 219, 178, .33); + }`, + HavocOS: ` + :root { + --main-color: #0794d4; + --main-background: #141618; + --second-background: #1c1e20; + --hover-background: #212528; + --main-text: #fff; + --dimmer-text: #b9baba; + --shadow: 0 1px 0.5px rgba(185, 186, 186, .04); + }`, + "Inspired-Dark": ` + :root { + --main-color: #5e8acc; + --main-background: #232629; + --second-background: #181818; + --hover-background: #515254; + --main-text: #eee; + --dimmer-text: #ccc; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .13); + }`, + Jisho: ` + :root { + --main-color: #ef7d6c; + --main-background: #332222; + --second-background: #2a1b1b; + --hover-background: #863b2f; + --main-text: #EFB26C; + --dimmer-text: #986E3F; + --shadow: 0 1px 0.5px rgba(37, 19, 5, .19); + }`, + "Mint-Y-Dark": ` + :root { + --main-color: #9ab87c; + --main-background: #2f2f2f; + --second-background: #383838; + --hover-background: #404040; + --main-text: #fff; + --dimmer-text: #d5dada; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .13); + }`, + "NierAutomata-Dark": ` + :root { + --main-color: #fe8019; + --main-background: #33302a; + --second-background: #48453c; + --hover-background: #7c6f64; + --main-text: #dad4bb; + --dimmer-text: #bab5a1; + --shadow: 0 1px 0.5px rgba(124, 111, 100, .15); + }`, + "NierAutomata-Light": ` + :root { + --main-color: #fe8019; + --main-background: #d1cdb7; + --second-background: #dcd8c0; + --hover-background: #bab5a1; + --main-text: #48453c; + --dimmer-text: #33302a; + --shadow: 0 1px 0.5px rgba(186, 181, 161, 2); + }`, + Orange: ` + :root { + --main-color: #ff6905; + --main-background: #0a0400; + --second-background: #0e0702; + --hover-background: #110903; + --main-text: #fff9f5; + --dimmer-text: #ffede1; + --shadow: 0 1px 0.5px rgba(255, 105, 5, .1); + }`, + "Solarized-Dark": ` + :root { + --main-color: #268bd2; + --main-background: #073642; + --second-background: #03303c; + --hover-background: #002b36; + --main-text: #fdf6E3; + --dimmer-text: #eee8d5; + --shadow: 0 1px 0.5px rgba(0, 43, 54, .3); + }`, + "Solarized-Light": ` + :root { + --main-color: #268bd2; + --main-background: #fdf6e3; + --second-background: #f5efdc; + --hover-background: #eee8d5; + --main-text: #073642; + --dimmer-text: #586e75; + --shadow: 0 1px 0.5px rgba(222, 216, 196, .2); + }`, + "Ubuntu-Grey": ` + :root { + --main-color: #ef7847; + --main-background: #312d2a; + --second-background: #3d3c38; + --hover-background: #59564d; + --main-text: #f2f1ef; + --dimmer-text: #e6e5e3; + --shadow: 0 1px 0.5px rgba(89, 86, 77, .12); + }`, + "Ubuntu-Purple": ` + :root { + --main-color: #ef7847; + --main-background: #2c071a; + --second-background: #430b28; + --hover-background: #520D30; + --main-text: #f2f1ef; + --dimmer-text: #e6e5e3; + --shadow: 0 1px 0.5px rgba(82, 13, 48, .2); + }`, + "Vertex-Dark": ` + :root { + --main-color: #4080fb; + --main-background: #2b2b2c; + --second-background: #353638; + --hover-background: #515254; + --main-text: #f3f3f5; + --dimmer-text: #aeafb0; + --shadow: 0 1px 0.5px rgba(0, 0, 0, .13); + }`, + Yellow: ` + :root { + --main-color: #ffc700; + --main-background: #141414; + --second-background: #202222; + --hover-background: #353838; + --main-text: #eff0f1; + --dimmer-text: #9f9999; + --shadow: 0 1px 0.5px rgba(34, 34, 34, .2); + }`, + "Yellow-2": ` + :root { + --main-color: #ffc700; + --main-background: #0a0800; + --second-background: #0c0a04; + --hover-background: #0f0d05; + --main-text: #fffdf5; + --dimmer-text: #fff8e1; + --shadow: 0 1px 0.5px rgba(34, 34, 34, .2); + }`, + "YouTube-Dark": ` + :root { + --main-color: #e52117; + --main-background: #111; + --second-background: #232323; + --hover-background: #343434; + --main-text: #e1e1e1; + --dimmer-text: #7f7f7f; + --shadow: 0 1px 0.5px rgba(54, 54, 54, .2); + }` +} as const satisfies DeepDarkPresets; diff --git a/src/defaults.ts b/src/defaults.ts index af235a85..26a11801 100644 --- a/src/defaults.ts +++ b/src/defaults.ts @@ -1,17 +1,45 @@ -import type { configuration } from "./types"; +import { deepMerge } from "@/src/utils/utilities"; import { defaultConfiguration } from "./utils/constants"; -Object.keys(defaultConfiguration).forEach((option) => { - // If the option was not previously stored in localStorage - if (localStorage[option] === undefined) { - // then set it to the default value +function setDefaultValues() { + // Iterate over each option in the default configuration + for (const option of Object.keys(defaultConfiguration)) { + // Get the stored value from local storage + const storedValueString = localStorage.getItem(option); + // Destructure the default value for the current option const { [option]: defaultValue } = defaultConfiguration; - localStorage[option] = typeof defaultValue === "string" ? defaultValue : JSON.stringify(defaultValue); - - // and also set it in the Chrome Storage API. - void chrome.storage.local.set({ - [option]: localStorage[option] as configuration[typeof option] - }); + // Check if the stored value is missing or an empty string + if (storedValueString === null) { + // Set the default value in localStorage after stringifying + localStorage.setItem(option, typeof defaultValue === "string" ? defaultValue : JSON.stringify(defaultValue)); + // Set the default value in chrome storage + void chrome.storage.local.set({ [option]: defaultValue }); + } else { + try { + // Parse the stored value to check its type + const storedValue = + ( + typeof defaultConfiguration[option] === "object" || + typeof defaultConfiguration[option] === "boolean" || + typeof defaultConfiguration[option] === "number" + ) ? + JSON.parse(storedValueString) + : storedValueString; + // Check if the parsed value is an object and has properties + if (typeof storedValue === "object" && storedValue !== null) { + // Deep merge missing keys with their default values + const updatedValue = deepMerge(defaultValue as Record, storedValue as Record); + // Set the updated value in localStorage + localStorage.setItem(option, JSON.stringify(updatedValue)); + // Set the updated value in chrome storage + void chrome.storage.local.set({ [option]: updatedValue }); + } + } catch (error) { + // Handle errors during JSON parsing + console.error(`Error parsing stored value for option ${option}:`, error); + } + } } -}); +} +setDefaultValues(); diff --git a/src/features/buttonPlacement/index.ts b/src/features/buttonPlacement/index.ts index dbfaefe1..d093cfee 100644 --- a/src/features/buttonPlacement/index.ts +++ b/src/features/buttonPlacement/index.ts @@ -1,57 +1,60 @@ import type { GetIconType } from "@/src/icons"; -import type { ButtonPlacement, FeaturesThatHaveButtons } from "@/src/types"; +import type { AllButtonNames, ButtonPlacement, MultiButtonNames, SingleButtonFeatureNames } from "@/src/types"; import { addFeatureItemToMenu, removeFeatureItemFromMenu } from "@/src/features/featureMenu/utils"; -import { removeTooltip, waitForSpecificMessage } from "@/src/utils/utilities"; +import { findKeyByValue, removeTooltip, waitForSpecificMessage } from "@/src/utils/utilities"; import { type ListenerType, getFeatureButtonId, makeFeatureButton, placeButton } from "./utils"; -export const featuresInControls = new Set(); +export const featuresInControls = new Set(); -export async function addFeatureButton< - Name extends FeaturesThatHaveButtons, - Placement extends ButtonPlacement, - Label extends string, - Toggle extends boolean ->(featureName: Name, placement: Placement, label: Label, icon: GetIconType, listener: ListenerType, isToggle: boolean) { +export async function addFeatureButton( + buttonName: Name, + placement: Placement, + label: Label, + icon: GetIconType, + listener: ListenerType, + isToggle: boolean +) { switch (placement) { case "feature_menu": { - if (icon instanceof SVGSVGElement) await addFeatureItemToMenu(featureName, label, icon, listener, isToggle); + if (icon instanceof SVGSVGElement) await addFeatureItemToMenu(buttonName, label, icon, listener, isToggle); break; } case "below_player": case "player_controls_left": case "player_controls_right": { // Add the feature name to the set of features in the controls - featuresInControls.add(featureName); - const button = makeFeatureButton(featureName, placement, label, icon, listener, isToggle); + featuresInControls.add(buttonName); + const button = makeFeatureButton(buttonName, placement, label, icon, listener, isToggle); placeButton(button, placement); break; } } } -export async function removeFeatureButton(featureName: Name, placement?: ButtonPlacement) { +export async function removeFeatureButton(buttonName: Name, placement?: ButtonPlacement) { + const featureName = findKeyByValue(buttonName as MultiButtonNames) ?? (buttonName as SingleButtonFeatureNames); if (placement === undefined) { // Wait for the "options" message from the content script const optionsData = await waitForSpecificMessage("options", "request_data", "content"); ({ data: { options: { - button_placements: { [featureName]: placement } + button_placements: { [buttonName]: placement } } } } = optionsData); } switch (placement) { case "feature_menu": { - removeFeatureItemFromMenu(featureName); + removeFeatureItemFromMenu(buttonName); break; } case "below_player": case "player_controls_left": case "player_controls_right": { // Remove the feature name from the set of features in the controls - featuresInControls.delete(featureName); - const button = document.querySelector(`#${getFeatureButtonId(featureName)}`); + featuresInControls.delete(buttonName); + const button = document.querySelector(`#${getFeatureButtonId(buttonName)}`); if (!button) return; button.remove(); removeTooltip(`yte-feature-${featureName}-tooltip`); diff --git a/src/features/buttonPlacement/utils.ts b/src/features/buttonPlacement/utils.ts index 4d312be9..65821124 100644 --- a/src/features/buttonPlacement/utils.ts +++ b/src/features/buttonPlacement/utils.ts @@ -1,12 +1,12 @@ import { getFeatureIds, getFeatureMenuItem } from "@/src/features/featureMenu/utils"; import { type GetIconType } from "@/src/icons"; -import { type ButtonPlacement, type FeaturesThatHaveButtons } from "@/src/types"; +import { type AllButtonNames, type ButtonPlacement, type MultiButtonNames, type SingleButtonFeatureNames } from "@/src/types"; import eventManager from "@/src/utils/EventManager"; -import { createStyledElement, createTooltip } from "@/src/utils/utilities"; +import { createStyledElement, createTooltip, findKeyByValue } from "@/src/utils/utilities"; export type ListenerType = Toggle extends true ? (checked?: boolean) => void : () => void; -function buttonClickListener( +function buttonClickListener( button: HTMLButtonElement, icon: GetIconType, listener: ListenerType, @@ -25,19 +25,20 @@ function buttonClickListener( - featureName: Name, +export function makeFeatureButton( + buttonName: Name, placement: Placement, label: string, icon: GetIconType, listener: ListenerType, isToggle: boolean ) { + const featureName = findKeyByValue(buttonName as MultiButtonNames) ?? (buttonName as SingleButtonFeatureNames); if (placement === "feature_menu") throw new Error("Cannot make a feature button for the feature menu"); - const buttonExists = document.querySelector(`button#${getFeatureButtonId(featureName)}`) !== null; + const buttonExists = document.querySelector(`button#${getFeatureButtonId(buttonName)}`) !== null; const button = createStyledElement({ classlist: ["ytp-button"], - elementId: `${getFeatureButtonId(featureName)}`, + elementId: `${getFeatureButtonId(buttonName)}`, elementType: "button", styles: { alignContent: "center", @@ -50,6 +51,7 @@ export function makeFeatureButton(`#${getFeatureButtonId(featureName)}`); +export function updateFeatureButtonTitle(buttonName: AllButtonNames, title: string) { + const button = document.querySelector(`#${getFeatureButtonId(buttonName)}`); if (!button) return; button.dataset.title = title; } @@ -142,34 +144,34 @@ export function placeButton(button: HTMLButtonElement, placement: Exclude