From ed1252a6681040d4cc33efdcabc1b1f1af078c9f Mon Sep 17 00:00:00 2001 From: Jordan Roher Date: Wed, 19 Apr 2023 22:36:24 -0700 Subject: [PATCH] Ready to go? --- .gitignore | 5 +- package-lock.json | 230 ++++------------------------ package.json | 20 ++- public/icons/home-assistant.svg | 9 ++ public/icons/router.png | Bin 0 -> 56141 bytes public/services.json | 146 ------------------ src/components/service-catalogs.tsx | 20 +++ src/config/services.json | 177 +++++++++++++++++++++ src/pages/index.tsx | 10 +- src/shared/is.ts | 141 ----------------- src/shared/types.ts | 5 + 11 files changed, 257 insertions(+), 506 deletions(-) create mode 100644 public/icons/home-assistant.svg create mode 100644 public/icons/router.png delete mode 100644 public/services.json create mode 100644 src/components/service-catalogs.tsx create mode 100644 src/config/services.json diff --git a/.gitignore b/.gitignore index 8e9ad17..4c67142 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,4 @@ dist-ssr *.ntvs* *.njsproj *.sln -*.sw? - -# Starbase 80 -config \ No newline at end of file +*.sw? \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index eb3cced..e0f3175 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,19 +8,17 @@ "name": "sb80", "version": "0.0.0", "dependencies": { + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", "@types/react-helmet": "^6.1.6", + "@vitejs/plugin-react": "^3.1.0", + "autoprefixer": "^10.4.14", "js-yaml": "^4.1.0", + "postcss": "^8.4.23", "prettier": "^2.8.7", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-helmet": "^6.1.0" - }, - "devDependencies": { - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", - "@vitejs/plugin-react": "^3.1.0", - "autoprefixer": "^10.4.14", - "postcss": "^8.4.23", + "react-helmet": "^6.1.0", "tailwindcss": "^3.3.1", "typescript": "^4.9.3", "vite": "^4.2.0" @@ -30,7 +28,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -43,7 +40,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -55,7 +51,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -64,7 +59,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", @@ -94,7 +88,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", - "dev": true, "dependencies": { "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", @@ -109,7 +102,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.21.4", "@babel/helper-validator-option": "^7.21.0", @@ -128,7 +120,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -137,7 +128,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" @@ -150,7 +140,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -162,7 +151,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "dev": true, "dependencies": { "@babel/types": "^7.21.4" }, @@ -174,7 +162,6 @@ "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -193,7 +180,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -202,7 +188,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, "dependencies": { "@babel/types": "^7.20.2" }, @@ -214,7 +199,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -226,7 +210,6 @@ "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -235,7 +218,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -244,7 +226,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -253,7 +234,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.0", @@ -267,7 +247,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -281,7 +260,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -293,7 +271,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -308,7 +285,6 @@ "version": "7.19.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -323,7 +299,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", @@ -337,7 +312,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.21.4", "@babel/generator": "^7.21.4", @@ -358,7 +332,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -375,7 +348,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -391,7 +363,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -407,7 +378,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -423,7 +393,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -439,7 +408,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -455,7 +423,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -471,7 +438,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -487,7 +453,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -503,7 +468,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -519,7 +483,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -535,7 +498,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -551,7 +513,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -567,7 +528,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -583,7 +543,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -599,7 +558,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -615,7 +573,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -631,7 +588,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -647,7 +603,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -663,7 +618,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -679,7 +633,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -695,7 +648,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -711,7 +663,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -724,7 +675,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -738,7 +688,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -747,7 +696,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -755,14 +703,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -771,14 +717,12 @@ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -791,7 +735,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -800,7 +743,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -828,7 +770,6 @@ "version": "18.0.11", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", - "dev": true, "dependencies": { "@types/react": "*" } @@ -850,7 +791,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", - "dev": true, "dependencies": { "@babel/core": "^7.20.12", "@babel/plugin-transform-react-jsx-self": "^7.18.6", @@ -869,7 +809,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -880,14 +819,12 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -899,8 +836,7 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", @@ -911,7 +847,6 @@ "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -943,14 +878,12 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -959,7 +892,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -969,7 +901,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -981,7 +912,6 @@ "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1009,7 +939,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "engines": { "node": ">= 6" } @@ -1018,7 +947,6 @@ "version": "1.0.30001480", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1038,7 +966,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1052,7 +979,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, "funding": [ { "type": "individual", @@ -1079,7 +1005,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -1091,7 +1016,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -1099,14 +1023,12 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "engines": { "node": ">= 6" } @@ -1114,20 +1036,17 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -1144,7 +1063,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1160,26 +1078,22 @@ "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "node_modules/electron-to-chromium": { "version": "1.4.368", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz", - "integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==", - "dev": true + "integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==" }, "node_modules/esbuild": { "version": "0.17.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -1216,7 +1130,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -1225,7 +1138,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -1234,7 +1146,6 @@ "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -1250,7 +1161,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -1262,7 +1172,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -1271,7 +1180,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1283,7 +1191,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, "engines": { "node": "*" }, @@ -1295,14 +1202,12 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -1315,14 +1220,12 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -1331,7 +1234,6 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1351,7 +1253,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -1363,7 +1264,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -1372,7 +1272,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -1384,7 +1283,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -1393,7 +1291,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1402,14 +1299,12 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -1421,7 +1316,6 @@ "version": "2.12.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -1433,7 +1327,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1442,7 +1335,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -1454,7 +1346,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -1463,7 +1354,6 @@ "version": "1.18.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", - "dev": true, "bin": { "jiti": "bin/jiti.js" } @@ -1488,7 +1378,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -1500,7 +1389,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -1512,7 +1400,6 @@ "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" } @@ -1520,8 +1407,7 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loose-envify": { "version": "1.4.0", @@ -1538,7 +1424,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -1547,7 +1432,6 @@ "version": "0.27.0", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" }, @@ -1559,7 +1443,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -1568,7 +1451,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -1581,7 +1463,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1592,14 +1473,12 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -1610,7 +1489,6 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, "funding": [ { "type": "github", @@ -1627,14 +1505,12 @@ "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1643,7 +1519,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1660,7 +1535,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "engines": { "node": ">= 6" } @@ -1669,7 +1543,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -1678,7 +1551,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1686,20 +1558,17 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -1711,7 +1580,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1720,7 +1588,6 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, "engines": { "node": ">= 6" } @@ -1729,7 +1596,6 @@ "version": "8.4.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -1757,7 +1623,6 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -1774,7 +1639,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "dependencies": { "camelcase-css": "^2.0.1" }, @@ -1793,7 +1657,6 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, "dependencies": { "lilconfig": "^2.0.5", "yaml": "^1.10.2" @@ -1822,7 +1685,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", - "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -1841,7 +1703,6 @@ "version": "6.0.11", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -1853,8 +1714,7 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/prettier": { "version": "2.8.7", @@ -1884,7 +1744,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -1904,7 +1763,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, "engines": { "node": ">=10" }, @@ -1963,7 +1821,6 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1980,7 +1837,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "dependencies": { "pify": "^2.3.0" } @@ -1989,7 +1845,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -2001,7 +1856,6 @@ "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, "dependencies": { "is-core-module": "^2.11.0", "path-parse": "^1.0.7", @@ -2018,7 +1872,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -2028,7 +1881,6 @@ "version": "3.20.6", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", - "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -2044,7 +1896,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -2075,7 +1926,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -2084,7 +1934,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2093,7 +1942,6 @@ "version": "3.32.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -2115,7 +1963,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -2127,7 +1974,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -2139,7 +1985,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.1.tgz", "integrity": "sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g==", - "dev": true, "dependencies": { "arg": "^5.0.2", "chokidar": "^3.5.3", @@ -2180,14 +2025,12 @@ "node_modules/tailwindcss/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "dependencies": { "any-promise": "^1.0.0" } @@ -2196,7 +2039,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -2208,7 +2050,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -2217,7 +2058,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -2228,14 +2068,12 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2248,7 +2086,6 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2277,14 +2114,12 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vite": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz", "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==", - "dev": true, "dependencies": { "esbuild": "^0.17.5", "postcss": "^8.4.21", @@ -2332,20 +2167,17 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, "engines": { "node": ">= 6" } diff --git a/package.json b/package.json index 115b02c..e8189fd 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,25 @@ { "name": "sb80", "private": true, - "version": "0.0.0", + "version": "1.0.0", "type": "module", "scripts": { "dev": "vite", "build": "tsc && vite build", - "preview": "vite preview" + "serve": "vite preview" }, "dependencies": { - "@types/react-helmet": "^6.1.6", - "js-yaml": "^4.1.0", - "prettier": "^2.8.7", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-helmet": "^6.1.0" - }, - "devDependencies": { - "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", + "@types/react-helmet": "^6.1.6", + "@types/react": "^18.0.28", "@vitejs/plugin-react": "^3.1.0", "autoprefixer": "^10.4.14", + "js-yaml": "^4.1.0", "postcss": "^8.4.23", + "prettier": "^2.8.7", + "react-dom": "^18.2.0", + "react-helmet": "^6.1.0", + "react": "^18.2.0", "tailwindcss": "^3.3.1", "typescript": "^4.9.3", "vite": "^4.2.0" diff --git a/public/icons/home-assistant.svg b/public/icons/home-assistant.svg new file mode 100644 index 0000000..7856cf1 --- /dev/null +++ b/public/icons/home-assistant.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/public/icons/router.png b/public/icons/router.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb37ed17a88c849c22185d9d6ae2200d8906b05 GIT binary patch literal 56141 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 Wj*mT>$kW+lz(WhChc$(4Kk_eu&He8H literal 0 HcmV?d00001 diff --git a/public/services.json b/public/services.json deleted file mode 100644 index ca8ba1b..0000000 --- a/public/services.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "name": "Archivebox", - "uri": "https://archivebox.starbase80.dev", - "description": "Backup webpages", - "icon": { - "href": "/icons/archivebox.jpg" - } - }, - { - "name": "Authelia", - "uri": "https://auth.starbase80.dev", - "description": "Authentication", - "icon": { - "href": "/icons/authelia.png" - } - }, - { - "name": "Calibre", - "uri": "https://calibre.starbase80.dev", - "description": "eBook library", - "icon": { - "href": "/icons/calibre.png" - } - }, - { - "name": "Gitea", - "uri": "https://git.starbase80.dev", - "description": "Code hosting", - "icon": { - "href": "/icons/gitea.svg" - } - }, - { - "name": "Jellyfin", - "uri": "https://jellyfin.starbase80.dev", - "description": "Media server", - "icon": { - "href": "/icons/jellyfin.svg" - } - }, - { - "name": "Mastodon", - "uri": "https://notclickable.social", - "description": "NotClickable.social", - "icon": { - "href": "/icons/mastodon.jpg" - } - }, - { - "name": "Mealie", - "uri": "https://mealie.starbase80.dev", - "description": "Recipe manager", - "icon": { - "href": "/icons/mealie.jpg" - } - }, - { - "name": "N8N", - "uri": "https://n8n.starbase80.dev", - "description": "Workflow automation", - "icon": { - "href": "/icons/n8n.jpg" - } - }, - { - "name": "MeTube", - "uri": "https://metube.starbase80.dev", - "description": "Archive YouTube", - "icon": { - "href": "/icons/metube.jpg" - } - }, - { - "name": "Miniflux", - "uri": "https://miniflux.starbase80.dev", - "description": "RSS server", - "icon": { - "href": "/icons/miniflux.jpg" - } - }, - { - "name": "Portainer", - "uri": "https://portainer.starbase80.dev", - "description": "Docker management", - "icon": { - "href": "/icons/portainer.png" - } - }, - { - "name": "Roher Twins", - "uri": "https://rohertwins.starbase80.dev", - "description": "Weekly newsletter", - "icon": { - "href": "/icons/ghost.jpg" - } - }, - { - "name": "Roher Wiki", - "uri": "https://roherwiki.starbase80.dev", - "description": "Family wiki", - "icon": { - "href": "/icons/wikijs.svg" - } - }, - { - "name": "Standard Notes", - "uri": "https://standardnotes.starbase80.dev", - "description": "Knowledge base", - "icon": { - "href": "/icons/standardnotes.png" - } - }, - { - "name": "Vaultwarden", - "uri": "https://vaultwarden.starbase80.dev", - "description": "Password manager", - "icon": { - "href": "/icons/vaultwarden.svg" - } - }, - { - "name": "Visual Studio Code", - "uri": "https://vscode.starbase80.dev", - "description": "Code editor", - "icon": { - "href": "/icons/vscode.jpg" - } - }, - { - "name": "Wallabag", - "uri": "https://wallabag.starbase80.dev", - "description": "Read later", - "icon": { - "href": "/icons/wallabag.png" - } - }, - { - "name": "Woodpecker", - "uri": "https://woodpecker.starbase80.dev", - "description": "Continuous integration", - "icon": { - "href": "/icons/woodpecker.jpg" - } - } -] diff --git a/src/components/service-catalogs.tsx b/src/components/service-catalogs.tsx new file mode 100644 index 0000000..cbc1179 --- /dev/null +++ b/src/components/service-catalogs.tsx @@ -0,0 +1,20 @@ +import React from "react"; +import { IServiceCatalog } from "../shared/types"; +import { Services } from "./services"; + +interface IProps { + catalogs: IServiceCatalog[]; +} + +export const ServiceCatalogs: React.FunctionComponent = ({ catalogs }) => { + return ( +
    + {catalogs.map((catalog, index) => ( +
  • +

    {catalog.category}

    + +
  • + ))} +
+ ); +}; diff --git a/src/config/services.json b/src/config/services.json new file mode 100644 index 0000000..5fe56cd --- /dev/null +++ b/src/config/services.json @@ -0,0 +1,177 @@ +[ + { + "category": "Services", + "services": [ + { + "name": "Archivebox", + "uri": "https://archivebox.starbase80.dev", + "description": "Backup webpages", + "icon": { + "href": "/icons/archivebox.jpg" + } + }, + { + "name": "Authelia", + "uri": "https://auth.starbase80.dev", + "description": "Authentication", + "icon": { + "href": "/icons/authelia.png" + } + }, + { + "name": "Calibre", + "uri": "https://calibre.starbase80.dev", + "description": "eBook library", + "icon": { + "href": "/icons/calibre.png" + } + }, + { + "name": "Gitea", + "uri": "https://git.starbase80.dev", + "description": "Code hosting", + "icon": { + "href": "/icons/gitea.svg" + } + }, + { + "name": "Jellyfin", + "uri": "https://jellyfin.starbase80.dev", + "description": "Media server", + "icon": { + "href": "/icons/jellyfin.svg" + } + }, + { + "name": "Mastodon", + "uri": "https://notclickable.social", + "description": "NotClickable.social", + "icon": { + "href": "/icons/mastodon.jpg" + } + }, + { + "name": "Mealie", + "uri": "https://mealie.starbase80.dev", + "description": "Recipe manager", + "icon": { + "href": "/icons/mealie.jpg" + } + }, + { + "name": "N8N", + "uri": "https://n8n.starbase80.dev", + "description": "Workflow automation", + "icon": { + "href": "/icons/n8n.jpg" + } + }, + { + "name": "MeTube", + "uri": "https://metube.starbase80.dev", + "description": "Archive YouTube", + "icon": { + "href": "/icons/metube.jpg" + } + }, + { + "name": "Miniflux", + "uri": "https://miniflux.starbase80.dev", + "description": "RSS server", + "icon": { + "href": "/icons/miniflux.jpg" + } + }, + { + "name": "Portainer", + "uri": "https://portainer.starbase80.dev", + "description": "Docker management", + "icon": { + "href": "/icons/portainer.png" + } + }, + { + "name": "Roher Twins", + "uri": "https://rohertwins.starbase80.dev", + "description": "Weekly newsletter", + "icon": { + "href": "/icons/ghost.jpg" + } + }, + { + "name": "Roher Wiki", + "uri": "https://roherwiki.starbase80.dev", + "description": "Family wiki", + "icon": { + "href": "/icons/wikijs.svg" + } + }, + { + "name": "Standard Notes", + "uri": "https://standardnotes.starbase80.dev", + "description": "Knowledge base", + "icon": { + "href": "/icons/standardnotes.png" + } + }, + { + "name": "Vaultwarden", + "uri": "https://vaultwarden.starbase80.dev", + "description": "Password manager", + "icon": { + "href": "/icons/vaultwarden.svg" + } + }, + { + "name": "Visual Studio Code", + "uri": "https://vscode.starbase80.dev", + "description": "Code editor", + "icon": { + "href": "/icons/vscode.jpg" + } + }, + { + "name": "Wallabag", + "uri": "https://wallabag.starbase80.dev", + "description": "Read later", + "icon": { + "href": "/icons/wallabag.png" + } + }, + { + "name": "Woodpecker", + "uri": "https://woodpecker.starbase80.dev", + "description": "Continuous integration", + "icon": { + "href": "/icons/woodpecker.jpg" + } + } + ] + }, + { + "category": "Devices", + "services": [ + { + "name": "Router", + "uri": "http://192.168.1.1/", + "description": "Netgear Orbi", + "icon": { + "href": "/icons/router.png" + } + }, + { + "name": "Home Assistant", + "uri": "http://homeassistant.local:8123/", + "description": "Home automation", + "icon": { + "href": "/icons/home-assistant.svg" + } + }, + { + "name": "Synology", + "uri": "http://synology:5000", + "description": "Network storage" + } + ] + } +] diff --git a/src/pages/index.tsx b/src/pages/index.tsx index a8eed24..6a63271 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,8 +1,8 @@ import React from "react"; -import userServices from "../../public/services.json"; import { Header } from "../components/header"; -import { Services } from "../components/services"; -import { IService } from "../shared/types"; +import { ServiceCatalogs } from "../components/service-catalogs"; +import userServices from "../config/services.json"; +import { IServiceCatalog } from "../shared/types"; interface IProps { title?: string; @@ -10,7 +10,7 @@ interface IProps { } export const IndexPage: React.FunctionComponent = ({ icon, title }) => { - const mySerices = userServices as IService[]; + const mySerices = userServices as IServiceCatalog[]; return (
@@ -18,7 +18,7 @@ export const IndexPage: React.FunctionComponent = ({ icon, title }) => {
- +
); diff --git a/src/shared/is.ts b/src/shared/is.ts index a581974..f288b5f 100644 --- a/src/shared/is.ts +++ b/src/shared/is.ts @@ -15,147 +15,6 @@ function IsNull(data: any): boolean { ); } -function IsDate(data: any): boolean { - return data instanceof Date; -} - -function IsDateString(data: any): boolean { - return !IsNull(data) && data.indexOf("/Date(") === 0; -} - -function IsJsonString(data: any): boolean { - try { - JSON.parse(data); - - return true; - } catch { - return false; - } -} - -function IsNumeric(data: any): boolean { - return ( - typeof data !== "undefined" && - data !== null && - data.toString().length > 0 && - data.toString().replace(/[\d.]+/gi, "").length === 0 && - !isNaN(data) - ); -} - -function IsString(data: any): boolean { - return !IsNull(data) && typeof data === "string"; -} - -function IsValidHttpUrl(data: any): boolean { - // Copyright (c) 2010-2013 Diego Perini, MIT licensed - // https://gist.github.com/dperini/729294 - // see also https://mathiasbynens.be/demo/url-regex - // modified to allow protocol-relative URLs - // and modified again to remove ftp (Jordan) - if (IsNull(data)) { - return false; - } - const validUrlRegex = - /^(?:(?:(?:https?):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i; - - return validUrlRegex.test(data); -} - -function IsFunction(data: any): boolean { - return !IsNull(data) && data instanceof Function; -} - -const IsReactRoute = (uri: string): boolean => { - const reactRouteRegex = /[a-z]{1,4}-[a-z]{1,4}\/r\/[ts]\//gi; - - return !IsNull(uri) && reactRouteRegex.test(uri); -}; - -const IsArrayDifferent = (array1: any[], array2: any[], useDeepComparison = false): boolean => { - const isArray1Null = IsNull(array1); - const isArray2Null = IsNull(array2); - - if (isArray1Null && isArray2Null) { - return false; - } - - const shallowResult = - isArray1Null !== isArray2Null || (!isArray1Null && !isArray2Null && array1.length !== array2.length); - - if (shallowResult) { - return true; - } - - if (!useDeepComparison) { - return array1 !== array2; - } - - return array1.some((array1Item, index) => { - return array2[index] !== array1Item; - }); -}; - -const IsInArray = (array: any[], element: any): boolean => { - return !IsNull(array) && array.indexOf(element) !== -1; -}; - -const IsShallowEqual = (obj1: any, obj2: any, ignorePrivateProperties: boolean = false): boolean => { - if (is.null(obj1) && is.null(obj2)) { - return true; - } else if (is.null(obj1) !== is.null(obj2)) { - return false; - } else if (typeof obj1 !== "object" && typeof obj2 !== "object") { - return obj1 === obj2; - } - - for (const p in obj1) { - if (ignorePrivateProperties && p.startsWith("_")) { - continue; - } - if (obj1.hasOwnProperty(p)) { - if (obj1[p] !== obj2[p]) { - return false; - } - } - } - for (const p in obj2) { - if (ignorePrivateProperties && p.startsWith("_")) { - continue; - } - if (obj2.hasOwnProperty(p)) { - if (obj1[p] !== obj2[p]) { - return false; - } - } - } - - return true; -}; - -const IsAnythingDifferent = (props: any, nextProps: any, ...keys: string[]): boolean => { - return keys.some(key => { - if (IsArray(props[key])) { - return IsArrayDifferent(props[key], nextProps[key], true); - } - - return props[key] !== nextProps[key]; - }); -}; - export const is = { - array: IsArray, - arrayDifferent: IsArrayDifferent, null: IsNull, - date: IsDate, - dateString: IsDateString, - numeric: IsNumeric, - string: IsString, - validHttpUrl: IsValidHttpUrl, - function: IsFunction, - reactRoute: IsReactRoute, - jsonString: IsJsonString, - inArray: IsInArray, - shallowEqual: IsShallowEqual, - anythingDifferent: IsAnythingDifferent, }; diff --git a/src/shared/types.ts b/src/shared/types.ts index e581e52..fc01a9a 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -1,3 +1,8 @@ +export interface IServiceCatalog { + category: string; + services: IService[]; +} + export interface IService { name: string; uri: string;