diff --git a/package-lock.json b/package-lock.json index 13f5276..a1b87ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,12 @@ "packages": { "": { "dependencies": { + "webext-base-css": "^1.4.3", + "webext-options-sync": "^4.0.1", "webext-polyfill-kinda": "^1.0.0" }, "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-node-resolve": "^15.0.1", "eslint": "^8.35.0", "eslint-config-prettier": "^8.6.0", @@ -277,6 +280,12 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -312,6 +321,71 @@ "node": ">= 8" } }, + "node_modules/@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/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/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", @@ -717,6 +791,12 @@ "node": ">=0.1.90" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -937,6 +1017,11 @@ "node": ">=6.0.0" } }, + "node_modules/dom-form-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-form-serializer/-/dom-form-serializer-2.0.0.tgz", + "integrity": "sha512-HMrrc7gJIBj6sWmnJcO9DLZj8AsdFP60+pZSu0vMJxZhEP3GPfsNE9X1GC95nXZ0SZbS8FYDb/NHW/NArSmu0Q==" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2081,6 +2166,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -2358,6 +2452,26 @@ "node": ">=10" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -4043,6 +4157,14 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/throttle-debounce": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", + "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==", + "engines": { + "node": ">=12.22" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4148,6 +4270,34 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/webext-base-css": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webext-base-css/-/webext-base-css-1.4.3.tgz", + "integrity": "sha512-LKbDiNn94MTu9Uz1MwgSLjkPIWfBAyt+xpU9Ad+6fy3A7BpxSSFVmqrvcs/6CzaTdRb+5gL1xtLVB/++DZP05g==", + "funding": { + "url": "https://github.com/sponsors/fregante" + } + }, + "node_modules/webext-detect-page": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/webext-detect-page/-/webext-detect-page-4.0.1.tgz", + "integrity": "sha512-Y9Skw6/Uj0dGwOIidc1XqZ3neEbmuuT4BlkL/J4JHAo6fVznHIZq6/MWDsPGOA/jnNowiSXtHHh4S/TOxbl6bQ==" + }, + "node_modules/webext-options-sync": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/webext-options-sync/-/webext-options-sync-4.0.1.tgz", + "integrity": "sha512-uwR/PAWuHo9DUnYZyAXgYjgUEPxo0yEBR7oNSuOvLUDgjRf5SoSTSh26E00XzbgGmA3VNXA9Uhn2XrYpPSPoEA==", + "dependencies": { + "dom-form-serializer": "^2.0.0", + "lz-string": "^1.4.4", + "throttle-debounce": "^5.0.0", + "webext-detect-page": "^4.0.1", + "webext-polyfill-kinda": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fregante" + } + }, "node_modules/webext-polyfill-kinda": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/webext-polyfill-kinda/-/webext-polyfill-kinda-1.0.0.tgz", @@ -4373,7 +4523,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.0.1.tgz", "integrity": "sha512-B9/8PmOtU6nBiibJg0glnNktQDZ3rZnGn/7UmDfrm2vMtrdlXO3p7ErE95N0up80IRk9YEtB5jyj/TmQ1WH3dw==", - "dev": true + "dev": true, + "requires": {} }, "@csstools/css-tokenizer": { "version": "2.1.0", @@ -4385,13 +4536,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.0.1.tgz", "integrity": "sha512-X2/OuzEbjaxhzm97UJ+95GrMeT29d1Ib+Pu+paGLuRWZnWRK9sI9r3ikmKXPWGA1C4y4JEdBEFpp9jEqCvLeRA==", - "dev": true + "dev": true, + "requires": {} }, "@csstools/selector-specificity": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", - "dev": true + "dev": true, + "requires": {} }, "@eslint-community/eslint-utils": { "version": "4.1.2", @@ -4448,6 +4601,12 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4474,6 +4633,53 @@ "fastq": "^1.6.0" } }, + "@rollup/plugin-commonjs": { + "version": "24.0.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.1.tgz", + "integrity": "sha512-15LsiWRZk4eOGqvrJyu3z3DaBu5BhXIMeWnijSRvd8irrrg9SHpQ1pH+BUK4H6Z9wL9yOxZJMTLU+Au86XHxow==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.27.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "@rollup/plugin-node-resolve": { "version": "15.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz", @@ -4533,7 +4739,8 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv": { "version": "6.12.6", @@ -4759,6 +4966,12 @@ "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4917,6 +5130,11 @@ "esutils": "^2.0.2" } }, + "dom-form-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-form-serializer/-/dom-form-serializer-2.0.0.tgz", + "integrity": "sha512-HMrrc7gJIBj6sWmnJcO9DLZj8AsdFP60+pZSu0vMJxZhEP3GPfsNE9X1GC95nXZ0SZbS8FYDb/NHW/NArSmu0Q==" + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5053,7 +5271,8 @@ "version": "8.6.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", - "dev": true + "dev": true, + "requires": {} }, "eslint-config-xo": { "version": "0.43.1", @@ -5068,7 +5287,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-4.0.0.tgz", "integrity": "sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-unicorn": { "version": "45.0.2", @@ -5747,6 +5967,15 @@ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5957,6 +6186,20 @@ "yallist": "^4.0.0" } }, + "lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==" + }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, "map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -6432,7 +6675,8 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-selector-parser": { "version": "6.0.11", @@ -6448,7 +6692,8 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", - "dev": true + "dev": true, + "requires": {} }, "postcss-value-parser": { "version": "4.2.0", @@ -6481,7 +6726,8 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.9.0.tgz", "integrity": "sha512-3doBi5NO4IVgaNPtwewvrgPpqAcvNv0NwJNflr76PIGgi9nf1oguQV1Hpdm9TI2ALIQVn/9iIwLpBO5UcD2Jiw==", - "dev": true + "dev": true, + "requires": {} }, "punycode": { "version": "2.3.0", @@ -7069,7 +7315,8 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/stylelint-declaration-block-no-ignored-properties/-/stylelint-declaration-block-no-ignored-properties-2.7.0.tgz", "integrity": "sha512-44SpI9+9Oc1ICuwwRfwS/3npQ2jPobDSTnwWdNgZGryGqQCp17CgEIWjCv1BgUOSzND3RqywNCNLKvO1AOxbfg==", - "dev": true + "dev": true, + "requires": {} }, "stylelint-order": { "version": "5.0.0", @@ -7166,6 +7413,11 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "throttle-debounce": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", + "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7250,6 +7502,28 @@ "spdx-expression-parse": "^3.0.0" } }, + "webext-base-css": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webext-base-css/-/webext-base-css-1.4.3.tgz", + "integrity": "sha512-LKbDiNn94MTu9Uz1MwgSLjkPIWfBAyt+xpU9Ad+6fy3A7BpxSSFVmqrvcs/6CzaTdRb+5gL1xtLVB/++DZP05g==" + }, + "webext-detect-page": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/webext-detect-page/-/webext-detect-page-4.0.1.tgz", + "integrity": "sha512-Y9Skw6/Uj0dGwOIidc1XqZ3neEbmuuT4BlkL/J4JHAo6fVznHIZq6/MWDsPGOA/jnNowiSXtHHh4S/TOxbl6bQ==" + }, + "webext-options-sync": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/webext-options-sync/-/webext-options-sync-4.0.1.tgz", + "integrity": "sha512-uwR/PAWuHo9DUnYZyAXgYjgUEPxo0yEBR7oNSuOvLUDgjRf5SoSTSh26E00XzbgGmA3VNXA9Uhn2XrYpPSPoEA==", + "requires": { + "dom-form-serializer": "^2.0.0", + "lz-string": "^1.4.4", + "throttle-debounce": "^5.0.0", + "webext-detect-page": "^4.0.1", + "webext-polyfill-kinda": "^1.0.0" + } + }, "webext-polyfill-kinda": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/webext-polyfill-kinda/-/webext-polyfill-kinda-1.0.0.tgz", @@ -7317,7 +7591,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} }, "yallist": { "version": "4.0.0", diff --git a/package.json b/package.json index c4f2b8b..9361db6 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "prettier" ], "rules": { + "unicorn/prefer-top-level-await": "off", "no-new": "off", "no-bitwise": "off" }, @@ -49,6 +50,7 @@ "extends": "stylelint-config-xo" }, "devDependencies": { + "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-node-resolve": "^15.0.1", "eslint": "^8.35.0", "eslint-config-prettier": "^8.6.0", @@ -77,6 +79,8 @@ } }, "dependencies": { + "webext-base-css": "^1.4.3", + "webext-options-sync": "^4.0.1", "webext-polyfill-kinda": "^1.0.0" } } diff --git a/readme.md b/readme.md index ac1c74c..98cf761 100644 --- a/readme.md +++ b/readme.md @@ -1,22 +1,26 @@ +## One Click Extension Manager + -## One Click Extension Manager + -A simple Chrome extension to manage your Chrome extensions. +![](https://user-images.githubusercontent.com/1402241/226161439-960aebe9-cad1-4d4d-a59a-f007db2abfa3.png) + +A _very simple_ Chrome extension to manage your Chrome extensions. It only requires the `management` permission. ## Install [link-chrome]: https://chrome.google.com/webstore/detail/one-click-extension-manag/pbgjpgbpljobkekbhnnmlikbbfhbhmem 'Version published on Chrome Web Store' -[link-firefox]: https://addons.mozilla.org/en-US/firefox/addon/npm-hub/ 'Version published on Mozilla Add-ons' -[link-safari]: https://apps.apple.com/app/npmhub/id1542090429 'Version published on the Mac App Store' [link-edge]: https://microsoftedge.microsoft.com/addons/detail/one-click-extensions-mana/jdodenbllldnoogfmbmmgpieafbnaogm 'Version published on Edge Web Stroe' -[Chrome][link-chrome] [][link-chrome] +[Chrome][link-chrome] [][link-chrome] and other Chromium browsers [Edge][link-edge] [][link-edge] +[](https://github.com/sponsors/fregante) _If you like this extension, consider [sponsoring or hiring](https://github.com/sponsors/fregante) the maintainer [@fregante](https://twitter.com/fregante)_ + ## Internationalization It's available in 12 languages: diff --git a/rollup.config.js b/rollup.config.js index b3c028f..4b9eb60 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,3 +1,4 @@ +import commonjs from '@rollup/plugin-commonjs'; import copy from 'rollup-plugin-copy-glob'; import svelte from 'rollup-plugin-svelte'; import resolve from '@rollup/plugin-node-resolve'; @@ -6,10 +7,13 @@ import livereload from 'rollup-plugin-livereload'; const production = !process.env.ROLLUP_WATCH; const config = { - input: 'source/main.js', + input: { + main: 'source/main.js', + 'options/options': 'source/options/options.js', + }, output: { sourcemap: !production, - format: 'iife', + format: 'es', dir: 'distribution', }, plugins: [ @@ -19,6 +23,7 @@ const config = { dev: !production, }, }), + commonjs(), resolve({ browser: true, dedupe: ['svelte'], diff --git a/source/App.svelte b/source/App.svelte index 38e71a6..eba0014 100644 --- a/source/App.svelte +++ b/source/App.svelte @@ -1,4 +1,5 @@ + diff --git a/source/manifest.json b/source/manifest.json index b9acd07..6778fae 100644 --- a/source/manifest.json +++ b/source/manifest.json @@ -5,7 +5,7 @@ "manifest_version": 3, "homepage_url": "https://github.com/hankxdev/one-click-extensions-manager", "default_locale": "en", - "permissions": ["management"], + "permissions": ["management", "storage"], "minimum_chrome_version": "110", "icons": { "16": "logo.png", @@ -16,7 +16,7 @@ "default_popup": "index.html?type=popup" }, "options_ui": { - "page": "index.html" + "page": "options/options.html" }, "commands": { "_execute_action": {} diff --git a/source/options-storage.js b/source/options-storage.js new file mode 100644 index 0000000..5e63fe3 --- /dev/null +++ b/source/options-storage.js @@ -0,0 +1,10 @@ +import OptionsSync from 'webext-options-sync'; + +const optionsStorage = new OptionsSync({ + defaults: { + showButtons: 'on-demand', // Or 'always' + width: '', + }, +}); + +export default optionsStorage; diff --git a/source/options/options.html b/source/options/options.html new file mode 100644 index 0000000..0ee415a --- /dev/null +++ b/source/options/options.html @@ -0,0 +1,58 @@ + + +One Click Extension Manager options + +
+

+ + +

+

+ + +

+
+
+

+ If you find this useful, consider supporting its development by donating or + leaving a review. +

+ +

+ Made by fregante 🇮🇹 and + Hank Yang 🇨🇳 +

+ diff --git a/source/options/options.js b/source/options/options.js new file mode 100644 index 0000000..8b6e0d5 --- /dev/null +++ b/source/options/options.js @@ -0,0 +1,3 @@ +import optionsStorage from '../options-storage.js'; + +optionsStorage.syncForm(document.querySelector('form')); diff --git a/source/options/webext-base.css b/source/options/webext-base.css new file mode 100644 index 0000000..5aaa561 --- /dev/null +++ b/source/options/webext-base.css @@ -0,0 +1,137 @@ +/* Vendored until a better build is added */ + +/*! https://npm.im/webext-base-css */ + +/* Firefox only: @-moz-document */ +/* Firefox only: var(--in-content-*) */ +/* Chrome only: -webkit-hyphens */ +/* Safari only: _::-webkit-full-page-media */ + +/* webpackIgnore: true */ +@import url('chrome://global/skin/in-content/common.css') +(min--moz-device-pixel-ratio: 0); /* Firefox-only */ + +:root { + --background-color-for-chrome: #292a2d; + max-width: 700px; + margin: auto; +} + +body { + --body-margin-h: 8px; + margin-left: var(--body-margin-h); + margin-right: var(--body-margin-h); +} + +/* Selector matches Firefox’ */ +input[type='number'], +input[type='password'], +input[type='search'], +input[type='text'], +input[type='url'], +input:not([type]), +textarea { + display: block; + box-sizing: border-box; + margin-left: 0; + width: 100%; + resize: vertical; + -moz-tab-size: 4 !important; + tab-size: 4 !important; +} + +input[type='checkbox'] { + vertical-align: -0.15em; +} + +@supports (not (-webkit-hyphens: none)) and (not (-moz-appearance: none)) and + (list-style-type: '*') { + textarea:focus { + /* Inexplicably missing from Chrome’s input style https://github.com/chromium/chromium/blob/6bea0557fe/extensions/renderer/resources/extension.css#L287 */ + border-color: #4d90fe; + transition: border-color 200ms; + } +} + +hr { + margin-right: calc(-1 * var(--body-margin-h)); + margin-left: calc(-1 * var(--body-margin-h)); + border: none; + border-bottom: 1px solid #aaa4; +} + +img { + vertical-align: middle; +} + +_::-webkit-full-page-media, +_:future, +:root { + font-family: -apple-system, BlinkMacSystemFont, sans-serif, + 'Apple Color Emoji'; +} + +_::-webkit-full-page-media, +_:future, +input[type='number'], +input[type='password'], +input[type='search'], +input[type='text'], +input[type='url'], +input:not([type]), +textarea { + border: solid 1px #888; + padding: 0.4em; + font: inherit; + -webkit-appearance: none; +} + +@-moz-document url-prefix('') { + :root, /* Visible on a options_page */ + body { + --body-margin-h: 6px; /* Must be a variable so
’s margin is changed too */ /* Visible on a options_page and options_ui */ + color: var(--in-content-page-color); + + /* Also supports dark themes in Firefox */ + /* !important is to override the dark-mode setting for Chrome below */ + background-color: var(--in-content-box-background) !important; + min-height: 250px; /* Without this there’s a white space at the bottom in dark mode */ + } + + body > * { + margin-left: var(--body-margin-h); + margin-right: var(--body-margin-h); + } + + input[type='checkbox'] { + vertical-align: -0.4em; + } +} + +@media (prefers-color-scheme: dark) { + :root { + color-scheme: dark; + background-color: var(--background-color-for-chrome); + } + + body, + h3 { + /* Chrome #3 */ + color: var(--in-content-page-color, #e8eaed); + } + + a { + color: var(--in-content-link-color, #8ab4f8); + } + + input[type='number'], + input[type='password'], + input[type='search'], + input[type='text'], + input[type='url'], + input:not([type]), + textarea { + color: inherit; + background-color: transparent; + } +}