From 546f33073f6dac6b354cddd4045010969d0454c3 Mon Sep 17 00:00:00 2001 From: paulcoding810 Date: Fri, 28 Feb 2025 14:41:23 +0700 Subject: [PATCH 1/5] Get dominant color from background --- package.json | 1 + src/newtab/Background.jsx | 22 ++- src/newtab/NewTab.jsx | 9 +- src/newtab/Time.jsx | 2 +- src/newtab/utils.js | 10 ++ yarn.lock | 350 +++++++++++++++++++++++++++++++++++++- 6 files changed, 385 insertions(+), 9 deletions(-) create mode 100644 src/newtab/utils.js diff --git a/package.json b/package.json index a2837d1..c29279b 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "zip:firefox": "export BROWSER=firefox && yarn build && node src/zip.js" }, "dependencies": { + "colorthief": "^2.6.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/src/newtab/Background.jsx b/src/newtab/Background.jsx index 93fa151..9ce0fad 100644 --- a/src/newtab/Background.jsx +++ b/src/newtab/Background.jsx @@ -1,18 +1,36 @@ -import { memo } from 'react' +import ColorThief from 'colorthief' +import { createRef, memo, useEffect } from 'react' +import { rgbToHex } from './utils' -const Background = ({ media, blur = 0, width, height, ...props }) => { +const colorThief = new ColorThief() + +const Background = ({ media, blur = 0, width, height, onColorThief = null, ...props }) => { + const imgRef = createRef() let style = { filter: `blur(${(blur * 20) / 100}px)`, // max 20px width, height, } + // reset color thief on video change + useEffect(() => { + if (media.blob && media.blob.type.startsWith('video')) { + onColorThief?.(null) + } + }, [media]) + if (media.blob) { const objectUrl = URL.createObjectURL(media.blob) if (media.blob.type.startsWith('image')) { return ( { + const img = imgRef.current + const result = colorThief.getColor(img, 25) + onColorThief?.(rgbToHex(result)) + }} className="pointer-events-none object-cover w-full h-full blur-[10px]" src={objectUrl} style={style} diff --git a/src/newtab/NewTab.jsx b/src/newtab/NewTab.jsx index 6f29663..eb5023c 100644 --- a/src/newtab/NewTab.jsx +++ b/src/newtab/NewTab.jsx @@ -4,10 +4,12 @@ import { db, settingsStorage } from '../helper' import '../index.css' import Background from './Background' import Time from './Time' +import Weather from './Weather' export const NewTab = () => { const [media, setMedia] = useState(null) const [config, setConfig] = useState({}) + const [dominantColor, setDominantColor] = useState(null) function initialize() { settingsStorage.get('mediaId').then((mediaId) => { @@ -48,10 +50,13 @@ export const NewTab = () => { return (
- {media && } + {media && }
{config.showsTime && ( -
+
)} diff --git a/src/newtab/Time.jsx b/src/newtab/Time.jsx index 5f56874..daaa1f3 100644 --- a/src/newtab/Time.jsx +++ b/src/newtab/Time.jsx @@ -22,7 +22,7 @@ const Time = () => { return (
-

{time}

+

{time}

) } diff --git a/src/newtab/utils.js b/src/newtab/utils.js new file mode 100644 index 0000000..0a604a9 --- /dev/null +++ b/src/newtab/utils.js @@ -0,0 +1,10 @@ +const rgbToHex = ([r, g, b]) => + '#' + + [r, g, b] + .map((x) => { + const hex = x.toString(16) + return hex.length === 1 ? '0' + hex : hex + }) + .join('') + +export { rgbToHex } diff --git a/yarn.lock b/yarn.lock index be15959..80b6f63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -267,6 +267,13 @@ rollup "2.79.2" rxjs "7.5.7" +"@emnapi/runtime@^1.2.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60" + integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw== + dependencies: + tslib "^2.4.0" + "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" @@ -473,6 +480,119 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== +"@img/sharp-darwin-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz#ef5b5a07862805f1e8145a377c8ba6e98813ca08" + integrity sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.0.4" + +"@img/sharp-darwin-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz#e03d3451cd9e664faa72948cc70a403ea4063d61" + integrity sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.0.4" + +"@img/sharp-libvips-darwin-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz#447c5026700c01a993c7804eb8af5f6e9868c07f" + integrity sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== + +"@img/sharp-libvips-darwin-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz#e0456f8f7c623f9dbfbdc77383caa72281d86062" + integrity sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== + +"@img/sharp-libvips-linux-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz#979b1c66c9a91f7ff2893556ef267f90ebe51704" + integrity sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== + +"@img/sharp-libvips-linux-arm@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz#99f922d4e15216ec205dcb6891b721bfd2884197" + integrity sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== + +"@img/sharp-libvips-linux-s390x@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz#f8a5eb1f374a082f72b3f45e2fb25b8118a8a5ce" + integrity sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== + +"@img/sharp-libvips-linux-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz#d4c4619cdd157774906e15770ee119931c7ef5e0" + integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== + +"@img/sharp-libvips-linuxmusl-arm64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz#166778da0f48dd2bded1fa3033cee6b588f0d5d5" + integrity sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== + +"@img/sharp-libvips-linuxmusl-x64@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz#93794e4d7720b077fcad3e02982f2f1c246751ff" + integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== + +"@img/sharp-linux-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz#edb0697e7a8279c9fc829a60fc35644c4839bb22" + integrity sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.0.4" + +"@img/sharp-linux-arm@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz#422c1a352e7b5832842577dc51602bcd5b6f5eff" + integrity sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.0.5" + +"@img/sharp-linux-s390x@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz#f5c077926b48e97e4a04d004dfaf175972059667" + integrity sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.0.4" + +"@img/sharp-linux-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz#d806e0afd71ae6775cc87f0da8f2d03a7c2209cb" + integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.0.4" + +"@img/sharp-linuxmusl-arm64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz#252975b915894fb315af5deea174651e208d3d6b" + integrity sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + +"@img/sharp-linuxmusl-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz#3f4609ac5d8ef8ec7dadee80b560961a60fd4f48" + integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + +"@img/sharp-wasm32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz#6f44f3283069d935bb5ca5813153572f3e6f61a1" + integrity sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== + dependencies: + "@emnapi/runtime" "^1.2.0" + +"@img/sharp-win32-ia32@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz#1a0c839a40c5351e9885628c85f2e5dfd02b52a9" + integrity sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== + +"@img/sharp-win32-x64@0.33.5": + version "0.33.5" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz#56f00962ff0c4e0eb93d34a047d29fa995e3e342" + integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -517,6 +637,11 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@lokesh.dhakar/quantize@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@lokesh.dhakar/quantize/-/quantize-1.4.0.tgz#20bf62a8c34fa32d8e074bad1dacafd7dd5e026a" + integrity sha512-+//cqVWKis//t0YH62EDtwaFSPG/CDtYNg4CZmzNmG2d5W17Iu3fuDAdpQXCDHUDrrU9q0veze4A7tPZXlR/mg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -648,6 +773,11 @@ "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -726,6 +856,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/ndarray@^1.0.14": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@types/ndarray/-/ndarray-1.0.14.tgz#96b28c09a3587a76de380243f87bb7a2d63b4b23" + integrity sha512-oANmFZMnFQvb219SSBIhI1Ih/r4CvHDOzkWyJS/XRqkMrGH5/kaPSA1hQhdIBzouaE+5KpE/f5ylI9cujmckQg== + "@types/node@*": version "22.13.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.1.tgz#a2a3fefbdeb7ba6b89f40371842162fac0934f33" @@ -775,6 +910,13 @@ resolved "https://registry.yarnpkg.com/@webcomponents/custom-elements/-/custom-elements-1.6.0.tgz#5ecde1c332464ff00612f51874484b78395d504d" integrity sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -1121,6 +1263,11 @@ bare-events@^2.2.0: resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1219,6 +1366,14 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -1433,16 +1588,42 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +colorthief@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/colorthief/-/colorthief-2.6.0.tgz#f5a7852cd66af31d9559a0341b05c5bb83281f03" + integrity sha512-yL3B7laeOr4kH9XasFF5rl+9Taz+Pmt/CRbaTI6XepZFyQvk4K/abaGKIAsngVpxKkgFeoJ2IwdRpS228icrig== + dependencies: + "@lokesh.dhakar/quantize" "^1.4.0" + file-type "^16.5.3" + ndarray-pixels "^4.1.0" + sharp "^0.33.5" + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -1541,6 +1722,13 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +cwise-compiler@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz#f4d667410e850d3a313a7d2db7b1e505bb034cc5" + integrity sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ== + dependencies: + uniq "^1.0.0" + d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" @@ -1662,6 +1850,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -2136,6 +2329,16 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2257,6 +2460,15 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" +file-type@^16.5.3: + version "16.5.4" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== + dependencies: + readable-web-to-node-stream "^3.0.0" + strtok3 "^6.2.4" + token-types "^4.1.1" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -2802,6 +3014,11 @@ iconv-lite@0.6.3, iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -2857,6 +3074,11 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== +iota-array@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/iota-array/-/iota-array-1.0.0.tgz#81ef57fe5d05814cd58c2483632a99c30a0e8087" + integrity sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA== + is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -2886,6 +3108,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-async-function@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" @@ -2926,7 +3153,7 @@ is-boolean-object@^1.2.1: call-bound "^1.0.3" has-tostringtag "^1.0.2" -is-buffer@^1.1.5: +is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -3606,6 +3833,31 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +ndarray-ops@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ndarray-ops/-/ndarray-ops-1.2.2.tgz#59e88d2c32a7eebcb1bc690fae141579557a614e" + integrity sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw== + dependencies: + cwise-compiler "^1.0.0" + +ndarray-pixels@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ndarray-pixels/-/ndarray-pixels-4.1.0.tgz#6525d573347ec375aa1b690688a51d02fdca7fb7" + integrity sha512-xKPI4zXJ2pkUcVX24zIN1AWqqPWvRWWhRuO6PlY4EdB2VNRauNwA6rDdsAQG/ldQp0sU7nTXgPR/io1duy3Zyg== + dependencies: + "@types/ndarray" "^1.0.14" + ndarray "^1.0.19" + ndarray-ops "^1.2.2" + sharp "^0.33.4" + +ndarray@^1.0.19: + version "1.0.19" + resolved "https://registry.yarnpkg.com/ndarray/-/ndarray-1.0.19.tgz#6785b5f5dfa58b83e31ae5b2a058cfd1ab3f694e" + integrity sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ== + dependencies: + iota-array "^1.0.0" + is-buffer "^1.0.2" + next-tick@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" @@ -3977,6 +4229,11 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +peek-readable@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" + integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== + picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -4097,6 +4354,11 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" @@ -4209,6 +4471,24 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-web-to-node-stream@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz#392ba37707af5bf62d725c36c1b5d6ef4119eefc" + integrity sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw== + dependencies: + readable-stream "^4.7.0" + readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -4482,6 +4762,11 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.6.3: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -4528,6 +4813,35 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" +sharp@^0.33.4, sharp@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.5.tgz#13e0e4130cc309d6a9497596715240b2ec0c594e" + integrity sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== + dependencies: + color "^4.2.3" + detect-libc "^2.0.3" + semver "^7.6.3" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.33.5" + "@img/sharp-darwin-x64" "0.33.5" + "@img/sharp-libvips-darwin-arm64" "1.0.4" + "@img/sharp-libvips-darwin-x64" "1.0.4" + "@img/sharp-libvips-linux-arm" "1.0.5" + "@img/sharp-libvips-linux-arm64" "1.0.4" + "@img/sharp-libvips-linux-s390x" "1.0.4" + "@img/sharp-libvips-linux-x64" "1.0.4" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.4" + "@img/sharp-libvips-linuxmusl-x64" "1.0.4" + "@img/sharp-linux-arm" "0.33.5" + "@img/sharp-linux-arm64" "0.33.5" + "@img/sharp-linux-s390x" "0.33.5" + "@img/sharp-linux-x64" "0.33.5" + "@img/sharp-linuxmusl-arm64" "0.33.5" + "@img/sharp-linuxmusl-x64" "0.33.5" + "@img/sharp-wasm32" "0.33.5" + "@img/sharp-win32-ia32" "0.33.5" + "@img/sharp-win32-x64" "0.33.5" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4585,6 +4899,13 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -4815,7 +5136,7 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -4869,6 +5190,14 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strtok3@^6.2.4: + version "6.3.0" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" + integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^4.1.0" + sucrase@^3.35.0: version "3.35.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" @@ -5037,12 +5366,20 @@ to-through@^2.0.0: dependencies: through2 "^2.0.3" +token-types@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" + integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tslib@^2.0.3, tslib@^2.1.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -5165,6 +5502,11 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +uniq@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== + unique-stream@^2.0.2: version "2.3.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" From 10a8c63205b61929efbbfa815959c0204bf234df Mon Sep 17 00:00:00 2001 From: paulcoding810 Date: Sat, 1 Mar 2025 21:08:02 +0700 Subject: [PATCH 2/5] Add weather settings --- public/img/weathers/01d.png | Bin 0 -> 948 bytes public/img/weathers/01n.png | Bin 0 -> 945 bytes public/img/weathers/02d.png | Bin 0 -> 1628 bytes public/img/weathers/02n.png | Bin 0 -> 1666 bytes public/img/weathers/03d.png | Bin 0 -> 837 bytes public/img/weathers/03n.png | Bin 0 -> 837 bytes public/img/weathers/04d.png | Bin 0 -> 1869 bytes public/img/weathers/04n.png | Bin 0 -> 1869 bytes public/img/weathers/09d.png | Bin 0 -> 2697 bytes public/img/weathers/09n.png | Bin 0 -> 2697 bytes public/img/weathers/10d.png | Bin 0 -> 2584 bytes public/img/weathers/10n.png | Bin 0 -> 2584 bytes public/img/weathers/11d.png | Bin 0 -> 2844 bytes public/img/weathers/11n.png | Bin 0 -> 2844 bytes public/img/weathers/13d.png | Bin 0 -> 1703 bytes public/img/weathers/13n.png | Bin 0 -> 1703 bytes public/img/weathers/50d.png | Bin 0 -> 650 bytes public/img/weathers/50n.png | Bin 0 -> 650 bytes src/background/index.js | 4 ++ src/newtab/NewTab.jsx | 8 ++++ src/newtab/Weather.jsx | 83 ++++++++++++++++++++++++++++++++++ src/options/ConfigSection.jsx | 54 ++++++++++++++++++++++ 22 files changed, 149 insertions(+) create mode 100644 public/img/weathers/01d.png create mode 100644 public/img/weathers/01n.png create mode 100644 public/img/weathers/02d.png create mode 100644 public/img/weathers/02n.png create mode 100644 public/img/weathers/03d.png create mode 100644 public/img/weathers/03n.png create mode 100644 public/img/weathers/04d.png create mode 100644 public/img/weathers/04n.png create mode 100644 public/img/weathers/09d.png create mode 100644 public/img/weathers/09n.png create mode 100644 public/img/weathers/10d.png create mode 100644 public/img/weathers/10n.png create mode 100644 public/img/weathers/11d.png create mode 100644 public/img/weathers/11n.png create mode 100644 public/img/weathers/13d.png create mode 100644 public/img/weathers/13n.png create mode 100644 public/img/weathers/50d.png create mode 100644 public/img/weathers/50n.png create mode 100644 src/newtab/Weather.jsx diff --git a/public/img/weathers/01d.png b/public/img/weathers/01d.png new file mode 100644 index 0000000000000000000000000000000000000000..ed42ad9e01a8ac5c6a724cce862c79efe64c5113 GIT binary patch literal 948 zcmV;l155mgP)9LMpmDT&B6hN8p^g$x<)gDLX^g`^~+JSjz#2gRE=JSbASFP@ZSmXLYOOdd>E zNt7WZ6s;_}#O=6eum6AT{62NMx9)BK);Yg(_PF*zL_|bHL_|bHL_|bHL_|bHL_|cy zOf##Xm&<1qwWu1P78nW)1bP4+Y2ZT6Pc-*J`T*;J1ywF*Y)Rk<~a@u=mOLM z4+<#bcjJJwz%gKW!ON~%j)lwv?!+QeZsWr0?;@}&Va7kpt&nZNuCV!DybIYLH?BG9 z4qO6Sd5p=kkXgVI$Na_&1~zyEdlk|i*y)sAsns5osB&#s%LZ(*mKRKFaH74sqrWofHWxmzH zqGciNtT&Jas)?uVld~*jY>BQ={)x$_+p>_6hFK{Lu?Vp&WPo8-3SBHhEDPyrn3X~$ z6Dz7_Sx5)NtQ1;Xgjg2x)iA5HEDOnXhD%l~U!?aXcs&~P#UjMAkY|QjDZH}?u`J}C zVO9#SEkY~{xont~!X1kc%R-JBW~Fe{BE+(g=W+IV8GVWq`I58V72R9XLUsdhErP5I zG5Odhu-_`kx{zyex@MVt1`b$_*W>7Uu|sAx!tDyLtin7Bxm}`N;19qi%RsO5ON*Rx z|J8EqK(9h>0c)JHE43%i$ui}626kh-*Dpum*6L**o$|wR#vscBz`x1q zvTE4p9~r;7!BSnkW9o+Q)Bi5F>)hcq#kx34@JiyW`gokN5O|U}t75rMJP3E@4g+Qb z_X}QjIBUBS=nHHqc-d9UeXi~9_?QVyh(CKZVL9*OfnL~PAIxm8?iXd5{JbYVRy6pU zrXg{9XP8yrCjMXeZj_I4d-O71c0C!dR%Tm*h=_=Yh=_=Yh=_=Yh=_=Yh=|Dl0r&=| WM07SpB(5j`0000?ZnwBHJP2x_#6c?paQ-fS~2He>>nLAap@S&IIG)Jdzrq(+*Om~TNa=LhO zq2e*?d(Z#;e}3|PaQ zEk!Qb$YrQo_AmCo)4FroBxgnT*K-*wU-QiQdZ)Hhe3PYIOz|br9SmDONK8&wyxiE@ z_mfwWW6f8NZ(2)qH=Nbn9i(kjwluCar*r9(bAS4eEuO%4z^DCAz2LbW%c9t-L^fSi z+$0Jt@Vq}#odp0>m6`eZSdMjE&PM6rB;s7^ZYg3D^1U7pUPR??RwhjR)o9) zcZhKQZT0lX6ElR)2K?(gx%>8}2@l&MHF-91Y}8pYKQWAJu8xxq_shH)Q=L?~wO6G@ zdRQM`BN7$W5+U~KsKM$jI@~8qTfM_{>OJ3kefXVmBE4JSw9`DPw51=eDIM7~!5V1R z9*|j276HxL4l>I!X~xt;iC|?%uRc%xVyO4T``oXP5`Rzbo2+{_a%|E&@+5cu0lU=- zubtK%c{(fg6Q{@j7a>myzwS8z^x(t7*6Cr1a;HnRuAxQVgbT$a^#4IYZIRqr2t9m&TNx;=eA*tfSBHUuAjb z)q->OHg!eKOW%I%T$#Pk{-62Iv&HSVMOHu7I_TZGS?>7jp2`D@k3@=|E`8`&VN}jx zz`P^+!?we*w^JSR6Pyp;UKjN)JGcDkb(4geKerysZ~JT(_o9{gTjQB?uj+!P9X-GM zadzh3{!A&6>E&&qU)MhR-g@5cr$E2E{-Z6gKUzf3%;i+V1pnC|X!Dtsm}T9n6#`~O N22WQ%mvv4FO#qL;wORlG literal 0 HcmV?d00001 diff --git a/public/img/weathers/02d.png b/public/img/weathers/02d.png new file mode 100644 index 0000000000000000000000000000000000000000..fabd9c3b31a1032119075253795e9b7ed4116bcd GIT binary patch literal 1628 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 E0C6^bEC2ui literal 0 HcmV?d00001 diff --git a/public/img/weathers/03n.png b/public/img/weathers/03n.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2e9f7f955fe1b8da7f30e9ae15b2f707387c48 GIT binary patch literal 837 zcmeAS@N?(olHy`uVBq!ia0vp^DIm>P?`AWc7~S-m-ejAoHrg_yf=SDPl?b_^@-?U)%;(kqaiJ3;*q@k2$SkU4Af3?c`uJQKgmd|Y;e_wg?%-r95&Rg!ce!l0q?QOP%hekm$Ah;>xlaY^4@g z&4Aq34Kw?`PQUUawzzBZtPrWFcQN$|TzfcnFqIr%{pb4u=Lbv%$9J~-xGlTDVsLwB z9jgV8%-WB)N)kjj$lj2dp2#)XOX2aH*V~WIuUdDM^FZYDI<~2&6klgE+45L0uhGf+ zpu{{gr1Z|eumt(7Ioeqd_K1rg-t<#1f!jd8PT^N${DF-AIH@nfGgxcZegC#ePp^;F z@0jyt!vx2xH+(x=1$!h@R=v^dpIo(LXUYDS)$4U#d0xqSa6A?@xLPU0|GrD&it&U3 z)jOe=4D60XA9;AsOaFt>yzo1fY@664W*m33n89Jw`CRDH-Q&>*Tpw(Fejsl1n!p3m z32p9wn_}0^6PunoZENX_Hpe^L^w!rt7xma3d^cnbgI~p$N1`5z#Xsh}?N+Z1j%(bq zYzMpSo9%itUnM)FPE2L3^w`7nGicS_TRSwbvF>GhS+;7n)aSp?MNh;o-?j4P=6A=n zC#*goz5JHu&y>5}&pr2E-dLt37y136LrJZa?O#b-2fG*)luK`cd=M%d6g* zf2sbGs8Eye|H$&BcSrOE|9(EJ^ZIGIAa*cuA;UkWQ;RcxC35Xd17;5fPgg&ebxsLQ E0C6^bEC2ui literal 0 HcmV?d00001 diff --git a/public/img/weathers/04d.png b/public/img/weathers/04d.png new file mode 100644 index 0000000000000000000000000000000000000000..9c64ea86b6a93c7fd61543c696956b0657454fe9 GIT binary patch literal 1869 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 D(B1}6 literal 0 HcmV?d00001 diff --git a/public/img/weathers/09n.png b/public/img/weathers/09n.png new file mode 100644 index 0000000000000000000000000000000000000000..0f14cb61a53463cf6ca803561716b21a41cd3c36 GIT binary patch literal 2697 zcmV;43U>90P)U4DF_S2r1S7%mZ*7z+!h=I(8NED^y%*(I1(Nnk(ZN`onBwx z@bt*Yh<)hNf)T)Lllp|?php|BiVrLIx%h6H&1NgKSS*DbHf-p(T5TvUK7iEJRD_3z z(-5ZRK3{Vi`Ltmd)tu>Vny9 z*4k5y+?JdN@OJx(+O!rwOJhX9^;F&PsM zi84GqjIb~uBjZa@Rh4}_^uD(8IGfM$mmrIHgf-Jo_j8H8@uyCm3Zv2JjUZnTRY!ja zk~bOd@$vC!Z*Rwq z8#fRT5Qv0?__3jE0(@fkTp`-+E#+}4-9SSWE&tMxMQ(3bS2sTWv<`dszJ-eyFCr~1 zjX4Dqh*DfuR{A3m&m_{znyoi62%3Y0g@v(34+=6cd-CX`kD#PvKb9_i64$R^pQwmV z02@WsPvnrbPGH#{Lp{VEY8hpai8N(O6pD&|&D`cQXDTsmS_(Vw1YP)b0H2AfpU58K zbx6ct*w_FGggF#Peck5EwF5#Gdg?kLvnHowr}6M%xbkh z(AL&A(_k=U@Wrg3aACyOLtxoffn^JU^1b@|`;ediOyd6i@75WO#@fclrhgd>2ERRv zNI@nwS-=yhmyie6+iT99J$n|4i{E97UKGv`3JUU19R!wrLSWg#AfvCU>L9u8MXE>`5@p7W88~v}5Yp2hz=aE!*aBEvTbsBSLR7(gVz`Q@ z^|%d9$jG~)4@GY$i75NaWOs?Xx;n9AM-lq^dfB9M=guM_HS@;;)dv8caOWC&coM>7 z3csTq4+DUnLP5~=&h;Wu91&F~f2@Z*>8?Eq4i08wP#9y$k|$7Ab^Z=<{6ML*7~sa9 z7QCo;(3%Q)VxsWZ0@c%eVW(!ie;5sE7}46=g5A6KpuD^sd-wjHH3kVK7?rPaEVsUwq?=%9p-{+K07v-R{-mReEp618k&#pI;fG~dzy5_+@4x?x+sL4Yg@w)B zwd*&vl*;1_4IlKT(zW*SoraV1=c||qxw-Skk{u{4;=_za2Gv&tlbQzP{8oSR$z^KH zUl|OBPDN2ZYieq#wKrr%MFneY+EX}xel8X+TsT%vcXv0A9XpPbCr{zZmFk%QLT1gH zc_A+^4+RDJOt9WwGaGXJ>>y}nQhEpp5fT!DkPzAhWyQxIm*eo^qqutY8iIp^*xO8v zN4?~wmo}iWu@QUryv6c(M@Ce(^`NjYpXKwC7@If0#>9+`jm?RVk7GNk+S~v0@a@~T z&Qhkyjvc>5cJ^#0iiTCeyCSNG_*D>UyjBn8=JQ<@3_Ds;XX8RW%2r_NGWtlua~|qg2xa z2liv$ym>xzqwhIEXpFZL8XAItfYH&B@}b^;{{x&peHv%ZoJC-u0ZB(3u$xcv@Q50n{<)`t}yA?%QPi0Z#(t;Bg@vl6!h@kz4O*F(cH8o-S^y%2Q?~jOy ziFPL^YeMch8)7%8;6~MK?qxmU;K4(vtUQOv$VjB5q%fO6jj5_CWxyu`_yupw7P{79 zANuPK#Rt&PL&*u?J&*Gp{(qPFHaI3I-KW0(DypliL3YK5+tq!JFhMqM+%&c}-Q3)a zj*c!i$Dko8D=U-P0{V_OW)c?zS%gmf+~LpT_TJ&ZQitPm8WFYDXLJqSKOuB)5GF`cQj*K_ zF1(yjr*Oq~7nhylv;BA;Mb?bPGBh^Ck+VQqjCyo|^^j~$afto=xO$u)0;m8mi~kzK zpS9kA>`-_(MQDGE%F0R>q9LQ~W)7BL(Ssnvd^arFh;O<0K86X!KKuCNuG&^J!Q5L);K|L;xG3Nx&!h+6 zyRmJ&n^5D^P*qn~$97m9J$i`ku<~SXBFgR6`%h~;#>D{N0^r< zWo2c-UEQG+|6jOGQP+S*%&}9NP{@Gk%FgB9TZW z5{X12kw_#Gi9{liNF)-8L?V$$Boc{4B9TZWq5$w;?BvCS0QD>{00000NkvXXu0mjf D(B1}6 literal 0 HcmV?d00001 diff --git a/public/img/weathers/10d.png b/public/img/weathers/10d.png new file mode 100644 index 0000000000000000000000000000000000000000..62304fded6be1c5cea4a6a353cf336a98bec4c3f GIT binary patch literal 2584 zcmaKuXFL=R1IN!6iDbs*jL@IUR%e~losm5f*_7>MCmC0fGrMdK;bd=4*(+y-dt_zD zW!xb<`|0_7p105Q;`jT$`@a67jSRF{m~Juw000&pZMex_KK;)a>Hq%opDAVlz?B6Z zILzz?b`u-&+-w|3fUeGmLfJI{eCn}yBe#lwVM@ki-7AcUT)GugvQ9)Lyg7gDR3O&8 z!n`8<<9DVu7Zl!J_4DOjo@EPrwquf6(|rzu;ljecA6eTsJl`LITEs|O-Bz->+GpJ(UyMg3DKPgY}y5vw$I5>>+VVH(i0gORp0^Q@Xex**{b=E^+ z`a^NW_ythU&GWtGG~UhZZqKsY)&aK^iok6~@vr$ATIjHl(W_m32KY}lr*Hb`7C`N- zSMr*}EL{K#e$AsMW(6Q$`H7Sy*i*T_0JwEybVq+~_tZEgQoKE&xx>UP3v@)iJTP47 z<~o;+FJZD(Vvxw{9^gYZdTBuF0;|oEK(%0~z$+vRIIWZa9(r`ePdc!X|B3F3VbDZM z*{nDYTG~JOL3yJJYZ&#atYlz^KZ%II@qjC7Mi3}jYuVH z4&tt%9f~sW_eAw*_Rgkh#X^B~Zr+gBFWRiCR<0hi|JJux0X?1@`D{{3u^#Nfn-(fP z8DpEi3l~8L_Hxvc6_e{e3-}ktpBr6)t;FY-p|;IFZc%GY;R#AU)F)S1-uJ7E$iBzU zv>-DVM9Hijdz_pFjF{pF-&u~Qz_$Q~!E>Tem%dl_m5B!jv0lW?1+k-Dt`G}%;2pSZ zRB=T^qRqn>whY*2bk5H-&{zaHwA8~sJ!%t!2$R1d(?V4iEY`aP18c1|^OYczM|mCyM_#)Hb~;?zX`K+xh}+ zN=b4}p;wn*we+&W=66f@<_NML(!0jWzsio5Wx^PDKj((7$ugYfEQK-FGQF65_p(Ku z-a0+Zd~MQlVw~h$Ey=7u#u%x=7_?kI;DBD>Jh`py1aXl6!Dd}OL!giidXo0FJoVNlDzeolz+KMUa_1Zlf_(q{m z`3$?=*t9_Hj%Cy5<>5}%3XzrJsUJy*E7VOpSK?=ikJBoMWK|83EM_Fvgnb=v^GbEZ-?{*;!;nf0M$g|BwKjy|>)=PFr>-bg-U zyLL%$9?z+Iw~6Db_Idx49(1laPB}?14ZQClc}wggnd0W|xYHf0Q)sHEc4YlYPj$q= zu+Rh_&FRmcp#2D*J>~ol*KHn2m9_fg@oy`>$E25_YF*bSrJqHeV!d=vL}XG>j( zG*qJcnLYLE-0T6!c4t{$F6eJIiQM3*RxhujH`AIi99^l24 zi!)42P5u0VzO?@cMa%P{pTeRK@rvfEtugHtb|cDGjqF$6>4>r)de&gsZs|`#Mu{-B z+#=D8tMqR=tqL1tcaKR7N~TscvT(B)m(1@2(#C>Z4wg{A(h&2p`t|H}`P0Mg)hP0+ zESZp&WKcwZU_Bxur9Ce`>ysq3mU*#LJlpOqpnEI)HTPusvmo8rP0R7|i2!s(~=WRn_b^a9QP;k_^E5* zD)@98HLnK7>g(`TK?>$%p+3kUKjL=Kec_h$48%y{J*7lw8XClZEhMN@3%&ZfC!Z#U zkwW^AzmS%qohB$?=a++Mcaz?%dHSl#oQI9*`u6TR@e#2N_XE45oSj`;e|mWbb0PTq zLCBI6|HT0*dQuqpZd~dtvd~Zx!+Lirw%$3!wN1b_759S{Gf&(Joxs>eQP-VhjPKIP zDWk$6JKeX@1Sfx-$&g+3`&g-_bOIMtLj?okU`kbq*~xOBt$f&6UNjOUJOagkTHSIE(TVQYnI;TqWRiF2IQ`^d`mo zyX-qWOV6XNyqmLal!J_|tgMWU6F6akG&iyzBg-W*7nytc>8%LmeJVla@Tt+fdVHgt r%Wyz_1O7*d$p6Wv|0WfZ=8V;WO01z+^n~=c_y9Tx19+u|{p)`Nw}AnJ literal 0 HcmV?d00001 diff --git a/public/img/weathers/10n.png b/public/img/weathers/10n.png new file mode 100644 index 0000000000000000000000000000000000000000..b5e5d101266c3a54b4893e8e38e3c0014f3fdfa2 GIT binary patch literal 2584 zcmaKuc{me}AIGO5b8v_l*R z1Wy{2KE~S!f3P#jEW0VnBCCoQOUhum{DyLYVgS+S;FmX8<+HSmm%fk@7#|p+P8fF? zgsDf4$OPudM>833L-kZmQ|~d0VyCs3FJjl4mUKB-Puzz~@c(bD`xy=Yo}QSP2+Iz( z7xncI^O#E#z~f_PtCys;80P`10BvqpwM6~HX&t~H;H)Cx*NMF)#>C|DwC?RSsdNYX z<@|R-q+LMYs(#i5Kr0Em!=-K_o7kxOrm3(jHN2C3RsnF*T1ZM*mE|WZoGPJr=5c}u zk4iqF7n6cwb@4 z@`dK7W-!>J1xSi4ag}NGwGfTkyQD-G#rgT~l&Oh>8mhOA+SnWr5Dj|iE3Ym)zEZnJ z%N$&l#prXdaj+*8L&*0z>75M!jVKUuY#}FIWM|VGr>_f~l}{`q!W^DTKQJh!E#?0C zxti5E{p1`LtCVl*xTzyzvs>|pLM-=a*Pho@81hx^|^NqSe>1;=*a$FLWlxr{pcM%MO7l=NDx?YTP`#Y!X! z*Llx<;-t?8`3>0-%wLQld?m*{Gnl_na1D@qg3mxfk2@W1eDa#}$GHf4jE9t}z>yK1 zw?vC9f?a!`-YE6FeLDCTDzUE%n~7Vy7OTY3QS3VWy+%kkP9rp+zCQe8*aBB2fhwf! z%WqoCjY5t1Nmf;9PNxT|bQ2vptVV@erlBCSqQ_5t1l_*=c-{eps<|E&ghvrt3fTaH zbuclUuTED}N+9`{bvbRz5ih*P;YOJquzfbeG{*3)Kb8Mf7G_S%J&qA3&*&u{-uGh* zdvU~MoO_j$u9Ioz(JiC!fHE0WxAclg9du5;X@GyzX)B0LkviS7H>`qb3pQ;|PJo{h zv&lr}hU*QU!4~I=kbLU-O@I;hPp+$k)cN+!q_?!(0)fGE+r|kN#w{-YhB=cd69`U= za35BOoL2@N^CvG!B~aiG+TCs{#)^YsRuhq$9cmZ$@0 z2Ut20B}K69%w4xmydOl=@!>>)Lq0d`nR!Dh?43}nd(^Dox5Svnv}A&RHYMfxaa=Q?Tri0!O22Hh?V++ zZDF<@0ToQ|!fU0YrZ3)EX3+XC9La~d_LyxgX{7%%uQE&25I6`{MJ-Ba%z)E`Xm9p69?3q ziB999p9e_WFARBPgTZO*^CK2+^QD=8e}BbS+p%{ht%II;ZpaXk;!ZiJUk#c6VYN32 zG*z~%epTK_)rNX#Ub)?xWRsx9^Rlg|sY3KUk5nq(=QCT2wX~I;sylG%&Z-(awkNdd z&$T-b+UIgb3JP*yV!VC%I_JnhTS+aT!k@`~C6Ld|JHB%||W z8XtWsriSU548~$0^xoG(& zmh$Ed^+w~Ih4DMO;spiIYqrN_@_r{@n%&C$ZE_rcK-8BU8UU-SBq5>U#O!`EGst8u zm?>TXH@l~Uu3%rRG3np19A$3FjP%}xakeJtCaUibf-_2JzS8Y6-2J!rY~oo+T=Beb zjtA@TF|k^c2Mu#iR+ZvuQG0RA_B%iB@Kd`oQqS=e@#OcdM-x9r&7Bx1ge8}sxpcSb zZO(KQx19V>OrECrqBr0Si?(<|-bWbYsGfD>>~cXRkLJsk&9=GT&Tq7Db#i(`{uS2Z|LH;)F@};v$14EW@=?R|F#LfTG>y(Z~iiy4=3$ zejMM7Sn+5VbKNWtg-oCM6%PsdP6*a(xTBEF^@wL!1x?|$aK0!r$!#z+v>rsiE_&eF zHw7Zb2qnq^bj?uToX(Ef=WxdSo5m(}uvnP^kdu>UsUz(#YAE5Oih`0iu2WKzAbkhiGH1TJfD_G0N zn}v^o(C6UZoHopR`$|bgMMa#^vLbugoXdU_IzhKg>m5Lpwkj-Vjcyi>*~7EoKQTIK q9eQ4|{C?@u|3{hrt5X4hL-Ds+h8Bvjpyz*$4}iR8ZdhsHn)DxmH|971 literal 0 HcmV?d00001 diff --git a/public/img/weathers/11d.png b/public/img/weathers/11d.png new file mode 100644 index 0000000000000000000000000000000000000000..4a885cfa9e79bc113e3d2dc7c7ad7d425e97e1fc GIT binary patch literal 2844 zcmV+%3*+>OP)n5 z+o=j#Q99aKYSoGwt&TccS`-GY1qB64AS8i+B%6@u-rM=^o=sL*0-HU%n=t1$lS%gO z?%8wif6wfEU46dC>-FBz+}w=MmvCHilb)&TVJHc*K-u*bz)YYL7zGrm-<6hS z&Ft#xeDaJl&e(R>U3X6H?d_$pu`y9mz5`@NJuU`H5<`$sLqkJDBBF@k1;E+Bt7D^WZiB!+%Lh0d2KpXFC8^iCDUeNX2}4|sm5`kE_qlk7Q)cUENHq2jwThBXIt7^nR1fyea^Y>;c14*! zeL9O4Ep$y+68U2?2ak|0K?;H8i4GDGMY!UM%c-cSprs{gb+yZZlae)fgmejVi_{8r z3?!n+D#^{weYXB zSIL0`Uy+fKf#2`Pacos?@ljS*>PBRd_r%F|o%4=Gx&%2>=U@@jRarS6pD%+02ljLG z%{MWA{ApxmWx3C_wgy?ZZXIjZyh>(fCS_%1NFEahVhcyBDC|r1SUc(150Q$icJC`8 zuL!epfmOVmK(_Y4o9UG4*9Z@-n6w+Q-xzl_7V<)~Jk`6)6 z0zT34xzUJ^kd;taSmYiJ23y@@5q~1j1p)y#XK89`WX_yxX=yp=t`zYz2_SnbKSh%u z>2T^hfP}6$=lbJsKyX@V&SI0;HMy>pWNwy%;Q|E!R@FAd<Y&z)z-c?r~+9ux>m?F!%YlgG~ES*LHBV%K_N?) zJjlL%&1~4Pf%5Y5fwFn2y<9ED03CDEm52O5(>Q5GR*PixQc@8ffBaEOOH0|aXODY4 z2LA-Len_?#M+8=NJ&esTzsj|<>wbLZ{Cd?7A{=$QC3z~ps1+G6AFcT zRTIP}wHL1yU4rN_S5o$ns%`Gk_pY4wHjoN!>~E}A+S=N<^2#e4eZGvF7caiYjm%0) zO5!cs$AvDZ{&@l|o&9)y5Xi)S=SA$gFR^lzFfz;TE*v|A?~>~vzX-Y#E(#tK@h9Qr zF>}nPpMKgffBpj3;mcOBh;ukY>2`#z2@B%bSlQXw^*iZVem8V=LRL=rIgb~oejDBy zv$1k>b=97ZiTISRt}a;-Z0J0c_>7Me)pFD>KBcOviYK33L2+>r_4V~S z+E|Z3mmtzb-ZtoW%SKX84)&H$2)+3{)~J)*71Q_hS55e?_zBjiQk-BgCH^CdPRp`3 zi7>LyGHKEzYHFTyi;|l+f7X}F=t9?-^{P9Q28SoyaTt1k4IBzWK<$)@scP7XXUYtG zm(0PDvbm!r+>ZxY{aq-ZBBDqK{;E|^yP5vhtzS@Ax6AFE)Pc?|+<@Be7#Y`_#dqWv zVmH;(v-rC3i~`x=u(!Jtr@0aT-7E2&c{YyZ2dP~hs5aMEqYua?m?V!vP0jPX|NaMV zGsV)S4<-Czy7$z_s*R}QziM8e>&$x|T}s;)X12}C#cg0xZ)Ftd4Twhf@d~h@|P|2h0$6HqT_BvgWUotkR)~Z{Q zrB(F$0bi-Q)kE*T1Z^!)II7=Ah##>$^enprN1`g}KHR+x->nbetDcRc8X1y=^zqI; zo}onuorz+y+km9ba~^Q15-IFo{<#MC3ZP3#VK0ow!r*`ToB6V4o8x~q&NeV`M-Cy+c%flYu9%*K_{8_GJccUwR zW~}#~5Tr&BiK?>muyV2qZCa1L^<%93Bbpa)Q+LEhco_J7-=hpaPFssBN@{Y#^pM4~#!XLoO z44W2b*EV`qJ%qjfU98b3xvRwuW&4>D)$c2%my2VLEB>QtS5l@tRL~-bm6w0y!H`Yp z<9}j*_!gm$-gPr^tGqIt@Ez$tBEF+hwW7vGs=pm7T@bsK`pR$8(IQCi%TM<|kW#v1 zV}G_D`#=A3Gi__s7$`08D;gfgX~1Rb&}`M?6dN&BU21bGMZ1QnMvoxRKK%6qa8<`{eRXjvZAAzgE9RjDg!}{C;R|43|`-%6bBZzIsen*|?)WIj~uge=751;AvIr z9{6*za>npPUz6rU@#aA27|$1Fc=I5 ugTY`h7z_r3!C){L3OP)n5 z+o=j#Q99aKYSoGwt&TccS`-GY1qB64AS8i+B%6@u-rM=^o=sL*0-HU%n=t1$lS%gO z?%8wif6wfEU46dC>-FBz+}w=MmvCHilb)&TVJHc*K-u*bz)YYL7zGrm-<6hS z&Ft#xeDaJl&e(R>U3X6H?d_$pu`y9mz5`@NJuU`H5<`$sLqkJDBBF@k1;E+Bt7D^WZiB!+%Lh0d2KpXFC8^iCDUeNX2}4|sm5`kE_qlk7Q)cUENHq2jwThBXIt7^nR1fyea^Y>;c14*! zeL9O4Ep$y+68U2?2ak|0K?;H8i4GDGMY!UM%c-cSprs{gb+yZZlae)fgmejVi_{8r z3?!n+D#^{weYXB zSIL0`Uy+fKf#2`Pacos?@ljS*>PBRd_r%F|o%4=Gx&%2>=U@@jRarS6pD%+02ljLG z%{MWA{ApxmWx3C_wgy?ZZXIjZyh>(fCS_%1NFEahVhcyBDC|r1SUc(150Q$icJC`8 zuL!epfmOVmK(_Y4o9UG4*9Z@-n6w+Q-xzl_7V<)~Jk`6)6 z0zT34xzUJ^kd;taSmYiJ23y@@5q~1j1p)y#XK89`WX_yxX=yp=t`zYz2_SnbKSh%u z>2T^hfP}6$=lbJsKyX@V&SI0;HMy>pWNwy%;Q|E!R@FAd<Y&z)z-c?r~+9ux>m?F!%YlgG~ES*LHBV%K_N?) zJjlL%&1~4Pf%5Y5fwFn2y<9ED03CDEm52O5(>Q5GR*PixQc@8ffBaEOOH0|aXODY4 z2LA-Len_?#M+8=NJ&esTzsj|<>wbLZ{Cd?7A{=$QC3z~ps1+G6AFcT zRTIP}wHL1yU4rN_S5o$ns%`Gk_pY4wHjoN!>~E}A+S=N<^2#e4eZGvF7caiYjm%0) zO5!cs$AvDZ{&@l|o&9)y5Xi)S=SA$gFR^lzFfz;TE*v|A?~>~vzX-Y#E(#tK@h9Qr zF>}nPpMKgffBpj3;mcOBh;ukY>2`#z2@B%bSlQXw^*iZVem8V=LRL=rIgb~oejDBy zv$1k>b=97ZiTISRt}a;-Z0J0c_>7Me)pFD>KBcOviYK33L2+>r_4V~S z+E|Z3mmtzb-ZtoW%SKX84)&H$2)+3{)~J)*71Q_hS55e?_zBjiQk-BgCH^CdPRp`3 zi7>LyGHKEzYHFTyi;|l+f7X}F=t9?-^{P9Q28SoyaTt1k4IBzWK<$)@scP7XXUYtG zm(0PDvbm!r+>ZxY{aq-ZBBDqK{;E|^yP5vhtzS@Ax6AFE)Pc?|+<@Be7#Y`_#dqWv zVmH;(v-rC3i~`x=u(!Jtr@0aT-7E2&c{YyZ2dP~hs5aMEqYua?m?V!vP0jPX|NaMV zGsV)S4<-Czy7$z_s*R}QziM8e>&$x|T}s;)X12}C#cg0xZ)Ftd4Twhf@d~h@|P|2h0$6HqT_BvgWUotkR)~Z{Q zrB(F$0bi-Q)kE*T1Z^!)II7=Ah##>$^enprN1`g}KHR+x->nbetDcRc8X1y=^zqI; zo}onuorz+y+km9ba~^Q15-IFo{<#MC3ZP3#VK0ow!r*`ToB6V4o8x~q&NeV`M-Cy+c%flYu9%*K_{8_GJccUwR zW~}#~5Tr&BiK?>muyV2qZCa1L^<%93Bbpa)Q+LEhco_J7-=hpaPFssBN@{Y#^pM4~#!XLoO z44W2b*EV`qJ%qjfU98b3xvRwuW&4>D)$c2%my2VLEB>QtS5l@tRL~-bm6w0y!H`Yp z<9}j*_!gm$-gPr^tGqIt@Ez$tBEF+hwW7vGs=pm7T@bsK`pR$8(IQCi%TM<|kW#v1 zV}G_D`#=A3Gi__s7$`08D;gfgX~1Rb&}`M?6dN&BU21bGMZ1QnMvoxRKK%6qa8<`{eRXjvZAAzgE9RjDg!}{C;R|43|`-%6bBZzIsen*|?)WIj~uge=751;AvIr z9{6*za>npPUz6rU@#aA27|$1Fc=I5 ugTY`h7z_r3!C){L3wQiuOoSRvxy z3mevUck$V`cHQGwcf;eq$IqN7{WsON`qk-!UB1j3S#`mrjaN72t9a|V-Q8-G#gG7= z--l}IOi}=9s!{A#BW@vw@f%xMUFI3U--0$C<_O>$mYShdgcZ;Y=mv;oY%1bpIKe$Y zxZLyW-Z3BJMLcK$m@POgH+p)qO>%E=AtfR=ZZ*76W{jxPhU@CKEyILcA^aKTp`)J$qi419|C2ltig6tC=kAO_uY_aTJc6Nq-%T zF_}6Uy@X1bIX@na`b1bG^ciieZs4A4JdYzM{#m+a>Ck&^K+4x=sTeVk!$(H?{kW z(zv(D>0FeH`Z=YYI?p6W&ZBv`?4p?-52oFVZ+sV(A1C+i0Kru=bsk?^<;sd9MI1X% z3mR|Bvv9Ef?Su^~8c4K8LQ6$^tQ@tNet^V$Q@QV61`n2>xn9unhfL(#ADH9=bvd6Q z2U}ZT+ID$gUBQdSZ*T`RIVdo%;6HH(pi=kG=TjuHq<$?HVNy&?(zp>Z`UhxwGtK>+ zcE0-=+~SkTpSDHp+OeN1c-ohHe=p0e-EPW9yaa68mV)4{AW*-CV`KHfFulZ=plESB zX{t*daFkra>VI8^x8=qdelY9ssmuUaRT)Y_(p=Leq)O|VEI}RIPiLmb25W75aNavu zu*8iXcS1R&1adtSj$VWrO_XfSe_=N%$W|IqU_&*so;li0=df#?0w!B<#JV@{acHO& z2nYI1!&&QycA$i1BL{oy;qE6{>l`DAU$q(2eAvm@SS@>bBW}1i{!r=JrkbJS&2DEA zkYu2K#e{MtRErKk`;Z>tg!V8($ra1TpLisu!r^z%-)Mha(N7)31_?;Yg6yEtzG8gE zdn)OqRoooSs;IOLvxf$7I(#BFH(NZ=X4rrbO1xSoFR;UnBkKbC_e0F~*zRODlr5nX zh0~$F*Cez4{tv;L9YU)1C(>-*9h5}%>v`cjQd*RXhHa|MnLlQ`5aM&fnBE1yX&KsR zAWqB6$GX{HzW-!5#vrjk0k!~%u#`3v3WU|YfzGK8l;Q;JTT`29>hHCWH;;Vx8dAcr zLpndQ6($q^tO-TxFqvMIi}a<)<@Btjc*-#g++6HUx}@6I?pRiuM{=m2&3%4*`6%+f z8)Ju+DbZ{l)T$~QqAY+o{n+eUEdM0~aV=o3QUGCS-9lJTlsE};z6q~wKW98}_!MSx zGMLIruG(_>4O1FCm9M*&#$GAD1>3N(B<`c#CBzYEqx9Pw6s&EPI%U*^K+Sv=J*wvP z^j9H#2q_AdY)<3Op#59x#hAqyzoP9)Na%=~bJmS^TmZga)Kh=8a8NqJAg1YUS1aS| zxzoBP?R5Rw`f}xmje!PBw>992`&v`oy=~*P_qH=aIIip(!*W~&yWtv=j0b-CvwJbF rvX&B;oBPkRzMBmmxU?r41+b$gHHVs93caDScR&DduTw}iA|m%M@vA#( literal 0 HcmV?d00001 diff --git a/public/img/weathers/13n.png b/public/img/weathers/13n.png new file mode 100644 index 0000000000000000000000000000000000000000..7867322e900068a96547ec05d5e1a7b841d4ab64 GIT binary patch literal 1703 zcmai#30D$`0);`%-O87m1~!R`3$EmnwQiuOoSRvxy z3mevUck$V`cHQGwcf;eq$IqN7{WsON`qk-!UB1j3S#`mrjaN72t9a|V-Q8-G#gG7= z--l}IOi}=9s!{A#BW@vw@f%xMUFI3U--0$C<_O>$mYShdgcZ;Y=mv;oY%1bpIKe$Y zxZLyW-Z3BJMLcK$m@POgH+p)qO>%E=AtfR=ZZ*76W{jxPhU@CKEyILcA^aKTp`)J$qi419|C2ltig6tC=kAO_uY_aTJc6Nq-%T zF_}6Uy@X1bIX@na`b1bG^ciieZs4A4JdYzM{#m+a>Ck&^K+4x=sTeVk!$(H?{kW z(zv(D>0FeH`Z=YYI?p6W&ZBv`?4p?-52oFVZ+sV(A1C+i0Kru=bsk?^<;sd9MI1X% z3mR|Bvv9Ef?Su^~8c4K8LQ6$^tQ@tNet^V$Q@QV61`n2>xn9unhfL(#ADH9=bvd6Q z2U}ZT+ID$gUBQdSZ*T`RIVdo%;6HH(pi=kG=TjuHq<$?HVNy&?(zp>Z`UhxwGtK>+ zcE0-=+~SkTpSDHp+OeN1c-ohHe=p0e-EPW9yaa68mV)4{AW*-CV`KHfFulZ=plESB zX{t*daFkra>VI8^x8=qdelY9ssmuUaRT)Y_(p=Leq)O|VEI}RIPiLmb25W75aNavu zu*8iXcS1R&1adtSj$VWrO_XfSe_=N%$W|IqU_&*so;li0=df#?0w!B<#JV@{acHO& z2nYI1!&&QycA$i1BL{oy;qE6{>l`DAU$q(2eAvm@SS@>bBW}1i{!r=JrkbJS&2DEA zkYu2K#e{MtRErKk`;Z>tg!V8($ra1TpLisu!r^z%-)Mha(N7)31_?;Yg6yEtzG8gE zdn)OqRoooSs;IOLvxf$7I(#BFH(NZ=X4rrbO1xSoFR;UnBkKbC_e0F~*zRODlr5nX zh0~$F*Cez4{tv;L9YU)1C(>-*9h5}%>v`cjQd*RXhHa|MnLlQ`5aM&fnBE1yX&KsR zAWqB6$GX{HzW-!5#vrjk0k!~%u#`3v3WU|YfzGK8l;Q;JTT`29>hHCWH;;Vx8dAcr zLpndQ6($q^tO-TxFqvMIi}a<)<@Btjc*-#g++6HUx}@6I?pRiuM{=m2&3%4*`6%+f z8)Ju+DbZ{l)T$~QqAY+o{n+eUEdM0~aV=o3QUGCS-9lJTlsE};z6q~wKW98}_!MSx zGMLIruG(_>4O1FCm9M*&#$GAD1>3N(B<`c#CBzYEqx9Pw6s&EPI%U*^K+Sv=J*wvP z^j9H#2q_AdY)<3Op#59x#hAqyzoP9)Na%=~bJmS^TmZga)Kh=8a8NqJAg1YUS1aS| zxzoBP?R5Rw`f}xmje!PBw>992`&v`oy=~*P_qH=aIIip(!*W~&yWtv=j0b-CvwJbF rvX&B;oBPkRzMBmmxU?r41+b$gHHVs93caDScR&DduTw}iA|m%M@vA#( literal 0 HcmV?d00001 diff --git a/public/img/weathers/50d.png b/public/img/weathers/50d.png new file mode 100644 index 0000000000000000000000000000000000000000..f04122b30fdcde958c90ca339bb990fb5508ffef GIT binary patch literal 650 zcmeAS@N?(olHy`uVBq!ia0vp^DIm$QvA~j=q9oJvF*6E|;Ry zv)sPl+a>>e&hb0{*XNago%g)*eewC7=WU<6PEzqiM`CNk&PmUnVPSIOsdZy!0`G^d z{jbBB=Qr*>u-Q@Q=k+H~?k4hWKX55WnLn>yi|ys%x5q1_(pRva)GTsb$F#dK_rP?! zb@BXX7_J*XndbYXsfN9e^~B;8s>&tn|Fd!n`J7bE7BArZ!TU$&kKr0G+3T7QoFCq> z)r_2Ae4w%E7bk1nvVj87j9JbLX5gt+=B4I=4Z_s&abqhZV+8 zj0&u`u38%X#BbK(F2e_<=M*NIi^sE^SZJ|(O+wN632zS^+%ol_`iZsMFC7futYXJM z;XKn$?jr6Rvn<{A^DSRHC!k0_()eOt#k}c>Ml;pF^H_4d@t9p5xNGT7{fC!NRc@KO zTVa2L`^;n=t+L32SN_Rw60_jV@t7OIvi8f53%(EPUe;uZKjA7^RKzz|hJ72udvCV2 zdsFtVlG#7|*^ckQFBfc0KjHd-Z-eBIK+EZtYp;mft+^=acH?x_q&Q{%-D@fqz5ABO z;$QvA~j=q9oJvF*6E|;Ry zv)sPl+a>>e&hb0{*XNago%g)*eewC7=WU<6PEzqiM`CNk&PmUnVPSIOsdZy!0`G^d z{jbBB=Qr*>u-Q@Q=k+H~?k4hWKX55WnLn>yi|ys%x5q1_(pRva)GTsb$F#dK_rP?! zb@BXX7_J*XndbYXsfN9e^~B;8s>&tn|Fd!n`J7bE7BArZ!TU$&kKr0G+3T7QoFCq> z)r_2Ae4w%E7bk1nvVj87j9JbLX5gt+=B4I=4Z_s&abqhZV+8 zj0&u`u38%X#BbK(F2e_<=M*NIi^sE^SZJ|(O+wN632zS^+%ol_`iZsMFC7futYXJM z;XKn$?jr6Rvn<{A^DSRHC!k0_()eOt#k}c>Ml;pF^H_4d@t9p5xNGT7{fC!NRc@KO zTVa2L`^;n=t+L32SN_Rw60_jV@t7OIvi8f53%(EPUe;uZKjA7^RKzz|hJ72udvCV2 zdsFtVlG#7|*^ckQFBfc0KjHd-Z-eBIK+EZtYp;mft+^=acH?x_q&Q{%-D@fqz5ABO z; { showsTime: true, initialized: true, maxBlobSize: 52_428_800, // 50MB in bytes + showsWeather: false, + weatherApiKey: null, + coords: null, + weatherUnit: 'C', }) } catch (error) { console.error('Failed to init data', error) diff --git a/src/newtab/NewTab.jsx b/src/newtab/NewTab.jsx index eb5023c..82e2a14 100644 --- a/src/newtab/NewTab.jsx +++ b/src/newtab/NewTab.jsx @@ -60,6 +60,14 @@ export const NewTab = () => {
)} + {config.showsWeather && ( +
+ +
+ )}
) } diff --git a/src/newtab/Weather.jsx b/src/newtab/Weather.jsx new file mode 100644 index 0000000..ed44f19 --- /dev/null +++ b/src/newtab/Weather.jsx @@ -0,0 +1,83 @@ +import { useEffect, useState } from 'react' +import { showToast } from '../components/Toast' +import { settingsStorage } from '../helper' + +function Weather() { + const [weather, setWeather] = useState(null) + const [coords, setCoords] = useState(null) + const [unit, setUnit] = useState('C') + + useEffect(() => { + async function getCoords() { + const savedCoords = await settingsStorage.get('coords') + setCoords(savedCoords) + + if (!savedCoords) { + navigator.geolocation.getCurrentPosition( + (position) => { + const newCoords = { + latitude: position.coords.latitude, + longitude: position.coords.longitude, + } + settingsStorage.set('coords', newCoords) + setCoords(newCoords) + }, + (error) => { + console.warn(`ERROR(${error.code}): ${error.message}`) + }, + ) + } + } + getCoords() + }, []) + + useEffect(() => { + async function getWeather() { + const appid = await settingsStorage.get('weatherApiKey') + const unit = await settingsStorage.get('weatherUnit') + setUnit(unit || 'C') + + if (!appid || !unit) { + return console.warn('Please provide weather API key in settings') + } + if (coords) { + fetch( + `https://api.openweathermap.org/data/2.5/weather?${new URLSearchParams({ + lat: coords.latitude, + lon: coords.longitude, + appid, + units: unit === 'C' ? 'metric' : 'imperial', + })}`, + ) + .then((res) => res.json()) + .then(setWeather) + .catch((error) => { + console.error(error) + showToast(error.message) + }) + } + } + + getWeather() + }, [coords]) + + if (!weather) { + return null + } + + return ( +
+

+ Temperature: {weather.main.temp}°{unit} +

+

Humidity: {weather.main.humidity}%

+

Pressure: {weather.main.pressure}hPa

+

+ + {weather.weather[0].description} +

+
+ ) +} + +export default Weather diff --git a/src/options/ConfigSection.jsx b/src/options/ConfigSection.jsx index 4d5ae87..4f64796 100644 --- a/src/options/ConfigSection.jsx +++ b/src/options/ConfigSection.jsx @@ -3,15 +3,29 @@ import { settingsStorage } from '../helper' const ConfigSection = ({ onConfigChanged }) => { const [showsTime, setshowsTime] = useState(false) + const [showsWeather, setShowsWeather] = useState(false) + const [unit, setUnit] = useState('C') + const [apiKey, setApiKey] = useState(null) const [blurValue, setBlurValue] = useState(0) useEffect(() => { settingsStorage.get().then((config) => { setshowsTime(config.showsTime ?? false) setBlurValue(config.blur ?? 0) + setApiKey(config.weatherApiKey) + setShowsWeather(config.showsWeather ?? false) }) }, []) + // debounce saving apiKey to storage + useEffect(() => { + const timeout = setTimeout(() => { + if (apiKey) settingsStorage.set('weatherApiKey', apiKey) + }, 500) + + return () => clearTimeout(timeout) + }, [apiKey]) + return (

Config

@@ -29,6 +43,46 @@ const ConfigSection = ({ onConfigChanged }) => { }} /> +