Webpack production build
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 30 Aug 2023 05:45:29 +0000 (07:45 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 30 Aug 2023 05:45:29 +0000 (07:45 +0200)
Makefile
org.argeo.app.geo.js/package-lock.json
org.argeo.app.geo.js/package.json
org.argeo.app.geo.js/webpack.common.js [new file with mode: 0644]
org.argeo.app.geo.js/webpack.config.js [deleted file]
org.argeo.app.geo.js/webpack.dev.js [new file with mode: 0644]
org.argeo.app.geo.js/webpack.prod.js [new file with mode: 0644]

index 861041c34b84bd85b1571dfe44cac4f1ba78e390..318a122389ca23e0d15884608bd22320fb7501c9 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -48,7 +48,7 @@ clean:
 
 ## WEB
 web:
-       cd org.argeo.app.geo.js && npm run build
+       cd org.argeo.app.geo.js && npm run build-prod
 
 npm-install:
        cd org.argeo.app.geo.js && npm install
index 73f8da7de6ac6e44f5af9c4c328ec5bf28c9334d..9765ab796a67a71147aaf38d1a2028f1075ff6f4 100644 (file)
@@ -12,6 +12,7 @@
                        },
                        "devDependencies": {
                                "css-loader": "^6.8.1",
+                               "css-minimizer-webpack-plugin": "^5.0.1",
                                "html-webpack-plugin": "^5.5.3",
                                "mini-css-extract-plugin": "^2.7.6",
                                "npm-check-updates": "^16.13.2",
                                "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
+               "node_modules/@jest/schemas": {
+                       "version": "29.6.3",
+                       "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+                       "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+                       "dev": true,
+                       "dependencies": {
+                               "@sinclair/typebox": "^0.27.8"
+                       },
+                       "engines": {
+                               "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+                       }
+               },
+               "node_modules/@jest/types": {
+                       "version": "29.6.3",
+                       "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+                       "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+                       "dev": true,
+                       "dependencies": {
+                               "@jest/schemas": "^29.6.3",
+                               "@types/istanbul-lib-coverage": "^2.0.0",
+                               "@types/istanbul-reports": "^3.0.0",
+                               "@types/node": "*",
+                               "@types/yargs": "^17.0.8",
+                               "chalk": "^4.0.0"
+                       },
+                       "engines": {
+                               "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+                       }
+               },
+               "node_modules/@jest/types/node_modules/ansi-styles": {
+                       "version": "4.3.0",
+                       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+                       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+                       "dev": true,
+                       "dependencies": {
+                               "color-convert": "^2.0.1"
+                       },
+                       "engines": {
+                               "node": ">=8"
+                       },
+                       "funding": {
+                               "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+                       }
+               },
+               "node_modules/@jest/types/node_modules/chalk": {
+                       "version": "4.1.2",
+                       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+                       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+                       "dev": true,
+                       "dependencies": {
+                               "ansi-styles": "^4.1.0",
+                               "supports-color": "^7.1.0"
+                       },
+                       "engines": {
+                               "node": ">=10"
+                       },
+                       "funding": {
+                               "url": "https://github.com/chalk/chalk?sponsor=1"
+                       }
+               },
+               "node_modules/@jest/types/node_modules/supports-color": {
+                       "version": "7.2.0",
+                       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+                       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+                       "dev": true,
+                       "dependencies": {
+                               "has-flag": "^4.0.0"
+                       },
+                       "engines": {
+                               "node": ">=8"
+                       }
+               },
                "node_modules/@jridgewell/gen-mapping": {
                        "version": "0.3.3",
                        "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
                                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
                        }
                },
+               "node_modules/@sinclair/typebox": {
+                       "version": "0.27.8",
+                       "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+                       "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+                       "dev": true
+               },
                "node_modules/@sindresorhus/is": {
                        "version": "5.6.0",
                        "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
                                "node": ">= 10"
                        }
                },
+               "node_modules/@trysound/sax": {
+                       "version": "0.2.0",
+                       "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+                       "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+                       "dev": true,
+                       "engines": {
+                               "node": ">=10.13.0"
+                       }
+               },
                "node_modules/@tufjs/canonical-json": {
                        "version": "1.0.0",
                        "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz",
                        "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
                        "dev": true
                },
+               "node_modules/@types/istanbul-lib-coverage": {
+                       "version": "2.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+                       "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+                       "dev": true
+               },
+               "node_modules/@types/istanbul-lib-report": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+                       "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+                       "dev": true,
+                       "dependencies": {
+                               "@types/istanbul-lib-coverage": "*"
+                       }
+               },
+               "node_modules/@types/istanbul-reports": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+                       "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+                       "dev": true,
+                       "dependencies": {
+                               "@types/istanbul-lib-report": "*"
+                       }
+               },
                "node_modules/@types/json-schema": {
                        "version": "7.0.12",
                        "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
                        "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==",
                        "dev": true
                },
+               "node_modules/@types/yargs": {
+                       "version": "17.0.24",
+                       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+                       "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+                       "dev": true,
+                       "dependencies": {
+                               "@types/yargs-parser": "*"
+                       }
+               },
+               "node_modules/@types/yargs-parser": {
+                       "version": "21.0.0",
+                       "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+                       "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+                       "dev": true
+               },
                "node_modules/@webassemblyjs/ast": {
                        "version": "1.11.6",
                        "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
                                "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
+               "node_modules/caniuse-api": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+                       "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+                       "dev": true,
+                       "dependencies": {
+                               "browserslist": "^4.0.0",
+                               "caniuse-lite": "^1.0.0",
+                               "lodash.memoize": "^4.1.2",
+                               "lodash.uniq": "^4.5.0"
+                       }
+               },
                "node_modules/caniuse-lite": {
                        "version": "1.0.30001524",
                        "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz",
                                "color-support": "bin.js"
                        }
                },
+               "node_modules/colord": {
+                       "version": "2.9.3",
+                       "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+                       "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+                       "dev": true
+               },
                "node_modules/colorette": {
                        "version": "2.0.20",
                        "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
                                "url": "https://github.com/sponsors/sindresorhus"
                        }
                },
+               "node_modules/css-declaration-sorter": {
+                       "version": "6.4.1",
+                       "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
+                       "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^10 || ^12 || >=14"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.0.9"
+                       }
+               },
                "node_modules/css-loader": {
                        "version": "6.8.1",
                        "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz",
                                "webpack": "^5.0.0"
                        }
                },
+               "node_modules/css-minimizer-webpack-plugin": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz",
+                       "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==",
+                       "dev": true,
+                       "dependencies": {
+                               "@jridgewell/trace-mapping": "^0.3.18",
+                               "cssnano": "^6.0.1",
+                               "jest-worker": "^29.4.3",
+                               "postcss": "^8.4.24",
+                               "schema-utils": "^4.0.1",
+                               "serialize-javascript": "^6.0.1"
+                       },
+                       "engines": {
+                               "node": ">= 14.15.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/webpack"
+                       },
+                       "peerDependencies": {
+                               "webpack": "^5.0.0"
+                       },
+                       "peerDependenciesMeta": {
+                               "@parcel/css": {
+                                       "optional": true
+                               },
+                               "@swc/css": {
+                                       "optional": true
+                               },
+                               "clean-css": {
+                                       "optional": true
+                               },
+                               "csso": {
+                                       "optional": true
+                               },
+                               "esbuild": {
+                                       "optional": true
+                               },
+                               "lightningcss": {
+                                       "optional": true
+                               }
+                       }
+               },
+               "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": {
+                       "version": "29.6.4",
+                       "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz",
+                       "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==",
+                       "dev": true,
+                       "dependencies": {
+                               "@types/node": "*",
+                               "jest-util": "^29.6.3",
+                               "merge-stream": "^2.0.0",
+                               "supports-color": "^8.0.0"
+                       },
+                       "engines": {
+                               "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+                       }
+               },
                "node_modules/css-select": {
                        "version": "4.3.0",
                        "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
                                "url": "https://github.com/sponsors/fb55"
                        }
                },
+               "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,
+                       "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/css-what": {
                        "version": "6.1.0",
                        "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
                                "node": ">=4"
                        }
                },
+               "node_modules/cssnano": {
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
+                       "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
+                       "dev": true,
+                       "dependencies": {
+                               "cssnano-preset-default": "^6.0.1",
+                               "lilconfig": "^2.1.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/cssnano"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/cssnano-preset-default": {
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
+                       "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
+                       "dev": true,
+                       "dependencies": {
+                               "css-declaration-sorter": "^6.3.1",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-calc": "^9.0.0",
+                               "postcss-colormin": "^6.0.0",
+                               "postcss-convert-values": "^6.0.0",
+                               "postcss-discard-comments": "^6.0.0",
+                               "postcss-discard-duplicates": "^6.0.0",
+                               "postcss-discard-empty": "^6.0.0",
+                               "postcss-discard-overridden": "^6.0.0",
+                               "postcss-merge-longhand": "^6.0.0",
+                               "postcss-merge-rules": "^6.0.1",
+                               "postcss-minify-font-values": "^6.0.0",
+                               "postcss-minify-gradients": "^6.0.0",
+                               "postcss-minify-params": "^6.0.0",
+                               "postcss-minify-selectors": "^6.0.0",
+                               "postcss-normalize-charset": "^6.0.0",
+                               "postcss-normalize-display-values": "^6.0.0",
+                               "postcss-normalize-positions": "^6.0.0",
+                               "postcss-normalize-repeat-style": "^6.0.0",
+                               "postcss-normalize-string": "^6.0.0",
+                               "postcss-normalize-timing-functions": "^6.0.0",
+                               "postcss-normalize-unicode": "^6.0.0",
+                               "postcss-normalize-url": "^6.0.0",
+                               "postcss-normalize-whitespace": "^6.0.0",
+                               "postcss-ordered-values": "^6.0.0",
+                               "postcss-reduce-initial": "^6.0.0",
+                               "postcss-reduce-transforms": "^6.0.0",
+                               "postcss-svgo": "^6.0.0",
+                               "postcss-unique-selectors": "^6.0.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/cssnano-utils": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
+                       "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "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,
+                       "dependencies": {
+                               "css-tree": "~2.2.0"
+                       },
+                       "engines": {
+                               "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+                               "npm": ">=7.0.0"
+                       }
+               },
+               "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,
+                       "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/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
+               },
                "node_modules/debug": {
                        "version": "4.3.4",
                        "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
                                "@pkgjs/parseargs": "^0.11.0"
                        }
                },
+               "node_modules/jest-util": {
+                       "version": "29.6.3",
+                       "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz",
+                       "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==",
+                       "dev": true,
+                       "dependencies": {
+                               "@jest/types": "^29.6.3",
+                               "@types/node": "*",
+                               "chalk": "^4.0.0",
+                               "ci-info": "^3.2.0",
+                               "graceful-fs": "^4.2.9",
+                               "picomatch": "^2.2.3"
+                       },
+                       "engines": {
+                               "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+                       }
+               },
+               "node_modules/jest-util/node_modules/ansi-styles": {
+                       "version": "4.3.0",
+                       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+                       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+                       "dev": true,
+                       "dependencies": {
+                               "color-convert": "^2.0.1"
+                       },
+                       "engines": {
+                               "node": ">=8"
+                       },
+                       "funding": {
+                               "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+                       }
+               },
+               "node_modules/jest-util/node_modules/chalk": {
+                       "version": "4.1.2",
+                       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+                       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+                       "dev": true,
+                       "dependencies": {
+                               "ansi-styles": "^4.1.0",
+                               "supports-color": "^7.1.0"
+                       },
+                       "engines": {
+                               "node": ">=10"
+                       },
+                       "funding": {
+                               "url": "https://github.com/chalk/chalk?sponsor=1"
+                       }
+               },
+               "node_modules/jest-util/node_modules/supports-color": {
+                       "version": "7.2.0",
+                       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+                       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+                       "dev": true,
+                       "dependencies": {
+                               "has-flag": "^4.0.0"
+                       },
+                       "engines": {
+                               "node": ">=8"
+                       }
+               },
                "node_modules/jest-worker": {
                        "version": "27.5.1",
                        "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
                        "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
                        "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="
                },
+               "node_modules/lilconfig": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+                       "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+                       "dev": true,
+                       "engines": {
+                               "node": ">=10"
+                       }
+               },
                "node_modules/loader-runner": {
                        "version": "4.3.0",
                        "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
                        "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
                        "dev": true
                },
+               "node_modules/lodash.memoize": {
+                       "version": "4.1.2",
+                       "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+                       "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+                       "dev": true
+               },
+               "node_modules/lodash.uniq": {
+                       "version": "4.5.0",
+                       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+                       "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+                       "dev": true
+               },
                "node_modules/lower-case": {
                        "version": "2.0.2",
                        "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
                        "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.2.tgz",
                        "integrity": "sha512-f+NBjJJY4T3dHtlEz1wCG7YFlkODEjFIYlxDdLIDMNpkSksqTt+l/d4rjuwItxuzkuMFvPyrjzV2lxRM4ePcIA=="
                },
+               "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
+               },
                "node_modules/merge-stream": {
                        "version": "2.0.0",
                        "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
                                "node": "^10 || ^12 || >=14"
                        }
                },
-               "node_modules/postcss-modules-extract-imports": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
-                       "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+               "node_modules/postcss-calc": {
+                       "version": "9.0.1",
+                       "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
+                       "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
                        "dev": true,
+                       "dependencies": {
+                               "postcss-selector-parser": "^6.0.11",
+                               "postcss-value-parser": "^4.2.0"
+                       },
                        "engines": {
-                               "node": "^10 || ^12 || >= 14"
+                               "node": "^14 || ^16 || >=18.0"
                        },
                        "peerDependencies": {
-                               "postcss": "^8.1.0"
+                               "postcss": "^8.2.2"
                        }
                },
-               "node_modules/postcss-modules-local-by-default": {
-                       "version": "4.0.3",
-                       "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz",
-                       "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==",
+               "node_modules/postcss-colormin": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
+                       "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
                        "dev": true,
                        "dependencies": {
-                               "icss-utils": "^5.0.0",
-                               "postcss-selector-parser": "^6.0.2",
-                               "postcss-value-parser": "^4.1.0"
+                               "browserslist": "^4.21.4",
+                               "caniuse-api": "^3.0.0",
+                               "colord": "^2.9.1",
+                               "postcss-value-parser": "^4.2.0"
                        },
                        "engines": {
-                               "node": "^10 || ^12 || >= 14"
+                               "node": "^14 || ^16 || >=18.0"
                        },
                        "peerDependencies": {
-                               "postcss": "^8.1.0"
+                               "postcss": "^8.2.15"
                        }
                },
-               "node_modules/postcss-modules-scope": {
-                       "version": "3.0.0",
-                       "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
-                       "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+               "node_modules/postcss-convert-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
+                       "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
                        "dev": true,
                        "dependencies": {
-                               "postcss-selector-parser": "^6.0.4"
+                               "browserslist": "^4.21.4",
+                               "postcss-value-parser": "^4.2.0"
                        },
                        "engines": {
-                               "node": "^10 || ^12 || >= 14"
+                               "node": "^14 || ^16 || >=18.0"
                        },
                        "peerDependencies": {
-                               "postcss": "^8.1.0"
+                               "postcss": "^8.2.15"
                        }
                },
-               "node_modules/postcss-modules-values": {
-                       "version": "4.0.0",
-                       "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
-                       "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+               "node_modules/postcss-discard-comments": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
+                       "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-discard-duplicates": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
+                       "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-discard-empty": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
+                       "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-discard-overridden": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
+                       "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-merge-longhand": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
+                       "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0",
+                               "stylehacks": "^6.0.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-merge-rules": {
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
+                       "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
+                       "dev": true,
+                       "dependencies": {
+                               "browserslist": "^4.21.4",
+                               "caniuse-api": "^3.0.0",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-selector-parser": "^6.0.5"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-minify-font-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
+                       "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-minify-gradients": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
+                       "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
+                       "dev": true,
+                       "dependencies": {
+                               "colord": "^2.9.1",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-minify-params": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
+                       "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
+                       "dev": true,
+                       "dependencies": {
+                               "browserslist": "^4.21.4",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-minify-selectors": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
+                       "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-selector-parser": "^6.0.5"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-modules-extract-imports": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
+                       "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^10 || ^12 || >= 14"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.1.0"
+                       }
+               },
+               "node_modules/postcss-modules-local-by-default": {
+                       "version": "4.0.3",
+                       "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz",
+                       "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==",
+                       "dev": true,
+                       "dependencies": {
+                               "icss-utils": "^5.0.0",
+                               "postcss-selector-parser": "^6.0.2",
+                               "postcss-value-parser": "^4.1.0"
+                       },
+                       "engines": {
+                               "node": "^10 || ^12 || >= 14"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.1.0"
+                       }
+               },
+               "node_modules/postcss-modules-scope": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
+                       "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-selector-parser": "^6.0.4"
+                       },
+                       "engines": {
+                               "node": "^10 || ^12 || >= 14"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.1.0"
+                       }
+               },
+               "node_modules/postcss-modules-values": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+                       "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
                        "dev": true,
                        "dependencies": {
                                "icss-utils": "^5.0.0"
                                "postcss": "^8.1.0"
                        }
                },
+               "node_modules/postcss-normalize-charset": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
+                       "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
+                       "dev": true,
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-display-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
+                       "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-positions": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
+                       "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-repeat-style": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
+                       "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-string": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
+                       "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-timing-functions": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
+                       "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-unicode": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
+                       "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
+                       "dev": true,
+                       "dependencies": {
+                               "browserslist": "^4.21.4",
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-url": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
+                       "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-normalize-whitespace": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
+                       "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-ordered-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
+                       "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
+                       "dev": true,
+                       "dependencies": {
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-reduce-initial": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
+                       "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
+                       "dev": true,
+                       "dependencies": {
+                               "browserslist": "^4.21.4",
+                               "caniuse-api": "^3.0.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-reduce-transforms": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
+                       "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
                "node_modules/postcss-selector-parser": {
                        "version": "6.0.13",
                        "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
                                "node": ">=4"
                        }
                },
+               "node_modules/postcss-svgo": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
+                       "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-value-parser": "^4.2.0",
+                               "svgo": "^3.0.2"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >= 18"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
+               "node_modules/postcss-unique-selectors": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
+                       "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
+                       "dev": true,
+                       "dependencies": {
+                               "postcss-selector-parser": "^6.0.5"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
                "node_modules/postcss-value-parser": {
                        "version": "4.2.0",
                        "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
                                "webpack": "^5.0.0"
                        }
                },
+               "node_modules/stylehacks": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
+                       "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
+                       "dev": true,
+                       "dependencies": {
+                               "browserslist": "^4.21.4",
+                               "postcss-selector-parser": "^6.0.4"
+                       },
+                       "engines": {
+                               "node": "^14 || ^16 || >=18.0"
+                       },
+                       "peerDependencies": {
+                               "postcss": "^8.2.15"
+                       }
+               },
                "node_modules/supports-color": {
                        "version": "8.1.1",
                        "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
                                "url": "https://github.com/sponsors/ljharb"
                        }
                },
+               "node_modules/svgo": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
+                       "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+                       "dev": true,
+                       "dependencies": {
+                               "@trysound/sax": "0.2.0",
+                               "commander": "^7.2.0",
+                               "css-select": "^5.1.0",
+                               "css-tree": "^2.2.1",
+                               "csso": "^5.0.5",
+                               "picocolors": "^1.0.0"
+                       },
+                       "bin": {
+                               "svgo": "bin/svgo"
+                       },
+                       "engines": {
+                               "node": ">=14.0.0"
+                       },
+                       "funding": {
+                               "type": "opencollective",
+                               "url": "https://opencollective.com/svgo"
+                       }
+               },
+               "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,
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/svgo/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,
+                       "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/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,
+                       "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,
+                       "dependencies": {
+                               "domelementtype": "^2.3.0"
+                       },
+                       "engines": {
+                               "node": ">= 4"
+                       },
+                       "funding": {
+                               "url": "https://github.com/fb55/domhandler?sponsor=1"
+                       }
+               },
+               "node_modules/svgo/node_modules/domutils": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+                       "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+                       "dev": true,
+                       "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/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,
+                       "engines": {
+                               "node": ">=0.12"
+                       },
+                       "funding": {
+                               "url": "https://github.com/fb55/entities?sponsor=1"
+                       }
+               },
                "node_modules/tapable": {
                        "version": "2.2.1",
                        "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
                                }
                        }
                },
+               "@jest/schemas": {
+                       "version": "29.6.3",
+                       "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+                       "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+                       "dev": true,
+                       "requires": {
+                               "@sinclair/typebox": "^0.27.8"
+                       }
+               },
+               "@jest/types": {
+                       "version": "29.6.3",
+                       "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+                       "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+                       "dev": true,
+                       "requires": {
+                               "@jest/schemas": "^29.6.3",
+                               "@types/istanbul-lib-coverage": "^2.0.0",
+                               "@types/istanbul-reports": "^3.0.0",
+                               "@types/node": "*",
+                               "@types/yargs": "^17.0.8",
+                               "chalk": "^4.0.0"
+                       },
+                       "dependencies": {
+                               "ansi-styles": {
+                                       "version": "4.3.0",
+                                       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+                                       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+                                       "dev": true,
+                                       "requires": {
+                                               "color-convert": "^2.0.1"
+                                       }
+                               },
+                               "chalk": {
+                                       "version": "4.1.2",
+                                       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+                                       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ansi-styles": "^4.1.0",
+                                               "supports-color": "^7.1.0"
+                                       }
+                               },
+                               "supports-color": {
+                                       "version": "7.2.0",
+                                       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+                                       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "has-flag": "^4.0.0"
+                                       }
+                               }
+                       }
+               },
                "@jridgewell/gen-mapping": {
                        "version": "0.3.3",
                        "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
                                "tuf-js": "^1.1.7"
                        }
                },
+               "@sinclair/typebox": {
+                       "version": "0.27.8",
+                       "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+                       "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+                       "dev": true
+               },
                "@sindresorhus/is": {
                        "version": "5.6.0",
                        "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
                        "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
                        "dev": true
                },
+               "@trysound/sax": {
+                       "version": "0.2.0",
+                       "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+                       "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
+                       "dev": true
+               },
                "@tufjs/canonical-json": {
                        "version": "1.0.0",
                        "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz",
                        "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
                        "dev": true
                },
+               "@types/istanbul-lib-coverage": {
+                       "version": "2.0.4",
+                       "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+                       "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+                       "dev": true
+               },
+               "@types/istanbul-lib-report": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+                       "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+                       "dev": true,
+                       "requires": {
+                               "@types/istanbul-lib-coverage": "*"
+                       }
+               },
+               "@types/istanbul-reports": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+                       "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+                       "dev": true,
+                       "requires": {
+                               "@types/istanbul-lib-report": "*"
+                       }
+               },
                "@types/json-schema": {
                        "version": "7.0.12",
                        "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
                        "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==",
                        "dev": true
                },
+               "@types/yargs": {
+                       "version": "17.0.24",
+                       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+                       "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+                       "dev": true,
+                       "requires": {
+                               "@types/yargs-parser": "*"
+                       }
+               },
+               "@types/yargs-parser": {
+                       "version": "21.0.0",
+                       "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+                       "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+                       "dev": true
+               },
                "@webassemblyjs/ast": {
                        "version": "1.11.6",
                        "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
                        "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
                        "dev": true
                },
+               "caniuse-api": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+                       "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.0.0",
+                               "caniuse-lite": "^1.0.0",
+                               "lodash.memoize": "^4.1.2",
+                               "lodash.uniq": "^4.5.0"
+                       }
+               },
                "caniuse-lite": {
                        "version": "1.0.30001524",
                        "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz",
                        "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
                        "dev": true
                },
+               "colord": {
+                       "version": "2.9.3",
+                       "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+                       "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+                       "dev": true
+               },
                "colorette": {
                        "version": "2.0.20",
                        "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
                                }
                        }
                },
+               "css-declaration-sorter": {
+                       "version": "6.4.1",
+                       "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
+                       "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
+                       "dev": true,
+                       "requires": {}
+               },
                "css-loader": {
                        "version": "6.8.1",
                        "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz",
                                "semver": "^7.3.8"
                        }
                },
+               "css-minimizer-webpack-plugin": {
+                       "version": "5.0.1",
+                       "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz",
+                       "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==",
+                       "dev": true,
+                       "requires": {
+                               "@jridgewell/trace-mapping": "^0.3.18",
+                               "cssnano": "^6.0.1",
+                               "jest-worker": "^29.4.3",
+                               "postcss": "^8.4.24",
+                               "schema-utils": "^4.0.1",
+                               "serialize-javascript": "^6.0.1"
+                       },
+                       "dependencies": {
+                               "jest-worker": {
+                                       "version": "29.6.4",
+                                       "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.4.tgz",
+                                       "integrity": "sha512-6dpvFV4WjcWbDVGgHTWo/aupl8/LbBx2NSKfiwqf79xC/yeJjKHT1+StcKy/2KTmW16hE68ccKVOtXf+WZGz7Q==",
+                                       "dev": true,
+                                       "requires": {
+                                               "@types/node": "*",
+                                               "jest-util": "^29.6.3",
+                                               "merge-stream": "^2.0.0",
+                                               "supports-color": "^8.0.0"
+                                       }
+                               }
+                       }
+               },
                "css-select": {
                        "version": "4.3.0",
                        "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
                                "nth-check": "^2.0.1"
                        }
                },
+               "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,
+                       "requires": {
+                               "mdn-data": "2.0.30",
+                               "source-map-js": "^1.0.1"
+                       }
+               },
                "css-what": {
                        "version": "6.1.0",
                        "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
                        "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
                        "dev": true
                },
+               "cssnano": {
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
+                       "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
+                       "dev": true,
+                       "requires": {
+                               "cssnano-preset-default": "^6.0.1",
+                               "lilconfig": "^2.1.0"
+                       }
+               },
+               "cssnano-preset-default": {
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
+                       "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
+                       "dev": true,
+                       "requires": {
+                               "css-declaration-sorter": "^6.3.1",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-calc": "^9.0.0",
+                               "postcss-colormin": "^6.0.0",
+                               "postcss-convert-values": "^6.0.0",
+                               "postcss-discard-comments": "^6.0.0",
+                               "postcss-discard-duplicates": "^6.0.0",
+                               "postcss-discard-empty": "^6.0.0",
+                               "postcss-discard-overridden": "^6.0.0",
+                               "postcss-merge-longhand": "^6.0.0",
+                               "postcss-merge-rules": "^6.0.1",
+                               "postcss-minify-font-values": "^6.0.0",
+                               "postcss-minify-gradients": "^6.0.0",
+                               "postcss-minify-params": "^6.0.0",
+                               "postcss-minify-selectors": "^6.0.0",
+                               "postcss-normalize-charset": "^6.0.0",
+                               "postcss-normalize-display-values": "^6.0.0",
+                               "postcss-normalize-positions": "^6.0.0",
+                               "postcss-normalize-repeat-style": "^6.0.0",
+                               "postcss-normalize-string": "^6.0.0",
+                               "postcss-normalize-timing-functions": "^6.0.0",
+                               "postcss-normalize-unicode": "^6.0.0",
+                               "postcss-normalize-url": "^6.0.0",
+                               "postcss-normalize-whitespace": "^6.0.0",
+                               "postcss-ordered-values": "^6.0.0",
+                               "postcss-reduce-initial": "^6.0.0",
+                               "postcss-reduce-transforms": "^6.0.0",
+                               "postcss-svgo": "^6.0.0",
+                               "postcss-unique-selectors": "^6.0.0"
+                       }
+               },
+               "cssnano-utils": {
+                       "version": "4.0.0",
+                       "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
+                       "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
+                       "dev": true,
+                       "requires": {}
+               },
+               "csso": {
+                       "version": "5.0.5",
+                       "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+                       "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+                       "dev": true,
+                       "requires": {
+                               "css-tree": "~2.2.0"
+                       },
+                       "dependencies": {
+                               "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,
+                                       "requires": {
+                                               "mdn-data": "2.0.28",
+                                               "source-map-js": "^1.0.1"
+                                       }
+                               },
+                               "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
+                               }
+                       }
+               },
                "debug": {
                        "version": "4.3.4",
                        "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
                                "@pkgjs/parseargs": "^0.11.0"
                        }
                },
+               "jest-util": {
+                       "version": "29.6.3",
+                       "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.3.tgz",
+                       "integrity": "sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==",
+                       "dev": true,
+                       "requires": {
+                               "@jest/types": "^29.6.3",
+                               "@types/node": "*",
+                               "chalk": "^4.0.0",
+                               "ci-info": "^3.2.0",
+                               "graceful-fs": "^4.2.9",
+                               "picomatch": "^2.2.3"
+                       },
+                       "dependencies": {
+                               "ansi-styles": {
+                                       "version": "4.3.0",
+                                       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+                                       "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+                                       "dev": true,
+                                       "requires": {
+                                               "color-convert": "^2.0.1"
+                                       }
+                               },
+                               "chalk": {
+                                       "version": "4.1.2",
+                                       "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+                                       "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "ansi-styles": "^4.1.0",
+                                               "supports-color": "^7.1.0"
+                                       }
+                               },
+                               "supports-color": {
+                                       "version": "7.2.0",
+                                       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+                                       "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+                                       "dev": true,
+                                       "requires": {
+                                               "has-flag": "^4.0.0"
+                                       }
+                               }
+                       }
+               },
                "jest-worker": {
                        "version": "27.5.1",
                        "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
                        "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
                        "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="
                },
+               "lilconfig": {
+                       "version": "2.1.0",
+                       "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+                       "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+                       "dev": true
+               },
                "loader-runner": {
                        "version": "4.3.0",
                        "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
                        "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
                        "dev": true
                },
+               "lodash.memoize": {
+                       "version": "4.1.2",
+                       "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+                       "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+                       "dev": true
+               },
+               "lodash.uniq": {
+                       "version": "4.5.0",
+                       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+                       "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+                       "dev": true
+               },
                "lower-case": {
                        "version": "2.0.2",
                        "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
                        "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.2.tgz",
                        "integrity": "sha512-f+NBjJJY4T3dHtlEz1wCG7YFlkODEjFIYlxDdLIDMNpkSksqTt+l/d4rjuwItxuzkuMFvPyrjzV2lxRM4ePcIA=="
                },
+               "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
+               },
                "merge-stream": {
                        "version": "2.0.0",
                        "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
                                "source-map-js": "^1.0.2"
                        }
                },
+               "postcss-calc": {
+                       "version": "9.0.1",
+                       "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
+                       "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-selector-parser": "^6.0.11",
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-colormin": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
+                       "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.21.4",
+                               "caniuse-api": "^3.0.0",
+                               "colord": "^2.9.1",
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-convert-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
+                       "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.21.4",
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-discard-comments": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
+                       "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
+                       "dev": true,
+                       "requires": {}
+               },
+               "postcss-discard-duplicates": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
+                       "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
+                       "dev": true,
+                       "requires": {}
+               },
+               "postcss-discard-empty": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
+                       "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
+                       "dev": true,
+                       "requires": {}
+               },
+               "postcss-discard-overridden": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
+                       "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
+                       "dev": true,
+                       "requires": {}
+               },
+               "postcss-merge-longhand": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
+                       "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0",
+                               "stylehacks": "^6.0.0"
+                       }
+               },
+               "postcss-merge-rules": {
+                       "version": "6.0.1",
+                       "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
+                       "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.21.4",
+                               "caniuse-api": "^3.0.0",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-selector-parser": "^6.0.5"
+                       }
+               },
+               "postcss-minify-font-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
+                       "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-minify-gradients": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
+                       "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
+                       "dev": true,
+                       "requires": {
+                               "colord": "^2.9.1",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-minify-params": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
+                       "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.21.4",
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-minify-selectors": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
+                       "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-selector-parser": "^6.0.5"
+                       }
+               },
                "postcss-modules-extract-imports": {
                        "version": "3.0.0",
                        "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
                                "icss-utils": "^5.0.0"
                        }
                },
+               "postcss-normalize-charset": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
+                       "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
+                       "dev": true,
+                       "requires": {}
+               },
+               "postcss-normalize-display-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
+                       "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-normalize-positions": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
+                       "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-normalize-repeat-style": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
+                       "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-normalize-string": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
+                       "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-normalize-timing-functions": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
+                       "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-normalize-unicode": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
+                       "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.21.4",
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-normalize-url": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
+                       "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-normalize-whitespace": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
+                       "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-ordered-values": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
+                       "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
+                       "dev": true,
+                       "requires": {
+                               "cssnano-utils": "^4.0.0",
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
+               "postcss-reduce-initial": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
+                       "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.21.4",
+                               "caniuse-api": "^3.0.0"
+                       }
+               },
+               "postcss-reduce-transforms": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
+                       "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0"
+                       }
+               },
                "postcss-selector-parser": {
                        "version": "6.0.13",
                        "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
                                "util-deprecate": "^1.0.2"
                        }
                },
+               "postcss-svgo": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
+                       "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-value-parser": "^4.2.0",
+                               "svgo": "^3.0.2"
+                       }
+               },
+               "postcss-unique-selectors": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
+                       "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
+                       "dev": true,
+                       "requires": {
+                               "postcss-selector-parser": "^6.0.5"
+                       }
+               },
                "postcss-value-parser": {
                        "version": "4.2.0",
                        "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
                        "dev": true,
                        "requires": {}
                },
+               "stylehacks": {
+                       "version": "6.0.0",
+                       "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
+                       "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
+                       "dev": true,
+                       "requires": {
+                               "browserslist": "^4.21.4",
+                               "postcss-selector-parser": "^6.0.4"
+                       }
+               },
                "supports-color": {
                        "version": "8.1.1",
                        "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
                        "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
                        "dev": true
                },
+               "svgo": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
+                       "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
+                       "dev": true,
+                       "requires": {
+                               "@trysound/sax": "0.2.0",
+                               "commander": "^7.2.0",
+                               "css-select": "^5.1.0",
+                               "css-tree": "^2.2.1",
+                               "csso": "^5.0.5",
+                               "picocolors": "^1.0.0"
+                       },
+                       "dependencies": {
+                               "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
+                               },
+                               "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,
+                                       "requires": {
+                                               "boolbase": "^1.0.0",
+                                               "css-what": "^6.1.0",
+                                               "domhandler": "^5.0.2",
+                                               "domutils": "^3.0.1",
+                                               "nth-check": "^2.0.1"
+                                       }
+                               },
+                               "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,
+                                       "requires": {
+                                               "domelementtype": "^2.3.0",
+                                               "domhandler": "^5.0.2",
+                                               "entities": "^4.2.0"
+                                       }
+                               },
+                               "domhandler": {
+                                       "version": "5.0.3",
+                                       "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+                                       "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+                                       "dev": true,
+                                       "requires": {
+                                               "domelementtype": "^2.3.0"
+                                       }
+                               },
+                               "domutils": {
+                                       "version": "3.1.0",
+                                       "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+                                       "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+                                       "dev": true,
+                                       "requires": {
+                                               "dom-serializer": "^2.0.0",
+                                               "domelementtype": "^2.3.0",
+                                               "domhandler": "^5.0.3"
+                                       }
+                               },
+                               "entities": {
+                                       "version": "4.5.0",
+                                       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+                                       "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+                                       "dev": true
+                               }
+                       }
+               },
                "tapable": {
                        "version": "2.2.1",
                        "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
index a8ed7c3006955fdc8346fc3896babbf937ce5f4f..c3cebcff88fd43e37389f2a96743f83957aae273 100644 (file)
@@ -4,14 +4,15 @@
        "description": "",
        "private": "true",
        "scripts": {
-               "test": "echo \"Error: no test specified\" && exit 1",
-               "build": "webpack"
+               "build": "webpack --config webpack.dev.js",
+               "build-prod": "webpack --config webpack.prod.js"
        },
        "keywords": [],
        "author": "",
        "license": "GPL",
        "devDependencies": {
                "css-loader": "^6.8.1",
+               "css-minimizer-webpack-plugin": "^5.0.1",
                "html-webpack-plugin": "^5.5.3",
                "mini-css-extract-plugin": "^2.7.6",
                "npm-check-updates": "^16.13.2",
diff --git a/org.argeo.app.geo.js/webpack.common.js b/org.argeo.app.geo.js/webpack.common.js
new file mode 100644 (file)
index 0000000..1821cc9
--- /dev/null
@@ -0,0 +1,49 @@
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
+const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const path = require('path');
+
+module.exports = {
+       entry: {
+               index: './src/org.argeo.app.geo.js/index.js'
+       },
+       output: {
+               filename: '[name].[contenthash].js',
+               path: path.resolve(__dirname, 'org/argeo/app/geo/js'),
+               clean: true,
+       },
+       optimization: {
+               moduleIds: 'deterministic',
+               runtimeChunk: 'single',
+               // split code
+               splitChunks: {
+                       chunks: 'all',
+               },
+               minimizer: [
+                       // For webpack@5 you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line
+                       `...`,
+                       new CssMinimizerPlugin(),
+               ],
+       },
+       module: {
+               rules: [
+                       {
+                               test: /\.(css)$/,
+                               use: [
+                                       MiniCssExtractPlugin.loader,
+                                       'css-loader',
+                               ],
+                       },
+               ],
+       },
+       plugins: [
+               // deal with CSS
+               new MiniCssExtractPlugin(),
+               // deal with HTML generation
+               new HtmlWebpackPlugin({
+                       title: 'Open Layers',
+                       template: 'src/org.argeo.app.geo.js/index.html',
+               }),
+
+       ],
+};
\ No newline at end of file
diff --git a/org.argeo.app.geo.js/webpack.config.js b/org.argeo.app.geo.js/webpack.config.js
deleted file mode 100644 (file)
index e8160af..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-const MiniCssExtractPlugin = require('mini-css-extract-plugin');
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const path = require('path');
-
-module.exports = {
-       mode: 'development',
-       devtool: 'source-map', // original code
-       //mode: 'production',
-       entry: {
-               index: './src/org.argeo.app.geo.js/index.js'
-       },
-       output: {
-               filename: '[name].[contenthash].js',
-               path: path.resolve(__dirname, 'org/argeo/app/geo/js'),
-               clean: true,
-       },
-       optimization: {
-               moduleIds: 'deterministic',
-               runtimeChunk: 'single',
-               // split code
-               splitChunks: {
-                       chunks: 'all',
-               },
-       },
-       module: {
-               rules: [
-                       {
-                               test: /\.(css)$/,
-                               use: [
-                                       MiniCssExtractPlugin.loader,
-                                       'css-loader',
-                               ],
-                       },
-               ],
-       },
-       plugins: [
-               // deal with CSS
-               new MiniCssExtractPlugin(),
-               // deal with HTML generation
-               new HtmlWebpackPlugin({
-                       title: 'Open Layers',
-                       template: 'src/org.argeo.app.geo.js/index.html',
-               }),
-
-       ],
-};
\ No newline at end of file
diff --git a/org.argeo.app.geo.js/webpack.dev.js b/org.argeo.app.geo.js/webpack.dev.js
new file mode 100644 (file)
index 0000000..3d79473
--- /dev/null
@@ -0,0 +1,11 @@
+const { merge } = require('webpack-merge');
+const common = require('./webpack.common.js');
+
+module.exports = merge(common, {
+       mode: 'development',
+       //devtool: 'source-map', // original code
+       devtool: 'eval-source-map',
+       devServer: {
+               static: './dist',
+       },
+});
\ No newline at end of file
diff --git a/org.argeo.app.geo.js/webpack.prod.js b/org.argeo.app.geo.js/webpack.prod.js
new file mode 100644 (file)
index 0000000..adb905a
--- /dev/null
@@ -0,0 +1,7 @@
+const { merge } = require('webpack-merge');
+const common = require('./webpack.common.js');
+
+module.exports = merge(common, {
+       mode: 'production',
+       devtool: 'source-map', // original code
+});
\ No newline at end of file