diff --git a/package-lock.json b/package-lock.json index f2ce398663..7460cf1915 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,14 @@ "": { "name": "zarf-ui", "version": "0.0.1", + "dependencies": { + "material-symbols": "^0.2.12", + "typescript": "4.8.4", + "vite": "3.1.6", + "yaml": "2.1.3" + }, "devDependencies": { - "@defense-unicorns/unicorn-ui": "0.0.16", + "@defense-unicorns/unicorn-ui": "^0.0.17", "@fontsource/roboto": "4.5.8", "@material/card": "14.0.0", "@material/data-table": "14.0.0", @@ -38,9 +44,7 @@ "svelte-check": "2.9.1", "svelte-preprocess": "4.10.7", "tslib": "2.4.0", - "typescript": "4.8.4", - "vite": "3.1.6", - "yaml": "2.1.3" + "typescript": "4.8.4" } }, "node_modules/@babel/code-frame": { @@ -162,9 +166,9 @@ } }, "node_modules/@defense-unicorns/unicorn-ui": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/@defense-unicorns/unicorn-ui/-/unicorn-ui-0.0.16.tgz", - "integrity": "sha512-Uvrui+8HTHvytziSM6wr/VSVh/6nj9NQcNeRvk/ETncbOuhQQhUrmw8SgOdt5CX3qgHs+MhjyzgixC94CRja4g==", + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@defense-unicorns/unicorn-ui/-/unicorn-ui-0.0.17.tgz", + "integrity": "sha512-aWAG9Fx8Fw1oHR5NhLEu23IO1CqII6AkNLE40EiMjPSFECjvEYB4YooG0kcCkXbhxPICmS5GBqBfoFyfaNU8VA==", "dev": true, "dependencies": { "@fontsource/roboto": "^4.5.8", @@ -186,7 +190,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "android" @@ -202,7 +205,6 @@ "cpu": [ "loong64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1234,7 +1236,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "devOptional": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1277,7 +1279,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -1296,7 +1298,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "devOptional": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1342,7 +1344,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "devOptional": true, "funding": [ { "type": "individual", @@ -1586,7 +1588,6 @@ "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", - "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -1626,7 +1627,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "android" @@ -1642,7 +1642,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "android" @@ -1658,7 +1657,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -1674,7 +1672,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -1690,7 +1687,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -1706,7 +1702,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "freebsd" @@ -1722,7 +1717,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1738,7 +1732,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1754,7 +1747,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1770,7 +1762,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1786,7 +1777,6 @@ "cpu": [ "mips64el" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1802,7 +1792,6 @@ "cpu": [ "ppc64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1818,7 +1807,6 @@ "cpu": [ "riscv64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1834,7 +1822,6 @@ "cpu": [ "s390x" ], - "dev": true, "optional": true, "os": [ "linux" @@ -1850,7 +1837,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "netbsd" @@ -1866,7 +1852,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "openbsd" @@ -1882,7 +1867,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "sunos" @@ -1898,7 +1882,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1914,7 +1897,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -1930,7 +1912,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -2286,7 +2267,7 @@ "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, + "devOptional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2351,7 +2332,6 @@ "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": [ @@ -2364,8 +2344,7 @@ "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/get-caller-file": { "version": "2.0.5", @@ -2400,7 +2379,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2471,7 +2450,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" }, @@ -2507,7 +2485,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true + "devOptional": true }, "node_modules/import-fresh": { "version": "3.3.0", @@ -2554,7 +2532,7 @@ "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, + "devOptional": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -2566,7 +2544,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -2578,7 +2555,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -2596,7 +2573,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -2608,7 +2585,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.12.0" } @@ -2747,10 +2724,9 @@ } }, "node_modules/material-symbols": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.2.11.tgz", - "integrity": "sha512-/xwS5ifzgZv1E8kuV72P63MqM4fxdUW9yfiMxzq6gcTr+4TtyhHoatBlr6Qy9J98YfitbYot9o5dOIi/yOPzFg==", - "dev": true + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.2.12.tgz", + "integrity": "sha512-jsyi5FMruGCqI6G4dkIqsI24tgYrptqIxNi+05WeAFy7I98Do6Un93QhbRZT6wcfn3/8nPq74U5lTr7f2LBlYg==" }, "node_modules/merge2": { "version": "1.4.1", @@ -2853,7 +2829,6 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3000,7 +2975,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -3119,8 +3094,7 @@ "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/path-type": { "version": "4.0.0", @@ -3134,14 +3108,13 @@ "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, + "devOptional": true, "engines": { "node": ">=8.6" }, @@ -3165,7 +3138,6 @@ "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3299,7 +3271,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -3338,7 +3310,6 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -3389,7 +3360,6 @@ "version": "2.78.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", - "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -3478,7 +3448,7 @@ "version": "1.55.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz", "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==", - "dev": true, + "devOptional": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -3602,7 +3572,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" } @@ -3685,7 +3654,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" }, @@ -3845,7 +3813,7 @@ "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, + "devOptional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -3975,7 +3943,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.6.tgz", "integrity": "sha512-qMXIwnehvvcK5XfJiXQUiTxoYAEMKhM+jqCY6ZSTKFBKu1hJnAKEzP3AOcnTerI0cMZYAaJ4wpW1wiXLMDt4mA==", - "dev": true, "dependencies": { "esbuild": "^0.15.9", "postcss": "^8.4.16", @@ -4087,7 +4054,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", - "dev": true, "engines": { "node": ">= 14" } @@ -4227,9 +4193,9 @@ } }, "@defense-unicorns/unicorn-ui": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/@defense-unicorns/unicorn-ui/-/unicorn-ui-0.0.16.tgz", - "integrity": "sha512-Uvrui+8HTHvytziSM6wr/VSVh/6nj9NQcNeRvk/ETncbOuhQQhUrmw8SgOdt5CX3qgHs+MhjyzgixC94CRja4g==", + "version": "0.0.17", + "resolved": "https://registry.npmjs.org/@defense-unicorns/unicorn-ui/-/unicorn-ui-0.0.17.tgz", + "integrity": "sha512-aWAG9Fx8Fw1oHR5NhLEu23IO1CqII6AkNLE40EiMjPSFECjvEYB4YooG0kcCkXbhxPICmS5GBqBfoFyfaNU8VA==", "dev": true, "requires": { "@fontsource/roboto": "^4.5.8", @@ -4248,14 +4214,12 @@ "version": "0.15.10", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.10.tgz", "integrity": "sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==", - "dev": true, "optional": true }, "@esbuild/linux-loong64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.10.tgz", "integrity": "sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==", - "dev": true, "optional": true }, "@eslint/eslintrc": { @@ -5088,7 +5052,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "devOptional": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -5122,7 +5086,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true + "devOptional": true }, "brace-expansion": { "version": "1.1.11", @@ -5138,7 +5102,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "devOptional": true, "requires": { "fill-range": "^7.0.1" } @@ -5169,7 +5133,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, + "devOptional": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5349,7 +5313,6 @@ "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.10.tgz", "integrity": "sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==", - "dev": true, "requires": { "@esbuild/android-arm": "0.15.10", "@esbuild/linux-loong64": "0.15.10", @@ -5379,140 +5342,120 @@ "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.10.tgz", "integrity": "sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==", - "dev": true, "optional": true }, "esbuild-android-arm64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.10.tgz", "integrity": "sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==", - "dev": true, "optional": true }, "esbuild-darwin-64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.10.tgz", "integrity": "sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==", - "dev": true, "optional": true }, "esbuild-darwin-arm64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.10.tgz", "integrity": "sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==", - "dev": true, "optional": true }, "esbuild-freebsd-64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.10.tgz", "integrity": "sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==", - "dev": true, "optional": true }, "esbuild-freebsd-arm64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.10.tgz", "integrity": "sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==", - "dev": true, "optional": true }, "esbuild-linux-32": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.10.tgz", "integrity": "sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==", - "dev": true, "optional": true }, "esbuild-linux-64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.10.tgz", "integrity": "sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==", - "dev": true, "optional": true }, "esbuild-linux-arm": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.10.tgz", "integrity": "sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==", - "dev": true, "optional": true }, "esbuild-linux-arm64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.10.tgz", "integrity": "sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==", - "dev": true, "optional": true }, "esbuild-linux-mips64le": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.10.tgz", "integrity": "sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==", - "dev": true, "optional": true }, "esbuild-linux-ppc64le": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.10.tgz", "integrity": "sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==", - "dev": true, "optional": true }, "esbuild-linux-riscv64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.10.tgz", "integrity": "sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==", - "dev": true, "optional": true }, "esbuild-linux-s390x": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.10.tgz", "integrity": "sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==", - "dev": true, "optional": true }, "esbuild-netbsd-64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.10.tgz", "integrity": "sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==", - "dev": true, "optional": true }, "esbuild-openbsd-64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.10.tgz", "integrity": "sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==", - "dev": true, "optional": true }, "esbuild-sunos-64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.10.tgz", "integrity": "sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==", - "dev": true, "optional": true }, "esbuild-windows-32": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.10.tgz", "integrity": "sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==", - "dev": true, "optional": true }, "esbuild-windows-64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.10.tgz", "integrity": "sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==", - "dev": true, "optional": true }, "esbuild-windows-arm64": { "version": "0.15.10", "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.10.tgz", "integrity": "sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==", - "dev": true, "optional": true }, "escalade": { @@ -5774,7 +5717,7 @@ "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, + "devOptional": true, "requires": { "to-regex-range": "^5.0.1" } @@ -5824,14 +5767,12 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "optional": true }, "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==" }, "get-caller-file": { "version": "2.0.5", @@ -5857,7 +5798,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "devOptional": true, "requires": { "is-glob": "^4.0.1" } @@ -5913,7 +5854,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -5940,7 +5880,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true + "devOptional": true }, "import-fresh": { "version": "3.3.0", @@ -5978,7 +5918,7 @@ "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, + "devOptional": true, "requires": { "binary-extensions": "^2.0.0" } @@ -5987,7 +5927,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -5996,7 +5935,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "devOptional": true }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -6008,7 +5947,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "requires": { "is-extglob": "^2.1.1" } @@ -6017,7 +5956,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "devOptional": true }, "isexe": { "version": "2.0.0", @@ -6129,10 +6068,9 @@ } }, "material-symbols": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.2.11.tgz", - "integrity": "sha512-/xwS5ifzgZv1E8kuV72P63MqM4fxdUW9yfiMxzq6gcTr+4TtyhHoatBlr6Qy9J98YfitbYot9o5dOIi/yOPzFg==", - "dev": true + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.2.12.tgz", + "integrity": "sha512-jsyi5FMruGCqI6G4dkIqsI24tgYrptqIxNi+05WeAFy7I98Do6Un93QhbRZT6wcfn3/8nPq74U5lTr7f2LBlYg==" }, "merge2": { "version": "1.4.1", @@ -6207,8 +6145,7 @@ "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", @@ -6306,7 +6243,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "devOptional": true }, "normalize.css": { "version": "8.0.1", @@ -6395,8 +6332,7 @@ "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==" }, "path-type": { "version": "4.0.0", @@ -6407,14 +6343,13 @@ "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==" }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "devOptional": true }, "playwright-core": { "version": "1.27.0", @@ -6426,7 +6361,6 @@ "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -6505,7 +6439,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "devOptional": true, "requires": { "picomatch": "^2.2.1" } @@ -6532,7 +6466,6 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -6564,7 +6497,6 @@ "version": "2.78.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", - "dev": true, "requires": { "fsevents": "~2.3.2" } @@ -6629,7 +6561,7 @@ "version": "1.55.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz", "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==", - "dev": true, + "devOptional": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -6721,8 +6653,7 @@ "source-map-js": { "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 + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "sourcemap-codec": { "version": "1.4.8", @@ -6783,8 +6714,7 @@ "supports-preserve-symlinks-flag": { "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 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "svelte": { "version": "3.50.1", @@ -6870,7 +6800,7 @@ "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, + "devOptional": true, "requires": { "is-number": "^7.0.0" } @@ -6965,7 +6895,6 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/vite/-/vite-3.1.6.tgz", "integrity": "sha512-qMXIwnehvvcK5XfJiXQUiTxoYAEMKhM+jqCY6ZSTKFBKu1hJnAKEzP3AOcnTerI0cMZYAaJ4wpW1wiXLMDt4mA==", - "dev": true, "requires": { "esbuild": "^0.15.9", "fsevents": "~2.3.2", @@ -7027,8 +6956,7 @@ "yaml": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", - "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", - "dev": true + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==" }, "yargs": { "version": "17.5.1", diff --git a/package.json b/package.json index 66ae9fa3b5..f0cc0970d5 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ ] }, "devDependencies": { - "@defense-unicorns/unicorn-ui": "0.0.16", + "@defense-unicorns/unicorn-ui": "^0.0.17", "@fontsource/roboto": "4.5.8", "@material/card": "14.0.0", "@material/data-table": "14.0.0", @@ -51,6 +51,10 @@ "svelte-check": "2.9.1", "svelte-preprocess": "4.10.7", "tslib": "2.4.0", + "typescript": "4.8.4" + }, + "dependencies": { + "material-symbols": "^0.2.12", "typescript": "4.8.4", "vite": "3.1.6", "yaml": "2.1.3" diff --git a/src/config/config.go b/src/config/config.go index e8dc4a00b9..dd34de1835 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -80,7 +80,9 @@ var ( // Private vars active types.ZarfPackage - state types.ZarfState + // Dirty Solution to getting the real time deployedComponents components. + deployedComponents []types.DeployedComponent + state types.ZarfState SGetPublicKey string UIAssets embed.FS @@ -191,6 +193,18 @@ func GetComponents() []types.ZarfComponent { return active.Components } +func GetDeployingComponents() []types.DeployedComponent { + return deployedComponents +} + +func SetDeployingComponents(components []types.DeployedComponent) { + deployedComponents = components +} + +func ClearDeployingComponents() { + deployedComponents = []types.DeployedComponent{} +} + func SetComponents(components []types.ZarfComponent) { active.Components = components } diff --git a/src/internal/api/components/list.go b/src/internal/api/components/list.go new file mode 100644 index 0000000000..dc13212987 --- /dev/null +++ b/src/internal/api/components/list.go @@ -0,0 +1,14 @@ +package components + +import ( + "net/http" + + "github.com/defenseunicorns/zarf/src/config" + "github.com/defenseunicorns/zarf/src/internal/api/common" +) + +// ListDeployedPackages writes a list of packages that have been deployed to the connected cluster. +func ListDeployingComponents(w http.ResponseWriter, r *http.Request) { + deployingPackages := config.GetDeployingComponents() + common.WriteJSONResponse(w, deployingPackages, http.StatusOK) +} diff --git a/src/internal/api/start.go b/src/internal/api/start.go index 278ae6bbcc..63c9ce84d0 100644 --- a/src/internal/api/start.go +++ b/src/internal/api/start.go @@ -12,6 +12,7 @@ import ( "github.com/defenseunicorns/zarf/src/config" "github.com/defenseunicorns/zarf/src/internal/api/auth" "github.com/defenseunicorns/zarf/src/internal/api/cluster" + "github.com/defenseunicorns/zarf/src/internal/api/components" "github.com/defenseunicorns/zarf/src/internal/api/packages" "github.com/defenseunicorns/zarf/src/internal/k8s" "github.com/defenseunicorns/zarf/src/internal/message" @@ -90,6 +91,10 @@ func LaunchAPIServer() { r.Delete("/remove/{name}", packages.RemovePackage) }) + r.Route("/components", func(r chi.Router) { + r.Get("/deployed", components.ListDeployingComponents) + }) + }) // If no dev port specified, use the server port for the URL and try to open it diff --git a/src/internal/packager/deploy.go b/src/internal/packager/deploy.go index 4303cbbd7d..c732faac50 100644 --- a/src/internal/packager/deploy.go +++ b/src/internal/packager/deploy.go @@ -142,7 +142,7 @@ func Deploy() { func deployComponents(tempPath tempPaths, componentsToDeploy []types.ZarfComponent) ([]types.DeployedComponent, error) { // When pushing images, the default behavior is to add a shasum of the url to the image name deployedComponents := []types.DeployedComponent{} - + config.SetDeployingComponents(deployedComponents) // Deploy all the components for _, component := range componentsToDeploy { deployedComponent := types.DeployedComponent{Name: component.Name} @@ -186,8 +186,9 @@ func deployComponents(tempPath tempPaths, componentsToDeploy []types.ZarfCompone // Deploy the component deployedComponent.InstalledCharts = installedCharts deployedComponents = append(deployedComponents, deployedComponent) + config.SetDeployingComponents(deployedComponents) } - + config.ClearDeployingComponents() return deployedComponents, nil } diff --git a/src/test/ui/01_start_page.spec.ts b/src/test/ui/01_start_page.spec.ts index c4c9c43104..eee0cf0910 100644 --- a/src/test/ui/01_start_page.spec.ts +++ b/src/test/ui/01_start_page.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from '@playwright/test'; test.beforeEach(async ({ page }) => { - page.on('pageerror', (err) => console.log(err.message)); + page.on('pageerror', (err) => console.log(err.message)); }); test.describe('start page without an initialized cluster', () => { @@ -22,7 +22,7 @@ test.describe('start page without an initialized cluster', () => { await expect(page.locator('text=No Active Zarf Clusters')).toBeVisible(); await expect( page.locator( - 'h2:has-text("cluster was found, click initialize cluster to initialize it now with Zarf")' + '.hero-subtitle:has-text("cluster was found, click initialize cluster to initialize it now with Zarf")' ) ).toBeVisible(); diff --git a/src/test/ui/02_initialize_cluster.spec.ts b/src/test/ui/02_initialize_cluster.spec.ts index e7590b9913..a0eea1251e 100644 --- a/src/test/ui/02_initialize_cluster.spec.ts +++ b/src/test/ui/02_initialize_cluster.spec.ts @@ -18,28 +18,36 @@ test.describe('initialize a zarf cluster', () => { // Package details await expect(page.locator('text=Package Type ZarfInitConfig')).toBeVisible(); await expect( - page.locator('text=Meta data Name: init Description: Used to establish a new Zarf cluster') + page.locator('text=METADATA Name: Init Description: Used to establish a new Zarf cluster') ).toBeVisible(); // Components (check most functionaliy with k3s component) let k3s = page.locator('.accordion:has-text("k3s (Optional)")'); - await expect(k3s.locator(checkbox)).toBeEnabled(); + await expect(k3s.locator('.deploy-component-toggle')).toHaveAttribute('aria-pressed', 'false'); + await k3s.locator('text=Deploy').click(); + await expect(k3s.locator('.deploy-component-toggle')).toHaveAttribute('aria-pressed', 'true'); await expect( page.locator('.component-accordion-header:has-text("*** REQUIRES ROOT *** Install K3s")') ).toBeVisible(); await expect(k3s.locator('code')).toBeHidden(); - await k3s.locator('button').click(); + await k3s.locator('.accordion-toggle').click(); await expect(k3s.locator('code')).toBeVisible(); await expect(k3s.locator('code:has-text("name: k3s")')).toBeVisible(); // Check remaining components for deploy states await validateRequiredCheckboxes(page); - let logging = page.locator('.accordion:has-text("logging (Optional)")'); - await expect(logging.locator(checkbox)).toBeEnabled(); + let loggingDeployToggle = page + .locator('.accordion:has-text("logging (Optional)")') + .locator('.deploy-component-toggle'); + await loggingDeployToggle.click(); + await expect(loggingDeployToggle).toHaveAttribute('aria-pressed', 'true'); - let gitServer = page.locator('.accordion:has-text("git-server (Optional)")'); - await expect(gitServer.locator(checkbox)).toBeEnabled(); + let gitServerDeployToggle = page + .locator('.accordion:has-text("git-server (Optional)")') + .locator('.deploy-component-toggle'); + await gitServerDeployToggle.click(); + await expect(gitServerDeployToggle).toHaveAttribute('aria-pressed', 'true'); await page.locator('text=review deployment').click(); await expect(page).toHaveURL('/initialize/review'); @@ -55,14 +63,11 @@ test.describe('initialize a zarf cluster', () => { async function validateRequiredCheckboxes(page) { // Check remaining components for deploy states let injector = page.locator('.accordion:has-text("zarf-injector (Required)")'); - await expect(injector.locator(checkbox)).toBeDisabled(); - await expect(injector.locator(checkbox)).toBeChecked(); + expect(injector.locator('text=Deploy')).toBeHidden(); let seedRegistry = page.locator('.accordion:has-text("zarf-seed-registry (Required)")'); - await expect(seedRegistry.locator(checkbox)).toBeDisabled(); - await expect(seedRegistry.locator(checkbox)).toBeChecked(); + expect(seedRegistry.locator('text=Deploy')).toBeHidden(); let registry = page.locator('.accordion:has-text("zarf-registry (Required)")'); - await expect(registry.locator(checkbox)).toBeDisabled(); - await expect(registry.locator(checkbox)).toBeChecked(); + expect(registry.locator('text=Deploy')).toBeHidden(); } diff --git a/src/ui/app.css b/src/ui/app.css new file mode 100644 index 0000000000..89c1f32445 --- /dev/null +++ b/src/ui/app.css @@ -0,0 +1,114 @@ +:root { + /* Theme | vars */ + --mdc-theme-primary: #4adede; + --mdc-theme-primary-dark: #00acac; + --mdc-theme-secondary: #787ff6; + --mdc-theme-on-primary: #171717; + --mdc-theme-on-secondary: white; + --mdc-theme-surface: white; + --mdc-theme-text-secondary-on-light: rgba(0, 0, 0, 0.6); + --mdc-theme-text-primary-on-light: rgba(0, 0, 0, 0.87); + + /* Typography | vars */ + --mdc-typography-font-family: Roboto, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', + Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + + /* body2 */ + --mdc-typography-body2-font-style: normal; + --mdc-typography-body2-font-size: 1em; + + /* body3 */ + --mdc-typography-body3-font-style: normal; + --mdc-typography-body3-font-weight: 400; + --mdc-typography-body3-font-size: 0.875em; + --mdc-typography-body3-line-height: 143%; + --mdc-typography-body3-letter-spacing: 0.17px; + + /* th */ + --mdc-typography-th-font-style: normal; + --mdc-typography-th-font-weight: 500; + --mdc-typography-th-font-size: 0.875em; + --mdc-typography-th-line-height: 24px; + --mdc-typography-th-letter-spacing: 0.17px; + + /* overline */ + --mdc-typography-overline-font-weight: 400; + + font-family: var(--mdc-typography-font-family); +} + +.mdc-typography--body2, +.mdc-typography--caption { + color: var(--mdc-theme-text-secondary-on-light); +} + +.mdc-typography--body3 { + font-style: var(--mdc-typography-body3-font-style); + font-weight: var(--mdc-typography-body3-font-weight); + font-size: var(--mdc-typography-body3-font-size); + line-height: var(--mdc-typography-body3-line-height); + letter-spacing: var(--mdc-typography-body3-letter-spacing); +} + +.mdc-typography--th { + font-style: var(--mdc-typography-th-font-style); + font-weight: var(--mdc-typography-th-font-weight); + font-size: var(--mdc-typography-th-font-size); + line-height: var(--mdc-typography-th-line-height); + letter-spacing: var(--mdc-typography-th-letter-spacing); + color: var(--mdc-theme-text-primary-on-light); +} + +*, +::before, +::after { + margin-block: unset; +} + +html, +body { + margin: 0; + padding: 0; + background-color: #f5f5f5; +} + +.card { + background-color: var(--mdc-theme-surface); +} + +/* Layout | Page */ +.page { + padding: 2rem 10rem; + display: flex; + flex-direction: column; + gap: 2rem; +} +@media (max-width: 900px) { + .page { + padding: 2rem 4rem; + } +} +@media (max-width: 600px) { + .page { + padding: 2rem 1rem; + } +} + +.page .actionButtonsContainer { + display: flex; + justify-content: space-between; + margin-top: 2rem; +} +.page .page-section { + gap: 20px; + display: flex; + flex-direction: column; +} +.page .page-header { + margin-top: 2rem; +} + +/* Shorthand Classes */ +.invisible { + visibility: hidden; +} diff --git a/src/ui/lib/api.ts b/src/ui/lib/api.ts index 60671ba1d3..8f712e3862 100644 --- a/src/ui/lib/api.ts +++ b/src/ui/lib/api.ts @@ -1,5 +1,10 @@ import type { - APIZarfPackage, ClusterSummary, DeployedPackage, ZarfDeployOptions, ZarfState + APIZarfPackage, + ClusterSummary, + DeployedComponent, + DeployedPackage, + ZarfDeployOptions, + ZarfState } from './api-types'; import { HTTP } from './http'; @@ -10,7 +15,7 @@ const Auth = { if (!token) { return false; } - + http.updateToken(token); return await http.head('/'); } @@ -34,4 +39,8 @@ const Packages = { remove: (name: string) => http.del(`/packages/remove/${encodeURIComponent(name)}`) }; -export { Auth, Cluster, Packages }; +const DeployingComponents = { + list: () => http.get('/components/deployed') +}; + +export { Auth, Cluster, Packages, DeployingComponents }; diff --git a/src/ui/lib/components/accordion-group.svelte b/src/ui/lib/components/accordion-group.svelte new file mode 100644 index 0000000000..a2114463fe --- /dev/null +++ b/src/ui/lib/components/accordion-group.svelte @@ -0,0 +1,25 @@ +
+ + diff --git a/src/ui/lib/components/divider.svelte b/src/ui/lib/components/divider.svelte new file mode 100644 index 0000000000..8551c86d99 --- /dev/null +++ b/src/ui/lib/components/divider.svelte @@ -0,0 +1,7 @@ +
+ + diff --git a/src/ui/lib/components/hero.svelte b/src/ui/lib/components/hero.svelte index 82eec6a076..caa30ecb7e 100644 --- a/src/ui/lib/components/hero.svelte +++ b/src/ui/lib/components/hero.svelte @@ -21,18 +21,4 @@ align-items: center; gap: 1rem; } - .hero-content :global(.hero-subtitle) { - font-size: large; - } - .hero-content :global(.hero-text) { - display: flex; - flex-direction: column; - gap: 1rem; - margin: 1rem 0; - } - - .hero-content :global(h1), - .hero-content :global(h2) { - margin: 0; - } diff --git a/src/ui/lib/components/icon.svelte b/src/ui/lib/components/icon.svelte index bfeafc591a..6d9f36794a 100644 --- a/src/ui/lib/components/icon.svelte +++ b/src/ui/lib/components/icon.svelte @@ -1,46 +1,82 @@ -{#if variant === 'component'} - - - -{:else if variant === 'package'} - - - -{:else if variant === 'sun'} - - - -{:else if variant === 'cancelCloud'} - - - -{:else if variant === 'shieldPlus'} - - - -{/if} + + {#if variant === 'component'} + + + + {:else if variant === 'package'} + + + + {:else if variant === 'sun'} + + + + {:else if variant === 'cancelCloud'} + + + + {:else if variant === 'shieldPlus'} + + + + {:else if variant === 'rocket'} + + + + + + + + + + + + + + {/if} + diff --git a/src/ui/lib/components/package-card.svelte b/src/ui/lib/components/package-card.svelte deleted file mode 100644 index dedad19874..0000000000 --- a/src/ui/lib/components/package-card.svelte +++ /dev/null @@ -1,108 +0,0 @@ - - -
-
-
Package Type
-
{pkg.kind}
-
-
-
Meta data
- - - - - - - - - -
Name:{pkg.metadata?.name}
Description:{pkg.metadata?.description}
-
-
-
Build
-
- - - - - - - - - - - - - - - - - -
User:{pkg.build?.user}Terminal:{pkg.build?.terminal}
Version:{pkg.build?.version}Timestamp:{pkg.build?.timestamp}
Architecture:{pkg.build?.architecture}
-
-
-
- - diff --git a/src/ui/lib/components/package-component-accordion.svelte b/src/ui/lib/components/package-component-accordion.svelte new file mode 100644 index 0000000000..246fef67cd --- /dev/null +++ b/src/ui/lib/components/package-component-accordion.svelte @@ -0,0 +1,112 @@ + + + +
+
+ + {component.name} + + {requiredText} + + +
+
+ + {component.description || ' '} + +
+ {#if !component.required} +
+ toggleComponentDeployment($pkgComponentDeployStore, idx)} + /> + + Deploy + +
+ {/if} +
+ +
+ + diff --git a/src/ui/lib/components/package-component.svelte b/src/ui/lib/components/package-component.svelte deleted file mode 100644 index 4e550c9990..0000000000 --- a/src/ui/lib/components/package-component.svelte +++ /dev/null @@ -1,86 +0,0 @@ - - - -
-
-
- {component.name} - {#if component.required} - (Required) - {:else} - (Optional) - {/if} -
-
- {component.description || ' '} -
-
- -
- {#if readOnly} - - - {:else} - toggleComponentDeployment($pkgComponentDeployStore, idx)} - /> - - {/if} -
-
-
-
-			{yaml}
-		
-
-
- - diff --git a/src/ui/lib/components/package-details-card.svelte b/src/ui/lib/components/package-details-card.svelte new file mode 100644 index 0000000000..8edf88ccf7 --- /dev/null +++ b/src/ui/lib/components/package-details-card.svelte @@ -0,0 +1,104 @@ + + +
+
+ Package Type + {pkg.kind} +
+ +
+ Metadata + + + Name: + + {pkg.metadata?.name} + + + + Description: + + {pkg.metadata?.description} + + +
+
+ +
+ Build +
+ + + User: + {pkg.build?.user} + Terminal: + {pkg.build?.terminal} + + + Version: + {pkg.build?.version} + Timestamp: + {pkg.build?.timestamp} + + + Architecture: + {pkg.build?.architecture} + +
+
+
+
+ + diff --git a/src/ui/lib/components/spinner.svelte b/src/ui/lib/components/spinner.svelte index a8ca2a356c..0cf6cc37ba 100644 --- a/src/ui/lib/components/spinner.svelte +++ b/src/ui/lib/components/spinner.svelte @@ -1,8 +1,8 @@ + + +
{yaml}
+ + diff --git a/src/ui/routes/+layout.svelte b/src/ui/routes/+layout.svelte index 49d939b712..2d85f4b633 100644 --- a/src/ui/routes/+layout.svelte +++ b/src/ui/routes/+layout.svelte @@ -1,9 +1,11 @@ @@ -19,22 +18,20 @@ -
-

No Active Zarf Clusters

+ No Active Zarf Clusters - {#if $clusterStore.reachable && $clusterStore.distro !== 'unknown'} -

- A {$clusterStore.distro} cluster was found, click initialize cluster to initialize it now - with Zarf. -

- {:else} -

- Click initialize cluster to install the Init Package and deploy a new cluster. -

- {/if} -
+ {#if $clusterStore.reachable && $clusterStore.distro !== 'unknown'} + + A {$clusterStore.distro} cluster was found, click initialize cluster to initialize it now with + Zarf. + + {:else} + + Click initialize cluster to install the Init Package and deploy a new cluster. + + {/if} -
@@ -44,3 +41,9 @@ msg="Checking if a Kubernetes cluster is available and initialized by Zarf. This may take a few seconds." /> {/if} + + diff --git a/src/ui/routes/initialize/+layout.svelte b/src/ui/routes/initialize/+layout.svelte index 2acb6acb6f..befc59bec4 100644 --- a/src/ui/routes/initialize/+layout.svelte +++ b/src/ui/routes/initialize/+layout.svelte @@ -1,9 +1,8 @@ - +
- {#if $pkgStore} {/if} - - - +
diff --git a/src/ui/routes/initialize/configure/+page.svelte b/src/ui/routes/initialize/configure/+page.svelte index f53dd8b3c3..6739d86946 100644 --- a/src/ui/routes/initialize/configure/+page.svelte +++ b/src/ui/routes/initialize/configure/+page.svelte @@ -1,30 +1,49 @@ Configure + -

Configure Package Deployment

-

Package Details

- - - -

Package Components

+
+ + + Package Details + + +
-
- {#each $pkgStore.zarfPackage.components as component, idx} - - {/each} -
+
+ + + Package Components + + + The following components will be deployed into the cluster. Optional components that are not selected + will not be deployed. + + -
- + + {#each $pkgStore.zarfPackage.components as component, idx} + + {/each} + +
- -
+
+ + +
diff --git a/src/ui/routes/initialize/deploy/+page.svelte b/src/ui/routes/initialize/deploy/+page.svelte index 32b54061f2..34738bdaca 100644 --- a/src/ui/routes/initialize/deploy/+page.svelte +++ b/src/ui/routes/initialize/deploy/+page.svelte @@ -1,63 +1,133 @@ Deploy + +
+ +
+ +
+ + + {dialogState.topLine} + + + {dialogState.bottomLine} + +
+
-{#await Packages.deploy(deployOptions)} -

Deploy Package - {$pkgStore.zarfPackage.metadata?.name}

-
- -
-{:then successful} -

Deploy Package - {$pkgStore.zarfPackage.metadata?.name}

-
- { - c.iconContent = undefined; - c.variant = 'info'; - c.disabled = false; - return c; - }), - { - title: successful ? 'Deployment Succeeded' : 'Deployment Failed', - variant: successful ? 'success' : 'error', - disabled: false - } - ]} - /> -
-{/await} + diff --git a/src/ui/routes/initialize/deploy/deploy-utils.ts b/src/ui/routes/initialize/deploy/deploy-utils.ts new file mode 100644 index 0000000000..45f86d731e --- /dev/null +++ b/src/ui/routes/initialize/deploy/deploy-utils.ts @@ -0,0 +1,72 @@ +import { DeployingComponents } from '$lib/api'; +import type { DeployedComponent, ZarfComponent } from '$lib/api-types'; +import type { StepProps } from '@defense-unicorns/unicorn-ui/Stepper/stepper.types'; + +const POLL_TIME_MS = 2000; + +export type ComponentStepMap = Map; + +export function createComponentStepMap( + allComponents: ZarfComponent[], + deployComponentIdx: number[] +): ComponentStepMap { + let deployingComponentMap: ComponentStepMap = new Map(); + deployComponentIdx.forEach((componentIndex: number, index: number) => { + let component = allComponents[componentIndex]; + deployingComponentMap.set(component.name, { + title: `Deploy ${component.name}`, + variant: 'primary', + iconContent: index.toString(), + disabled: true + }); + }); + return deployingComponentMap; +} + +export function getComponentStepMapComponents(componentSteps: ComponentStepMap): StepProps[] { + return Array.from(componentSteps.values()); +} + +export function setStepSuccessful(step: StepProps): StepProps { + return { ...step, variant: 'success', disabled: false, iconContent: undefined }; +} + +export function setStepError(step: StepProps): StepProps { + return { ...step, variant: 'error', disabled: false, iconContent: undefined }; +} + +export function finalizeStepState(steps: StepProps[], success: boolean): StepProps[] { + return steps.map((step: StepProps): StepProps => { + let stepState = step; + if (success) { + stepState = setStepSuccessful(step); + } else { + if (step.variant !== 'success') { + stepState = setStepError(step); + } + } + return stepState; + }); +} + +export async function getDeployedComponents(components: ComponentStepMap): Promise { + (await DeployingComponents.list()).forEach((component: DeployedComponent) => { + const componentStep = components.get(component.name); + if (componentStep) { + components.set(component.name, setStepSuccessful(componentStep)); + } + }); + return getComponentStepMapComponents(components); +} + +export function getDialogContent(success: boolean): { topLine: string; bottomLine: string } { + return success + ? { + topLine: 'Package successfully deployed', + bottomLine: 'You will be automatically redirected to the deployment details page.' + } + : { + topLine: 'Package failed to deploy', + bottomLine: 'You will be automatically redirected to the home page.' + }; +} diff --git a/src/ui/routes/initialize/review/+page.svelte b/src/ui/routes/initialize/review/+page.svelte index 9913beeda4..bb7ee51b83 100644 --- a/src/ui/routes/initialize/review/+page.svelte +++ b/src/ui/routes/initialize/review/+page.svelte @@ -1,30 +1,42 @@ Review -

Review Deployment

-

Edits to default configurations are highlighted

-

Package Details

+ - -

Selected Package Components

+
+ + + Package Details + + +
-
- {#each $pkgComponentDeployStore as idx} - - {/each} -
+
+ + + Selected Package Components + + + {#each $pkgComponentDeployStore as idx} + + {/each} + +
- - + +
diff --git a/src/ui/routes/packages/+layout.svelte b/src/ui/routes/packages/+layout.svelte new file mode 100644 index 0000000000..f1fc8d8358 --- /dev/null +++ b/src/ui/routes/packages/+layout.svelte @@ -0,0 +1,3 @@ +
+ +
diff --git a/src/ui/routes/packages/+page.svelte b/src/ui/routes/packages/+page.svelte index db1c88a20e..e17b427771 100644 --- a/src/ui/routes/packages/+page.svelte +++ b/src/ui/routes/packages/+page.svelte @@ -1,10 +1,10 @@ {#await Packages.getDeployedPackages()} @@ -14,31 +14,33 @@

No deployed packages found 🙁

- +
{:else} - -
-

📦 Deployed Zarf Packages

- -
- {#each packages as pkg} -
- -
- {/each} -
+
+ Deployment Details + +
+ {#each packages as pkg} +
+ + + Deployed Packages + + +
+ {/each} {/if} {/await}