diff --git a/package-lock.json b/package-lock.json index 7113f5a..bdd8923 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "prettier": "^3.3.3", "prettier-eslint": "^16.3.0", "standard": "^17.1.0", + "svgo": "^3.3.2", "svgo-loader": "^4.0.0", "webpack": "^5.99.9", "webpack-cli": "^6.0.1" @@ -4487,6 +4488,121 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@svgr/plugin-svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "license": "CC0-1.0" + }, + "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@svgr/plugin-svgo/node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/@svgr/webpack": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", @@ -6235,13 +6351,13 @@ } }, "node_modules/array-buffer-byte-length": { - "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -6362,18 +6478,19 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", - "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.9", "es-array-method-boxes-properly": "^1.0.0", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -6399,19 +6516,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "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" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -6438,6 +6554,15 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "license": "MIT" }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -7117,16 +7242,44 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -7883,25 +8036,17 @@ } }, "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, "license": "MIT", "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, "node_modules/css-what": { @@ -8111,14 +8256,14 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8128,29 +8273,29 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -8550,6 +8695,20 @@ "integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==", "license": "Apache-2.0" }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -8722,57 +8881,65 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "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", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.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", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -8788,13 +8955,10 @@ "license": "MIT" }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -8860,9 +9024,9 @@ "license": "MIT" }, "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -8872,14 +9036,15 @@ } }, "node_modules/es-set-tostringtag": { - "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==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -8895,14 +9060,14 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -10351,12 +10516,18 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/foreground-child": { @@ -10649,15 +10820,17 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -10709,16 +10882,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -10742,6 +10920,19 @@ "node": ">=8.0.0" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stdin": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", @@ -10768,14 +10959,14 @@ } }, "node_modules/get-symbol-description": { - "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -10907,12 +11098,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11011,10 +11202,13 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -11023,9 +11217,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -11518,14 +11712,14 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11567,13 +11761,14 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -11589,12 +11784,16 @@ "license": "MIT" }, "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11604,12 +11803,15 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11628,13 +11830,13 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11671,11 +11873,13 @@ } }, "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==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -11686,12 +11890,13 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11725,12 +11930,15 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11755,12 +11963,15 @@ } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11821,12 +12032,13 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11885,13 +12097,15 @@ "license": "MIT" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11931,12 +12145,12 @@ } }, "node_modules/is-shared-array-buffer": { - "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==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -11958,12 +12172,13 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11973,12 +12188,14 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11988,12 +12205,12 @@ } }, "node_modules/is-typed-array": { - "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==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -12021,12 +12238,15 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14968,10 +15188,20 @@ "tmpl": "1.0.5" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, "license": "CC0-1.0" }, "node_modules/media-typer": { @@ -15348,9 +15578,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -15385,14 +15615,16 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -15587,6 +15819,23 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -18892,18 +19141,19 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -18952,15 +19202,17 @@ "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "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==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -19325,14 +19577,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -19362,15 +19615,31 @@ ], "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -19728,6 +19997,20 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -19784,15 +20067,69 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -20180,12 +20517,13 @@ } }, "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "license": "MIT", "dependencies": { - "internal-slot": "^1.0.4" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -20319,15 +20657,18 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -20337,15 +20678,19 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -20700,187 +21045,6 @@ "license": "MIT" }, "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/svgo-loader/-/svgo-loader-4.0.0.tgz", - "integrity": "sha512-bdk2H73AHP8Vo9zgMuA8piEzi5pjFzllK4EwfebDF3hDjmHQpmmqXMoDd6abDtVFrlKTJuveepmnc2kuTdt/WA==", - "dev": true, - "license": "MIT", - "dependencies": { - "svgo": "^3.0.0" - } - }, - "node_modules/svgo-loader/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo-loader/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo-loader/node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/svgo-loader/node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/svgo-loader/node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/svgo-loader/node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/svgo-loader/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo-loader/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo-loader/node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/svgo-loader/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/svgo-loader/node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/svgo-loader/node_modules/svgo": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", @@ -20906,65 +21070,138 @@ "url": "https://opencollective.com/svgo" } }, + "node_modules/svgo-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svgo-loader/-/svgo-loader-4.0.0.tgz", + "integrity": "sha512-bdk2H73AHP8Vo9zgMuA8piEzi5pjFzllK4EwfebDF3hDjmHQpmmqXMoDd6abDtVFrlKTJuveepmnc2kuTdt/WA==", + "dev": true, + "license": "MIT", + "dependencies": { + "svgo": "^3.0.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/svgo/node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/svgo/node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/svgo/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "~1.0.0" + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/svgo/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -21488,30 +21725,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -21521,17 +21758,18 @@ } }, "node_modules/typed-array-byte-offset": { - "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==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -21541,17 +21779,17 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -21584,15 +21822,18 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22315,39 +22556,43 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -22375,15 +22620,17 @@ } }, "node_modules/which-typed-array": { - "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==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { diff --git a/package.json b/package.json index 209a992..431f02e 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,8 @@ "dev": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "minify-svgs": "node scripts/minify-svgs.js" }, "eslintConfig": { "extends": [ @@ -61,6 +62,7 @@ "prettier": "^3.3.3", "prettier-eslint": "^16.3.0", "standard": "^17.1.0", + "svgo": "^3.3.2", "svgo-loader": "^4.0.0", "webpack": "^5.99.9", "webpack-cli": "^6.0.1" diff --git a/scripts/minify-svgs.js b/scripts/minify-svgs.js new file mode 100644 index 0000000..04d8869 --- /dev/null +++ b/scripts/minify-svgs.js @@ -0,0 +1,74 @@ +const fs = require('fs') +const path = require('path') +const { optimize } = require('svgo') + +// Configuration for SVGO +const svgoConfig = { + multipass: true, + plugins: [ + 'preset-default', + 'removeDimensions', + 'removeViewBox', + { + name: 'removeAttrs', + params: { + attrs: '(fill|stroke)' + } + } + ] +} + +// Function to minify a single SVG file +async function minifySvg(filePath) { + try { + const svgContent = fs.readFileSync(filePath, 'utf8') + const result = optimize(svgContent, svgoConfig) + + if (result.error) { + console.error(`Error minifying ${filePath}:`, result.error) + return + } + + const minifiedPath = filePath.replace('.svg', '.min.svg') + fs.writeFileSync(minifiedPath, result.data) + console.log(`Created minified version: ${minifiedPath}`) + } catch (error) { + console.error(`Error processing ${filePath}:`, error) + } +} + +// Function to process all SVG files in a directory +async function processDirectory(directory) { + try { + const files = fs.readdirSync(directory) + + for (const file of files) { + const filePath = path.join(directory, file) + const stat = fs.statSync(filePath) + + if (stat.isDirectory()) { + await processDirectory(filePath) + } else if (file.endsWith('.svg') && !file.endsWith('.min.svg')) { + await minifySvg(filePath) + } + } + } catch (error) { + console.error(`Error processing directory ${directory}:`, error) + } +} + +// Main execution +const iconsDirectory = path.join(__dirname, '..', 'src', 'assets', 'icons') + +if (!fs.existsSync(iconsDirectory)) { + console.error(`Directory not found: ${iconsDirectory}`) + process.exit(1) +} + +console.log('Starting SVG minification...') +processDirectory(iconsDirectory) + .then(() => console.log('SVG minification completed!')) + .catch((error) => { + console.error('Error during minification:', error) + process.exit(1) + }) diff --git a/src/App.jsx b/src/App.jsx index b0c00fb..d6d2fa7 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -36,6 +36,9 @@ import Materials from './components/Dashboard/Management/Materials' import FilamentStocks from './components/Dashboard/Inventory/FilamentStocks.jsx' import FilamentStockInfo from './components/Dashboard/Inventory/FilamentStocks/FilamentStockInfo.jsx' +import StockAudits from './components/Dashboard/Inventory/StockAudits.jsx' +import StockAuditInfo from './components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx' + import Dashboard from './components/Dashboard/common/Dashboard' import PrivateRoute from './components/PrivateRoute' import PublicRoute from './components/PublicRoute.jsx' @@ -132,6 +135,14 @@ const FarmControlApp = () => { path='inventory/filamentstocks/info' element={} /> + } + /> + } + /> {/* Management Routes */} \ No newline at end of file diff --git a/src/assets/icons/binicon.svg b/src/assets/icons/binicon.svg new file mode 100644 index 0000000..71aef8a --- /dev/null +++ b/src/assets/icons/binicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/checkicon.afdesign b/src/assets/icons/checkicon.afdesign new file mode 100644 index 0000000..d04b6d9 Binary files /dev/null and b/src/assets/icons/checkicon.afdesign differ diff --git a/src/assets/icons/checkicon.min.svg b/src/assets/icons/checkicon.min.svg new file mode 100644 index 0000000..5be9603 --- /dev/null +++ b/src/assets/icons/checkicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/checkicon.svg b/src/assets/icons/checkicon.svg new file mode 100644 index 0000000..b7a6fc6 --- /dev/null +++ b/src/assets/icons/checkicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/collapsesidebaricon.afdesign b/src/assets/icons/collapsesidebaricon.afdesign new file mode 100644 index 0000000..7537be5 Binary files /dev/null and b/src/assets/icons/collapsesidebaricon.afdesign differ diff --git a/src/assets/icons/collapsesidebaricon.min.svg b/src/assets/icons/collapsesidebaricon.min.svg new file mode 100644 index 0000000..3af99bb --- /dev/null +++ b/src/assets/icons/collapsesidebaricon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/collapsesidebaricon.svg b/src/assets/icons/collapsesidebaricon.svg new file mode 100644 index 0000000..b6a538e --- /dev/null +++ b/src/assets/icons/collapsesidebaricon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/controlicon.afdesign b/src/assets/icons/controlicon.afdesign new file mode 100644 index 0000000..636e0ee Binary files /dev/null and b/src/assets/icons/controlicon.afdesign differ diff --git a/src/assets/icons/controlicon.min.svg b/src/assets/icons/controlicon.min.svg new file mode 100644 index 0000000..d9003fe --- /dev/null +++ b/src/assets/icons/controlicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/controlicon.svg b/src/assets/icons/controlicon.svg new file mode 100644 index 0000000..8658e38 --- /dev/null +++ b/src/assets/icons/controlicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/copyicon.afdesign b/src/assets/icons/copyicon.afdesign new file mode 100644 index 0000000..555d92c Binary files /dev/null and b/src/assets/icons/copyicon.afdesign differ diff --git a/src/assets/icons/copyicon.min.svg b/src/assets/icons/copyicon.min.svg new file mode 100644 index 0000000..a32bf2e --- /dev/null +++ b/src/assets/icons/copyicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/copyicon.svg b/src/assets/icons/copyicon.svg new file mode 100644 index 0000000..4585fd8 --- /dev/null +++ b/src/assets/icons/copyicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/editicon.afdesign b/src/assets/icons/editicon.afdesign new file mode 100644 index 0000000..ea16592 Binary files /dev/null and b/src/assets/icons/editicon.afdesign differ diff --git a/src/assets/icons/editicon.min.svg b/src/assets/icons/editicon.min.svg new file mode 100644 index 0000000..4c1aa98 --- /dev/null +++ b/src/assets/icons/editicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/editicon.svg b/src/assets/icons/editicon.svg new file mode 100644 index 0000000..3c604e4 --- /dev/null +++ b/src/assets/icons/editicon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/icons/expandsidebaricon.afdesign b/src/assets/icons/expandsidebaricon.afdesign new file mode 100644 index 0000000..68dd7c5 Binary files /dev/null and b/src/assets/icons/expandsidebaricon.afdesign differ diff --git a/src/assets/icons/expandsidebaricon.min.svg b/src/assets/icons/expandsidebaricon.min.svg new file mode 100644 index 0000000..01b5a70 --- /dev/null +++ b/src/assets/icons/expandsidebaricon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/expandsidebaricon.svg b/src/assets/icons/expandsidebaricon.svg new file mode 100644 index 0000000..e681ec6 --- /dev/null +++ b/src/assets/icons/expandsidebaricon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/filamenticon.afdesign b/src/assets/icons/filamenticon.afdesign index 3e5d04a..cb110a1 100644 Binary files a/src/assets/icons/filamenticon.afdesign and b/src/assets/icons/filamenticon.afdesign differ diff --git a/src/assets/icons/filamenticon.min.svg b/src/assets/icons/filamenticon.min.svg new file mode 100644 index 0000000..15418dc --- /dev/null +++ b/src/assets/icons/filamenticon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/filamenticon.svg b/src/assets/icons/filamenticon.svg index 52ae03f..6dce463 100644 --- a/src/assets/icons/filamenticon.svg +++ b/src/assets/icons/filamenticon.svg @@ -1,8 +1,14 @@ - - - + + + + + + + + + diff --git a/src/assets/icons/filamentstockicon.afdesign b/src/assets/icons/filamentstockicon.afdesign index deff271..67f0e62 100644 Binary files a/src/assets/icons/filamentstockicon.afdesign and b/src/assets/icons/filamentstockicon.afdesign differ diff --git a/src/assets/icons/filamentstockicon.min.svg b/src/assets/icons/filamentstockicon.min.svg new file mode 100644 index 0000000..508d692 --- /dev/null +++ b/src/assets/icons/filamentstockicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/filamentstockicon.svg b/src/assets/icons/filamentstockicon.svg index cea5dbd..5a0ef83 100644 --- a/src/assets/icons/filamentstockicon.svg +++ b/src/assets/icons/filamentstockicon.svg @@ -1,14 +1,11 @@ - - - + + + - - - - - + + diff --git a/src/assets/icons/gcodefileicon.afdesign b/src/assets/icons/gcodefileicon.afdesign index 4a7a762..889d963 100644 Binary files a/src/assets/icons/gcodefileicon.afdesign and b/src/assets/icons/gcodefileicon.afdesign differ diff --git a/src/assets/icons/gcodefileicon.min.svg b/src/assets/icons/gcodefileicon.min.svg new file mode 100644 index 0000000..d07132b --- /dev/null +++ b/src/assets/icons/gcodefileicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gcodefileicon.svg b/src/assets/icons/gcodefileicon.svg index e6ca6ab..94bddf3 100644 --- a/src/assets/icons/gcodefileicon.svg +++ b/src/assets/icons/gcodefileicon.svg @@ -1,7 +1,7 @@ - + diff --git a/src/assets/icons/infocircleicon.afdesign b/src/assets/icons/infocircleicon.afdesign new file mode 100644 index 0000000..1e5ab7e Binary files /dev/null and b/src/assets/icons/infocircleicon.afdesign differ diff --git a/src/assets/icons/infocircleicon.min.svg b/src/assets/icons/infocircleicon.min.svg new file mode 100644 index 0000000..a7e4d9d --- /dev/null +++ b/src/assets/icons/infocircleicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/infocircleicon.svg b/src/assets/icons/infocircleicon.svg new file mode 100644 index 0000000..613c1d7 --- /dev/null +++ b/src/assets/icons/infocircleicon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/icons/infoicon.afdesign b/src/assets/icons/infoicon.afdesign new file mode 100644 index 0000000..59efc03 Binary files /dev/null and b/src/assets/icons/infoicon.afdesign differ diff --git a/src/assets/icons/infoicon.min.svg b/src/assets/icons/infoicon.min.svg new file mode 100644 index 0000000..8b4c15e --- /dev/null +++ b/src/assets/icons/infoicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/infoicon.svg b/src/assets/icons/infoicon.svg new file mode 100644 index 0000000..7167f5d --- /dev/null +++ b/src/assets/icons/infoicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/inventoryicon.afdesign b/src/assets/icons/inventoryicon.afdesign new file mode 100644 index 0000000..eaed37e Binary files /dev/null and b/src/assets/icons/inventoryicon.afdesign differ diff --git a/src/assets/icons/inventoryicon.min.svg b/src/assets/icons/inventoryicon.min.svg new file mode 100644 index 0000000..71e7f97 --- /dev/null +++ b/src/assets/icons/inventoryicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/inventoryicon.svg b/src/assets/icons/inventoryicon.svg new file mode 100644 index 0000000..4b878b7 --- /dev/null +++ b/src/assets/icons/inventoryicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/jobicon.min.svg b/src/assets/icons/jobicon.min.svg new file mode 100644 index 0000000..82b571e --- /dev/null +++ b/src/assets/icons/jobicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jobicon.svg b/src/assets/icons/jobicon.svg index cc1ba74..e0e7aef 100644 --- a/src/assets/icons/jobicon.svg +++ b/src/assets/icons/jobicon.svg @@ -1,21 +1,21 @@ - - - - - - + + + + + + - - + + - - + + - - + + - - + + diff --git a/src/assets/icons/levelbedicon.min.svg b/src/assets/icons/levelbedicon.min.svg new file mode 100644 index 0000000..9e9bf4b --- /dev/null +++ b/src/assets/icons/levelbedicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/materialicon.min.svg b/src/assets/icons/materialicon.min.svg new file mode 100644 index 0000000..95ea81f --- /dev/null +++ b/src/assets/icons/materialicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/newwindowicon.min.svg b/src/assets/icons/newwindowicon.min.svg new file mode 100644 index 0000000..882c685 --- /dev/null +++ b/src/assets/icons/newwindowicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/particon.afdesign b/src/assets/icons/particon.afdesign index f15a3cd..7538667 100644 Binary files a/src/assets/icons/particon.afdesign and b/src/assets/icons/particon.afdesign differ diff --git a/src/assets/icons/particon.min.svg b/src/assets/icons/particon.min.svg new file mode 100644 index 0000000..b230b0d --- /dev/null +++ b/src/assets/icons/particon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/particon.svg b/src/assets/icons/particon.svg index b78f23d..1b92f64 100644 --- a/src/assets/icons/particon.svg +++ b/src/assets/icons/particon.svg @@ -1,7 +1,7 @@ - - - - - - + + + + + + diff --git a/src/assets/icons/partstockicon.afdesign b/src/assets/icons/partstockicon.afdesign index 9b55a37..d6fbe19 100644 Binary files a/src/assets/icons/partstockicon.afdesign and b/src/assets/icons/partstockicon.afdesign differ diff --git a/src/assets/icons/partstockicon.min.svg b/src/assets/icons/partstockicon.min.svg new file mode 100644 index 0000000..1c5b60e --- /dev/null +++ b/src/assets/icons/partstockicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/partstockicon.svg b/src/assets/icons/partstockicon.svg index 65d6086..0153191 100644 --- a/src/assets/icons/partstockicon.svg +++ b/src/assets/icons/partstockicon.svg @@ -1,11 +1,8 @@ - - - - - - - + + + + diff --git a/src/assets/icons/passkeysicon.min.svg b/src/assets/icons/passkeysicon.min.svg new file mode 100644 index 0000000..c302ffc --- /dev/null +++ b/src/assets/icons/passkeysicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/pauseicon.afdesign b/src/assets/icons/pauseicon.afdesign new file mode 100644 index 0000000..1580b80 Binary files /dev/null and b/src/assets/icons/pauseicon.afdesign differ diff --git a/src/assets/icons/pauseicon.min.svg b/src/assets/icons/pauseicon.min.svg new file mode 100644 index 0000000..30d14e3 --- /dev/null +++ b/src/assets/icons/pauseicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/pauseicon.svg b/src/assets/icons/pauseicon.svg new file mode 100644 index 0000000..dc7ab03 --- /dev/null +++ b/src/assets/icons/pauseicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/personicon.afdesign b/src/assets/icons/personicon.afdesign new file mode 100644 index 0000000..10ee81e Binary files /dev/null and b/src/assets/icons/personicon.afdesign differ diff --git a/src/assets/icons/personicon.min.svg b/src/assets/icons/personicon.min.svg new file mode 100644 index 0000000..8d1736b --- /dev/null +++ b/src/assets/icons/personicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/personicon.svg b/src/assets/icons/personicon.svg new file mode 100644 index 0000000..2885563 --- /dev/null +++ b/src/assets/icons/personicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/playicon.afdesign b/src/assets/icons/playicon.afdesign new file mode 100644 index 0000000..a0888f1 Binary files /dev/null and b/src/assets/icons/playicon.afdesign differ diff --git a/src/assets/icons/playicon.min.svg b/src/assets/icons/playicon.min.svg new file mode 100644 index 0000000..11d1b9d --- /dev/null +++ b/src/assets/icons/playicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/playicon.svg b/src/assets/icons/playicon.svg new file mode 100644 index 0000000..76bb3e8 --- /dev/null +++ b/src/assets/icons/playicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/plusicon.afdesign b/src/assets/icons/plusicon.afdesign new file mode 100644 index 0000000..7245a4f Binary files /dev/null and b/src/assets/icons/plusicon.afdesign differ diff --git a/src/assets/icons/plusicon.min.svg b/src/assets/icons/plusicon.min.svg new file mode 100644 index 0000000..8236b54 --- /dev/null +++ b/src/assets/icons/plusicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/plusicon.svg b/src/assets/icons/plusicon.svg new file mode 100644 index 0000000..1918948 --- /dev/null +++ b/src/assets/icons/plusicon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/plusminusicon.min.svg b/src/assets/icons/plusminusicon.min.svg new file mode 100644 index 0000000..73ba473 --- /dev/null +++ b/src/assets/icons/plusminusicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/printedparticon.min.svg b/src/assets/icons/printedparticon.min.svg new file mode 100644 index 0000000..faf4695 --- /dev/null +++ b/src/assets/icons/printedparticon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/printericon.afdesign b/src/assets/icons/printericon.afdesign new file mode 100644 index 0000000..6a21ed4 Binary files /dev/null and b/src/assets/icons/printericon.afdesign differ diff --git a/src/assets/icons/printericon.min.svg b/src/assets/icons/printericon.min.svg new file mode 100644 index 0000000..cdee198 --- /dev/null +++ b/src/assets/icons/printericon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/printericon.svg b/src/assets/icons/printericon.svg new file mode 100644 index 0000000..0aca642 --- /dev/null +++ b/src/assets/icons/printericon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/icons/producticon.afdesign b/src/assets/icons/producticon.afdesign index 4dd71d4..f709890 100644 Binary files a/src/assets/icons/producticon.afdesign and b/src/assets/icons/producticon.afdesign differ diff --git a/src/assets/icons/producticon.min.svg b/src/assets/icons/producticon.min.svg new file mode 100644 index 0000000..dc44daa --- /dev/null +++ b/src/assets/icons/producticon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/producticon.svg b/src/assets/icons/producticon.svg index 57ad022..c63c5d5 100644 --- a/src/assets/icons/producticon.svg +++ b/src/assets/icons/producticon.svg @@ -1,7 +1,7 @@ - - - - - + + + + + diff --git a/src/assets/icons/productionicon.afdesign b/src/assets/icons/productionicon.afdesign new file mode 100644 index 0000000..8acda40 Binary files /dev/null and b/src/assets/icons/productionicon.afdesign differ diff --git a/src/assets/icons/productionicon.min.svg b/src/assets/icons/productionicon.min.svg new file mode 100644 index 0000000..d1d424f --- /dev/null +++ b/src/assets/icons/productionicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/productionicon.svg b/src/assets/icons/productionicon.svg new file mode 100644 index 0000000..abd2d9f --- /dev/null +++ b/src/assets/icons/productionicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/assets/icons/productstockicon.afdesign b/src/assets/icons/productstockicon.afdesign index a6929ae..0daba11 100644 Binary files a/src/assets/icons/productstockicon.afdesign and b/src/assets/icons/productstockicon.afdesign differ diff --git a/src/assets/icons/productstockicon.min.svg b/src/assets/icons/productstockicon.min.svg new file mode 100644 index 0000000..09bb953 --- /dev/null +++ b/src/assets/icons/productstockicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/productstockicon.svg b/src/assets/icons/productstockicon.svg index 7cfc9b8..6c6e887 100644 --- a/src/assets/icons/productstockicon.svg +++ b/src/assets/icons/productstockicon.svg @@ -1,11 +1,12 @@ - - - - - - - + + + + + + + + diff --git a/src/assets/icons/reloadicon.afdesign b/src/assets/icons/reloadicon.afdesign new file mode 100644 index 0000000..e2c8425 Binary files /dev/null and b/src/assets/icons/reloadicon.afdesign differ diff --git a/src/assets/icons/reloadicon.min.svg b/src/assets/icons/reloadicon.min.svg new file mode 100644 index 0000000..d1a268f --- /dev/null +++ b/src/assets/icons/reloadicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/reloadicon.svg b/src/assets/icons/reloadicon.svg new file mode 100644 index 0000000..cef9db1 --- /dev/null +++ b/src/assets/icons/reloadicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/assets/icons/spoolicon.min.svg b/src/assets/icons/spoolicon.min.svg new file mode 100644 index 0000000..6cd87ae --- /dev/null +++ b/src/assets/icons/spoolicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/stockauditicon.afdesign b/src/assets/icons/stockauditicon.afdesign new file mode 100644 index 0000000..b73d256 Binary files /dev/null and b/src/assets/icons/stockauditicon.afdesign differ diff --git a/src/assets/icons/stockauditicon.min.svg b/src/assets/icons/stockauditicon.min.svg new file mode 100644 index 0000000..a2c58b6 --- /dev/null +++ b/src/assets/icons/stockauditicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/stockauditicon.svg b/src/assets/icons/stockauditicon.svg new file mode 100644 index 0000000..1fab67a --- /dev/null +++ b/src/assets/icons/stockauditicon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/icons/stockauditlevelicon.afdesign b/src/assets/icons/stockauditlevelicon.afdesign new file mode 100644 index 0000000..924ceb6 Binary files /dev/null and b/src/assets/icons/stockauditlevelicon.afdesign differ diff --git a/src/assets/icons/stockauditlevelicon.min.svg b/src/assets/icons/stockauditlevelicon.min.svg new file mode 100644 index 0000000..6338782 --- /dev/null +++ b/src/assets/icons/stockauditlevelicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/stockauditlevelicon.svg b/src/assets/icons/stockauditlevelicon.svg new file mode 100644 index 0000000..9aa5714 --- /dev/null +++ b/src/assets/icons/stockauditlevelicon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/subjobicon.afdesign b/src/assets/icons/subjobicon.afdesign new file mode 100644 index 0000000..81b5a8c Binary files /dev/null and b/src/assets/icons/subjobicon.afdesign differ diff --git a/src/assets/icons/subjobicon.min.svg b/src/assets/icons/subjobicon.min.svg new file mode 100644 index 0000000..07aa851 --- /dev/null +++ b/src/assets/icons/subjobicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/subjobicon.svg b/src/assets/icons/subjobicon.svg new file mode 100644 index 0000000..e2bf417 --- /dev/null +++ b/src/assets/icons/subjobicon.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/unloadicon.min.svg b/src/assets/icons/unloadicon.min.svg new file mode 100644 index 0000000..d4d454c --- /dev/null +++ b/src/assets/icons/unloadicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/vendoricon.min.svg b/src/assets/icons/vendoricon.min.svg new file mode 100644 index 0000000..7cb4989 --- /dev/null +++ b/src/assets/icons/vendoricon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xmarkicon.afdesign b/src/assets/icons/xmarkicon.afdesign new file mode 100644 index 0000000..9c0b72b Binary files /dev/null and b/src/assets/icons/xmarkicon.afdesign differ diff --git a/src/assets/icons/xmarkicon.min.svg b/src/assets/icons/xmarkicon.min.svg new file mode 100644 index 0000000..f16e228 --- /dev/null +++ b/src/assets/icons/xmarkicon.min.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xmarkicon.svg b/src/assets/icons/xmarkicon.svg new file mode 100644 index 0000000..e37d24e --- /dev/null +++ b/src/assets/icons/xmarkicon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/components/Auth/AuthContext.js b/src/components/Auth/AuthContext.js index b38bdef..1de623f 100644 --- a/src/components/Auth/AuthContext.js +++ b/src/components/Auth/AuthContext.js @@ -3,10 +3,8 @@ import React, { createContext, useState, useCallback, useEffect } from 'react' import axios from 'axios' import { message, Modal, notification, Progress, Button, Space } from 'antd' import PropTypes from 'prop-types' -import { - ExclamationCircleOutlined, - InfoCircleOutlined -} from '@ant-design/icons' +import { ExclamationCircleOutlined } from '@ant-design/icons' +import InfoCircleIcon from '../Icons/InfoCircleIcon' const AuthContext = createContext() @@ -199,7 +197,7 @@ const AuthProvider = ({ children }) => { - + Session Expired } diff --git a/src/components/Dashboard/Inventory/FilamentStocks.jsx b/src/components/Dashboard/Inventory/FilamentStocks.jsx index d63729a..b464a19 100644 --- a/src/components/Dashboard/Inventory/FilamentStocks.jsx +++ b/src/components/Dashboard/Inventory/FilamentStocks.jsx @@ -3,8 +3,6 @@ import React, { useEffect, useState, useContext, useCallback } from 'react' import { useNavigate } from 'react-router-dom' import axios from 'axios' -import moment from 'moment' - import { Table, Button, @@ -16,12 +14,7 @@ import { Typography } from 'antd' import { createStyles } from 'antd-style' -import { - LoadingOutlined, - PlusOutlined, - ReloadOutlined, - InfoCircleOutlined -} from '@ant-design/icons' +import { LoadingOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' import { SocketContext } from '../context/SocketContext' @@ -29,8 +22,11 @@ import { SocketContext } from '../context/SocketContext' import NewFilamentStock from './FilamentStocks/NewFilamentStock' import IdText from '../common/IdText' import FilamentStockIcon from '../../Icons/FilamentStockIcon' - +import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import PlusIcon from '../../Icons/PlusIcon' +import ReloadIcon from '../../Icons/ReloadIcon' import FilamentStockState from '../common/FilamentStockState' +import TimeDisplay from '../common/TimeDisplay' const { Text } = Typography @@ -123,7 +119,7 @@ const FilamentStocks = () => { { label: 'Info', key: 'info', - icon: + icon: } ], onClick: ({ key }) => { @@ -194,8 +190,7 @@ const FilamentStocks = () => { width: 180, render: (createdAt) => { if (createdAt) { - const formattedDate = moment(createdAt).format('YYYY-MM-DD HH:mm:ss') - return {formattedDate} + return } else { return 'n/a' } @@ -208,8 +203,7 @@ const FilamentStocks = () => { width: 180, render: (updatedAt) => { if (updatedAt) { - const formattedDate = moment(updatedAt).format('YYYY-MM-DD HH:mm:ss') - return {formattedDate} + return } else { return 'n/a' } @@ -224,7 +218,7 @@ const FilamentStocks = () => { return ( @@ -139,6 +132,7 @@ const FilamentStockInfo = () => { {contextHolder} updateCollapseState('info', keys.length > 0)} expandIcon={({ isActive }) => ( @@ -163,7 +157,17 @@ const FilamentStockInfo = () => { filament: filamentStockData.filament || {} }} > - + {/* Read-only fields */} {filamentStockData.id ? ( @@ -173,9 +177,10 @@ const FilamentStockInfo = () => { )} - {moment(filamentStockData.createdAt).format( - 'YYYY-MM-DD HH:mm:ss' - )} + @@ -183,17 +188,21 @@ const FilamentStockInfo = () => { - {moment(filamentStockData.updatedAt).format( - 'YYYY-MM-DD HH:mm:ss' - )} + {filamentStockData.filament ? ( - + + + + ) : ( 'n/a' )} @@ -210,38 +219,32 @@ const FilamentStockInfo = () => { 'n/a' )} - + {filamentStockData.currentGrossWeight ? ( - - {filamentStockData.currentGrossWeight.toFixed(2) + 'g'} - + + + {filamentStockData.currentNetWeight.toFixed(2) + 'g'} + + + {filamentStockData.currentGrossWeight.toFixed(2) + 'g'} + + ) : ( 'n/a' )} - + {filamentStockData.startingGrossWeight ? ( - - {filamentStockData.startingGrossWeight.toFixed(2) + 'g'} - - ) : ( - 'n/a' - )} - - - {filamentStockData.currentNetWeight ? ( - - {filamentStockData.currentNetWeight.toFixed(2) + 'g'} - - ) : ( - 'n/a' - )} - - - {filamentStockData.startingNetWeight ? ( - - {filamentStockData.startingNetWeight.toFixed(2) + 'g'} - + + + + {filamentStockData.startingNetWeight.toFixed(2) + 'g'} + + + {filamentStockData.startingGrossWeight.toFixed(2) + 'g'} + + + ) : ( 'n/a' )} @@ -253,6 +256,7 @@ const FilamentStockInfo = () => { updateCollapseState('events', keys.length > 0)} expandIcon={({ isActive }) => ( diff --git a/src/components/Dashboard/Inventory/StockAudits.jsx b/src/components/Dashboard/Inventory/StockAudits.jsx new file mode 100644 index 0000000..04f8d3b --- /dev/null +++ b/src/components/Dashboard/Inventory/StockAudits.jsx @@ -0,0 +1,235 @@ +import React, { useEffect, useState, useContext, useCallback } from 'react' +import { useNavigate } from 'react-router-dom' +import axios from 'axios' + +import { Table, Button, Flex, Space, message, Dropdown, Typography } from 'antd' +import { createStyles } from 'antd-style' +import { LoadingOutlined } from '@ant-design/icons' + +import { AuthContext } from '../../Auth/AuthContext' +import { SocketContext } from '../context/SocketContext' + +import IdText from '../common/IdText' +import StockAuditIcon from '../../Icons/StockAuditIcon' +import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import PlusIcon from '../../Icons/PlusIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import TimeDisplay from '../common/TimeDisplay' + +const { Text } = Typography + +const useStyle = createStyles(({ css, token }) => { + const { antCls } = token + return { + customTable: css` + ${antCls}-table { + ${antCls}-table-container { + ${antCls}-table-body, + ${antCls}-table-content { + scrollbar-width: thin; + scrollbar-color: #eaeaea transparent; + scrollbar-gutter: stable; + } + } + } + ` + } +}) + +const StockAudits = () => { + const [messageApi, contextHolder] = message.useMessage() + const navigate = useNavigate() + const { styles } = useStyle() + const { socket } = useContext(SocketContext) + + const [stockAuditsData, setStockAuditsData] = useState([]) + const [loading, setLoading] = useState(true) + const [initialized, setInitialized] = useState(false) + + const { authenticated } = useContext(AuthContext) + + const fetchStockAuditsData = useCallback(async () => { + try { + const response = await axios.get('http://localhost:8080/stockaudits', { + headers: { + Accept: 'application/json' + }, + withCredentials: true + }) + setStockAuditsData(response.data) + setLoading(false) + } catch (err) { + messageApi.info(err) + } + }, [messageApi]) + + useEffect(() => { + if (authenticated) { + fetchStockAuditsData() + } + }, [authenticated, fetchStockAuditsData]) + + useEffect(() => { + if (socket && !initialized) { + setInitialized(true) + socket.on('notify_stockaudit_update', (updateData) => { + console.log('Received stock audit update:', updateData) + setStockAuditsData((prevData) => { + return prevData.map((audit) => { + if (audit._id === updateData._id) { + return { + ...audit, + ...updateData + } + } + return audit + }) + }) + }) + } + + return () => { + if (socket && initialized) { + console.log('Deregistering stock audit update listener') + socket.off('notify_stockaudit_update') + } + } + }, [socket, initialized]) + + const getStockAuditActionItems = (id) => { + return { + items: [ + { + label: 'Info', + key: 'info', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'info') { + navigate(`/dashboard/inventory/stockaudits/info?stockAuditId=${id}`) + } + } + } + } + + const columns = [ + { + title: '', + dataIndex: '', + key: 'icon', + width: 40, + fixed: 'left', + render: () => + }, + { + title: 'ID', + dataIndex: '_id', + key: 'id', + width: 165, + render: (text) => + }, + { + title: 'Status', + dataIndex: 'status', + key: 'status', + width: 120, + render: (status) => {status} + }, + { + title: 'Created At', + dataIndex: 'createdAt', + key: 'createdAt', + width: 180, + render: (createdAt) => { + if (createdAt) { + return + } + return 'n/a' + } + }, + { + title: 'Updated At', + dataIndex: 'updatedAt', + key: 'updatedAt', + width: 180, + render: (updatedAt) => { + if (updatedAt) { + return + } + return 'n/a' + } + }, + { + title: 'Actions', + key: 'actions', + fixed: 'right', + width: 150, + render: (text, record) => { + return ( + + + + + ) + } + } + ] + + const actionItems = { + items: [ + { + label: 'New Stock Audit', + key: 'newStockAudit', + icon: + }, + { type: 'divider' }, + { + label: 'Reload List', + key: 'reloadList', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reloadList') { + fetchStockAuditsData() + } else if (key === 'newStockAudit') { + // TODO: Implement new stock audit creation + messageApi.info('New stock audit creation not implemented yet') + } + } + } + + return ( + <> + + {contextHolder} + + + + + + }} + scroll={{ y: 'calc(100vh - 270px)' }} + /> + + + ) +} + +export default StockAudits diff --git a/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx b/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx new file mode 100644 index 0000000..b671e6f --- /dev/null +++ b/src/components/Dashboard/Inventory/StockAudits/StockAuditInfo.jsx @@ -0,0 +1,209 @@ +import React, { useEffect, useState, useContext } from 'react' +import { useLocation, useNavigate } from 'react-router-dom' +import axios from 'axios' +import { + Card, + Descriptions, + Button, + Space, + message, + Typography, + Table, + Tag +} from 'antd' +import { + ArrowLeftOutlined, + LoadingOutlined, + CheckCircleOutlined, + CloseCircleOutlined, + ClockCircleOutlined +} from '@ant-design/icons' + +import { AuthContext } from '../../../Auth/AuthContext' +import IdText from '../../common/IdText' +import TimeDisplay from '../../common/TimeDisplay' + +const { Text, Title } = Typography + +const StockAuditInfo = () => { + const [messageApi, contextHolder] = message.useMessage() + const location = useLocation() + const navigate = useNavigate() + const { authenticated } = useContext(AuthContext) + + const [stockAudit, setStockAudit] = useState(null) + const [loading, setLoading] = useState(true) + + const stockAuditId = new URLSearchParams(location.search).get('stockAuditId') + + useEffect(() => { + const fetchStockAudit = async () => { + if (!stockAuditId) { + messageApi.error('No stock audit ID provided') + navigate('/dashboard/inventory/stockaudits') + return + } + + try { + const response = await axios.get( + `http://localhost:8080/stockaudits/${stockAuditId}`, + { + headers: { + Accept: 'application/json' + }, + withCredentials: true + } + ) + setStockAudit(response.data) + setLoading(false) + } catch (err) { + messageApi.error('Failed to fetch stock audit details') + navigate('/dashboard/inventory/stockaudits') + } + } + + if (authenticated) { + fetchStockAudit() + } + }, [authenticated, stockAuditId, messageApi, navigate]) + + const getStatusTag = (status) => { + switch (status?.toLowerCase()) { + case 'completed': + return ( + } color='success'> + Completed + + ) + case 'in_progress': + return ( + } color='processing'> + In Progress + + ) + case 'failed': + return ( + } color='error'> + Failed + + ) + default: + return ( + } color='default'> + Unknown + + ) + } + } + + const auditItemsColumns = [ + { + title: 'Item ID', + dataIndex: '_id', + key: 'id', + width: 165, + render: (text) => ( + + ) + }, + { + title: 'Item Type', + dataIndex: 'itemType', + key: 'itemType', + width: 120 + }, + { + title: 'Expected Weight', + dataIndex: 'expectedWeight', + key: 'expectedWeight', + width: 120, + render: (weight) => `${weight.toFixed(2)}g` + }, + { + title: 'Actual Weight', + dataIndex: 'actualWeight', + key: 'actualWeight', + width: 120, + render: (weight) => `${weight.toFixed(2)}g` + }, + { + title: 'Difference', + key: 'difference', + width: 120, + render: (_, record) => { + const diff = record.actualWeight - record.expectedWeight + return ( + + {diff.toFixed(2)}g + + ) + } + }, + { + title: 'Status', + dataIndex: 'status', + key: 'status', + width: 120, + render: (status) => getStatusTag(status) + } + ] + + if (loading) { + return ( +
+ + Loading stock audit details... +
+ ) + } + + if (!stockAudit) { + return null + } + + return ( + <> + {contextHolder} + + + + + + + Stock Audit Details + + + + + + {getStatusTag(stockAudit.status)} + + + + + + + + + + + +
+ + + + ) +} + +export default StockAuditInfo diff --git a/src/components/Dashboard/Management/Filaments.jsx b/src/components/Dashboard/Management/Filaments.jsx index 724dcee..9efe5d6 100644 --- a/src/components/Dashboard/Management/Filaments.jsx +++ b/src/components/Dashboard/Management/Filaments.jsx @@ -3,8 +3,6 @@ import React, { useState, useContext, useCallback, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import axios from 'axios' -import moment from 'moment' - import { Table, Badge, @@ -21,20 +19,19 @@ import { Spin } from 'antd' import { createStyles } from 'antd-style' -import { - LoadingOutlined, - PlusOutlined, - ReloadOutlined, - InfoCircleOutlined, - CheckOutlined, - CloseOutlined -} from '@ant-design/icons' +import { LoadingOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' import NewFilament from './Filaments/NewFilament' import IdText from '../common/IdText' import FilamentIcon from '../../Icons/FilamentIcon' +import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import PlusIcon from '../../Icons/PlusIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import XMarkIcon from '../../Icons/XMarkIcon' +import CheckIcon from '../../Icons/CheckIcon' import useColumnVisibility from '../hooks/useColumnVisibility' +import TimeDisplay from '../common/TimeDisplay' const { Text } = Typography @@ -155,12 +152,12 @@ const Filaments = () => { clearFilters() confirm() }} - icon={} + icon={} /> @@ -209,6 +211,7 @@ const FilamentInfo = () => { {contextHolder} updateCollapseState('info', keys.length > 0)} expandIcon={({ isActive }) => ( @@ -238,19 +241,19 @@ const FilamentInfo = () => { {isEditing ? ( <> @@ -240,6 +241,7 @@ const PartInfo = () => { {contextHolder} updateCollapseState('info', keys.length > 0)} expandIcon={({ isActive }) => ( @@ -263,19 +265,19 @@ const PartInfo = () => { {isEditing ? ( <> @@ -194,6 +193,7 @@ const ProductInfo = () => { {contextHolder} updateCollapseState('info', keys.length > 0)} expandIcon={({ isActive }) => ( @@ -217,19 +217,19 @@ const ProductInfo = () => { {isEditing ? ( <> @@ -147,173 +154,201 @@ const VendorInfo = () => { return (
{contextHolder} - updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - Vendor Information - - - {isEditing ? ( - <> -
) } diff --git a/src/components/Dashboard/Production/GCodeFiles.jsx b/src/components/Dashboard/Production/GCodeFiles.jsx index dcdda83..8c39cea 100644 --- a/src/components/Dashboard/Production/GCodeFiles.jsx +++ b/src/components/Dashboard/Production/GCodeFiles.jsx @@ -3,8 +3,6 @@ import React, { useEffect, useState, useContext, useCallback } from 'react' import { useNavigate } from 'react-router-dom' import axios from 'axios' -import moment from 'moment' - import { Table, Badge, @@ -22,21 +20,19 @@ import { Spin } from 'antd' import { createStyles } from 'antd-style' -import { - LoadingOutlined, - PlusOutlined, - DownloadOutlined, - ReloadOutlined, - InfoCircleOutlined, - CheckOutlined, - CloseOutlined -} from '@ant-design/icons' +import { LoadingOutlined, DownloadOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' import NewGCodeFile from './GCodeFiles/NewGCodeFile' import IdText from '../common/IdText' import GCodeFileIcon from '../../Icons/GCodeFileIcon' +import InfoCircleIcon from '../../Icons/InfoCircleIcon' import useColumnVisibility from '../hooks/useColumnVisibility' +import PlusIcon from '../../Icons/PlusIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import XMarkIcon from '../../Icons/XMarkIcon' +import CheckIcon from '../../Icons/CheckIcon' +import TimeDisplay from '../common/TimeDisplay' const { Text } = Typography @@ -87,12 +83,12 @@ const GCodeFiles = () => { clearFilters() confirm() }} - icon={} + icon={} /> @@ -143,191 +153,253 @@ const GCodeFileInfo = () => { return (
{contextHolder} - updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - GCode File Information - - - {isEditing ? ( - <> -
) } diff --git a/src/components/Dashboard/Production/PrintJobs.jsx b/src/components/Dashboard/Production/PrintJobs.jsx index 5ffa0f7..52ac37e 100644 --- a/src/components/Dashboard/Production/PrintJobs.jsx +++ b/src/components/Dashboard/Production/PrintJobs.jsx @@ -3,7 +3,6 @@ import React, { useEffect, useState, useCallback, useContext } from 'react' import { useNavigate } from 'react-router-dom' import axios from 'axios' -import moment from 'moment' import { Table, Button, @@ -21,18 +20,12 @@ import { } from 'antd' import { createStyles } from 'antd-style' import { - EditOutlined, - PlusOutlined, LoadingOutlined, - InfoCircleOutlined, PlayCircleOutlined, - ReloadOutlined, - CloseOutlined, CheckCircleOutlined, CloseCircleOutlined, PauseCircleOutlined, - QuestionCircleOutlined, - CheckOutlined + QuestionCircleOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' @@ -40,8 +33,16 @@ import { SocketContext } from '../context/SocketContext' import NewPrintJob from './PrintJobs/NewPrintJob' import JobState from '../common/JobState' import SubJobCounter from '../common/SubJobCounter' +import TimeDisplay from '../common/TimeDisplay' import IdText from '../common/IdText' import useColumnVisibility from '../hooks/useColumnVisibility' +import JobIcon from '../../Icons/JobIcon' +import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import PlusIcon from '../../Icons/PlusIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import EditIcon from '../../Icons/EditIcon.jsx' +import XMarkIcon from '../../Icons/XMarkIcon.jsx' +import CheckIcon from '../../Icons/CheckIcon.jsx' const { Text } = Typography @@ -104,12 +105,12 @@ const PrintJobs = () => { clearFilters() confirm() }} - icon={} + icon={} /> @@ -104,85 +114,118 @@ const PrintJobInfo = () => { return (
- - - Print Job Information - - - - - - - - updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + - - - {printJobData.gcodeFile?.name || 'Not specified'} - - - - - - {printJobData.quantity || 1} - - - {(() => { - if (printJobData.createdat) { - return moment(printJobData.createdat.$date).format( - 'YYYY-MM-DD HH:mm:ss' - ) - } - return 'N/A' - })()} - - - {(() => { - if (printJobData.started_at) { - return moment(printJobData.started_at.$date).format( - 'YYYY-MM-DD HH:mm:ss' - ) - } - return 'N/A' - })()} - - {printJobData.state.type === 'printing' && ( - - - )} - - {printJobData.printers?.length > 0 ? ( - {printJobData.printers.length} printers assigned - ) : ( - 'Any available printer' - )} - - - - - Sub Job Information - - - + + Print Job Information + + } + key='1' + > + + + + + + + + + + + {printJobData.gcodeFile?.name || 'Not specified'} + + + + + + + {printJobData.quantity || 1} + + + + + + {printJobData.startedAt ? ( + + ) : ( + 'n/a' + )} + + {printJobData.state.type === 'printing' && ( + + + + )} + + {printJobData.printers?.length > 0 ? ( + {printJobData.printers.length} printers assigned + ) : ( + 'Any available printer' + )} + + + + + + updateCollapseState('subJobs', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} + > + + Sub Job Information + + } + key='2' + > + + +
) } diff --git a/src/components/Dashboard/Production/Printers.jsx b/src/components/Dashboard/Production/Printers.jsx index 59ee0f0..fe2a6c3 100644 --- a/src/components/Dashboard/Production/Printers.jsx +++ b/src/components/Dashboard/Production/Printers.jsx @@ -18,22 +18,19 @@ import { Spin } from 'antd' import { createStyles } from 'antd-style' -import { - InfoCircleOutlined, - EditOutlined, - ControlOutlined, - LoadingOutlined, - ReloadOutlined, - CloseOutlined, - PlusOutlined, - PrinterOutlined, - CheckOutlined -} from '@ant-design/icons' +import { LoadingOutlined } from '@ant-design/icons' import { AuthContext } from '../../Auth/AuthContext' import PrinterState from '../common/PrinterState' import NewPrinter from './Printers/NewPrinter' import IdText from '../common/IdText' +import PrinterIcon from '../../Icons/PrinterIcon' +import InfoCircleIcon from '../../Icons/InfoCircleIcon' +import ControlIcon from '../../Icons/ControlIcon' +import PlusIcon from '../../Icons/PlusIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import XMarkIcon from '../../Icons/XMarkIcon' +import CheckIcon from '../../Icons/CheckIcon' const useStyle = createStyles(({ css, token }) => { const { antCls } = token @@ -71,7 +68,7 @@ const Printers = () => { key: '', width: 40, fixed: 'left', - render: () => + render: () => }, { title: 'Name', @@ -162,7 +159,7 @@ const Printers = () => { return ( - + + + + + + + + {printerData ? ( { {printerData?.alerts?.some( (alert) => alert.type === 'klippyStartup' ) && } - + {printerData.name} @@ -421,9 +509,12 @@ const ControlPrinter = () => { { - - {printerData.currentJob?.gcodeFile?.name || 'n/a'} - + + + + {printerData.currentJob?.gcodeFile?.name || 'n/a'} + + } @@ -447,13 +538,20 @@ const ControlPrinter = () => { )} - + {printerData.currentFilamentStock?.currentNetWeight ? ( - - {printerData.currentFilamentStock.currentNetWeight.toFixed( - 2 - ) + 'g'} - + + + {printerData.currentFilamentStock.currentNetWeight.toFixed( + 2 + ) + 'g'} + + + {printerData.currentFilamentStock.currentGrossWeight.toFixed( + 2 + ) + 'g'} + + ) : ( 'n/a' )} @@ -474,10 +572,15 @@ const ControlPrinter = () => { {printerData.currentFilamentStock?.filament?.name ? ( - + + + + ) : ( 'n/a' )} @@ -533,7 +636,7 @@ const ControlPrinter = () => { .printSettingsId ) { return ( - + {printerData.currentJob.gcodeFile.gcodeFileInfo.printSettingsId.replaceAll( '"', '' @@ -546,21 +649,27 @@ const ControlPrinter = () => { })()} - + {componentVisibility.subjobs && ( + + )} - - - + {componentVisibility.temperature && ( + + + + )} - - - + {componentVisibility.movement && ( + + + + )} ) : ( @@ -623,7 +732,7 @@ const ControlPrinter = () => { , @@ -190,248 +197,309 @@ const PrinterInfo = () => { return (
{contextHolder} - updateCollapseState('info', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - Printer Information - - - {isEditing ? ( - <> - - - - ) : ( - - )} - - - -
- - {/* Read-only fields */} - - - - - {new Date(printerData.updatedAt).toLocaleString()} - - - {/* Editable fields */} - - {isEditing ? ( - - - - ) : ( - printerData.name || 'n/a' - )} - - - - {isEditing ? ( - - - - ) : ( - printerData.moonraker?.host || 'n/a' - )} - - - - {isEditing ? ( - - - - ) : ( - printerData?.vendor?.name || 'n/a' - )} - - - - {printerData?.vendor ? ( - - ) : ( - 'n/a' - )} - - - - {isEditing ? ( - - - - ) : ( - printerData.moonraker.port - )} - - - - {isEditing ? ( - - - -
) } diff --git a/src/components/Dashboard/Production/ProductionOverview.jsx b/src/components/Dashboard/Production/ProductionOverview.jsx index a2a3653..5b1ab9a 100644 --- a/src/components/Dashboard/Production/ProductionOverview.jsx +++ b/src/components/Dashboard/Production/ProductionOverview.jsx @@ -1,24 +1,25 @@ import React, { useEffect, useState, useCallback } from 'react' import { Descriptions, - Progress, Space, Flex, Alert, Typography, - Card, Spin, message, - Button + Button, + Collapse, + Segmented } from 'antd' -import { - PrinterOutlined, - LoadingOutlined, - CheckCircleOutlined, - PlayCircleOutlined, - ReloadOutlined -} from '@ant-design/icons' +import { LoadingOutlined, CaretRightOutlined } from '@ant-design/icons' import axios from 'axios' +import PrinterIcon from '../../Icons/PrinterIcon' +import JobIcon from '../../Icons/JobIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import PauseIcon from '../../Icons/PauseIcon' +import XMarkIcon from '../../Icons/XMarkIcon' +import useCollapseState from '../hooks/useCollapseState' +import CheckIcon from '../../Icons/CheckIcon' const { Title, Text } = Typography @@ -26,6 +27,19 @@ const ProductionOverview = () => { const [messageApi, contextHolder] = message.useMessage() const [error, setError] = useState(null) const [fetchPrinterStatsLoading, setFetchPrinterStatsLoading] = useState(true) + const [collapseState, updateCollapseState] = useCollapseState( + 'ProductionOverview', + { + overview: true, + printerStats: true, + jobStats: true + } + ) + const [timeRanges, setTimeRanges] = useState({ + overview: '24h', + printerStats: '24h', + jobStats: '24h' + }) const [stats, setStats] = useState({ totalPrinters: 0, @@ -95,21 +109,6 @@ const ProductionOverview = () => { fetchAllStats() }, [fetchAllStats]) - const getPrinterStatusPercentage = (status) => { - const count = stats.printerStatus[status] || 0 - if (stats.totalPrinters > 0) { - return Math.round((count / stats.totalPrinters) * 100) - } - return 0 - } - - const getCompletionRate = () => { - if (stats.totalPrintJobs > 0) { - return Math.round((stats.completedPrintJobs / stats.totalPrintJobs) * 100) - } - return 0 - } - if (fetchPrinterStatsLoading || fetchPrinterStatsLoading) { return (
@@ -125,7 +124,7 @@ const ProductionOverview = () => { style={{ width: '100%', textAlign: 'center' }} >

{error || 'Printer not found'}

- @@ -135,229 +134,279 @@ const ProductionOverview = () => { return ( {contextHolder} - updateCollapseState('overview', keys.length > 0)} + expandIcon={({ isActive }) => ( + + )} > - - Overview - - - - - Ready - - - - {(stats.printers.standby || 0) + - (stats.printers.complete || 0)} - - - + + Status Overview + } - /> - - Printing - - - - {stats.printers.printing || 0} - - - - } - /> - - Queued - - - - {stats.printJobs.queued || 0} - - - - } - /> - - Printing - - - - {stats.printJobs.printing || 0} - - - - } - /> - - Failed - - - - {(stats.printJobs.failed || 0) + - (stats.printJobs.cancelled || 0)} - - - - } - /> - - Complete - - - - {stats.printJobs.complete || 0} - - - - } - /> - + key='1' + > + + + Ready + + + + {(stats.printers.standby || 0) + + (stats.printers.complete || 0)} + + + + } + /> + + Printing + + + + {stats.printers.printing || 0} + + + + } + /> + + Queued + + + + {stats.printJobs.queued || 0} + + + + } + /> + + Printing + + + + {stats.printJobs.printing || 0} + + + + } + /> + + Failed + + + + {(stats.printJobs.failed || 0) + + (stats.printJobs.cancelled || 0)} + + + + } + /> + + Complete + + + + {stats.printJobs.complete || 0} + + + + } + /> + + + + - + updateCollapseState('printerStats', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} > - - Printer Statistics - - - - - - Total Printers - - } - > - {stats.totalPrinters} - - - Active Printers - - } - > - {stats.activePrinters} - - - - - - - - {stats.printerStatus.printing || 0} - - - - - - - - {stats.printerStatus.idle || 0} - - - - - - `${stats.printerStatus.idle || 0} Idle`} - /> - `${stats.printerStatus.error || 0} Error`} - /> - - + + + Printer Statistics + + + setTimeRanges((prev) => ({ + ...prev, + printerStats: value + })) + } + size='small' + /> + + } + key='2' + > + + + + + {'Completed'} + + } + > + {stats.totalPrinters} + + + + {'Error'} + + } + > + {stats.activePrinters} + + + + {'Paused'} + + } + > + {stats.activePrinters} + + + + + - + updateCollapseState('jobStats', keys.length > 0) + } + expandIcon={({ isActive }) => ( + + )} > - - Job Statistics - - - - - - Total Print Jobs - - } - > - {stats.totalPrintJobs} - - - Active Print Jobs - - } - > - {stats.activePrintJobs} - - - Completed Print Jobs - - } - > - {stats.completedPrintJobs} - - - 'Completion Rate'} - /> - - - + + + Job Statistics + + + setTimeRanges((prev) => ({ ...prev, jobStats: value })) + } + size='small' + /> + + } + key='3' + > + + + + + {'Completed'} + + } + > + {stats.totalPrintJobs} + + + + {'Failed'} + + } + > + {stats.activePrintJobs} + + + + {'Queued'} + + } + > + {stats.completedPrintJobs} + + + + + diff --git a/src/components/Dashboard/common/DashboardBreadcrumb.jsx b/src/components/Dashboard/common/DashboardBreadcrumb.jsx index 792dc06..62f9d4a 100644 --- a/src/components/Dashboard/common/DashboardBreadcrumb.jsx +++ b/src/components/Dashboard/common/DashboardBreadcrumb.jsx @@ -29,7 +29,11 @@ const breadcrumbNameMap = { '/dashboard/inventory/filamentstocks': 'Filament Stocks', '/dashboard/inventory/filamentstocks/info': 'Info', '/dashboard/inventory/partstocks': 'Parts', - '/dashboard/inventory/partstocks/info': 'Info' + '/dashboard/inventory/partstocks/info': 'Info', + '/dashboard/inventory/productstocks': 'Products', + '/dashboard/inventory/productstocks/info': 'Info', + '/dashboard/inventory/stockaudits': 'Stock Audits', + '/dashboard/inventory/stockaudits/info': 'Info' } const DashboardBreadcrumb = () => { diff --git a/src/components/Dashboard/common/DashboardNavigation.jsx b/src/components/Dashboard/common/DashboardNavigation.jsx index 68401b0..ac8ec6d 100644 --- a/src/components/Dashboard/common/DashboardNavigation.jsx +++ b/src/components/Dashboard/common/DashboardNavigation.jsx @@ -11,11 +11,8 @@ import { Typography } from 'antd' import { - UserOutlined, LogoutOutlined, - PrinterOutlined, SettingOutlined, - ProductOutlined, ShoppingCartOutlined, PoundOutlined, MailOutlined, @@ -31,6 +28,9 @@ import { useNavigate, useLocation } from 'react-router-dom' import { Header } from 'antd/es/layout/layout' import FarmControlLogo from '../../Logos/FarmControlLogo' +import ProductionIcon from '../../Icons/ProductionIcon' +import InventoryIcon from '../../Icons/InventoryIcon' +import PersonIcon from '../../Icons/PersonIcon' const { Text } = Typography @@ -58,12 +58,12 @@ const DashboardNavigation = () => { { key: 'production', label: 'Production', - icon: + icon: }, { key: 'inventory', label: 'Inventory', - icon: + icon: }, { key: 'sales', @@ -88,7 +88,7 @@ const DashboardNavigation = () => { { key: 'username', label: userProfile?.username, - icon: , + icon: , disabled: true }, { @@ -186,7 +186,7 @@ const DashboardNavigation = () => { {userProfile ? ( - }> + }> {userProfile?.name ? userProfile.name : userProfile.username} diff --git a/src/components/Dashboard/common/DashboardSidebar.jsx b/src/components/Dashboard/common/DashboardSidebar.jsx deleted file mode 100644 index 7f1c4d6..0000000 --- a/src/components/Dashboard/common/DashboardSidebar.jsx +++ /dev/null @@ -1,57 +0,0 @@ -// Sidebar.js -import React from 'react' -import { Link } from 'react-router-dom' -import { Layout, Menu } from 'antd' -import { - DashboardOutlined, - PrinterOutlined, - PlayCircleOutlined -} from '@ant-design/icons' - -import FilamentIcon from '../../Icons/FilamentIcon' -import GCodeFileIcon from '../../Icons/GCodeFileIcon' - -const { Sider } = Layout - -const Sidebar = () => { - const items = [ - { - key: 'overview', - label: Overview, - icon: - }, - { - key: 'printers', - label: Printers, - icon: - }, - { - key: 'jobs', - label: Print Jobs, - icon: - }, - { - key: 'filaments', - label: Filaments, - icon: - }, - { - key: 'gcodefiles', - label: G Code Files, - icon: - } - ] - return ( - - - - ) -} - -export default Sidebar diff --git a/src/components/Dashboard/common/FilamentStockState.jsx b/src/components/Dashboard/common/FilamentStockState.jsx index 573f454..f5e6d9d 100644 --- a/src/components/Dashboard/common/FilamentStockState.jsx +++ b/src/components/Dashboard/common/FilamentStockState.jsx @@ -40,7 +40,7 @@ const FilamentStockState = ({ if (socket && !initialized && filamentStock?._id) { setInitialized(true) socket.on('notify_filamentstock_update', (statusUpdate) => { - if (statusUpdate?.id === filamentStock._id && statusUpdate?.state) { + if (statusUpdate?._id === filamentStock?._id && statusUpdate?.state) { setCurrentState(statusUpdate.state) } }) diff --git a/src/components/Dashboard/common/IdText.jsx b/src/components/Dashboard/common/IdText.jsx index a8a32e5..dd49526 100644 --- a/src/components/Dashboard/common/IdText.jsx +++ b/src/components/Dashboard/common/IdText.jsx @@ -3,7 +3,7 @@ import React from 'react' import PropTypes from 'prop-types' import { Flex, Typography, Button, Tooltip, message } from 'antd' import { useNavigate } from 'react-router-dom' -import { CopyOutlined } from '@ant-design/icons' +import CopyIcon from '../../Icons/CopyIcon' const { Text, Link } = Typography @@ -112,7 +112,7 @@ const IdText = ({ {showCopy && ( @@ -146,6 +168,7 @@ const PrinterJobsTree = ({ subJobs: initialSubJobs }) => { treeData={treeData} expandedKeys={expandedKeys} onExpand={setExpandedKeys} + onSelect={handleNodeClick} showLine={true} /> diff --git a/src/components/Dashboard/common/PrinterState.jsx b/src/components/Dashboard/common/PrinterState.jsx index 3063761..3aaafc3 100644 --- a/src/components/Dashboard/common/PrinterState.jsx +++ b/src/components/Dashboard/common/PrinterState.jsx @@ -3,11 +3,9 @@ import PropTypes from 'prop-types' import { Badge, Progress, Flex, Space, Tag, Typography, Button } from 'antd' import React, { useState, useContext, useEffect } from 'react' import { SocketContext } from '../context/SocketContext' -import { - CloseOutlined, - PauseOutlined, - CaretRightOutlined -} from '@ant-design/icons' +import { CaretRightOutlined } from '@ant-design/icons' +import XMarkIcon from '../../Icons/XMarkIcon' +import PauseIcon from '../../Icons/PauseIcon' const PrinterState = ({ printer, @@ -145,11 +143,10 @@ const PrinterState = ({ } }} style={{ height: '22px' }} + type='text' icon={ currentState.type === 'printing' ? ( - + ) : ( + } /> diff --git a/src/components/Dashboard/common/PrinterTemperaturePanel.jsx b/src/components/Dashboard/common/PrinterTemperaturePanel.jsx index 1029472..191e7c8 100644 --- a/src/components/Dashboard/common/PrinterTemperaturePanel.jsx +++ b/src/components/Dashboard/common/PrinterTemperaturePanel.jsx @@ -10,7 +10,7 @@ import { InputNumber, Button } from 'antd' -import { LoadingOutlined } from '@ant-design/icons' +import { LoadingOutlined, CaretRightOutlined } from '@ant-design/icons' import { SocketContext } from '../context/SocketContext' import styled from 'styled-components' import PropTypes from 'prop-types' @@ -291,7 +291,14 @@ const PrinterTemperaturePanel = ({ )} {showMoreInfo === true && ( - + ( + + )} + /> )} ) : ( diff --git a/src/components/Dashboard/common/ProductionSidebar.jsx b/src/components/Dashboard/common/ProductionSidebar.jsx index 5509a87..f91f4fb 100644 --- a/src/components/Dashboard/common/ProductionSidebar.jsx +++ b/src/components/Dashboard/common/ProductionSidebar.jsx @@ -1,14 +1,12 @@ import React, { useState, useEffect } from 'react' import { Link, useLocation } from 'react-router-dom' import { Layout, Menu, Flex, Button } from 'antd' -import { - DashboardOutlined, - PrinterOutlined, - PlayCircleOutlined, - MenuFoldOutlined, - MenuUnfoldOutlined -} from '@ant-design/icons' +import { DashboardOutlined } from '@ant-design/icons' import GCodeFileIcon from '../../Icons/GCodeFileIcon' +import JobIcon from '../../Icons/JobIcon' +import PrinterIcon from '../../Icons/PrinterIcon' +import CollapseSidebarIcon from '../../Icons/CollapseSidebarIcon' +import ExpandSidebarIcon from '../../Icons/ExpandSidebarIcon' const { Sider } = Layout @@ -44,12 +42,12 @@ const ProductionSidebar = () => { { key: 'printers', label: Printers, - icon: + icon: }, { key: 'printjobs', label: Print Jobs, - icon: + icon: }, { key: 'gcodefiles', @@ -76,7 +74,7 @@ const ProductionSidebar = () => {