summaryrefslogtreecommitdiffstats
path: root/src/webapp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webapp')
-rw-r--r--src/webapp/TODO.txt4
-rw-r--r--src/webapp/package-lock.json1078
-rw-r--r--src/webapp/package.json15
-rw-r--r--src/webapp/pnpm-lock.yaml976
-rw-r--r--src/webapp/postcss.config.cjs13
-rw-r--r--src/webapp/src/app.css7
-rw-r--r--src/webapp/src/app.svelte14
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Black.woffbin0 -> 138764 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Black.woff2bin0 -> 102868 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woffbin0 -> 146824 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woff2bin0 -> 108752 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Bold.woffbin0 -> 143208 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Bold.woff2bin0 -> 106140 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woffbin0 -> 151052 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woff2bin0 -> 111808 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woffbin0 -> 142920 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woff2bin0 -> 106108 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woffbin0 -> 150628 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2bin0 -> 111708 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woffbin0 -> 140724 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woff2bin0 -> 104232 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woffbin0 -> 149996 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woff2bin0 -> 111392 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Italic.woffbin0 -> 144372 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Italic.woff2bin0 -> 106876 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Light.woffbin0 -> 140632 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Light.woff2bin0 -> 104332 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-LightItalic.woffbin0 -> 150092 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-LightItalic.woff2bin0 -> 111332 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Medium.woffbin0 -> 142552 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Medium.woff2bin0 -> 105924 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woffbin0 -> 150988 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woff2bin0 -> 112184 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Regular.woffbin0 -> 133844 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Regular.woff2bin0 -> 98868 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-SemiBold.woffbin0 -> 142932 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-SemiBold.woff2bin0 -> 105804 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woffbin0 -> 151180 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2bin0 -> 112048 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Thin.woffbin0 -> 135920 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-Thin.woff2bin0 -> 99632 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woffbin0 -> 145480 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woff2bin0 -> 106496 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-italic.var.woff2bin0 -> 245036 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter-roman.var.woff2bin0 -> 227180 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/Inter.var.woff2bin0 -> 324864 bytes
-rw-r--r--src/webapp/src/assets/fonts/inter/LICENSE.txt94
-rw-r--r--src/webapp/src/assets/fonts/inter/inter.css200
-rw-r--r--src/webapp/src/components/entry-card.svelte81
-rw-r--r--src/webapp/src/components/entry-list.svelte54
-rw-r--r--src/webapp/src/components/forms/entry-form.svelte392
-rw-r--r--src/webapp/src/components/ui/buttons/button.svelte91
-rw-r--r--src/webapp/src/components/ui/buttons/index.ts1
-rw-r--r--src/webapp/src/components/ui/icons/checkmark-circle.svelte49
-rw-r--r--src/webapp/src/components/ui/icons/close.svelte46
-rw-r--r--src/webapp/src/components/ui/icons/eye-striked.svelte49
-rw-r--r--src/webapp/src/components/ui/icons/eye.svelte47
-rw-r--r--src/webapp/src/components/ui/icons/index.ts7
-rw-r--r--src/webapp/src/components/ui/icons/info-circle.svelte55
-rw-r--r--src/webapp/src/components/ui/icons/minus-circle.svelte47
-rw-r--r--src/webapp/src/components/ui/icons/warning-circle.svelte55
-rw-r--r--src/webapp/src/components/ui/index.ts3
-rw-r--r--src/webapp/src/components/ui/inputs/checkbox.svelte42
-rw-r--r--src/webapp/src/components/ui/inputs/index.ts4
-rw-r--r--src/webapp/src/components/ui/inputs/inline-checkbox.svelte11
-rw-r--r--src/webapp/src/components/ui/inputs/password-input.svelte98
-rw-r--r--src/webapp/src/components/ui/inputs/text-input.svelte87
-rw-r--r--src/webapp/src/components/ui/notifications/index.ts1
-rw-r--r--src/webapp/src/components/ui/notifications/inline-notification.svelte75
-rw-r--r--src/webapp/src/components/ui/notifications/notification-action-button.svelte15
-rw-r--r--src/webapp/src/components/ui/notifications/notification-button.svelte24
-rw-r--r--src/webapp/src/components/ui/notifications/notification-icon.svelte25
-rw-r--r--src/webapp/src/components/ui/notifications/toast-notification.svelte71
-rw-r--r--src/webapp/src/components/ui/readme.txt1
-rw-r--r--src/webapp/src/lib/configuration.ts8
-rw-r--r--src/webapp/src/lib/stores/persistent-store.ts16
-rw-r--r--src/webapp/src/lib/stores/preferences.ts13
-rw-r--r--src/webapp/src/lib/stores/session.ts3
-rw-r--r--src/webapp/src/main.ts5
-rw-r--r--src/webapp/src/routes/app/_header.svelte184
-rw-r--r--src/webapp/src/routes/app/home.svelte48
-rw-r--r--src/webapp/src/routes/app/modals/access-tokens-modal.svelte280
-rw-r--r--src/webapp/src/routes/app/modals/file-import-modal.svelte240
-rw-r--r--src/webapp/src/routes/app/modals/new-access-token-modal.svelte262
-rw-r--r--src/webapp/src/routes/public/login.svelte133
-rw-r--r--src/webapp/src/vite-env.d.ts1
-rw-r--r--src/webapp/svelte.config.js7
-rw-r--r--src/webapp/tailwind.config.cjs121
-rw-r--r--src/webapp/tsconfig.json4
-rw-r--r--src/webapp/vite.config.js5
90 files changed, 2973 insertions, 2189 deletions
diff --git a/src/webapp/TODO.txt b/src/webapp/TODO.txt
index 2e37cd9..0999ab8 100644
--- a/src/webapp/TODO.txt
+++ b/src/webapp/TODO.txt
@@ -1,3 +1,3 @@
--- Refresh access token list if 404 is returned
--- Don't initialise components before they are needed
+TODO: Refresh access token list if 404 is returned
+TODO: Don't initialise components before they are needed
Example of this is access token list, the tokens get loaded on page load
diff --git a/src/webapp/package-lock.json b/src/webapp/package-lock.json
index 2ccdaf8..7eb459f 100644
--- a/src/webapp/package-lock.json
+++ b/src/webapp/package-lock.json
@@ -6,29 +6,22 @@
"packages": {
"": {
"version": "0.0.0",
- "dependencies": {
- "@types/validator": "^13.7.1"
- },
"devDependencies": {
- "@sveltejs/vite-plugin-svelte": "^1.0.0-next.33",
+ "@sveltejs/vite-plugin-svelte": "^1.0.0-next.37",
"@tailwindcss/forms": "^0.4.0",
- "@tailwindcss/typography": "^0.5.0",
"@tsconfig/svelte": "^3.0.0",
- "autoprefixer": "^10.4.1",
- "lz-string": "^1.4.4",
+ "@types/validator": "^13.7.1",
+ "autoprefixer": "^10.4.2",
"postcss": "^8.4.5",
- "svelte": "^3.44.3",
- "svelte-check": "^2.2.11",
- "svelte-fsm": "^1.1.2",
+ "postcss-load-config": "^3.1.1",
+ "svelte": "^3.46.4",
+ "svelte-check": "^2.4.3",
"svelte-preprocess": "^4.10.1",
"svelte-spa-router": "^3.2.0",
- "svelte-tiny-virtual-list": "^1.1.7",
- "tailwindcss": "^3.0.8",
- "tslib": "^2.3.1",
- "typescript": "^4.5.4",
+ "tailwindcss": "^3.0.12",
+ "typescript": "^4.5.5",
"validator": "^13.7.0",
- "vest": "^4.0.1",
- "vite": "^2.7.10"
+ "vite": "^2.8.1"
}
},
"node_modules/@babel/code-frame": {
@@ -177,16 +170,15 @@
}
},
"node_modules/@sveltejs/vite-plugin-svelte": {
- "version": "1.0.0-next.33",
- "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.33.tgz",
- "integrity": "sha512-aj0h2+ZixgT+yoJFIs8dRRw/Cj9tgNu3+hY4CJikpa04mfhR61wXqJFfi2ZEFMUvFda5nCxKYIChFkc6wq5fJA==",
+ "version": "1.0.0-next.37",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.37.tgz",
+ "integrity": "sha512-EdSXw2rXeOahNrQfMJVZxa/NxZxW1a0TiBI3s+pVxnxU14hEQtnkLtdbTFhnceu22gJpNPFSIJRcIwRBBDQIeA==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^4.1.2",
"debug": "^4.3.3",
"kleur": "^4.1.4",
"magic-string": "^0.25.7",
- "require-relative": "^0.8.7",
"svelte-hmr": "^0.14.9"
},
"engines": {
@@ -215,22 +207,6 @@
"tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1"
}
},
- "node_modules/@tailwindcss/typography": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz",
- "integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "lodash.castarray": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.merge": "^4.6.2",
- "lodash.uniq": "^4.5.0"
- },
- "peerDependencies": {
- "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders"
- }
- },
"node_modules/@tsconfig/svelte": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-3.0.0.tgz",
@@ -267,7 +243,8 @@
"node_modules/@types/validator": {
"version": "13.7.1",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.1.tgz",
- "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q=="
+ "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==",
+ "dev": true
},
"node_modules/acorn": {
"version": "7.4.1",
@@ -336,13 +313,13 @@
"dev": true
},
"node_modules/autoprefixer": {
- "version": "10.4.1",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.1.tgz",
- "integrity": "sha512-B3ZEG7wtzXDRCEFsan7HmR2AeNsxdJB0+sEC0Hc5/c2NbhJqPwuZm+tn233GBVw82L+6CtD6IPSfVruwKjfV3A==",
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
+ "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
"dev": true,
"dependencies": {
"browserslist": "^4.19.1",
- "caniuse-lite": "^1.0.30001294",
+ "caniuse-lite": "^1.0.30001297",
"fraction.js": "^4.1.2",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
@@ -450,9 +427,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001294",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001294.tgz",
- "integrity": "sha512-LiMlrs1nSKZ8qkNhpUf5KD0Al1KCBE3zaT7OLOwEkagXMEDij98SiOovn9wxVGQpklk9vVC/pUSqgYmkmKOS8g==",
+ "version": "1.0.30001311",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz",
+ "integrity": "sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -476,10 +453,16 @@
}
},
"node_modules/chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -520,12 +503,6 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "node_modules/context": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/context/-/context-2.0.1.tgz",
- "integrity": "sha512-8QV3EXa7WP9l8aL8a3BMM792vvuPbIyp6ktGHEX6V4XiGNaiqxCGMRGzEavE3cPnHWqI9fXTujPEfBPt0iRhQw==",
- "dev": true
- },
"node_modules/cosmiconfig": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
@@ -637,38 +614,43 @@
"dev": true
},
"node_modules/esbuild": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz",
- "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz",
+ "integrity": "sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A==",
"dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
},
+ "engines": {
+ "node": ">=12"
+ },
"optionalDependencies": {
- "esbuild-android-arm64": "0.13.15",
- "esbuild-darwin-64": "0.13.15",
- "esbuild-darwin-arm64": "0.13.15",
- "esbuild-freebsd-64": "0.13.15",
- "esbuild-freebsd-arm64": "0.13.15",
- "esbuild-linux-32": "0.13.15",
- "esbuild-linux-64": "0.13.15",
- "esbuild-linux-arm": "0.13.15",
- "esbuild-linux-arm64": "0.13.15",
- "esbuild-linux-mips64le": "0.13.15",
- "esbuild-linux-ppc64le": "0.13.15",
- "esbuild-netbsd-64": "0.13.15",
- "esbuild-openbsd-64": "0.13.15",
- "esbuild-sunos-64": "0.13.15",
- "esbuild-windows-32": "0.13.15",
- "esbuild-windows-64": "0.13.15",
- "esbuild-windows-arm64": "0.13.15"
+ "esbuild-android-arm64": "0.14.21",
+ "esbuild-darwin-64": "0.14.21",
+ "esbuild-darwin-arm64": "0.14.21",
+ "esbuild-freebsd-64": "0.14.21",
+ "esbuild-freebsd-arm64": "0.14.21",
+ "esbuild-linux-32": "0.14.21",
+ "esbuild-linux-64": "0.14.21",
+ "esbuild-linux-arm": "0.14.21",
+ "esbuild-linux-arm64": "0.14.21",
+ "esbuild-linux-mips64le": "0.14.21",
+ "esbuild-linux-ppc64le": "0.14.21",
+ "esbuild-linux-riscv64": "0.14.21",
+ "esbuild-linux-s390x": "0.14.21",
+ "esbuild-netbsd-64": "0.14.21",
+ "esbuild-openbsd-64": "0.14.21",
+ "esbuild-sunos-64": "0.14.21",
+ "esbuild-windows-32": "0.14.21",
+ "esbuild-windows-64": "0.14.21",
+ "esbuild-windows-arm64": "0.14.21"
}
},
"node_modules/esbuild-android-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz",
- "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz",
+ "integrity": "sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ==",
"cpu": [
"arm64"
],
@@ -676,12 +658,15 @@
"optional": true,
"os": [
"android"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-darwin-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz",
- "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz",
+ "integrity": "sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ==",
"cpu": [
"x64"
],
@@ -689,12 +674,15 @@
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-darwin-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz",
- "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz",
+ "integrity": "sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ==",
"cpu": [
"arm64"
],
@@ -702,12 +690,15 @@
"optional": true,
"os": [
"darwin"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-freebsd-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz",
- "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz",
+ "integrity": "sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g==",
"cpu": [
"x64"
],
@@ -715,12 +706,15 @@
"optional": true,
"os": [
"freebsd"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-freebsd-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz",
- "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz",
+ "integrity": "sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA==",
"cpu": [
"arm64"
],
@@ -728,12 +722,15 @@
"optional": true,
"os": [
"freebsd"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-linux-32": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz",
- "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz",
+ "integrity": "sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg==",
"cpu": [
"ia32"
],
@@ -741,12 +738,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-linux-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz",
- "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz",
+ "integrity": "sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA==",
"cpu": [
"x64"
],
@@ -754,12 +754,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-linux-arm": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz",
- "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz",
+ "integrity": "sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w==",
"cpu": [
"arm"
],
@@ -767,12 +770,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-linux-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz",
- "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz",
+ "integrity": "sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g==",
"cpu": [
"arm64"
],
@@ -780,12 +786,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-linux-mips64le": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz",
- "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz",
+ "integrity": "sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A==",
"cpu": [
"mips64el"
],
@@ -793,12 +802,15 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-linux-ppc64le": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz",
- "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz",
+ "integrity": "sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ==",
"cpu": [
"ppc64"
],
@@ -806,12 +818,47 @@
"optional": true,
"os": [
"linux"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz",
+ "integrity": "sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz",
+ "integrity": "sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-netbsd-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz",
- "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz",
+ "integrity": "sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g==",
"cpu": [
"x64"
],
@@ -819,12 +866,15 @@
"optional": true,
"os": [
"netbsd"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-openbsd-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz",
- "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz",
+ "integrity": "sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA==",
"cpu": [
"x64"
],
@@ -832,12 +882,15 @@
"optional": true,
"os": [
"openbsd"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-sunos-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz",
- "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz",
+ "integrity": "sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA==",
"cpu": [
"x64"
],
@@ -845,12 +898,15 @@
"optional": true,
"os": [
"sunos"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-windows-32": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz",
- "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz",
+ "integrity": "sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A==",
"cpu": [
"ia32"
],
@@ -858,12 +914,15 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-windows-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz",
- "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz",
+ "integrity": "sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA==",
"cpu": [
"x64"
],
@@ -871,12 +930,15 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/esbuild-windows-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz",
- "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz",
+ "integrity": "sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw==",
"cpu": [
"arm64"
],
@@ -884,7 +946,10 @@
"optional": true,
"os": [
"win32"
- ]
+ ],
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/escalade": {
"version": "3.1.1",
@@ -911,9 +976,9 @@
"dev": true
},
"node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
@@ -923,7 +988,7 @@
"micromatch": "^4.0.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=8.6.0"
}
},
"node_modules/fastq": {
@@ -1053,18 +1118,6 @@
"optional": true,
"peer": true
},
- "node_modules/import-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz",
- "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==",
- "dev": true,
- "dependencies": {
- "import-from": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -1081,27 +1134,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz",
- "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==",
- "dev": true,
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/import-from/node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -1137,9 +1169,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
- "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -1214,39 +1246,6 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
- "node_modules/lodash.castarray": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
- "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=",
- "dev": true
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
- "dev": true
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
- "dev": true
- },
- "node_modules/lz-string": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
- "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=",
- "dev": true,
- "bin": {
- "lz-string": "bin/bin.js"
- }
- },
"node_modules/magic-string": {
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
@@ -1341,19 +1340,10 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/n4s": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/n4s/-/n4s-4.0.1.tgz",
- "integrity": "sha512-S3/8mLYORi1SjgUflavLmZg/d3r0K7t+G9LsYdE3zPIILKX2A8nXpdUTauOBk6ayUUhJD0zQEtfJY+qNsYysBw==",
- "dev": true,
- "dependencies": {
- "context": "^2.0.1"
- }
- },
"node_modules/nanoid": {
- "version": "3.1.30",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz",
- "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
"dev": true,
"bin": {
"nanoid": "bin/nanoid.cjs"
@@ -1477,14 +1467,14 @@
}
},
"node_modules/postcss": {
- "version": "8.4.5",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
- "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
+ "version": "8.4.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
+ "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
"dev": true,
"dependencies": {
- "nanoid": "^3.1.30",
+ "nanoid": "^3.2.0",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.1"
+ "source-map-js": "^1.0.2"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -1495,30 +1485,31 @@
}
},
"node_modules/postcss-js": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
- "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
"dev": true,
"dependencies": {
- "camelcase-css": "^2.0.1",
- "postcss": "^8.1.6"
+ "camelcase-css": "^2.0.1"
},
"engines": {
- "node": ">=10.0"
+ "node": "^12 || ^14 || >= 16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
}
},
"node_modules/postcss-load-config": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz",
- "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz",
+ "integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==",
"dev": true,
"dependencies": {
- "import-cwd": "^3.0.0",
- "lilconfig": "^2.0.3",
+ "lilconfig": "^2.0.4",
"yaml": "^1.10.2"
},
"engines": {
@@ -1557,9 +1548,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz",
- "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz",
+ "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -1628,20 +1619,18 @@
"node": ">=8"
}
},
- "node_modules/require-relative": {
- "version": "0.8.7",
- "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
- "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
- "dev": true
- },
"node_modules/resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"dependencies": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1784,9 +1773,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
- "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
+ "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"
@@ -1822,26 +1811,38 @@
"node": ">=8"
}
},
+ "node_modules/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,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/svelte": {
- "version": "3.44.3",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.44.3.tgz",
- "integrity": "sha512-aGgrNCip5PQFNfq9e9tmm7EYxWLVHoFsEsmKrtOeRD8dmoGDdyTQ+21xd7qgFd8MNdKGSYvg7F9dr+Tc0yDymg==",
+ "version": "3.46.4",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.4.tgz",
+ "integrity": "sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg==",
"dev": true,
"engines": {
"node": ">= 8"
}
},
"node_modules/svelte-check": {
- "version": "2.2.11",
- "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.2.11.tgz",
- "integrity": "sha512-clotPGGZPj3LuS9qP1lk+Wwnsj+js42ehCPmHk+qtyaQh/dU95e0qkpPmtmOMYHN6My5Y75XqeN1QNLj5V5gwA==",
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.4.3.tgz",
+ "integrity": "sha512-0zJMMgqYHoP7QEG3tfc5DekpHAOqoy4QOL8scWMSdHIpVVDVC0MuYK57nFyj3XVTW8Zfm85FlgnAdQYsVmST2Q==",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0",
"chokidar": "^3.4.1",
"fast-glob": "^3.2.7",
"import-fresh": "^3.2.1",
"minimist": "^1.2.5",
+ "picocolors": "^1.0.0",
"sade": "^1.7.4",
"source-map": "^0.7.3",
"svelte-preprocess": "^4.0.0",
@@ -1854,16 +1855,6 @@
"svelte": "^3.24.0"
}
},
- "node_modules/svelte-fsm": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/svelte-fsm/-/svelte-fsm-1.1.2.tgz",
- "integrity": "sha512-lGeuhELDkQC5WK4+MHJtdigXCqwsYMR1euyRTacDCwtbORzEy5ovivTY3Mnd5bM7H+huO3nKjNjdPvDLcLn3pQ==",
- "dev": true,
- "engines": {
- "node": ">=14.0.0",
- "npm": ">=7.0.0"
- }
- },
"node_modules/svelte-hmr": {
"version": "0.14.9",
"resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.9.tgz",
@@ -1951,39 +1942,33 @@
"url": "https://github.com/sponsors/ItalyPaleAle"
}
},
- "node_modules/svelte-tiny-virtual-list": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/svelte-tiny-virtual-list/-/svelte-tiny-virtual-list-1.1.7.tgz",
- "integrity": "sha512-8314cmLXOVqIQwSc3NFu8yGU7BdHEJeixrwFirmnMoWl6YNcCq5jVjCKjE3tDNJfUenz1LN5M5YshPt6GcPuww==",
- "dev": true
- },
"node_modules/tailwindcss": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.8.tgz",
- "integrity": "sha512-Yww1eRYO1AxITJmW/KduZPxNvYdHuedeKwPju9Oakp7MdiixRi5xkpLhirsc81QCxHL0eoce6qKmxXwYGt4Cjw==",
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.22.tgz",
+ "integrity": "sha512-F8lt74RlNZirnkaSk310+vGQta7c0/hgx7/bqxruM4wS9lp8oqV93lzavajC3VT0Lp4UUtUVIt8ifKcmGzkr0A==",
"dev": true,
"dependencies": {
"arg": "^5.0.1",
"chalk": "^4.1.2",
- "chokidar": "^3.5.2",
+ "chokidar": "^3.5.3",
"color-name": "^1.1.4",
"cosmiconfig": "^7.0.1",
"detective": "^5.2.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.2.7",
+ "fast-glob": "^3.2.11",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"normalize-path": "^3.0.0",
"object-hash": "^2.2.0",
- "postcss-js": "^3.0.3",
+ "postcss": "^8.4.6",
+ "postcss-js": "^4.0.0",
"postcss-load-config": "^3.1.0",
"postcss-nested": "5.0.6",
- "postcss-selector-parser": "^6.0.7",
+ "postcss-selector-parser": "^6.0.9",
"postcss-value-parser": "^4.2.0",
"quick-lru": "^5.1.1",
- "resolve": "^1.20.0",
- "tmp": "^0.2.1"
+ "resolve": "^1.22.0"
},
"bin": {
"tailwind": "lib/cli.js",
@@ -2009,33 +1994,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/tmp": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
- "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
- "dev": true,
- "dependencies": {
- "rimraf": "^3.0.0"
- },
- "engines": {
- "node": ">=8.17.0"
- }
- },
- "node_modules/tmp/node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -2048,16 +2006,10 @@
"node": ">=8.0"
}
},
- "node_modules/tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
- "dev": true
- },
"node_modules/typescript": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
- "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -2082,25 +2034,15 @@
"node": ">= 0.10"
}
},
- "node_modules/vest": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/vest/-/vest-4.0.1.tgz",
- "integrity": "sha512-J1WJeMVyyjzkQ4uiLxDoIBiiW44FxAl/Z2znNxTQlwPQe7Ys/VDjbEJV1GnErB9oCr0O1tUc5JbwXh8/eQlfzA==",
- "dev": true,
- "dependencies": {
- "context": "^2.0.1",
- "n4s": "^4.0.1"
- }
- },
"node_modules/vite": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.10.tgz",
- "integrity": "sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.1.tgz",
+ "integrity": "sha512-Typ8qjUnW0p53gBsJpisrKcZlEbUPZATja9BG6Z09QZjg9YrnEn/htkr/VH4WhnH7eNUQeSD+wKI1lHzQRWskw==",
"dev": true,
"dependencies": {
- "esbuild": "^0.13.12",
- "postcss": "^8.4.5",
- "resolve": "^1.20.0",
+ "esbuild": "^0.14.14",
+ "postcss": "^8.4.6",
+ "resolve": "^1.22.0",
"rollup": "^2.59.0"
},
"bin": {
@@ -2270,16 +2212,15 @@
}
},
"@sveltejs/vite-plugin-svelte": {
- "version": "1.0.0-next.33",
- "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.33.tgz",
- "integrity": "sha512-aj0h2+ZixgT+yoJFIs8dRRw/Cj9tgNu3+hY4CJikpa04mfhR61wXqJFfi2ZEFMUvFda5nCxKYIChFkc6wq5fJA==",
+ "version": "1.0.0-next.37",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.37.tgz",
+ "integrity": "sha512-EdSXw2rXeOahNrQfMJVZxa/NxZxW1a0TiBI3s+pVxnxU14hEQtnkLtdbTFhnceu22gJpNPFSIJRcIwRBBDQIeA==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^4.1.2",
"debug": "^4.3.3",
"kleur": "^4.1.4",
"magic-string": "^0.25.7",
- "require-relative": "^0.8.7",
"svelte-hmr": "^0.14.9"
}
},
@@ -2292,18 +2233,6 @@
"mini-svg-data-uri": "^1.2.3"
}
},
- "@tailwindcss/typography": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz",
- "integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==",
- "dev": true,
- "requires": {
- "lodash.castarray": "^4.4.0",
- "lodash.isplainobject": "^4.0.6",
- "lodash.merge": "^4.6.2",
- "lodash.uniq": "^4.5.0"
- }
- },
"@tsconfig/svelte": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-3.0.0.tgz",
@@ -2340,7 +2269,8 @@
"@types/validator": {
"version": "13.7.1",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.1.tgz",
- "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q=="
+ "integrity": "sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==",
+ "dev": true
},
"acorn": {
"version": "7.4.1",
@@ -2391,13 +2321,13 @@
"dev": true
},
"autoprefixer": {
- "version": "10.4.1",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.1.tgz",
- "integrity": "sha512-B3ZEG7wtzXDRCEFsan7HmR2AeNsxdJB0+sEC0Hc5/c2NbhJqPwuZm+tn233GBVw82L+6CtD6IPSfVruwKjfV3A==",
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
+ "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
"dev": true,
"requires": {
"browserslist": "^4.19.1",
- "caniuse-lite": "^1.0.30001294",
+ "caniuse-lite": "^1.0.30001297",
"fraction.js": "^4.1.2",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
@@ -2467,9 +2397,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001294",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001294.tgz",
- "integrity": "sha512-LiMlrs1nSKZ8qkNhpUf5KD0Al1KCBE3zaT7OLOwEkagXMEDij98SiOovn9wxVGQpklk9vVC/pUSqgYmkmKOS8g==",
+ "version": "1.0.30001311",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz",
+ "integrity": "sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A==",
"dev": true
},
"chalk": {
@@ -2483,9 +2413,9 @@
}
},
"chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"requires": {
"anymatch": "~3.1.2",
@@ -2519,12 +2449,6 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
- "context": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/context/-/context-2.0.1.tgz",
- "integrity": "sha512-8QV3EXa7WP9l8aL8a3BMM792vvuPbIyp6ktGHEX6V4XiGNaiqxCGMRGzEavE3cPnHWqI9fXTujPEfBPt0iRhQw==",
- "dev": true
- },
"cosmiconfig": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
@@ -2610,146 +2534,162 @@
"dev": true
},
"esbuild": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz",
- "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz",
+ "integrity": "sha512-7WEoNMBJdLN993dr9h0CpFHPRc3yFZD+EAVY9lg6syJJ12gc5fHq8d75QRExuhnMkT2DaRiIKFThRvDWP+fO+A==",
"dev": true,
"requires": {
- "esbuild-android-arm64": "0.13.15",
- "esbuild-darwin-64": "0.13.15",
- "esbuild-darwin-arm64": "0.13.15",
- "esbuild-freebsd-64": "0.13.15",
- "esbuild-freebsd-arm64": "0.13.15",
- "esbuild-linux-32": "0.13.15",
- "esbuild-linux-64": "0.13.15",
- "esbuild-linux-arm": "0.13.15",
- "esbuild-linux-arm64": "0.13.15",
- "esbuild-linux-mips64le": "0.13.15",
- "esbuild-linux-ppc64le": "0.13.15",
- "esbuild-netbsd-64": "0.13.15",
- "esbuild-openbsd-64": "0.13.15",
- "esbuild-sunos-64": "0.13.15",
- "esbuild-windows-32": "0.13.15",
- "esbuild-windows-64": "0.13.15",
- "esbuild-windows-arm64": "0.13.15"
+ "esbuild-android-arm64": "0.14.21",
+ "esbuild-darwin-64": "0.14.21",
+ "esbuild-darwin-arm64": "0.14.21",
+ "esbuild-freebsd-64": "0.14.21",
+ "esbuild-freebsd-arm64": "0.14.21",
+ "esbuild-linux-32": "0.14.21",
+ "esbuild-linux-64": "0.14.21",
+ "esbuild-linux-arm": "0.14.21",
+ "esbuild-linux-arm64": "0.14.21",
+ "esbuild-linux-mips64le": "0.14.21",
+ "esbuild-linux-ppc64le": "0.14.21",
+ "esbuild-linux-riscv64": "0.14.21",
+ "esbuild-linux-s390x": "0.14.21",
+ "esbuild-netbsd-64": "0.14.21",
+ "esbuild-openbsd-64": "0.14.21",
+ "esbuild-sunos-64": "0.14.21",
+ "esbuild-windows-32": "0.14.21",
+ "esbuild-windows-64": "0.14.21",
+ "esbuild-windows-arm64": "0.14.21"
}
},
"esbuild-android-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz",
- "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.21.tgz",
+ "integrity": "sha512-Bqgld1TY0wZv8TqiQmVxQFgYzz8ZmyzT7clXBDZFkOOdRybzsnj8AZuK1pwcLVA7Ya6XncHgJqIao7NFd3s0RQ==",
"dev": true,
"optional": true
},
"esbuild-darwin-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz",
- "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.21.tgz",
+ "integrity": "sha512-j+Eg+e13djzyYINVvAbOo2/zvZ2DivuJJTaBrJnJHSD7kUNuGHRkHoSfFjbI80KHkn091w350wdmXDNSgRjfYQ==",
"dev": true,
"optional": true
},
"esbuild-darwin-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz",
- "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.21.tgz",
+ "integrity": "sha512-nDNTKWDPI0RuoPj5BhcSB2z5EmZJJAyRtZLIjyXSqSpAyoB8eyAKXl4lB8U2P78Fnh4Lh1le/fmpewXE04JhBQ==",
"dev": true,
"optional": true
},
"esbuild-freebsd-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz",
- "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.21.tgz",
+ "integrity": "sha512-zIurkCHXhxELiDZtLGiexi8t8onQc2LtuE+S7457H/pP0g0MLRKMrsn/IN4LDkNe6lvBjuoZZi2OfelOHn831g==",
"dev": true,
"optional": true
},
"esbuild-freebsd-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz",
- "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.21.tgz",
+ "integrity": "sha512-wdxMmkJfbwcN+q85MpeUEamVZ40FNsBa9mPq8tAszDn8TRT2HoJvVRADPIIBa9SWWwlDChIMjkDKAnS3KS/sPA==",
"dev": true,
"optional": true
},
"esbuild-linux-32": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz",
- "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.21.tgz",
+ "integrity": "sha512-fmxvyzOPPh2xiEHojpCeIQP6pXcoKsWbz3ryDDIKLOsk4xp3GbpHIEAWP0xTeuhEbendmvBDVKbAVv3PnODXLg==",
"dev": true,
"optional": true
},
"esbuild-linux-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz",
- "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.21.tgz",
+ "integrity": "sha512-edZyNOv1ql+kpmlzdqzzDjRQYls+tSyi4QFi+PdBhATJFUqHsnNELWA9vMSzAaInPOEaVUTA5Ml28XFChcy4DA==",
"dev": true,
"optional": true
},
"esbuild-linux-arm": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz",
- "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.21.tgz",
+ "integrity": "sha512-aSU5pUueK6afqmLQsbU+QcFBT62L+4G9hHMJDHWfxgid6hzhSmfRH9U/f+ymvxsSTr/HFRU4y7ox8ZyhlVl98w==",
"dev": true,
"optional": true
},
"esbuild-linux-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz",
- "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.21.tgz",
+ "integrity": "sha512-t5qxRkq4zdQC0zXpzSB2bTtfLgOvR0C6BXYaRE/6/k8/4SrkZcTZBeNu+xGvwCU4b5dU9ST9pwIWkK6T1grS8g==",
"dev": true,
"optional": true
},
"esbuild-linux-mips64le": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz",
- "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.21.tgz",
+ "integrity": "sha512-jLZLQGCNlUsmIHtGqNvBs3zN+7a4D9ckf0JZ+jQTwHdZJ1SgV9mAjbB980OFo66LoY+WeM7t3WEnq3FjI1zw4A==",
"dev": true,
"optional": true
},
"esbuild-linux-ppc64le": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz",
- "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.21.tgz",
+ "integrity": "sha512-4TWxpK391en2UBUw6GSrukToTDu6lL9vkm3Ll40HrI08WG3qcnJu7bl8e1+GzelDsiw1QmfAY/nNvJ6iaHRpCQ==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-riscv64": {
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.21.tgz",
+ "integrity": "sha512-fElngqOaOfTsF+u+oetDLHsPG74vB2ZaGZUqmGefAJn3a5z9Z2pNa4WpVbbKgHpaAAy5tWM1m1sbGohj6Ki6+Q==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-linux-s390x": {
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.21.tgz",
+ "integrity": "sha512-brleZ6R5fYv0qQ7ZBwenQmP6i9TdvJCB092c/3D3pTLQHBGHJb5zWgKxOeS7bdHzmLy6a6W7GbFk6QKpjyD6QA==",
"dev": true,
"optional": true
},
"esbuild-netbsd-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz",
- "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.21.tgz",
+ "integrity": "sha512-nCEgsLCQ8RoFWVV8pVI+kX66ICwbPP/M9vEa0NJGIEB/Vs5sVGMqkf67oln90XNSkbc0bPBDuo4G6FxlF7PN8g==",
"dev": true,
"optional": true
},
"esbuild-openbsd-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz",
- "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.21.tgz",
+ "integrity": "sha512-h9zLMyVD0T73MDTVYIb/qUTokwI6EJH9O6wESuTNq6+XpMSr6C5aYZ4fvFKdNELW+Xsod+yDS2hV2JTUAbFrLA==",
"dev": true,
"optional": true
},
"esbuild-sunos-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz",
- "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.21.tgz",
+ "integrity": "sha512-Kl+7Cot32qd9oqpLdB1tEGXEkjBlijrIxMJ0+vlDFaqsODutif25on0IZlFxEBtL2Gosd4p5WCV1U7UskNQfXA==",
"dev": true,
"optional": true
},
"esbuild-windows-32": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz",
- "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.21.tgz",
+ "integrity": "sha512-V7vnTq67xPBUCk/9UtlolmQ798Ecjdr1ZoI1vcSgw7M82aSSt0eZdP6bh5KAFZU8pxDcx3qoHyWQfHYr11f22A==",
"dev": true,
"optional": true
},
"esbuild-windows-64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz",
- "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.21.tgz",
+ "integrity": "sha512-kDgHjKOHwjfJDCyRGELzVxiP/RBJBTA+wyspf78MTTJQkyPuxH2vChReNdWc+dU2S4gIZFHMdP1Qrl/k22ZmaA==",
"dev": true,
"optional": true
},
"esbuild-windows-arm64": {
- "version": "0.13.15",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz",
- "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==",
+ "version": "0.14.21",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.21.tgz",
+ "integrity": "sha512-8Sbo0zpzgwWrwjQYLmHF78f7E2xg5Ve63bjB2ng3V2aManilnnTGaliq2snYg+NOX60+hEvJHRdVnuIAHW0lVw==",
"dev": true,
"optional": true
},
@@ -2772,9 +2712,9 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
@@ -2879,15 +2819,6 @@
"optional": true,
"peer": true
},
- "import-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz",
- "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==",
- "dev": true,
- "requires": {
- "import-from": "^3.0.0"
- }
- },
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -2898,23 +2829,6 @@
"resolve-from": "^4.0.0"
}
},
- "import-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz",
- "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==",
- "dev": true,
- "requires": {
- "resolve-from": "^5.0.0"
- },
- "dependencies": {
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- }
- }
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -2947,9 +2861,9 @@
}
},
"is-core-module": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
- "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -3006,36 +2920,6 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
- "lodash.castarray": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
- "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=",
- "dev": true
- },
- "lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
- "dev": true
- },
- "lodash.merge": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
- "dev": true
- },
- "lz-string": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
- "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=",
- "dev": true
- },
"magic-string": {
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
@@ -3109,19 +2993,10 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "n4s": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/n4s/-/n4s-4.0.1.tgz",
- "integrity": "sha512-S3/8mLYORi1SjgUflavLmZg/d3r0K7t+G9LsYdE3zPIILKX2A8nXpdUTauOBk6ayUUhJD0zQEtfJY+qNsYysBw==",
- "dev": true,
- "requires": {
- "context": "^2.0.1"
- }
- },
"nanoid": {
- "version": "3.1.30",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz",
- "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
+ "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
"dev": true
},
"node-releases": {
@@ -3209,34 +3084,32 @@
"dev": true
},
"postcss": {
- "version": "8.4.5",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
- "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
+ "version": "8.4.6",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz",
+ "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==",
"dev": true,
"requires": {
- "nanoid": "^3.1.30",
+ "nanoid": "^3.2.0",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.1"
+ "source-map-js": "^1.0.2"
}
},
"postcss-js": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz",
- "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+ "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
"dev": true,
"requires": {
- "camelcase-css": "^2.0.1",
- "postcss": "^8.1.6"
+ "camelcase-css": "^2.0.1"
}
},
"postcss-load-config": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz",
- "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz",
+ "integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==",
"dev": true,
"requires": {
- "import-cwd": "^3.0.0",
- "lilconfig": "^2.0.3",
+ "lilconfig": "^2.0.4",
"yaml": "^1.10.2"
}
},
@@ -3250,9 +3123,9 @@
}
},
"postcss-selector-parser": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz",
- "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz",
+ "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==",
"dev": true,
"requires": {
"cssesc": "^3.0.0",
@@ -3292,20 +3165,15 @@
"integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==",
"dev": true
},
- "require-relative": {
- "version": "0.8.7",
- "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
- "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
- "dev": true
- },
"resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
"dev": true,
"requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
}
},
"resolve-from": {
@@ -3400,9 +3268,9 @@
"dev": true
},
"source-map-js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz",
- "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==",
+ "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
},
"sourcemap-codec": {
@@ -3429,35 +3297,35 @@
"has-flag": "^4.0.0"
}
},
+ "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
+ },
"svelte": {
- "version": "3.44.3",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.44.3.tgz",
- "integrity": "sha512-aGgrNCip5PQFNfq9e9tmm7EYxWLVHoFsEsmKrtOeRD8dmoGDdyTQ+21xd7qgFd8MNdKGSYvg7F9dr+Tc0yDymg==",
+ "version": "3.46.4",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.46.4.tgz",
+ "integrity": "sha512-qKJzw6DpA33CIa+C/rGp4AUdSfii0DOTCzj/2YpSKKayw5WGSS624Et9L1nU1k2OVRS9vaENQXp2CVZNU+xvIg==",
"dev": true
},
"svelte-check": {
- "version": "2.2.11",
- "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.2.11.tgz",
- "integrity": "sha512-clotPGGZPj3LuS9qP1lk+Wwnsj+js42ehCPmHk+qtyaQh/dU95e0qkpPmtmOMYHN6My5Y75XqeN1QNLj5V5gwA==",
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.4.3.tgz",
+ "integrity": "sha512-0zJMMgqYHoP7QEG3tfc5DekpHAOqoy4QOL8scWMSdHIpVVDVC0MuYK57nFyj3XVTW8Zfm85FlgnAdQYsVmST2Q==",
"dev": true,
"requires": {
- "chalk": "^4.0.0",
"chokidar": "^3.4.1",
"fast-glob": "^3.2.7",
"import-fresh": "^3.2.1",
"minimist": "^1.2.5",
+ "picocolors": "^1.0.0",
"sade": "^1.7.4",
"source-map": "^0.7.3",
"svelte-preprocess": "^4.0.0",
"typescript": "*"
}
},
- "svelte-fsm": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/svelte-fsm/-/svelte-fsm-1.1.2.tgz",
- "integrity": "sha512-lGeuhELDkQC5WK4+MHJtdigXCqwsYMR1euyRTacDCwtbORzEy5ovivTY3Mnd5bM7H+huO3nKjNjdPvDLcLn3pQ==",
- "dev": true
- },
"svelte-hmr": {
"version": "0.14.9",
"resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.9.tgz",
@@ -3488,39 +3356,33 @@
"regexparam": "2.0.0"
}
},
- "svelte-tiny-virtual-list": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/svelte-tiny-virtual-list/-/svelte-tiny-virtual-list-1.1.7.tgz",
- "integrity": "sha512-8314cmLXOVqIQwSc3NFu8yGU7BdHEJeixrwFirmnMoWl6YNcCq5jVjCKjE3tDNJfUenz1LN5M5YshPt6GcPuww==",
- "dev": true
- },
"tailwindcss": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.8.tgz",
- "integrity": "sha512-Yww1eRYO1AxITJmW/KduZPxNvYdHuedeKwPju9Oakp7MdiixRi5xkpLhirsc81QCxHL0eoce6qKmxXwYGt4Cjw==",
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.22.tgz",
+ "integrity": "sha512-F8lt74RlNZirnkaSk310+vGQta7c0/hgx7/bqxruM4wS9lp8oqV93lzavajC3VT0Lp4UUtUVIt8ifKcmGzkr0A==",
"dev": true,
"requires": {
"arg": "^5.0.1",
"chalk": "^4.1.2",
- "chokidar": "^3.5.2",
+ "chokidar": "^3.5.3",
"color-name": "^1.1.4",
"cosmiconfig": "^7.0.1",
"detective": "^5.2.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.2.7",
+ "fast-glob": "^3.2.11",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"normalize-path": "^3.0.0",
"object-hash": "^2.2.0",
- "postcss-js": "^3.0.3",
+ "postcss": "^8.4.6",
+ "postcss-js": "^4.0.0",
"postcss-load-config": "^3.1.0",
"postcss-nested": "5.0.6",
- "postcss-selector-parser": "^6.0.7",
+ "postcss-selector-parser": "^6.0.9",
"postcss-value-parser": "^4.2.0",
"quick-lru": "^5.1.1",
- "resolve": "^1.20.0",
- "tmp": "^0.2.1"
+ "resolve": "^1.22.0"
},
"dependencies": {
"glob-parent": {
@@ -3534,26 +3396,6 @@
}
}
},
- "tmp": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
- "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
- "dev": true,
- "requires": {
- "rimraf": "^3.0.0"
- },
- "dependencies": {
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -3563,16 +3405,10 @@
"is-number": "^7.0.0"
}
},
- "tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
- "dev": true
- },
"typescript": {
- "version": "4.5.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
- "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
+ "version": "4.5.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz",
+ "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==",
"dev": true
},
"util-deprecate": {
@@ -3587,26 +3423,16 @@
"integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==",
"dev": true
},
- "vest": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/vest/-/vest-4.0.1.tgz",
- "integrity": "sha512-J1WJeMVyyjzkQ4uiLxDoIBiiW44FxAl/Z2znNxTQlwPQe7Ys/VDjbEJV1GnErB9oCr0O1tUc5JbwXh8/eQlfzA==",
- "dev": true,
- "requires": {
- "context": "^2.0.1",
- "n4s": "^4.0.1"
- }
- },
"vite": {
- "version": "2.7.10",
- "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.10.tgz",
- "integrity": "sha512-KEY96ntXUid1/xJihJbgmLZx7QSC2D4Tui0FdS0Old5OokYzFclcofhtxtjDdGOk/fFpPbHv9yw88+rB93Tb8w==",
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.1.tgz",
+ "integrity": "sha512-Typ8qjUnW0p53gBsJpisrKcZlEbUPZATja9BG6Z09QZjg9YrnEn/htkr/VH4WhnH7eNUQeSD+wKI1lHzQRWskw==",
"dev": true,
"requires": {
- "esbuild": "^0.13.12",
+ "esbuild": "^0.14.14",
"fsevents": "~2.3.2",
- "postcss": "^8.4.5",
- "resolve": "^1.20.0",
+ "postcss": "^8.4.6",
+ "resolve": "^1.22.0",
"rollup": "^2.59.0"
}
},
diff --git a/src/webapp/package.json b/src/webapp/package.json
index 138c6ec..f33585c 100644
--- a/src/webapp/package.json
+++ b/src/webapp/package.json
@@ -10,18 +10,17 @@
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.37",
+ "@tailwindcss/forms": "^0.4.0",
"@tsconfig/svelte": "^3.0.0",
- "carbon-components": "^10.52.0",
- "carbon-components-svelte": "^0.58.0",
- "carbon-icons-svelte": "^10.44.4",
- "carbon-preprocess-svelte": "^0.6.0",
- "lz-string": "^1.4.4",
+ "@types/validator": "^13.7.1",
+ "autoprefixer": "^10.4.2",
+ "postcss": "^8.4.5",
+ "postcss-load-config": "^3.1.1",
"svelte": "^3.46.4",
"svelte-check": "^2.4.3",
- "svelte-fsm": "^1.1.2",
- "svelte-preprocess": "^4.10.3",
+ "svelte-preprocess": "^4.10.1",
"svelte-spa-router": "^3.2.0",
- "tslib": "^2.3.1",
+ "tailwindcss": "^3.0.12",
"typescript": "^4.5.5",
"validator": "^13.7.0",
"vite": "^2.8.1"
diff --git a/src/webapp/pnpm-lock.yaml b/src/webapp/pnpm-lock.yaml
index c983ca4..df99ee5 100644
--- a/src/webapp/pnpm-lock.yaml
+++ b/src/webapp/pnpm-lock.yaml
@@ -2,36 +2,32 @@ lockfileVersion: 5.3
specifiers:
'@sveltejs/vite-plugin-svelte': ^1.0.0-next.37
+ '@tailwindcss/forms': ^0.4.0
'@tsconfig/svelte': ^3.0.0
- carbon-components: ^10.52.0
- carbon-components-svelte: ^0.58.0
- carbon-icons-svelte: ^10.44.4
- carbon-preprocess-svelte: ^0.6.0
- lz-string: ^1.4.4
+ '@types/validator': ^13.7.1
+ autoprefixer: ^10.4.2
+ postcss: ^8.4.6
svelte: ^3.46.4
svelte-check: ^2.4.3
- svelte-fsm: ^1.1.2
svelte-preprocess: ^4.10.3
svelte-spa-router: ^3.2.0
- tslib: ^2.3.1
+ tailwindcss: ^3.0.22
typescript: ^4.5.5
validator: ^13.7.0
vite: ^2.8.1
devDependencies:
'@sveltejs/vite-plugin-svelte': 1.0.0-next.37_svelte@3.46.4+vite@2.8.1
+ '@tailwindcss/forms': 0.4.0_tailwindcss@3.0.22
'@tsconfig/svelte': 3.0.0
- carbon-components: 10.52.0
- carbon-components-svelte: 0.58.0
- carbon-icons-svelte: 10.44.4
- carbon-preprocess-svelte: 0.6.0_svelte@3.46.4
- lz-string: 1.4.4
+ '@types/validator': 13.7.1
+ autoprefixer: 10.4.2_postcss@8.4.6
+ postcss: 8.4.6
svelte: 3.46.4
- svelte-check: 2.4.3_svelte@3.46.4
- svelte-fsm: 1.1.2
- svelte-preprocess: 4.10.3_svelte@3.46.4+typescript@4.5.5
+ svelte-check: 2.4.3_postcss@8.4.6+svelte@3.46.4
+ svelte-preprocess: 4.10.3_88b359da5cac6d8f6ee1bbb7080a3fa9
svelte-spa-router: 3.2.0
- tslib: 2.3.1
+ tailwindcss: 3.0.22_autoprefixer@10.4.2
typescript: 4.5.5
validator: 13.7.0
vite: 2.8.1
@@ -45,52 +41,6 @@ packages:
'@babel/highlight': 7.16.10
dev: true
- /@babel/generator/7.17.0:
- resolution: {integrity: sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.17.0
- jsesc: 2.5.2
- source-map: 0.5.7
- dev: true
-
- /@babel/helper-environment-visitor/7.16.7:
- resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.17.0
- dev: true
-
- /@babel/helper-function-name/7.16.7:
- resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-get-function-arity': 7.16.7
- '@babel/template': 7.16.7
- '@babel/types': 7.17.0
- dev: true
-
- /@babel/helper-get-function-arity/7.16.7:
- resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.17.0
- dev: true
-
- /@babel/helper-hoist-variables/7.16.7:
- resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.17.0
- dev: true
-
- /@babel/helper-split-export-declaration/7.16.7:
- resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/types': 7.17.0
- dev: true
-
/@babel/helper-validator-identifier/7.16.7:
resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==}
engines: {node: '>=6.9.0'}
@@ -105,73 +55,6 @@ packages:
js-tokens: 4.0.0
dev: true
- /@babel/parser/7.17.0:
- resolution: {integrity: sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==}
- engines: {node: '>=6.0.0'}
- hasBin: true
- dev: true
-
- /@babel/template/7.16.7:
- resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.16.7
- '@babel/parser': 7.17.0
- '@babel/types': 7.17.0
- dev: true
-
- /@babel/traverse/7.17.0:
- resolution: {integrity: sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.16.7
- '@babel/generator': 7.17.0
- '@babel/helper-environment-visitor': 7.16.7
- '@babel/helper-function-name': 7.16.7
- '@babel/helper-hoist-variables': 7.16.7
- '@babel/helper-split-export-declaration': 7.16.7
- '@babel/parser': 7.17.0
- '@babel/types': 7.17.0
- debug: 4.3.3
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@babel/types/7.17.0:
- resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/helper-validator-identifier': 7.16.7
- to-fast-properties: 2.0.0
- dev: true
-
- /@carbon/telemetry/0.0.0-alpha.6:
- resolution: {integrity: sha512-DCE8ui/tFi+qvCH+mewbUbWzsiq5Ko3HU1lgrVbpjWv1LfswLKFmMg4Os+PmX6edYoBj39qVChJPeaN/UyfJDw==}
- hasBin: true
- dependencies:
- '@babel/parser': 7.17.0
- '@babel/traverse': 7.17.0
- ci-info: 2.0.0
- configstore: 5.0.1
- fast-glob: 3.2.11
- fs-extra: 9.1.0
- got: 11.8.3
- semver: 7.3.5
- winston: 3.5.1
- yargs: 16.2.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@dabh/diagnostics/2.0.2:
- resolution: {integrity: sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==}
- dependencies:
- colorspace: 1.1.4
- enabled: 2.0.0
- kuler: 2.0.0
- dev: true
-
/@nodelib/fs.scandir/2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -201,11 +84,6 @@ packages:
picomatch: 2.3.1
dev: true
- /@sindresorhus/is/4.4.0:
- resolution: {integrity: sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==}
- engines: {node: '>=10'}
- dev: true
-
/@sveltejs/vite-plugin-svelte/1.0.0-next.37_svelte@3.46.4+vite@2.8.1:
resolution: {integrity: sha512-EdSXw2rXeOahNrQfMJVZxa/NxZxW1a0TiBI3s+pVxnxU14hEQtnkLtdbTFhnceu22gJpNPFSIJRcIwRBBDQIeA==}
engines: {node: ^14.13.1 || >= 16}
@@ -228,59 +106,58 @@ packages:
- supports-color
dev: true
- /@szmarczak/http-timer/4.0.6:
- resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
- engines: {node: '>=10'}
+ /@tailwindcss/forms/0.4.0_tailwindcss@3.0.22:
+ resolution: {integrity: sha512-DeaQBx6EgEeuZPQACvC+mKneJsD8am1uiJugjgQK1+/Vt+Ai0GpFBC2T2fqnUad71WgOxyrZPE6BG1VaI6YqfQ==}
+ peerDependencies:
+ tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
dependencies:
- defer-to-connect: 2.0.1
+ mini-svg-data-uri: 1.4.3
+ tailwindcss: 3.0.22_autoprefixer@10.4.2
dev: true
/@tsconfig/svelte/3.0.0:
resolution: {integrity: sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==}
dev: true
- /@types/cacheable-request/6.0.2:
- resolution: {integrity: sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==}
- dependencies:
- '@types/http-cache-semantics': 4.0.1
- '@types/keyv': 3.1.3
- '@types/node': 17.0.17
- '@types/responselike': 1.0.0
- dev: true
-
- /@types/http-cache-semantics/4.0.1:
- resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
- dev: true
-
- /@types/keyv/3.1.3:
- resolution: {integrity: sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==}
- dependencies:
- '@types/node': 17.0.17
- dev: true
-
/@types/node/17.0.17:
resolution: {integrity: sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==}
dev: true
+ /@types/parse-json/4.0.0:
+ resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
+ dev: true
+
/@types/pug/2.0.6:
resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
dev: true
- /@types/responselike/1.0.0:
- resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
+ /@types/sass/1.43.1:
+ resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
dependencies:
'@types/node': 17.0.17
dev: true
- /@types/sass/1.43.1:
- resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
+ /@types/validator/13.7.1:
+ resolution: {integrity: sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==}
+ dev: true
+
+ /acorn-node/1.8.2:
+ resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
dependencies:
- '@types/node': 17.0.17
+ acorn: 7.4.1
+ acorn-walk: 7.2.0
+ xtend: 4.0.2
dev: true
- /ansi-regex/5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
+ /acorn-walk/7.2.0:
+ resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
+ /acorn/7.4.1:
+ resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
dev: true
/ansi-styles/3.2.1:
@@ -305,13 +182,24 @@ packages:
picomatch: 2.3.1
dev: true
- /async/3.2.3:
- resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==}
+ /arg/5.0.1:
+ resolution: {integrity: sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==}
dev: true
- /at-least-node/1.0.0:
- resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
- engines: {node: '>= 4.0.0'}
+ /autoprefixer/10.4.2_postcss@8.4.6:
+ resolution: {integrity: sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+ dependencies:
+ browserslist: 4.19.1
+ caniuse-lite: 1.0.30001311
+ fraction.js: 4.1.3
+ normalize-range: 0.1.2
+ picocolors: 1.0.0
+ postcss: 8.4.6
+ postcss-value-parser: 4.2.0
dev: true
/balanced-match/1.0.2:
@@ -337,26 +225,20 @@ packages:
fill-range: 7.0.1
dev: true
- /buffer-crc32/0.2.13:
- resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=}
- dev: true
-
- /cacheable-lookup/5.0.4:
- resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
- engines: {node: '>=10.6.0'}
+ /browserslist/4.19.1:
+ resolution: {integrity: sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001311
+ electron-to-chromium: 1.4.68
+ escalade: 3.1.1
+ node-releases: 2.0.2
+ picocolors: 1.0.0
dev: true
- /cacheable-request/7.0.2:
- resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==}
- engines: {node: '>=8'}
- dependencies:
- clone-response: 1.0.2
- get-stream: 5.2.0
- http-cache-semantics: 4.1.0
- keyv: 4.1.1
- lowercase-keys: 2.0.0
- normalize-url: 6.1.0
- responselike: 2.0.0
+ /buffer-crc32/0.2.13:
+ resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=}
dev: true
/callsites/3.1.0:
@@ -364,46 +246,13 @@ packages:
engines: {node: '>=6'}
dev: true
- /carbon-components-svelte/0.58.0:
- resolution: {integrity: sha512-I2OA9kn7FzidynFFLSvfmixQRqkLqa+qjnKMgCdonSD59zNVUB4bBOgSxaEujeAUJphrL6Hjm9kpm9EQRjX96A==}
- dependencies:
- flatpickr: 4.6.9
- dev: true
-
- /carbon-components/10.52.0:
- resolution: {integrity: sha512-itiG52GdDGxGh4IyuIV7gsuQCE1LLD2FCTEp5bPGhF/Onn042QzGendjl+yE7kfUk3FVlWmHN216dh/mA2sdZg==}
- requiresBuild: true
- dependencies:
- '@carbon/telemetry': 0.0.0-alpha.6
- flatpickr: 4.6.1
- lodash.debounce: 4.0.8
- warning: 3.0.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /carbon-icons-svelte/10.44.4:
- resolution: {integrity: sha512-KsqXj0tYFF4S9b4mDSyt3Ovo0TA6QQ6nW0XRoY7D7EahM6hGluz0CdMw3wp/lbAUItTlTfYk+aPpiCKvpbTIyA==}
+ /camelcase-css/2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
dev: true
- /carbon-preprocess-svelte/0.6.0_svelte@3.46.4:
- resolution: {integrity: sha512-z/SOcB1jqrodshM87YPWdTcLdQzCKKLiWueM4RPfTIz9EIo7DgJSn0gbnVtEOk8Vy/xOZ0EnnAu5fY8ualzngQ==}
- dependencies:
- purgecss: 4.1.3
- svelte-preprocess: 4.10.3_svelte@3.46.4+typescript@4.5.5
- typescript: 4.5.5
- transitivePeerDependencies:
- - '@babel/core'
- - coffeescript
- - less
- - node-sass
- - postcss
- - postcss-load-config
- - pug
- - sass
- - stylus
- - sugarss
- - svelte
+ /caniuse-lite/1.0.30001311:
+ resolution: {integrity: sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A==}
dev: true
/chalk/2.4.2:
@@ -415,6 +264,14 @@ packages:
supports-color: 5.5.0
dev: true
+ /chalk/4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
/chokidar/3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
@@ -430,24 +287,6 @@ packages:
fsevents: 2.3.2
dev: true
- /ci-info/2.0.0:
- resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
- dev: true
-
- /cliui/7.0.4:
- resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
- dependencies:
- string-width: 4.2.3
- strip-ansi: 6.0.1
- wrap-ansi: 7.0.0
- dev: true
-
- /clone-response/1.0.2:
- resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=}
- dependencies:
- mimic-response: 1.0.1
- dev: true
-
/color-convert/1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
@@ -469,56 +308,19 @@ packages:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: true
- /color-string/1.9.0:
- resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==}
- dependencies:
- color-name: 1.1.4
- simple-swizzle: 0.2.2
- dev: true
-
- /color/3.2.1:
- resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
- dependencies:
- color-convert: 1.9.3
- color-string: 1.9.0
- dev: true
-
- /colors/1.4.0:
- resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==}
- engines: {node: '>=0.1.90'}
- dev: true
-
- /colorspace/1.1.4:
- resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==}
- dependencies:
- color: 3.2.1
- text-hex: 1.0.0
- dev: true
-
- /commander/8.3.0:
- resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
- engines: {node: '>= 12'}
- dev: true
-
/concat-map/0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: true
- /configstore/5.0.1:
- resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
- engines: {node: '>=8'}
+ /cosmiconfig/7.0.1:
+ resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==}
+ engines: {node: '>=10'}
dependencies:
- dot-prop: 5.3.0
- graceful-fs: 4.2.9
- make-dir: 3.1.0
- unique-string: 2.0.0
- write-file-atomic: 3.0.3
- xdg-basedir: 4.0.0
- dev: true
-
- /crypto-random-string/2.0.0:
- resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
- engines: {node: '>=8'}
+ '@types/parse-json': 4.0.0
+ import-fresh: 3.3.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ yaml: 1.10.2
dev: true
/cssesc/3.0.0:
@@ -539,16 +341,8 @@ packages:
ms: 2.1.2
dev: true
- /decompress-response/6.0.0:
- resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
- engines: {node: '>=10'}
- dependencies:
- mimic-response: 3.1.0
- dev: true
-
- /defer-to-connect/2.0.1:
- resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
- engines: {node: '>=10'}
+ /defined/1.0.0:
+ resolution: {integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=}
dev: true
/detect-indent/6.1.0:
@@ -556,25 +350,32 @@ packages:
engines: {node: '>=8'}
dev: true
- /dot-prop/5.3.0:
- resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
- engines: {node: '>=8'}
+ /detective/5.2.0:
+ resolution: {integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
dependencies:
- is-obj: 2.0.0
+ acorn-node: 1.8.2
+ defined: 1.0.0
+ minimist: 1.2.5
+ dev: true
+
+ /didyoumean/1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: true
- /emoji-regex/8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ /dlv/1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dev: true
- /enabled/2.0.0:
- resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==}
+ /electron-to-chromium/1.4.68:
+ resolution: {integrity: sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==}
dev: true
- /end-of-stream/1.4.4:
- resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ /error-ex/1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
dependencies:
- once: 1.4.0
+ is-arrayish: 0.2.1
dev: true
/es6-promise/3.3.1:
@@ -810,10 +611,6 @@ packages:
reusify: 1.0.4
dev: true
- /fecha/4.2.1:
- resolution: {integrity: sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==}
- dev: true
-
/fill-range/7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
@@ -821,26 +618,8 @@ packages:
to-regex-range: 5.0.1
dev: true
- /flatpickr/4.6.1:
- resolution: {integrity: sha512-3ULSxbXmcMIRzer/2jLNweoqHpwDvsjEawO2FUd9UFR8uPwLM+LruZcPDpuZStcEgbQKhuFOfXo4nYdGladSNw==}
- dev: true
-
- /flatpickr/4.6.9:
- resolution: {integrity: sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==}
- dev: true
-
- /fn.name/1.1.0:
- resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
- dev: true
-
- /fs-extra/9.1.0:
- resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
- engines: {node: '>=10'}
- dependencies:
- at-least-node: 1.0.0
- graceful-fs: 4.2.9
- jsonfile: 6.1.0
- universalify: 2.0.0
+ /fraction.js/4.1.3:
+ resolution: {integrity: sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==}
dev: true
/fs.realpath/1.0.0:
@@ -859,18 +638,6 @@ packages:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: true
- /get-caller-file/2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
- dev: true
-
- /get-stream/5.2.0:
- resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
- engines: {node: '>=8'}
- dependencies:
- pump: 3.0.0
- dev: true
-
/glob-parent/5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -878,6 +645,13 @@ packages:
is-glob: 4.0.3
dev: true
+ /glob-parent/6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
/glob/7.2.0:
resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==}
dependencies:
@@ -889,28 +663,6 @@ packages:
path-is-absolute: 1.0.1
dev: true
- /globals/11.12.0:
- resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
- engines: {node: '>=4'}
- dev: true
-
- /got/11.8.3:
- resolution: {integrity: sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==}
- engines: {node: '>=10.19.0'}
- dependencies:
- '@sindresorhus/is': 4.4.0
- '@szmarczak/http-timer': 4.0.6
- '@types/cacheable-request': 6.0.2
- '@types/responselike': 1.0.0
- cacheable-lookup: 5.0.4
- cacheable-request: 7.0.2
- decompress-response: 6.0.0
- http2-wrapper: 1.0.3
- lowercase-keys: 2.0.0
- p-cancelable: 2.1.1
- responselike: 2.0.0
- dev: true
-
/graceful-fs/4.2.9:
resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==}
dev: true
@@ -920,6 +672,11 @@ packages:
engines: {node: '>=4'}
dev: true
+ /has-flag/4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
/has/1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
@@ -927,18 +684,6 @@ packages:
function-bind: 1.1.1
dev: true
- /http-cache-semantics/4.1.0:
- resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==}
- dev: true
-
- /http2-wrapper/1.0.3:
- resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
- engines: {node: '>=10.19.0'}
- dependencies:
- quick-lru: 5.1.1
- resolve-alpn: 1.2.1
- dev: true
-
/import-fresh/3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@@ -947,11 +692,6 @@ packages:
resolve-from: 4.0.0
dev: true
- /imurmurhash/0.1.4:
- resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
- engines: {node: '>=0.8.19'}
- dev: true
-
/inflight/1.0.6:
resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
dependencies:
@@ -963,8 +703,8 @@ packages:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true
- /is-arrayish/0.3.2:
- resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+ /is-arrayish/0.2.1:
+ resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=}
dev: true
/is-binary-path/2.1.0:
@@ -985,11 +725,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /is-fullwidth-code-point/3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
- dev: true
-
/is-glob/4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -1002,46 +737,12 @@ packages:
engines: {node: '>=0.12.0'}
dev: true
- /is-obj/2.0.0:
- resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
- engines: {node: '>=8'}
- dev: true
-
- /is-stream/2.0.1:
- resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
- engines: {node: '>=8'}
- dev: true
-
- /is-typedarray/1.0.0:
- resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=}
- dev: true
-
/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
- /jsesc/2.5.2:
- resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
- engines: {node: '>=4'}
- hasBin: true
- dev: true
-
- /json-buffer/3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
- dev: true
-
- /jsonfile/6.1.0:
- resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
- dependencies:
- universalify: 2.0.0
- optionalDependencies:
- graceful-fs: 4.2.9
- dev: true
-
- /keyv/4.1.1:
- resolution: {integrity: sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ==}
- dependencies:
- json-buffer: 3.0.1
+ /json-parse-even-better-errors/2.3.1:
+ resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
dev: true
/kleur/4.1.4:
@@ -1049,46 +750,13 @@ packages:
engines: {node: '>=6'}
dev: true
- /kuler/2.0.0:
- resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
- dev: true
-
- /lodash.debounce/4.0.8:
- resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=}
- dev: true
-
- /logform/2.3.2:
- resolution: {integrity: sha512-V6JiPThZzTsbVRspNO6TmHkR99oqYTs8fivMBYQkjZj6rxW92KxtDCPE6IkAk1DNBnYKNkjm4jYBm6JDUcyhOA==}
- dependencies:
- colors: 1.4.0
- fecha: 4.2.1
- ms: 2.1.3
- safe-stable-stringify: 1.1.1
- triple-beam: 1.3.0
- dev: true
-
- /loose-envify/1.4.0:
- resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
- hasBin: true
- dependencies:
- js-tokens: 4.0.0
- dev: true
-
- /lowercase-keys/2.0.0:
- resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
- engines: {node: '>=8'}
- dev: true
-
- /lru-cache/6.0.0:
- resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ /lilconfig/2.0.4:
+ resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==}
engines: {node: '>=10'}
- dependencies:
- yallist: 4.0.0
dev: true
- /lz-string/1.4.4:
- resolution: {integrity: sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=}
- hasBin: true
+ /lines-and-columns/1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
dev: true
/magic-string/0.25.7:
@@ -1097,13 +765,6 @@ packages:
sourcemap-codec: 1.4.8
dev: true
- /make-dir/3.1.0:
- resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
- engines: {node: '>=8'}
- dependencies:
- semver: 6.3.0
- dev: true
-
/merge2/1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
@@ -1117,21 +778,16 @@ packages:
picomatch: 2.3.1
dev: true
- /mimic-response/1.0.1:
- resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
- engines: {node: '>=4'}
- dev: true
-
- /mimic-response/3.1.0:
- resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
- engines: {node: '>=10'}
- dev: true
-
/min-indent/1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
engines: {node: '>=4'}
dev: true
+ /mini-svg-data-uri/1.4.3:
+ resolution: {integrity: sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==}
+ hasBin: true
+ dev: true
+
/minimatch/3.0.5:
resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==}
dependencies:
@@ -1158,24 +814,29 @@ packages:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: true
- /ms/2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- dev: true
-
/nanoid/3.2.0:
resolution: {integrity: sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: true
+ /node-releases/2.0.2:
+ resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==}
+ dev: true
+
/normalize-path/3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
dev: true
- /normalize-url/6.1.0:
- resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
- engines: {node: '>=10'}
+ /normalize-range/0.1.2:
+ resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /object-hash/2.2.0:
+ resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
+ engines: {node: '>= 6'}
dev: true
/once/1.4.0:
@@ -1184,17 +845,6 @@ packages:
wrappy: 1.0.2
dev: true
- /one-time/1.0.0:
- resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==}
- dependencies:
- fn.name: 1.1.0
- dev: true
-
- /p-cancelable/2.1.1:
- resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
- engines: {node: '>=8'}
- dev: true
-
/parent-module/1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
@@ -1202,6 +852,16 @@ packages:
callsites: 3.1.0
dev: true
+ /parse-json/5.2.0:
+ resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@babel/code-frame': 7.16.7
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 2.3.1
+ lines-and-columns: 1.2.4
+ dev: true
+
/path-is-absolute/1.0.1:
resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
engines: {node: '>=0.10.0'}
@@ -1211,6 +871,11 @@ packages:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
+ /path-type/4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: true
+
/picocolors/1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
dev: true
@@ -1220,6 +885,39 @@ packages:
engines: {node: '>=8.6'}
dev: true
+ /postcss-js/4.0.0_postcss@8.4.6:
+ resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.3.3
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.4.6
+ dev: true
+
+ /postcss-load-config/3.1.3:
+ resolution: {integrity: sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ ts-node:
+ optional: true
+ dependencies:
+ lilconfig: 2.0.4
+ yaml: 1.10.2
+ dev: true
+
+ /postcss-nested/5.0.6_postcss@8.4.6:
+ resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+ dependencies:
+ postcss: 8.4.6
+ postcss-selector-parser: 6.0.9
+ dev: true
+
/postcss-selector-parser/6.0.9:
resolution: {integrity: sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==}
engines: {node: '>=4'}
@@ -1228,6 +926,10 @@ packages:
util-deprecate: 1.0.2
dev: true
+ /postcss-value-parser/4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+ dev: true
+
/postcss/8.4.6:
resolution: {integrity: sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==}
engines: {node: ^10 || ^12 || >=14}
@@ -1237,23 +939,6 @@ packages:
source-map-js: 1.0.2
dev: true
- /pump/3.0.0:
- resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
- dependencies:
- end-of-stream: 1.4.4
- once: 1.4.0
- dev: true
-
- /purgecss/4.1.3:
- resolution: {integrity: sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==}
- hasBin: true
- dependencies:
- commander: 8.3.0
- glob: 7.2.0
- postcss: 8.4.6
- postcss-selector-parser: 6.0.9
- dev: true
-
/queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
@@ -1263,15 +948,6 @@ packages:
engines: {node: '>=10'}
dev: true
- /readable-stream/3.6.0:
- resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
- engines: {node: '>= 6'}
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
- dev: true
-
/readdirp/3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@@ -1284,15 +960,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /require-directory/2.1.1:
- resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=}
- engines: {node: '>=0.10.0'}
- dev: true
-
- /resolve-alpn/1.2.1:
- resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
- dev: true
-
/resolve-from/4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -1307,12 +974,6 @@ packages:
supports-preserve-symlinks-flag: 1.0.0
dev: true
- /responselike/2.0.0:
- resolution: {integrity: sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==}
- dependencies:
- lowercase-keys: 2.0.0
- dev: true
-
/reusify/1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -1346,19 +1007,6 @@ packages:
mri: 1.2.0
dev: true
- /safe-buffer/5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- dev: true
-
- /safe-stable-stringify/1.1.1:
- resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==}
- dev: true
-
- /safe-stable-stringify/2.3.1:
- resolution: {integrity: sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==}
- engines: {node: '>=10'}
- dev: true
-
/sander/0.5.1:
resolution: {integrity: sha1-dB4kXiMfB8r7b98PEzrfohalAq0=}
dependencies:
@@ -1368,29 +1016,6 @@ packages:
rimraf: 2.7.1
dev: true
- /semver/6.3.0:
- resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
- hasBin: true
- dev: true
-
- /semver/7.3.5:
- resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==}
- engines: {node: '>=10'}
- hasBin: true
- dependencies:
- lru-cache: 6.0.0
- dev: true
-
- /signal-exit/3.0.7:
- resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
- dev: true
-
- /simple-swizzle/0.2.2:
- resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=}
- dependencies:
- is-arrayish: 0.3.2
- dev: true
-
/sorcery/0.10.0:
resolution: {integrity: sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=}
hasBin: true
@@ -1406,11 +1031,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /source-map/0.5.7:
- resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=}
- engines: {node: '>=0.10.0'}
- dev: true
-
/source-map/0.7.3:
resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==}
engines: {node: '>= 8'}
@@ -1420,32 +1040,6 @@ packages:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
dev: true
- /stack-trace/0.0.10:
- resolution: {integrity: sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=}
- dev: true
-
- /string-width/4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
- dev: true
-
- /string_decoder/1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
- dependencies:
- safe-buffer: 5.2.1
- dev: true
-
- /strip-ansi/6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
- dependencies:
- ansi-regex: 5.0.1
- dev: true
-
/strip-indent/3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
engines: {node: '>=8'}
@@ -1460,12 +1054,19 @@ packages:
has-flag: 3.0.0
dev: true
+ /supports-color/7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
dev: true
- /svelte-check/2.4.3_svelte@3.46.4:
+ /svelte-check/2.4.3_postcss@8.4.6+svelte@3.46.4:
resolution: {integrity: sha512-0zJMMgqYHoP7QEG3tfc5DekpHAOqoy4QOL8scWMSdHIpVVDVC0MuYK57nFyj3XVTW8Zfm85FlgnAdQYsVmST2Q==}
hasBin: true
peerDependencies:
@@ -1479,7 +1080,7 @@ packages:
sade: 1.8.1
source-map: 0.7.3
svelte: 3.46.4
- svelte-preprocess: 4.10.3_svelte@3.46.4+typescript@4.5.5
+ svelte-preprocess: 4.10.3_88b359da5cac6d8f6ee1bbb7080a3fa9
typescript: 4.5.5
transitivePeerDependencies:
- '@babel/core'
@@ -1494,11 +1095,6 @@ packages:
- sugarss
dev: true
- /svelte-fsm/1.1.2:
- resolution: {integrity: sha512-lGeuhELDkQC5WK4+MHJtdigXCqwsYMR1euyRTacDCwtbORzEy5ovivTY3Mnd5bM7H+huO3nKjNjdPvDLcLn3pQ==}
- engines: {node: '>=14.0.0', npm: '>=7.0.0'}
- dev: true
-
/svelte-hmr/0.14.9_svelte@3.46.4:
resolution: {integrity: sha512-bKE9+4qb4sAnA+TKHiYurUl970rjA0XmlP9TEP7K/ncyWz3m81kA4HOgmlZK/7irGK7gzZlaPDI3cmf8fp/+tg==}
peerDependencies:
@@ -1507,7 +1103,7 @@ packages:
svelte: 3.46.4
dev: true
- /svelte-preprocess/4.10.3_svelte@3.46.4+typescript@4.5.5:
+ /svelte-preprocess/4.10.3_88b359da5cac6d8f6ee1bbb7080a3fa9:
resolution: {integrity: sha512-ttw17lJfb/dx2ZJT9sesaXT5l7mPQ9Apx1H496Kli3Hkk7orIRGpOw6rCPkRNzr6ueVPqb4vzodS5x7sBFhKHw==}
engines: {node: '>= 9.11.2'}
requiresBuild: true
@@ -1552,6 +1148,7 @@ packages:
'@types/sass': 1.43.1
detect-indent: 6.1.0
magic-string: 0.25.7
+ postcss: 8.4.6
sorcery: 0.10.0
strip-indent: 3.0.0
svelte: 3.46.4
@@ -1569,13 +1166,37 @@ packages:
engines: {node: '>= 8'}
dev: true
- /text-hex/1.0.0:
- resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==}
- dev: true
-
- /to-fast-properties/2.0.0:
- resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
- engines: {node: '>=4'}
+ /tailwindcss/3.0.22_autoprefixer@10.4.2:
+ resolution: {integrity: sha512-F8lt74RlNZirnkaSk310+vGQta7c0/hgx7/bqxruM4wS9lp8oqV93lzavajC3VT0Lp4UUtUVIt8ifKcmGzkr0A==}
+ engines: {node: '>=12.13.0'}
+ hasBin: true
+ peerDependencies:
+ autoprefixer: ^10.0.2
+ dependencies:
+ arg: 5.0.1
+ autoprefixer: 10.4.2_postcss@8.4.6
+ chalk: 4.1.2
+ chokidar: 3.5.3
+ color-name: 1.1.4
+ cosmiconfig: 7.0.1
+ detective: 5.2.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.2.11
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ object-hash: 2.2.0
+ postcss: 8.4.6
+ postcss-js: 4.0.0_postcss@8.4.6
+ postcss-load-config: 3.1.3
+ postcss-nested: 5.0.6_postcss@8.4.6
+ postcss-selector-parser: 6.0.9
+ postcss-value-parser: 4.2.0
+ quick-lru: 5.1.1
+ resolve: 1.22.0
+ transitivePeerDependencies:
+ - ts-node
dev: true
/to-regex-range/5.0.1:
@@ -1585,38 +1206,12 @@ packages:
is-number: 7.0.0
dev: true
- /triple-beam/1.3.0:
- resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==}
- dev: true
-
- /tslib/2.3.1:
- resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==}
- dev: true
-
- /typedarray-to-buffer/3.1.5:
- resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
- dependencies:
- is-typedarray: 1.0.0
- dev: true
-
/typescript/4.5.5:
resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==}
engines: {node: '>=4.2.0'}
hasBin: true
dev: true
- /unique-string/2.0.0:
- resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
- engines: {node: '>=8'}
- dependencies:
- crypto-random-string: 2.0.0
- dev: true
-
- /universalify/2.0.0:
- resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
- engines: {node: '>= 10.0.0'}
- dev: true
-
/util-deprecate/1.0.2:
resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
dev: true
@@ -1650,87 +1245,16 @@ packages:
fsevents: 2.3.2
dev: true
- /warning/3.0.0:
- resolution: {integrity: sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=}
- dependencies:
- loose-envify: 1.4.0
- dev: true
-
- /winston-transport/4.5.0:
- resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==}
- engines: {node: '>= 6.4.0'}
- dependencies:
- logform: 2.3.2
- readable-stream: 3.6.0
- triple-beam: 1.3.0
- dev: true
-
- /winston/3.5.1:
- resolution: {integrity: sha512-tbRtVy+vsSSCLcZq/8nXZaOie/S2tPXPFt4be/Q3vI/WtYwm7rrwidxVw2GRa38FIXcJ1kUM6MOZ9Jmnk3F3UA==}
- engines: {node: '>= 6.4.0'}
- dependencies:
- '@dabh/diagnostics': 2.0.2
- async: 3.2.3
- is-stream: 2.0.1
- logform: 2.3.2
- one-time: 1.0.0
- readable-stream: 3.6.0
- safe-stable-stringify: 2.3.1
- stack-trace: 0.0.10
- triple-beam: 1.3.0
- winston-transport: 4.5.0
- dev: true
-
- /wrap-ansi/7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
- dev: true
-
/wrappy/1.0.2:
resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
dev: true
- /write-file-atomic/3.0.3:
- resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
- dependencies:
- imurmurhash: 0.1.4
- is-typedarray: 1.0.0
- signal-exit: 3.0.7
- typedarray-to-buffer: 3.1.5
- dev: true
-
- /xdg-basedir/4.0.0:
- resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
- engines: {node: '>=8'}
- dev: true
-
- /y18n/5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
+ /xtend/4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
dev: true
- /yallist/4.0.0:
- resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- dev: true
-
- /yargs-parser/20.2.9:
- resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
- engines: {node: '>=10'}
- dev: true
-
- /yargs/16.2.0:
- resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
- engines: {node: '>=10'}
- dependencies:
- cliui: 7.0.4
- escalade: 3.1.1
- get-caller-file: 2.0.5
- require-directory: 2.1.1
- string-width: 4.2.3
- y18n: 5.0.8
- yargs-parser: 20.2.9
+ /yaml/1.10.2:
+ resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
+ engines: {node: '>= 6'}
dev: true
diff --git a/src/webapp/postcss.config.cjs b/src/webapp/postcss.config.cjs
new file mode 100644
index 0000000..e48cff5
--- /dev/null
+++ b/src/webapp/postcss.config.cjs
@@ -0,0 +1,13 @@
+const tailwindcss = require("tailwindcss");
+const autoprefixer = require("autoprefixer");
+
+const config = {
+ plugins: [
+ //Some plugins, like tailwindcss/nesting, need to run before Tailwind,
+ tailwindcss(),
+ //But others, like autoprefixer, need to run after,
+ autoprefixer,
+ ],
+};
+
+module.exports = config;
diff --git a/src/webapp/src/app.css b/src/webapp/src/app.css
new file mode 100644
index 0000000..2005db4
--- /dev/null
+++ b/src/webapp/src/app.css
@@ -0,0 +1,7 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+html {
+ font-family: "Inter UI", sans-serif;
+}
diff --git a/src/webapp/src/app.svelte b/src/webapp/src/app.svelte
index 14e05aa..ddda7ac 100644
--- a/src/webapp/src/app.svelte
+++ b/src/webapp/src/app.svelte
@@ -1,12 +1,14 @@
<script lang="ts">
- import Router, {replace, location} from "svelte-spa-router";
+ import Router, { replace, location } from "svelte-spa-router";
+ import { onMount } from "svelte";
import routes from "./routes";
- import {onMount} from "svelte";
- import {session_is_valid_async} from "@/lib/stores/session";
+ import "./assets/fonts/inter/inter.css";
+ import "./app.css";
+ import { session_is_valid_async } from "@/lib/stores/session";
import preferences from "@/lib/stores/preferences";
- import {ApplicationTheme} from "@/lib/enums/ApplicationTheme";
+ import { ApplicationTheme } from "@/lib/enums/ApplicationTheme";
- preferences.subscribe(e => {
+ preferences.subscribe((e) => {
switch (e.theme) {
case ApplicationTheme.DARK:
document.documentElement.setAttribute("theme", "g100");
@@ -33,4 +35,4 @@
});
</script>
-<Router {routes}/>
+<Router {routes} />
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Black.woff b/src/webapp/src/assets/fonts/inter/Inter-Black.woff
new file mode 100644
index 0000000..a18593a
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Black.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Black.woff2 b/src/webapp/src/assets/fonts/inter/Inter-Black.woff2
new file mode 100644
index 0000000..68f64c9
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Black.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woff
new file mode 100644
index 0000000..b6b0194
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woff2
new file mode 100644
index 0000000..1c9c7ca
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-BlackItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Bold.woff b/src/webapp/src/assets/fonts/inter/Inter-Bold.woff
new file mode 100644
index 0000000..eaf3d4b
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Bold.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Bold.woff2 b/src/webapp/src/assets/fonts/inter/Inter-Bold.woff2
new file mode 100644
index 0000000..2846f29
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Bold.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woff
new file mode 100644
index 0000000..3275076
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woff2
new file mode 100644
index 0000000..0b1fe8e
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-BoldItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woff b/src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woff
new file mode 100644
index 0000000..c2c17ed
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woff2 b/src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woff2
new file mode 100644
index 0000000..c24c2bd
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraBold.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff
new file mode 100644
index 0000000..c42f705
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2
new file mode 100644
index 0000000..4a81dc7
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woff b/src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woff
new file mode 100644
index 0000000..d0de5f3
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woff2 b/src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woff2
new file mode 100644
index 0000000..f2ea706
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraLight.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woff
new file mode 100644
index 0000000..81f1a28
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woff2
new file mode 100644
index 0000000..9af717b
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ExtraLightItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Italic.woff b/src/webapp/src/assets/fonts/inter/Inter-Italic.woff
new file mode 100644
index 0000000..a806b38
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Italic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Italic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-Italic.woff2
new file mode 100644
index 0000000..a619fc5
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Italic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Light.woff b/src/webapp/src/assets/fonts/inter/Inter-Light.woff
new file mode 100644
index 0000000..c496464
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Light.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Light.woff2 b/src/webapp/src/assets/fonts/inter/Inter-Light.woff2
new file mode 100644
index 0000000..bc4be66
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Light.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-LightItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-LightItalic.woff
new file mode 100644
index 0000000..f84a9de
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-LightItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-LightItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-LightItalic.woff2
new file mode 100644
index 0000000..842b2df
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-LightItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Medium.woff b/src/webapp/src/assets/fonts/inter/Inter-Medium.woff
new file mode 100644
index 0000000..d546843
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Medium.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Medium.woff2 b/src/webapp/src/assets/fonts/inter/Inter-Medium.woff2
new file mode 100644
index 0000000..f92498a
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Medium.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woff
new file mode 100644
index 0000000..459a656
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woff2
new file mode 100644
index 0000000..0e3019f
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-MediumItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Regular.woff b/src/webapp/src/assets/fonts/inter/Inter-Regular.woff
new file mode 100644
index 0000000..62d3a61
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Regular.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Regular.woff2 b/src/webapp/src/assets/fonts/inter/Inter-Regular.woff2
new file mode 100644
index 0000000..6c2b689
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Regular.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-SemiBold.woff b/src/webapp/src/assets/fonts/inter/Inter-SemiBold.woff
new file mode 100644
index 0000000..a815f43
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-SemiBold.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-SemiBold.woff2 b/src/webapp/src/assets/fonts/inter/Inter-SemiBold.woff2
new file mode 100644
index 0000000..611e90c
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-SemiBold.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woff
new file mode 100644
index 0000000..909e43a
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2
new file mode 100644
index 0000000..545685b
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Thin.woff b/src/webapp/src/assets/fonts/inter/Inter-Thin.woff
new file mode 100644
index 0000000..62bc58c
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Thin.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-Thin.woff2 b/src/webapp/src/assets/fonts/inter/Inter-Thin.woff2
new file mode 100644
index 0000000..abbc3a5
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-Thin.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woff b/src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woff
new file mode 100644
index 0000000..700a7f0
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woff
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woff2 b/src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woff2
new file mode 100644
index 0000000..ab0b200
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-ThinItalic.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-italic.var.woff2 b/src/webapp/src/assets/fonts/inter/Inter-italic.var.woff2
new file mode 100644
index 0000000..b826d5a
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-italic.var.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter-roman.var.woff2 b/src/webapp/src/assets/fonts/inter/Inter-roman.var.woff2
new file mode 100644
index 0000000..6a256a0
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter-roman.var.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/Inter.var.woff2 b/src/webapp/src/assets/fonts/inter/Inter.var.woff2
new file mode 100644
index 0000000..365eedc
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/Inter.var.woff2
Binary files differ
diff --git a/src/webapp/src/assets/fonts/inter/LICENSE.txt b/src/webapp/src/assets/fonts/inter/LICENSE.txt
new file mode 100644
index 0000000..ff80f8c
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/LICENSE.txt
@@ -0,0 +1,94 @@
+Copyright (c) 2016-2020 The Inter Project Authors.
+"Inter" is trademark of Rasmus Andersson.
+https://github.com/rsms/inter
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION AND CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/src/webapp/src/assets/fonts/inter/inter.css b/src/webapp/src/assets/fonts/inter/inter.css
new file mode 100644
index 0000000..f450010
--- /dev/null
+++ b/src/webapp/src/assets/fonts/inter/inter.css
@@ -0,0 +1,200 @@
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 100;
+ font-display: swap;
+ src: url("Inter-Thin.woff2?v=3.19") format("woff2"),
+ url("Inter-Thin.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 100;
+ font-display: swap;
+ src: url("Inter-ThinItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-ThinItalic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 200;
+ font-display: swap;
+ src: url("Inter-ExtraLight.woff2?v=3.19") format("woff2"),
+ url("Inter-ExtraLight.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 200;
+ font-display: swap;
+ src: url("Inter-ExtraLightItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-ExtraLightItalic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 300;
+ font-display: swap;
+ src: url("Inter-Light.woff2?v=3.19") format("woff2"),
+ url("Inter-Light.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 300;
+ font-display: swap;
+ src: url("Inter-LightItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-LightItalic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: url("Inter-Regular.woff2?v=3.19") format("woff2"),
+ url("Inter-Regular.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: url("Inter-Italic.woff2?v=3.19") format("woff2"),
+ url("Inter-Italic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 500;
+ font-display: swap;
+ src: url("Inter-Medium.woff2?v=3.19") format("woff2"),
+ url("Inter-Medium.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 500;
+ font-display: swap;
+ src: url("Inter-MediumItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-MediumItalic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 600;
+ font-display: swap;
+ src: url("Inter-SemiBold.woff2?v=3.19") format("woff2"),
+ url("Inter-SemiBold.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 600;
+ font-display: swap;
+ src: url("Inter-SemiBoldItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-SemiBoldItalic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: url("Inter-Bold.woff2?v=3.19") format("woff2"),
+ url("Inter-Bold.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 700;
+ font-display: swap;
+ src: url("Inter-BoldItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-BoldItalic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 800;
+ font-display: swap;
+ src: url("Inter-ExtraBold.woff2?v=3.19") format("woff2"),
+ url("Inter-ExtraBold.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 800;
+ font-display: swap;
+ src: url("Inter-ExtraBoldItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-ExtraBoldItalic.woff?v=3.19") format("woff");
+}
+
+@font-face {
+ font-family: 'Inter';
+ font-style: normal;
+ font-weight: 900;
+ font-display: swap;
+ src: url("Inter-Black.woff2?v=3.19") format("woff2"),
+ url("Inter-Black.woff?v=3.19") format("woff");
+}
+@font-face {
+ font-family: 'Inter';
+ font-style: italic;
+ font-weight: 900;
+ font-display: swap;
+ src: url("Inter-BlackItalic.woff2?v=3.19") format("woff2"),
+ url("Inter-BlackItalic.woff?v=3.19") format("woff");
+}
+
+/* -------------------------------------------------------
+Variable font.
+Usage:
+
+ html { font-family: 'Inter', sans-serif; }
+ @supports (font-variation-settings: normal) {
+ html { font-family: 'Inter var', sans-serif; }
+ }
+*/
+@font-face {
+ font-family: 'Inter var';
+ font-weight: 100 900;
+ font-display: swap;
+ font-style: normal;
+ font-named-instance: 'Regular';
+ src: url("Inter-roman.var.woff2?v=3.19") format("woff2");
+}
+@font-face {
+ font-family: 'Inter var';
+ font-weight: 100 900;
+ font-display: swap;
+ font-style: italic;
+ font-named-instance: 'Italic';
+ src: url("Inter-italic.var.woff2?v=3.19") format("woff2");
+}
+
+
+/* --------------------------------------------------------------------------
+[EXPERIMENTAL] Multi-axis, single variable font.
+
+Slant axis is not yet widely supported (as of February 2019) and thus this
+multi-axis single variable font is opt-in rather than the default.
+
+When using this, you will probably need to set font-variation-settings
+explicitly, e.g.
+
+ * { font-variation-settings: "slnt" 0deg }
+ .italic { font-variation-settings: "slnt" 10deg }
+
+*/
+@font-face {
+ font-family: 'Inter var experimental';
+ font-weight: 100 900;
+ font-display: swap;
+ font-style: oblique 0deg 10deg;
+ src: url("Inter.var.woff2?v=3.19") format("woff2");
+}
diff --git a/src/webapp/src/components/entry-card.svelte b/src/webapp/src/components/entry-card.svelte
index e264589..2694264 100644
--- a/src/webapp/src/components/entry-card.svelte
+++ b/src/webapp/src/components/entry-card.svelte
@@ -1,44 +1,43 @@
-<script lang="ts">
- import type {IEntryDto} from "@/lib/models/IEntryDto";
- import {Link, Tag, OverflowMenu, OverflowMenuItem} from "carbon-components-svelte";
- import {del_entry_async} from "@/lib/stores/entries";
+<!--<script lang="ts">-->
+<!-- import type {IEntryDto} from "@/lib/models/IEntryDto";-->
+<!-- import {Link, Tag, OverflowMenu, OverflowMenuItem} from "carbon-components-svelte";-->
+<!-- import {del_entry_async} from "@/lib/stores/entries";-->
- export let entry = {} as IEntryDto;
+<!-- export let entry = {} as IEntryDto;-->
- async function delete_entry(id) {
- await del_entry_async(id);
- }
-</script>
-<style>
- .header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
+<!-- async function delete_entry(id) {-->
+<!-- await del_entry_async(id);-->
+<!-- }-->
+<!--</script>-->
+<!--<style>-->
+<!-- .header {-->
+<!-- display: flex;-->
+<!-- justify-content: space-between;-->
+<!-- align-items: center;-->
+<!-- }-->
- .card {
- margin: 10px 0;
- padding-bottom: 5px;
- border-bottom: 2px solid var(--cds-active-secondary);
- }
-</style>
-<div class="card">
- <div class="header">
- <Link href="{entry.url}">{entry.url}</Link>
- <OverflowMenu flipped>
- <OverflowMenuItem text="Edit"
- on:click={() => alert("Not implemented")}/>
- <OverflowMenuItem danger
- on:click={() => delete_entry(entry.id)}
- text="Delete"/>
- </OverflowMenu>
- </div>
- {#if entry.tags.length > 0}
- {#each entry.tags.split(" ") as tag}
- <Tag size="sm">{tag}</Tag>
- {/each}
- {/if}
- {#if entry.description}
- <p>{@html entry.description.replace("\n", "<br>")}</p>
- {/if}
-</div>
+<!-- .card {-->
+<!-- margin: 10px 0;-->
+<!-- padding-bottom: 5px;-->
+<!-- }-->
+<!--</style>-->
+<!--<div class="card">-->
+<!-- <div class="header">-->
+<!-- <Link href="{entry.url}">{entry.url}</Link>-->
+<!-- <OverflowMenu flipped>-->
+<!-- <OverflowMenuItem text="Edit"-->
+<!-- on:click={() => alert("Not implemented")}/>-->
+<!-- <OverflowMenuItem danger-->
+<!-- on:click={() => delete_entry(entry.id)}-->
+<!-- text="Delete"/>-->
+<!-- </OverflowMenu>-->
+<!-- </div>-->
+<!-- {#if entry.tags.length > 0}-->
+<!-- {#each entry.tags.split(" ") as tag}-->
+<!-- <Tag size="sm">{tag}</Tag>-->
+<!-- {/each}-->
+<!-- {/if}-->
+<!-- {#if entry.description}-->
+<!-- <p>{@html entry.description.replace("\n", "<br>")}</p>-->
+<!-- {/if}-->
+<!--</div>-->
diff --git a/src/webapp/src/components/entry-list.svelte b/src/webapp/src/components/entry-list.svelte
index a546de5..c4de7e7 100644
--- a/src/webapp/src/components/entry-list.svelte
+++ b/src/webapp/src/components/entry-list.svelte
@@ -1,29 +1,29 @@
-<script lang="ts">
- import EntryCard from "@/components/entry-card.svelte";
- import entries, {hydrate_entry_cache_async} from "@/lib/stores/entries";
- import {Grid, InlineLoading, InlineNotification, Search, Tile} from "carbon-components-svelte";
- import {onMount} from "svelte";
+<!--<script lang="ts">-->
+<!-- import EntryCard from "@/components/entry-card.svelte";-->
+<!-- import entries, {hydrate_entry_cache_async} from "@/lib/stores/entries";-->
+<!-- import {Grid, InlineLoading, InlineNotification, Search, Tile} from "carbon-components-svelte";-->
+<!-- import {onMount} from "svelte";-->
- onMount(async () => {
- await hydrate_entry_cache_async();
- });
-</script>
+<!-- onMount(async () => {-->
+<!-- await hydrate_entry_cache_async();-->
+<!-- });-->
+<!--</script>-->
-<Tile>
- <Grid>
- <Search placeholder="Search for entries..."
- size="sm"/>
- <!--TODO: Show loader when something is changing in the store-->
- {#if false}
- <InlineLoading description="Loading entries..."/>
- {:else if $entries.length > 0}
- {#each $entries as entry}
- <EntryCard {entry}/>
- {/each}
- {:else}
- <InlineNotification title="No entries..."
- kind="info"
- hideCloseButton/>
- {/if}
- </Grid>
-</Tile>
+<!--<Tile>-->
+<!-- <Grid>-->
+<!-- <Search placeholder="Search for entries..."-->
+<!-- size="sm"/>-->
+<!-- &lt;!&ndash;TODO: Show loader when something is changing in the store&ndash;&gt;-->
+<!-- {#if false}-->
+<!-- <InlineLoading description="Loading entries..."/>-->
+<!-- {:else if $entries.length > 0}-->
+<!-- {#each $entries as entry}-->
+<!-- <EntryCard {entry}/>-->
+<!-- {/each}-->
+<!-- {:else}-->
+<!-- <InlineNotification title="No entries..."-->
+<!-- kind="info"-->
+<!-- hideCloseButton/>-->
+<!-- {/if}-->
+<!-- </Grid>-->
+<!--</Tile>-->
diff --git a/src/webapp/src/components/forms/entry-form.svelte b/src/webapp/src/components/forms/entry-form.svelte
index 973065b..941f63a 100644
--- a/src/webapp/src/components/forms/entry-form.svelte
+++ b/src/webapp/src/components/forms/entry-form.svelte
@@ -1,200 +1,200 @@
-<script lang="ts">
- import {Button, Column, Form, Grid, InlineNotification, Row, TextArea, TextInput, Tile} from "carbon-components-svelte";
- import type {IErrorResult} from "@/lib/models/IErrorResult";
- import type {IEntryDto} from "@/lib/models/IEntryDto";
- import isFQDN from "validator/lib/isURL";
- import {create_entry_async} from "@/lib/stores/entries";
- import {createEventDispatcher} from "svelte";
- import {get_site_report} from "@/lib/api/root";
- import type {ISiteReportDto} from "@/lib/models/ISiteReportDto";
- import preferences from "@/lib/stores/preferences";
- import {get} from "svelte/store";
+<!--<script lang="ts">-->
+<!-- import {Button, Column, Form, Grid, InlineNotification, Row, TextArea, TextInput, Tile} from "carbon-components-svelte";-->
+<!-- import {get} from "svelte/store";-->
+<!-- import {createEventDispatcher} from "svelte";-->
+<!-- import type {IErrorResult} from "@/lib/models/IErrorResult";-->
+<!-- import type {IEntryDto} from "@/lib/models/IEntryDto";-->
+<!-- import isFQDN from "validator/es/lib/isFQDN";-->
+<!-- import {create_entry_async} from "@/lib/stores/entries";-->
+<!-- import {get_site_report} from "@/lib/api/root";-->
+<!-- import type {ISiteReportDto} from "@/lib/models/ISiteReportDto";-->
+<!-- import preferences from "@/lib/stores/preferences";-->
- const dispatch = createEventDispatcher();
- let url_change_temp = "";
- let description_is_autopopulated = false;
- let enable_site_report = get(preferences).enable_site_report;
+<!-- const dispatch = createEventDispatcher();-->
+<!-- let url_change_temp = "";-->
+<!-- let description_is_auto_populated = false;-->
+<!-- let enable_site_report = get(preferences).enable_site_report;-->
- const form = {
- loading: false,
- error: {} as IErrorResult,
- url: {
- value: "",
- error: "",
- warning: "",
- async change(event) {
- if (!enable_site_report) return;
- let latest_value = event.target.value;
- if (!latest_value.startsWith("http")) latest_value = "http://" + latest_value;
- if (latest_value === url_change_temp) return;
- url_change_temp = latest_value;
- form.url.warning = "";
- if (!isFQDN(latest_value)) {
- return;
- }
- try {
- const http_request = await get_site_report({
- url: latest_value
- });
- if (http_request.ok) {
- form.url.warning = "";
- const report = await http_request.json() as ISiteReportDto;
- if (report.duplicate) {
- form.url.warning = "This url is already in you database";
- } else if (report.unreachable) {
- if (description_is_autopopulated) form.description.value = "";
- form.url.warning = "Unreachable url";
- } else if (report.description && !form.description.value || description_is_autopopulated) {
- form.description.value = report.description;
- description_is_autopopulated = true;
- }
- } else if (http_request.status === 404) {
- if (description_is_autopopulated) form.description.value = "";
- form.url.warning = "";
- }
- } catch {
- form.url.warning = "";
- }
- },
- validate() {
- form.url.error = "";
- let is_valid = true;
- if (!isFQDN(form.url.value)) {
- is_valid = false;
- form.url.error = "Invalid url";
- }
- return is_valid;
- },
- reset() {
- form.url.value = "";
- form.url.warning = "";
- form.url.error = "";
- }
- },
- tags: {
- value: "",
- error: "",
- warning: "",
- validate() {
- form.tags.error = "";
- return true;
- },
- reset() {
- form.tags.value = "";
- form.tags.warning = "";
- form.tags.error = "";
- }
- },
- description: {
- value: "",
- error: "",
- warning: "",
- validate() {
- form.description.error = "";
- return true;
- },
- reset() {
- form.description.value = "";
- form.description.warning = "";
- form.description.error = "";
- }
- },
- is_valid() {
- const url_is_valid = form.url.validate();
- const tags_is_valid = form.tags.validate();
- const description_is_valid = form.description.validate();
- return (url_is_valid && tags_is_valid && description_is_valid);
- },
- payload(): IEntryDto {
- return {
- url: this.url.value,
- tags: this.tags.value,
- description: this.description.value
- } as IEntryDto;
- },
- reset() {
- form.url.reset();
- form.description.reset();
- form.tags.reset();
- },
- async submit() {
- if (!form.is_valid()) return;
- if (!form.url.value.startsWith("http")) {
- form.url.value = "http://" + form.url.value;
- }
- form.error = {} as IErrorResult;
- form.loading = true;
- const request = await create_entry_async(form.payload());
- form.loading = false;
- if (request.ok) {
- form.reset();
- dispatch("created");
- } else if (request?.error) {
- form.error = request.error;
- }
- }
- };
+<!-- const form = {-->
+<!-- loading: false,-->
+<!-- error: {} as IErrorResult,-->
+<!-- url: {-->
+<!-- value: "",-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- async change(event) {-->
+<!-- if (!enable_site_report) return;-->
+<!-- let latest_value = event.target.value;-->
+<!-- if (!latest_value.startsWith("http")) latest_value = "http://" + latest_value;-->
+<!-- if (latest_value === url_change_temp) return;-->
+<!-- url_change_temp = latest_value;-->
+<!-- form.url.warning = "";-->
+<!-- if (!isFQDN(latest_value)) {-->
+<!-- return;-->
+<!-- }-->
+<!-- try {-->
+<!-- const http_request = await get_site_report({-->
+<!-- url: latest_value-->
+<!-- });-->
+<!-- if (http_request.ok) {-->
+<!-- form.url.warning = "";-->
+<!-- const report = await http_request.json() as ISiteReportDto;-->
+<!-- if (report.duplicate) {-->
+<!-- form.url.warning = "This url is already in you database";-->
+<!-- } else if (report.unreachable) {-->
+<!-- if (description_is_auto_populated) form.description.value = "";-->
+<!-- form.url.warning = "Unreachable url";-->
+<!-- } else if (report.description && !form.description.value || description_is_auto_populated) {-->
+<!-- form.description.value = report.description;-->
+<!-- description_is_auto_populated = true;-->
+<!-- }-->
+<!-- } else if (http_request.status === 404) {-->
+<!-- if (description_is_auto_populated) form.description.value = "";-->
+<!-- form.url.warning = "";-->
+<!-- }-->
+<!-- } catch {-->
+<!-- form.url.warning = "";-->
+<!-- }-->
+<!-- },-->
+<!-- validate() {-->
+<!-- form.url.error = "";-->
+<!-- let is_valid = true;-->
+<!-- if (!isFQDN(form.url.value)) {-->
+<!-- is_valid = false;-->
+<!-- form.url.error = "Invalid url";-->
+<!-- }-->
+<!-- return is_valid;-->
+<!-- },-->
+<!-- reset() {-->
+<!-- form.url.value = "";-->
+<!-- form.url.warning = "";-->
+<!-- form.url.error = "";-->
+<!-- }-->
+<!-- },-->
+<!-- tags: {-->
+<!-- value: "",-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- validate() {-->
+<!-- form.tags.error = "";-->
+<!-- return true;-->
+<!-- },-->
+<!-- reset() {-->
+<!-- form.tags.value = "";-->
+<!-- form.tags.warning = "";-->
+<!-- form.tags.error = "";-->
+<!-- }-->
+<!-- },-->
+<!-- description: {-->
+<!-- value: "",-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- validate() {-->
+<!-- form.description.error = "";-->
+<!-- return true;-->
+<!-- },-->
+<!-- reset() {-->
+<!-- form.description.value = "";-->
+<!-- form.description.warning = "";-->
+<!-- form.description.error = "";-->
+<!-- }-->
+<!-- },-->
+<!-- is_valid() {-->
+<!-- const url_is_valid = form.url.validate();-->
+<!-- const tags_is_valid = form.tags.validate();-->
+<!-- const description_is_valid = form.description.validate();-->
+<!-- return (url_is_valid && tags_is_valid && description_is_valid);-->
+<!-- },-->
+<!-- payload(): IEntryDto {-->
+<!-- return {-->
+<!-- url: this.url.value,-->
+<!-- tags: this.tags.value,-->
+<!-- description: this.description.value-->
+<!-- } as IEntryDto;-->
+<!-- },-->
+<!-- reset() {-->
+<!-- form.url.reset();-->
+<!-- form.description.reset();-->
+<!-- form.tags.reset();-->
+<!-- },-->
+<!-- async submit() {-->
+<!-- if (!form.is_valid()) return;-->
+<!-- if (!form.url.value.startsWith("http")) {-->
+<!-- form.url.value = "http://" + form.url.value;-->
+<!-- }-->
+<!-- form.error = {} as IErrorResult;-->
+<!-- form.loading = true;-->
+<!-- const request = await create_entry_async(form.payload());-->
+<!-- form.loading = false;-->
+<!-- if (request.ok) {-->
+<!-- form.reset();-->
+<!-- dispatch("created");-->
+<!-- } else if (request?.error) {-->
+<!-- form.error = request.error;-->
+<!-- }-->
+<!-- }-->
+<!-- };-->
- preferences.subscribe(val => {
- enable_site_report = val.enable_site_report;
- if (!enable_site_report) form.url.warning = "";
- });
-</script>
+<!-- preferences.subscribe(val => {-->
+<!-- enable_site_report = val.enable_site_report;-->
+<!-- if (!enable_site_report) form.url.warning = "";-->
+<!-- });-->
+<!--</script>-->
-<Tile>
- <Form on:submit={form.submit}
- disabled={form.loading}>
- <Grid condensed>
- <Row style="padding-bottom: 12px">
- <Column>
- <h2>New entry</h2>
- </Column>
- </Row>
- {#if form.error.title || form.error.text}
- <Row>
- <Column>
- <InlineNotification
- hideCloseButton
- title={form.error.title ?? ""}
- subtitle={form.error.text ?? ""}/>
- </Column>
- </Row>
- {/if}
- <Row>
- <Column>
- <TextInput placeholder="url"
- inputmode="url"
- size="sm"
- warn={form.url.warning !== ""}
- warnText={form.url.warning}
- invalid={form.url.error !== ""}
- invalidMessage={form.url.error}
- on:keyup={form.url.change}
- on:focusout={form.url.validate}
- on:change={form.url.validate}
- bind:value={form.url.value}/>
- </Column>
- </Row>
- <Row>
- <Column>
- <TextInput placeholder="tags"
- size="sm"
- bind:value={form.tags.value}/>
- </Column>
- </Row>
- <Row style="padding-bottom: 5px">
- <Column>
- <TextArea placeholder="description"
- size="sm"
- bind:value={form.description.value}/>
- </Column>
- </Row>
- <Row style="justify-content: end">
- <Button size="sm"
- type="submit">
- Submit
- </Button>
- </Row>
- </Grid>
- </Form>
-</Tile>
+<!--<Tile>-->
+<!-- <Form on:submit={form.submit}-->
+<!-- disabled={form.loading}>-->
+<!-- <Grid condensed>-->
+<!-- <Row style="padding-bottom: 12px">-->
+<!-- <Column>-->
+<!-- <h2>New entry</h2>-->
+<!-- </Column>-->
+<!-- </Row>-->
+<!-- {#if form.error.title || form.error.text}-->
+<!-- <Row>-->
+<!-- <Column>-->
+<!-- <InlineNotification-->
+<!-- hideCloseButton-->
+<!-- title={form.error.title ?? ""}-->
+<!-- subtitle={form.error.text ?? ""}/>-->
+<!-- </Column>-->
+<!-- </Row>-->
+<!-- {/if}-->
+<!-- <Row>-->
+<!-- <Column>-->
+<!-- <TextInput placeholder="url"-->
+<!-- inputmode="url"-->
+<!-- size="sm"-->
+<!-- warn={form.url.warning !== ""}-->
+<!-- warnText={form.url.warning}-->
+<!-- invalid={form.url.error !== ""}-->
+<!-- invalidMessage={form.url.error}-->
+<!-- on:keyup={form.url.change}-->
+<!-- on:focusout={form.url.validate}-->
+<!-- on:change={form.url.validate}-->
+<!-- bind:value={form.url.value}/>-->
+<!-- </Column>-->
+<!-- </Row>-->
+<!-- <Row>-->
+<!-- <Column>-->
+<!-- <TextInput placeholder="tags"-->
+<!-- size="sm"-->
+<!-- bind:value={form.tags.value}/>-->
+<!-- </Column>-->
+<!-- </Row>-->
+<!-- <Row style="padding-bottom: 5px">-->
+<!-- <Column>-->
+<!-- <TextArea placeholder="description"-->
+<!-- size="sm"-->
+<!-- bind:value={form.description.value}/>-->
+<!-- </Column>-->
+<!-- </Row>-->
+<!-- <Row style="justify-content: end">-->
+<!-- <Button size="sm"-->
+<!-- type="submit">-->
+<!-- Submit-->
+<!-- </Button>-->
+<!-- </Row>-->
+<!-- </Grid>-->
+<!-- </Form>-->
+<!--</Tile>-->
diff --git a/src/webapp/src/components/ui/buttons/button.svelte b/src/webapp/src/components/ui/buttons/button.svelte
new file mode 100644
index 0000000..94c52fd
--- /dev/null
+++ b/src/webapp/src/components/ui/buttons/button.svelte
@@ -0,0 +1,91 @@
+<script lang="ts">
+ /**
+ * Specify the kind of button
+ * @type {"primary" | "secondary" | "tertiary" | "ghost" | "danger" | "danger-tertiary" | "danger-ghost"}
+ */
+ export let kind = "primary";
+
+ /**
+ * Specify the icon to render
+ * @type {typeof import("svelte").SvelteComponent}
+ */
+ export let icon = undefined;
+
+ /**
+ * Specify the ARIA label for the button icon
+ * @type {string}
+ */
+ export let icon_description = undefined;
+
+ /**
+ * Set the alignment of the tooltip relative to the icon
+ * `hasIconOnly` must be set to `true`
+ * @type {"start" | "center" | "end"}
+ */
+ export let tooltip_alignment = "center";
+
+ /**
+ * Set the position of the tooltip relative to the icon
+ * @type {"top" | "right" | "bottom" | "left"}
+ */
+ export let tooltip_position = "bottom";
+
+ /** Set to `true` to disable the button */
+ export let disabled = false;
+
+ /**
+ * Set the `href` to use an anchor link
+ * @type {string}
+ */
+ export let href = undefined;
+
+ /** Specify the tabindex */
+ export let tabindex = "0";
+
+ /** Specify the `type` attribute for the button element */
+ export let type = "button";
+
+ /** Obtain a reference to the HTML element */
+ export let ref = null;
+
+ $: buttonProps = {
+ type: href && !disabled ? undefined : type,
+ tabindex,
+ disabled: disabled === true ? true : undefined,
+ href,
+ ...$$restProps
+ };
+</script>
+
+{#if href && !disabled}
+ <a bind:this="{ref}"
+ {...buttonProps}
+ href="{href}"
+ on:click>
+
+ <slot/>
+
+ <svelte:component
+ this="{icon}"
+ aria-hidden="true"
+ class="bx--btn__icon"
+ aria-label="{icon_description}"
+ />
+
+ </a>
+{:else}
+ <button bind:this="{ref}"
+ {...buttonProps}
+ on:click>
+
+ <slot/>
+
+ <svelte:component
+ this="{icon}"
+ aria-hidden="true"
+ class="bx--btn__icon"
+ aria-label="{icon_description}"
+ />
+
+ </button>
+{/if}
diff --git a/src/webapp/src/components/ui/buttons/index.ts b/src/webapp/src/components/ui/buttons/index.ts
new file mode 100644
index 0000000..35cec88
--- /dev/null
+++ b/src/webapp/src/components/ui/buttons/index.ts
@@ -0,0 +1 @@
+export {default as Button} from "./button.svelte";
diff --git a/src/webapp/src/components/ui/icons/checkmark-circle.svelte b/src/webapp/src/components/ui/icons/checkmark-circle.svelte
new file mode 100644
index 0000000..06615ce
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/checkmark-circle.svelte
@@ -0,0 +1,49 @@
+<script>
+ let className = undefined;
+ export {className as class};
+ export let id = undefined;
+ export let tabindex = undefined;
+ export let focusable = false;
+ export let title = undefined;
+ export let style = undefined;
+ $: ariaLabel = $$props["aria-label"];
+ $: ariaLabelledBy = $$props["aria-labelledby"];
+ $: labelled = ariaLabel || ariaLabelledBy || title;
+ $: attributes = {
+ "aria-label": ariaLabel,
+ "aria-labelledby": ariaLabelledBy,
+ "aria-hidden": labelled ? undefined : true,
+ role: labelled ? "img" : undefined,
+ focusable: tabindex === "0" ? true : focusable,
+ tabindex,
+ };
+</script>
+<svg height="21"
+ viewBox="0 0 21 21"
+ width="21"
+ xmlns="http://www.w3.org/2000/svg"
+ fill="currentColor"
+ style="{style}"
+ id="{id}"
+ class="{className}"
+ preserveAspectRatio="xMidYMid meet"
+ {...attributes}>
+
+ <g fill="none"
+ fill-rule="evenodd"
+ stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ transform="translate(2 2)">
+ <circle cx="8.5"
+ cy="8.5"
+ r="8"/>
+ <path d="m5.5 9.5 2 2 5-5"/>
+ </g>
+
+ <slot>
+ {#if title}
+ <title>{title}</title>
+ {/if}
+ </slot>
+</svg>
diff --git a/src/webapp/src/components/ui/icons/close.svelte b/src/webapp/src/components/ui/icons/close.svelte
new file mode 100644
index 0000000..dc5749b
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/close.svelte
@@ -0,0 +1,46 @@
+<script>
+ let className = undefined;
+ export {className as class};
+ export let id = undefined;
+ export let tabindex = undefined;
+ export let focusable = false;
+ export let title = undefined;
+ export let style = undefined;
+ $: ariaLabel = $$props["aria-label"];
+ $: ariaLabelledBy = $$props["aria-labelledby"];
+ $: labelled = ariaLabel || ariaLabelledBy || title;
+ $: attributes = {
+ "aria-label": ariaLabel,
+ "aria-labelledby": ariaLabelledBy,
+ "aria-hidden": labelled ? undefined : true,
+ role: labelled ? "img" : undefined,
+ focusable: tabindex === "0" ? true : focusable,
+ tabindex,
+ };
+</script>
+<svg height="21"
+ viewBox="0 0 21 21"
+ width="21"
+ xmlns="http://www.w3.org/2000/svg"
+ fill="currentColor"
+ style="{style}"
+ id="{id}"
+ class="{className}"
+ preserveAspectRatio="xMidYMid meet"
+ {...attributes}>
+
+ <g fill="none"
+ fill-rule="evenodd"
+ stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round">
+ <path d="m7.5 7.5 6 6"/>
+ <path d="m13.5 7.5-6 6"/>
+ </g>
+
+ <slot>
+ {#if title}
+ <title>{title}</title>
+ {/if}
+ </slot>
+</svg>
diff --git a/src/webapp/src/components/ui/icons/eye-striked.svelte b/src/webapp/src/components/ui/icons/eye-striked.svelte
new file mode 100644
index 0000000..287466e
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/eye-striked.svelte
@@ -0,0 +1,49 @@
+<script>
+ let className = undefined;
+ export {className as class};
+ export let id = undefined;
+ export let tabindex = undefined;
+ export let focusable = false;
+ export let title = undefined;
+ export let style = undefined;
+ $: ariaLabel = $$props["aria-label"];
+ $: ariaLabelledBy = $$props["aria-labelledby"];
+ $: labelled = ariaLabel || ariaLabelledBy || title;
+ $: attributes = {
+ "aria-label": ariaLabel,
+ "aria-labelledby": ariaLabelledBy,
+ "aria-hidden": labelled ? undefined : true,
+ role: labelled ? "img" : undefined,
+ focusable: tabindex === "0" ? true : focusable,
+ tabindex,
+ };
+</script>
+<svg height="21"
+ viewBox="0 0 21 21"
+ width="21"
+ xmlns="http://www.w3.org/2000/svg"
+ fill="currentColor"
+ style="{style}"
+ id="{id}"
+ class="{className}"
+ preserveAspectRatio="xMidYMid meet"
+ {...attributes}>
+
+ <g fill="none"
+ fill-rule="evenodd"
+ stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ transform="translate(2 4)">
+ <path d="M4.21098664 2.25927021C2.72674608 3.17424129 1.32308387 4.58781789 0 6.5 2.53705308 10.1666667 5.37038642 12 8.5 12 9.9230893 12 11.2849174 11.6209257 12.5854843 10.8627772M14.173426 9.72269094C15.1532781 8.88149971 16.0954695 7.8072694 17 6.5 14.4629469 2.83333333 11.6296136 1 8.5 1 7.66950473 1 6.85987336 1.1291024 6.0711059 1.38730721"/>
+ <line x1="2"
+ x2="15"
+ y2="13.071"/>
+ </g>
+
+ <slot>
+ {#if title}
+ <title>{title}</title>
+ {/if}
+ </slot>
+</svg>
diff --git a/src/webapp/src/components/ui/icons/eye.svelte b/src/webapp/src/components/ui/icons/eye.svelte
new file mode 100644
index 0000000..9b340b7
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/eye.svelte
@@ -0,0 +1,47 @@
+<script>
+ let className = undefined;
+ export {className as class};
+ export let id = undefined;
+ export let tabindex = undefined;
+ export let focusable = false;
+ export let title = undefined;
+ export let style = undefined;
+ $: ariaLabel = $$props["aria-label"];
+ $: ariaLabelledBy = $$props["aria-labelledby"];
+ $: labelled = ariaLabel || ariaLabelledBy || title;
+ $: attributes = {
+ "aria-label": ariaLabel,
+ "aria-labelledby": ariaLabelledBy,
+ "aria-hidden": labelled ? undefined : true,
+ role: labelled ? "img" : undefined,
+ focusable: tabindex === "0" ? true : focusable,
+ tabindex,
+ };
+</script>
+<svg height="21"
+ viewBox="0 0 21 21"
+ width="21"
+ xmlns="http://www.w3.org/2000/svg"
+ fill="currentColor"
+ style="{style}"
+ id="{id}"
+ class="{className}"
+ preserveAspectRatio="xMidYMid meet"
+ {...attributes}>
+
+ <g fill="none"
+ fill-rule="evenodd"
+ stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ transform="translate(2 5)">
+ <path d="m8.5 11c3.1296136 0 5.9629469-1.83333333 8.5-5.5-2.5370531-3.66666667-5.3703864-5.5-8.5-5.5-3.12961358 0-5.96294692 1.83333333-8.5 5.5 2.53705308 3.66666667 5.37038642 5.5 8.5 5.5z"/>
+ <path d="m8.5 2c.18463928 0 .36593924.01429736.54285316.04184538-.02850842.148891-.04285316.30184762-.04285316.45815462 0 1.38071187 1.1192881 2.5 2.5 2.5.156307 0 .3092636-.01434474.4576252-.04178957.0280774.17585033.0423748.35715029.0423748.54178957 0 1.93299662-1.5670034 3.5-3.5 3.5-1.93299662 0-3.5-1.56700338-3.5-3.5s1.56700338-3.5 3.5-3.5z"/>
+ </g>
+
+ <slot>
+ {#if title}
+ <title>{title}</title>
+ {/if}
+ </slot>
+</svg>
diff --git a/src/webapp/src/components/ui/icons/index.ts b/src/webapp/src/components/ui/icons/index.ts
new file mode 100644
index 0000000..a013b44
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/index.ts
@@ -0,0 +1,7 @@
+export {default as Eye} from "./eye.svelte";
+export {default as EyeStriked} from "./eye-striked.svelte";
+export {default as Close} from "./close.svelte";
+export {default as CheckmarkCircle} from "./checkmark-circle.svelte";
+export {default as InfoCircle} from "./info-circle.svelte";
+export {default as MinusCircle} from "./minus-circle.svelte";
+export {default as WarningCircle} from "./warning-circle.svelte";
diff --git a/src/webapp/src/components/ui/icons/info-circle.svelte b/src/webapp/src/components/ui/icons/info-circle.svelte
new file mode 100644
index 0000000..cb00db6
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/info-circle.svelte
@@ -0,0 +1,55 @@
+<script>
+ let className = undefined;
+ export {className as class};
+ export let id = undefined;
+ export let tabindex = undefined;
+ export let focusable = false;
+ export let title = undefined;
+ export let style = undefined;
+ $: ariaLabel = $$props["aria-label"];
+ $: ariaLabelledBy = $$props["aria-labelledby"];
+ $: labelled = ariaLabel || ariaLabelledBy || title;
+ $: attributes = {
+ "aria-label": ariaLabel,
+ "aria-labelledby": ariaLabelledBy,
+ "aria-hidden": labelled ? undefined : true,
+ role: labelled ? "img" : undefined,
+ focusable: tabindex === "0" ? true : focusable,
+ tabindex,
+ };
+</script>
+<svg height="21"
+ viewBox="0 0 21 21"
+ width="21"
+ xmlns="http://www.w3.org/2000/svg"
+ fill="currentColor"
+ style="{style}"
+ id="{id}"
+ class="{className}"
+ preserveAspectRatio="xMidYMid meet"
+ {...attributes}>
+
+ <g fill="none"
+ fill-rule="evenodd"
+ transform="translate(2 2)">
+ <g stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round">
+ <circle cx="8.5"
+ cy="8.5"
+ r="8"/>
+ <path d="m8.5 12.5v-4h-1"/>
+ <path d="m7.5 12.5h2"/>
+ </g>
+ <circle cx="8.5"
+ cy="5.5"
+ fill="currentColor"
+ r="1"/>
+ </g>
+
+ <slot>
+ {#if title}
+ <title>{title}</title>
+ {/if}
+ </slot>
+</svg>
diff --git a/src/webapp/src/components/ui/icons/minus-circle.svelte b/src/webapp/src/components/ui/icons/minus-circle.svelte
new file mode 100644
index 0000000..6110ee7
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/minus-circle.svelte
@@ -0,0 +1,47 @@
+<script>
+ let className = undefined;
+ export {className as class};
+ export let id = undefined;
+ export let tabindex = undefined;
+ export let focusable = false;
+ export let title = undefined;
+ export let style = undefined;
+ $: ariaLabel = $$props["aria-label"];
+ $: ariaLabelledBy = $$props["aria-labelledby"];
+ $: labelled = ariaLabel || ariaLabelledBy || title;
+ $: attributes = {
+ "aria-label": ariaLabel,
+ "aria-labelledby": ariaLabelledBy,
+ "aria-hidden": labelled ? undefined : true,
+ role: labelled ? "img" : undefined,
+ focusable: tabindex === "0" ? true : focusable,
+ tabindex,
+ };
+</script>
+<svg height="21"
+ viewBox="0 0 21 21"
+ width="21"
+ xmlns="http://www.w3.org/2000/svg"
+ fill="currentColor"
+ style="{style}"
+ id="{id}"
+ class="{className}"
+ preserveAspectRatio="xMidYMid meet"
+ {...attributes}>
+
+ <g fill="none"
+ fill-rule="evenodd"
+ stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ transform="translate(2 3)">
+ <path d="m8 16c4.4380025 0 8-3.5262833 8-7.96428571 0-4.43800246-3.5619975-8.03571429-8-8.03571429-4.43800245 0-8 3.59771183-8 8.03571429 0 4.43800241 3.56199755 7.96428571 8 7.96428571z"/>
+ <path d="m4 8h8"/>
+ </g>
+
+ <slot>
+ {#if title}
+ <title>{title}</title>
+ {/if}
+ </slot>
+</svg>
diff --git a/src/webapp/src/components/ui/icons/warning-circle.svelte b/src/webapp/src/components/ui/icons/warning-circle.svelte
new file mode 100644
index 0000000..6200f32
--- /dev/null
+++ b/src/webapp/src/components/ui/icons/warning-circle.svelte
@@ -0,0 +1,55 @@
+<script>
+ let className = undefined;
+ export {className as class};
+ export let id = undefined;
+ export let tabindex = undefined;
+ export let focusable = false;
+ export let title = undefined;
+ export let style = undefined;
+ $: ariaLabel = $$props["aria-label"];
+ $: ariaLabelledBy = $$props["aria-labelledby"];
+ $: labelled = ariaLabel || ariaLabelledBy || title;
+ $: attributes = {
+ "aria-label": ariaLabel,
+ "aria-labelledby": ariaLabelledBy,
+ "aria-hidden": labelled ? undefined : true,
+ role: labelled ? "img" : undefined,
+ focusable: tabindex === "0" ? true : focusable,
+ tabindex,
+ };
+</script>
+<svg height="21"
+ viewBox="0 0 21 21"
+ width="21"
+ xmlns="http://www.w3.org/2000/svg"
+ fill="currentColor"
+ style="{style}"
+ id="{id}"
+ class="{className}"
+ preserveAspectRatio="xMidYMid meet"
+ {...attributes}>
+
+ <g fill="none"
+ fill-rule="evenodd">
+ <circle cx="10.5"
+ cy="10.5"
+ r="8"
+ stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round"/>
+ <path d="m10.5 11.5v-5"
+ stroke="currentColor"
+ stroke-linecap="round"
+ stroke-linejoin="round"/>
+ <circle cx="10.5"
+ cy="14.5"
+ fill="currentColor"
+ r="1"/>
+ </g>
+
+ <slot>
+ {#if title}
+ <title>{title}</title>
+ {/if}
+ </slot>
+</svg>
diff --git a/src/webapp/src/components/ui/index.ts b/src/webapp/src/components/ui/index.ts
new file mode 100644
index 0000000..3ff3bf3
--- /dev/null
+++ b/src/webapp/src/components/ui/index.ts
@@ -0,0 +1,3 @@
+export {TextInput, PasswordInput, InlineCheckbox, Checkbox} from "./inputs";
+export {InlineNotification} from "./notifications";
+export {Button} from "./buttons";
diff --git a/src/webapp/src/components/ui/inputs/checkbox.svelte b/src/webapp/src/components/ui/inputs/checkbox.svelte
new file mode 100644
index 0000000..2272b3b
--- /dev/null
+++ b/src/webapp/src/components/ui/inputs/checkbox.svelte
@@ -0,0 +1,42 @@
+<script lang="ts">
+ import { createEventDispatcher } from "svelte";
+ import { generate_unsafe_id } from "@/lib/helpers";
+
+ export let value = "";
+ export let checked = false;
+ export let required = false;
+ export let readonly = false;
+ export let disabled = false;
+ export let label_text = "";
+ export let hide_label = false;
+ export let name = "";
+ export let title = undefined;
+ export let id = "input-" + generate_unsafe_id(4);
+
+ const dispatch = createEventDispatcher();
+
+ $: dispatch("check", checked);
+</script>
+
+<div {...$$restProps}>
+ <input
+ type="checkbox"
+ {value}
+ {checked}
+ {disabled}
+ {id}
+ {name}
+ {required}
+ {readonly}
+ on:change={() => (checked = !checked)}
+ on:change
+ on:blur
+ />
+ <label for={id} {title}>
+ <span class:invisible={hide_label}>
+ <slot name="label_text">
+ {label_text}
+ </slot>
+ </span>
+ </label>
+</div>
diff --git a/src/webapp/src/components/ui/inputs/index.ts b/src/webapp/src/components/ui/inputs/index.ts
new file mode 100644
index 0000000..e4adc78
--- /dev/null
+++ b/src/webapp/src/components/ui/inputs/index.ts
@@ -0,0 +1,4 @@
+export {default as TextInput} from "./text-input.svelte";
+export {default as PasswordInput} from "./password-input.svelte";
+export {default as Checkbox} from "./checkbox.svelte";
+export {default as InlineCheckbox} from "./inline-checkbox.svelte";
diff --git a/src/webapp/src/components/ui/inputs/inline-checkbox.svelte b/src/webapp/src/components/ui/inputs/inline-checkbox.svelte
new file mode 100644
index 0000000..814134c
--- /dev/null
+++ b/src/webapp/src/components/ui/inputs/inline-checkbox.svelte
@@ -0,0 +1,11 @@
+<script lang="ts">
+ import { generate_unsafe_id } from "@/lib/helpers";
+
+ export let checked = false;
+ export let title = undefined;
+ export let id = "input-" + generate_unsafe_id(4);
+</script>
+
+<input type="checkbox" {checked} {id} on:change />
+
+<label for={id} {title} aria-label={$$props["aria-label"]} />
diff --git a/src/webapp/src/components/ui/inputs/password-input.svelte b/src/webapp/src/components/ui/inputs/password-input.svelte
new file mode 100644
index 0000000..b03c575
--- /dev/null
+++ b/src/webapp/src/components/ui/inputs/password-input.svelte
@@ -0,0 +1,98 @@
+<script lang="ts">
+ import { generate_unsafe_id } from "@/lib/helpers";
+ import { Eye, EyeStriked } from "@/components/ui/icons";
+
+ export let hide_password_label = "Hide password";
+ export let show_password_label = "Show password";
+ export let value = "";
+ export let type = "password";
+ export let placeholder = "";
+ export let disabled = false;
+ export let helper_text = "";
+ export let id = "input-" + generate_unsafe_id(4);
+ export let name = undefined;
+ export let label_text = "";
+ export let hide_label = false;
+ export let invalid = false;
+ export let invalid_text = "";
+ export let warn = false;
+ export let warn_text = "";
+ export let required = false;
+ export let readonly = false;
+
+ function on_input(event: Event) {
+ value = (event.target as HTMLInputElement).value;
+ }
+
+ $: error_id = `error-${id}`;
+ $: warn_id = `warn-${id}`;
+</script>
+
+<div class="flex">
+ {#if label_text}
+ <label for={id} class:invisible={hide_label} class:disabled>
+ <slot name="label_text">
+ {label_text}
+ </slot>
+ </label>
+ {/if}
+
+ <div class="flex">
+ <input
+ data-invalid={invalid || undefined}
+ aria-invalid={invalid || undefined}
+ aria-describedby={invalid ? error_id : warn ? warn_id : undefined}
+ {disabled}
+ {id}
+ {name}
+ {placeholder}
+ value={value ?? ""}
+ {required}
+ {readonly}
+ {type}
+ class="reset px-1.5 py-0.5"
+ class:disabled
+ class:border-red-500={invalid}
+ class:border-amber-500={warn}
+ on:change
+ on:input
+ on:input={on_input}
+ on:keydown
+ on:keyup
+ on:focus
+ on:blur
+ />
+
+ <button
+ type="button"
+ title={type === "password"
+ ? show_password_label
+ : hide_password_label}
+ {disabled}
+ on:click={() =>
+ !disabled && (type = type === "password" ? "text" : "password")}
+ >
+ {#if !disabled}
+ {#if type === "text"}
+ <EyeStriked />
+ {:else}
+ <Eye />
+ {/if}
+ {/if}
+ </button>
+ </div>
+
+ {#if warn && warn_text}
+ <small>{warn_text}</small>
+ {/if}
+
+ {#if invalid && invalid_text}
+ <small>{invalid_text}</small>
+ {/if}
+</div>
+
+<style lang="postcss">
+ .disabled {
+ @apply opacity-75 cursor-not-allowed;
+ }
+</style>
diff --git a/src/webapp/src/components/ui/inputs/text-input.svelte b/src/webapp/src/components/ui/inputs/text-input.svelte
new file mode 100644
index 0000000..91a9bc0
--- /dev/null
+++ b/src/webapp/src/components/ui/inputs/text-input.svelte
@@ -0,0 +1,87 @@
+<script lang="ts">
+ import { createEventDispatcher } from "svelte";
+ import { generate_unsafe_id } from "@/lib/helpers";
+
+ export let value = "";
+ export let placeholder = "";
+ export let disabled = false;
+ export let helper_text = "";
+ export let id = "input-" + generate_unsafe_id(4);
+ export let name = undefined;
+ export let label_text = "";
+ export let hide_label = false;
+ export let invalid = false;
+ export let invalid_text = "";
+ export let warn = false;
+ export let warn_text = "";
+ export let required = false;
+ export let readonly = false;
+
+ const dispatch = createEventDispatcher();
+
+ function parse(raw: any) {
+ if ($$restProps.type !== "number") return raw;
+ return raw != "" ? Number(raw) : null;
+ }
+
+ function on_input(event: Event) {
+ value = parse((event.target as HTMLInputElement).value);
+ dispatch("input", value);
+ }
+
+ function on_change(event: Event) {
+ dispatch("change", parse((event.target as HTMLInputElement).value));
+ }
+
+ $: error_id = `error-${id}`;
+ $: warn_id = `warn-${id}`;
+</script>
+
+<div class="flex">
+ {#if label_text}
+ <label for={id} class:invisible={hide_label} class:disabled>
+ <slot name="label_text">
+ {label_text}
+ </slot>
+ </label>
+ {/if}
+
+ <input
+ data-invalid={invalid || undefined}
+ aria-invalid={invalid || undefined}
+ data-warn={warn || undefined}
+ aria-describedby={invalid ? error_id : warn ? warn_id : undefined}
+ {disabled}
+ {id}
+ {name}
+ {placeholder}
+ {required}
+ {readonly}
+ class="px-1.5 py-0.5"
+ class:disabled
+ class:border-red-500={invalid}
+ class:border-amber-500={warn}
+ on:change={on_change}
+ on:input={on_input}
+ on:keydown
+ on:keyup
+ on:focus
+ on:blur
+ bind:value
+ {...$$restProps}
+ />
+
+ {#if warn && warn_text}
+ <small>{warn_text}</small>
+ {/if}
+
+ {#if invalid && invalid_text}
+ <small>{invalid_text}</small>
+ {/if}
+</div>
+
+<style lang="postcss">
+ .disabled {
+ @apply opacity-75 cursor-not-allowed;
+ }
+</style>
diff --git a/src/webapp/src/components/ui/notifications/index.ts b/src/webapp/src/components/ui/notifications/index.ts
new file mode 100644
index 0000000..43362ad
--- /dev/null
+++ b/src/webapp/src/components/ui/notifications/index.ts
@@ -0,0 +1 @@
+export {default as InlineNotification} from "./inline-notification.svelte";
diff --git a/src/webapp/src/components/ui/notifications/inline-notification.svelte b/src/webapp/src/components/ui/notifications/inline-notification.svelte
new file mode 100644
index 0000000..7917170
--- /dev/null
+++ b/src/webapp/src/components/ui/notifications/inline-notification.svelte
@@ -0,0 +1,75 @@
+<script lang="ts">
+ import { createEventDispatcher, onMount } from "svelte";
+ import NotificationIcon from "./notification-icon.svelte";
+ import NotificationButton from "./notification-button.svelte";
+
+ export let kind = "error";
+ export let low_contrast = false;
+ export let timeout = 0;
+ export let role = "alert";
+ export let title = "";
+ export let subtitle = "";
+ export let hide_close_button = false;
+ export let icon_description = "Closes notification";
+
+ const dispatch = createEventDispatcher();
+ let open = true;
+ let timeoutId = undefined;
+
+ function close(closeFromTimeout) {
+ open = false;
+ dispatch("close", { timeout: closeFromTimeout === true });
+ }
+
+ onMount(() => {
+ if (timeout) {
+ timeoutId = setTimeout(() => close(true), timeout);
+ }
+ return () => {
+ clearTimeout(timeoutId);
+ };
+ });
+</script>
+
+{#if open}
+ <div
+ {role}
+ {kind}
+ class:bx--inline-notification={true}
+ class:bx--inline-notification--low-contrast={low_contrast}
+ class:bx--inline-notification--hide-close-button={hide_close_button}
+ class:bx--inline-notification--error={kind === "error"}
+ class:bx--inline-notification--info={kind === "info"}
+ class:bx--inline-notification--info-square={kind === "info-square"}
+ class:bx--inline-notification--success={kind === "success"}
+ class:bx--inline-notification--warning={kind === "warning"}
+ class:bx--inline-notification--warning-alt={kind === "warning-alt"}
+ {...$$restProps}
+ >
+ <div class:bx--inline-notification__details={true}>
+ <NotificationIcon notification_type="inline" {kind} />
+
+ <div class:bx--inline-notification__text-wrapper={true}>
+ <p class:bx--inline-notification__title={true}>
+ <slot name="title">{title}</slot>
+ </p>
+
+ <div class:bx--inline-notification__subtitle={true}>
+ <slot name="subtitle">{subtitle}</slot>
+ </div>
+
+ <slot />
+ </div>
+ </div>
+
+ <slot name="actions" />
+
+ {#if !hide_close_button}
+ <NotificationButton
+ {icon_description}
+ notification_type="inline"
+ on:click={close}
+ />
+ {/if}
+ </div>
+{/if}
diff --git a/src/webapp/src/components/ui/notifications/notification-action-button.svelte b/src/webapp/src/components/ui/notifications/notification-action-button.svelte
new file mode 100644
index 0000000..5981b9b
--- /dev/null
+++ b/src/webapp/src/components/ui/notifications/notification-action-button.svelte
@@ -0,0 +1,15 @@
+<script lang="ts">
+ import { Button } from "@/components/ui";
+
+ let className = undefined;
+ export { className as class };
+</script>
+
+<Button
+ kind="ghost"
+ {...$$restProps}
+ class="bx--inline-notification__action-button {className}"
+ on:click
+>
+ <slot />
+</Button>
diff --git a/src/webapp/src/components/ui/notifications/notification-button.svelte b/src/webapp/src/components/ui/notifications/notification-button.svelte
new file mode 100644
index 0000000..4b2e204
--- /dev/null
+++ b/src/webapp/src/components/ui/notifications/notification-button.svelte
@@ -0,0 +1,24 @@
+<script lang="ts">
+ import Close from "@/components/ui/icons/close.svelte";
+
+ export let notification_type = "toast";
+ export let icon = Close;
+ export let title = undefined;
+ export let icon_description = "Close icon";
+</script>
+
+<button
+ type="button"
+ aria-label={icon_description}
+ title={icon_description}
+ class:bx--toast-notification__close-button={notification_type === "toast"}
+ class:bx--inline-notification__close-button={notification_type === "inline"}
+ {...$$restProps}
+ on:click
+>
+ <svelte:component
+ this={icon}
+ {title}
+ class="bx--{notification_type}-notification__close-icon"
+ />
+</button>
diff --git a/src/webapp/src/components/ui/notifications/notification-icon.svelte b/src/webapp/src/components/ui/notifications/notification-icon.svelte
new file mode 100644
index 0000000..117b636
--- /dev/null
+++ b/src/webapp/src/components/ui/notifications/notification-icon.svelte
@@ -0,0 +1,25 @@
+<script lang="ts">
+ import {
+ CheckmarkCircle,
+ MinusCircle,
+ InfoCircle,
+ WarningCircle,
+ } from "@/components/ui/icons";
+
+ export let kind = "error";
+ export let notification_type = "toast";
+ export let icon_description = "Closes notification";
+
+ const icons = {
+ error: MinusCircle,
+ info: InfoCircle,
+ success: CheckmarkCircle,
+ warning: WarningCircle,
+ };
+</script>
+
+<svelte:component
+ this={icons[kind]}
+ title={icon_description}
+ class="bx--{notification_type}-notification__icon"
+/>
diff --git a/src/webapp/src/components/ui/notifications/toast-notification.svelte b/src/webapp/src/components/ui/notifications/toast-notification.svelte
new file mode 100644
index 0000000..dbe756f
--- /dev/null
+++ b/src/webapp/src/components/ui/notifications/toast-notification.svelte
@@ -0,0 +1,71 @@
+<script lang="ts">
+ import { createEventDispatcher, onMount } from "svelte";
+ import NotificationIcon from "./notification-icon.svelte";
+ import NotificationButton from "./notification-button.svelte";
+
+ export let kind = "error";
+ export let low_contrast = false;
+ export let timeout = 0;
+ export let role = "alert";
+ export let title = "";
+ export let subtitle = "";
+ export let caption = "";
+ export let icon_description = "Closes notification";
+ export let hide_close_button = false;
+
+ const dispatch = createEventDispatcher();
+ let open = true;
+ let timeout_id = undefined;
+
+ function close(closeFromTimeout) {
+ open = false;
+ dispatch("close", { timeout: closeFromTimeout === true });
+ }
+
+ onMount(() => {
+ if (timeout) {
+ timeout_id = setTimeout(() => close(true), timeout);
+ }
+ return () => {
+ clearTimeout(timeout_id);
+ };
+ });
+</script>
+
+{#if open}
+ <div
+ {role}
+ {kind}
+ class:bx--toast-notification={true}
+ class:bx--toast-notification--low-contrast={low_contrast}
+ class:bx--toast-notification--error={kind === "error"}
+ class:bx--toast-notification--info={kind === "info"}
+ class:bx--toast-notification--info-square={kind === "info-square"}
+ class:bx--toast-notification--success={kind === "success"}
+ class:bx--toast-notification--warning={kind === "warning"}
+ class:bx--toast-notification--warning-alt={kind === "warning-alt"}
+ {...$$restProps}
+ >
+ <NotificationIcon {kind} />
+
+ <div class:bx--toast-notification__details={true}>
+ <h3 class:bx--toast-notification__title={true}>
+ <slot name="title">{title}</slot>
+ </h3>
+
+ <div class:bx--toast-notification__subtitle={true}>
+ <slot name="subtitle">{subtitle}</slot>
+ </div>
+
+ <div class:bx--toast-notification__caption={true}>
+ <slot name="caption">{caption}</slot>
+ </div>
+
+ <slot />
+ </div>
+
+ {#if !hide_close_button}
+ <NotificationButton {icon_description} on:click={close} />
+ {/if}
+ </div>
+{/if}
diff --git a/src/webapp/src/components/ui/readme.txt b/src/webapp/src/components/ui/readme.txt
new file mode 100644
index 0000000..891d3fd
--- /dev/null
+++ b/src/webapp/src/components/ui/readme.txt
@@ -0,0 +1 @@
+A collection of UI compnents largely inspired by carbon-components made by IBM
diff --git a/src/webapp/src/lib/configuration.ts b/src/webapp/src/lib/configuration.ts
index a480141..39f0cf2 100644
--- a/src/webapp/src/lib/configuration.ts
+++ b/src/webapp/src/lib/configuration.ts
@@ -1,8 +1,8 @@
export const api_version = "v1";
-// export const api_docs = "http://localhost:5003/swagger/index.html";
-// export const api_url = "http://localhost:5003";
-export const api_docs = "https://bmt-api.ivarlovlie.no/swagger/index.html";
-export const api_url = "https://bmt-api.ivarlovlie.no";
+export const api_docs = "http://localhost:5003/swagger/index.html";
+export const api_url = "http://localhost:5003";
+// export const api_docs = "https://bmt-api.ivarlovlie.no/swagger/index.html";
+// export const api_url = "https://bmt-api.ivarlovlie.no";
export function api_base(path) {
return `${api_url}/${api_version}/${path}`;
diff --git a/src/webapp/src/lib/stores/persistent-store.ts b/src/webapp/src/lib/stores/persistent-store.ts
index 6720bdc..f65d8df 100644
--- a/src/webapp/src/lib/stores/persistent-store.ts
+++ b/src/webapp/src/lib/stores/persistent-store.ts
@@ -1,6 +1,5 @@
import {writable as _writable, readable as _readable,} from "svelte/store";
import type {Writable, Readable, StartStopNotifier} from "svelte/store";
-import lzString from "lz-string";
enum StoreType {
SESSION = 0,
@@ -8,12 +7,10 @@ enum StoreType {
}
interface StoreOptions {
- compress?: boolean,
- store?: StoreType
+ store?: StoreType;
}
const default_store_options = {
- compress: false,
store: StoreType.SESSION
} as StoreOptions;
@@ -39,11 +36,9 @@ function get_store(type: StoreType): Storage {
}
}
-function prepared_store_value(value, compress): string {
+function prepared_store_value(value): string {
try {
- let returnValue = JSON.stringify(value);
- if (compress) returnValue = lzString.compressToUTF16(returnValue);
- return returnValue;
+ return JSON.stringify(value);
} catch (e) {
console.error(e);
return "__INVALID__";
@@ -53,9 +48,8 @@ function prepared_store_value(value, compress): string {
function get_store_value<T>(options: WritableStore<T> | ReadableStore<T>): object | boolean {
try {
const storage = get_store(options.options.store);
- let value = storage.getItem(options.name);
+ const value = storage.getItem(options.name);
if (!value) return false;
- if (options.options.compress) value = lzString.decompressFromUTF16(value);
return JSON.parse(value);
} catch (e) {
console.error(e);
@@ -72,7 +66,7 @@ function subscribe<T>(store, options: WritableStore<T> | ReadableStore<T>): void
const storage = get_store(options.options.store);
if (!store.subscribe) return;
store.subscribe((state) => {
- storage.setItem(options.name, prepared_store_value(state, options.options.compress));
+ storage.setItem(options.name, prepared_store_value(state));
});
}
diff --git a/src/webapp/src/lib/stores/preferences.ts b/src/webapp/src/lib/stores/preferences.ts
index e99f90d..121699a 100644
--- a/src/webapp/src/lib/stores/preferences.ts
+++ b/src/webapp/src/lib/stores/preferences.ts
@@ -14,21 +14,20 @@ const preferences = writable_persistent({
name: storage_keys.preferences,
options: {
store: StoreType.LOCAL,
- compress: false
},
initialState: default_preferences
});
export function set_site_report_state(enabled: boolean) {
- const prefs = get(preferences);
- prefs.enable_site_report = enabled;
- preferences.set(prefs);
+ const preferences_copy = get(preferences);
+ preferences_copy.enable_site_report = enabled;
+ preferences.set(preferences_copy);
}
export function set_theme(theme: ApplicationTheme) {
- const prefs = get(preferences);
- prefs.theme = theme;
- preferences.set(prefs);
+ const preferences_copy = get(preferences);
+ preferences_copy.theme = theme;
+ preferences.set(preferences_copy);
}
export default preferences;
diff --git a/src/webapp/src/lib/stores/session.ts b/src/webapp/src/lib/stores/session.ts
index 36231cc..1eea985 100644
--- a/src/webapp/src/lib/stores/session.ts
+++ b/src/webapp/src/lib/stores/session.ts
@@ -1,5 +1,5 @@
import {get} from "svelte/store";
-import isUUID from "validator/lib/isUUID";
+import isUUID from "validator/es/lib/isUUID";
import {SECONDS_BETWEEN_SESSION_CHECK, storage_keys} from "@/lib/configuration";
import {get_profile_async, create_session_async} from "@/lib/api/account";
import {writable_persistent, StoreType} from "@/lib/stores/persistent-store";
@@ -12,7 +12,6 @@ const session = writable_persistent<IProfileData>({
initialState: {} as IProfileData,
options: {
store: StoreType.SESSION,
- compress: false,
}
});
diff --git a/src/webapp/src/main.ts b/src/webapp/src/main.ts
index f70b640..11cf514 100644
--- a/src/webapp/src/main.ts
+++ b/src/webapp/src/main.ts
@@ -1,9 +1,8 @@
+import "./app.css";
import App from "./app.svelte";
-import "./styles/carbon.scss";
-import "./styles/global.scss";
const app = new App({
- target: document.getElementById("app")
+ target: document.getElementById("app"),
});
export default app;
diff --git a/src/webapp/src/routes/app/_header.svelte b/src/webapp/src/routes/app/_header.svelte
index d96e73c..d1a612f 100644
--- a/src/webapp/src/routes/app/_header.svelte
+++ b/src/webapp/src/routes/app/_header.svelte
@@ -1,99 +1,99 @@
-<script lang="ts">
- import session, {clear_session_async} from "@/lib/stores/session";
- import preferences, {set_site_report_state, set_theme} from "@/lib/stores/preferences";
- import {replace} from "svelte-spa-router";
- import HeaderPanelToggle from "@/components/carbon-extras/HeaderPanelToggle.svelte";
- import SettingsAdjust20 from "carbon-icons-svelte/lib/SettingsAdjust20";
- import UserAvatarFilledAlt20 from "carbon-icons-svelte/lib/UserAvatarFilledAlt20";
- import {ApplicationTheme} from "@/lib/enums/ApplicationTheme";
- import {get} from "svelte/store";
- import {Header, HeaderAction, HeaderPanelDivider, HeaderPanelLink, HeaderPanelLinks, HeaderUtilities, Tooltip,} from "carbon-components-svelte";
- import {api_base} from "@/lib/configuration";
- import Help16 from "carbon-icons-svelte/lib/Help16";
- import {end_session_async} from "@/lib/api/account";
- import {clear_entries} from "@/lib/stores/entries";
- import AccessTokensModal from "./modals/access-tokens-modal.svelte";
- import FileImportModal from "./modals/file-import-modal.svelte";
+<!--<script lang="ts">-->
+<!-- import session, {clear_session_async} from "@/lib/stores/session";-->
+<!-- import preferences, {set_site_report_state, set_theme} from "@/lib/stores/preferences";-->
+<!-- import {replace} from "svelte-spa-router";-->
+<!-- import HeaderPanelToggle from "@/components/carbon-extras/HeaderPanelToggle.svelte";-->
+<!-- import SettingsAdjust20 from "carbon-icons-svelte/lib/SettingsAdjust20";-->
+<!-- import UserAvatarFilledAlt20 from "carbon-icons-svelte/lib/UserAvatarFilledAlt20";-->
+<!-- import {ApplicationTheme} from "@/lib/enums/ApplicationTheme";-->
+<!-- import {get} from "svelte/store";-->
+<!-- import {Header, HeaderAction, HeaderPanelDivider, HeaderPanelLink, HeaderPanelLinks, HeaderUtilities, Tooltip,} from "carbon-components-svelte";-->
+<!-- import {api_base} from "@/lib/configuration";-->
+<!-- import Help16 from "carbon-icons-svelte/lib/Help16";-->
+<!-- import {end_session_async} from "@/lib/api/account";-->
+<!-- import {clear_entries} from "@/lib/stores/entries";-->
+<!-- import AccessTokensModal from "./modals/access-tokens-modal.svelte";-->
+<!-- import FileImportModal from "./modals/file-import-modal.svelte";-->
- let profile_dropdown_is_open = false;
- let options_dropdown_is_open = false;
- let enable_dark_theme = get(preferences).theme === ApplicationTheme.DARK;
- let enable_site_report = get(preferences).enable_site_report;
- let access_token_modal_is_open = false;
- let file_import_modal_is_open = false;
+<!-- let profile_dropdown_is_open = false;-->
+<!-- let options_dropdown_is_open = false;-->
+<!-- let enable_dark_theme = get(preferences).theme === ApplicationTheme.DARK;-->
+<!-- let enable_site_report = get(preferences).enable_site_report;-->
+<!-- let access_token_modal_is_open = false;-->
+<!-- let file_import_modal_is_open = false;-->
- preferences.subscribe(e => {
- enable_site_report = e.enable_site_report;
- enable_dark_theme = e.theme === ApplicationTheme.DARK;
- });
+<!-- preferences.subscribe(e => {-->
+<!-- enable_site_report = e.enable_site_report;-->
+<!-- enable_dark_theme = e.theme === ApplicationTheme.DARK;-->
+<!-- });-->
- function download_data() {
- const anchor = document.createElement("a");
- anchor.href = api_base("account/archive");
- anchor.click();
- anchor.remove();
- }
+<!-- function download_data() {-->
+<!-- const anchor = document.createElement("a");-->
+<!-- anchor.href = api_base("account/archive");-->
+<!-- anchor.click();-->
+<!-- anchor.remove();-->
+<!-- }-->
- async function handle_logout() {
- await clear_session_async();
- await end_session_async();
- clear_entries();
- await replace("/login");
- }
-</script>
+<!-- async function handle_logout() {-->
+<!-- await clear_session_async();-->
+<!-- await end_session_async();-->
+<!-- clear_entries();-->
+<!-- await replace("/login");-->
+<!-- }-->
+<!--</script>-->
-<AccessTokensModal open={access_token_modal_is_open}
- on:close={() => access_token_modal_is_open = false}/>
+<!--<AccessTokensModal open={access_token_modal_is_open}-->
+<!-- on:close={() => access_token_modal_is_open = false}/>-->
-<FileImportModal open="{file_import_modal_is_open}"
- on:close={() => file_import_modal_is_open = false}/>
+<!--<FileImportModal open="{file_import_modal_is_open}"-->
+<!-- on:close={() => file_import_modal_is_open = false}/>-->
-<Header company="IOL"
- platformName="Bookmark Thing">
- <HeaderUtilities>
- <HeaderAction aria-label="Settings"
- bind:isOpen={options_dropdown_is_open}
- icon={SettingsAdjust20}
- closeIcon={SettingsAdjust20}
- transition={false}>
- <HeaderPanelLinks>
- <HeaderPanelDivider>Actions</HeaderPanelDivider>
- <HeaderPanelLink on:click={() => alert("Not implemented")}>Import data from file</HeaderPanelLink>
- <HeaderPanelLink on:click={() => alert("Not implemented")}>Connect github</HeaderPanelLink>
- <HeaderPanelDivider>Options</HeaderPanelDivider>
- <HeaderPanelToggle size="sm"
- on:toggle={() => set_site_report_state(!enable_site_report)}
- toggled="{enable_site_report}">
- <span>Enable site report</span>
- <Tooltip tooltipBodyId="tooltip-body"
- icon={Help16}>
- <div id="tooltip-body">
- A service that runs and provides insights when you write a FQDN inside of the entry form.
- 1.Checks if the url is alive
- 2.Checks if the url is already in your database
- 3.Autopopulates the entry description based on the sites own description
- </div>
- </Tooltip>
- </HeaderPanelToggle>
- <HeaderPanelToggle size="sm"
- on:toggle={() => set_theme(enable_dark_theme ? ApplicationTheme.LIGHT : ApplicationTheme.DARK)}
- toggled="{enable_dark_theme}">
- Use dark theme
- </HeaderPanelToggle>
- </HeaderPanelLinks>
- </HeaderAction>
- <HeaderAction aria-label="Profile"
- bind:isOpen={profile_dropdown_is_open}
- icon={UserAvatarFilledAlt20}
- closeIcon={UserAvatarFilledAlt20}
- transition={false}>
- <HeaderPanelLinks>
- <HeaderPanelDivider>Logged in as {$session?.username}</HeaderPanelDivider>
- <HeaderPanelLink on:click={() => alert("Not implemented")}>Manage profile</HeaderPanelLink>
- <HeaderPanelLink on:click={() => access_token_modal_is_open = true}>Manage access tokens</HeaderPanelLink>
- <HeaderPanelLink on:click={download_data}>Download data</HeaderPanelLink>
- <HeaderPanelLink on:click={handle_logout}>Log out</HeaderPanelLink>
- </HeaderPanelLinks>
- </HeaderAction>
- </HeaderUtilities>
-</Header>
+<!--<Header company="IOL"-->
+<!-- platformName="Bookmark Thing">-->
+<!-- <HeaderUtilities>-->
+<!-- <HeaderAction aria-label="Settings"-->
+<!-- bind:isOpen={options_dropdown_is_open}-->
+<!-- icon={SettingsAdjust20}-->
+<!-- closeIcon={SettingsAdjust20}-->
+<!-- transition={false}>-->
+<!-- <HeaderPanelLinks>-->
+<!-- <HeaderPanelDivider>Actions</HeaderPanelDivider>-->
+<!-- <HeaderPanelLink on:click={() => alert("Not implemented")}>Import data from file</HeaderPanelLink>-->
+<!-- <HeaderPanelLink on:click={() => alert("Not implemented")}>Connect github</HeaderPanelLink>-->
+<!-- <HeaderPanelDivider>Options</HeaderPanelDivider>-->
+<!-- <HeaderPanelToggle size="sm"-->
+<!-- on:toggle={() => set_site_report_state(!enable_site_report)}-->
+<!-- toggled="{enable_site_report}">-->
+<!-- <span>Enable site report</span>-->
+<!-- <Tooltip tooltipBodyId="tooltip-body"-->
+<!-- icon={Help16}>-->
+<!-- <div id="tooltip-body">-->
+<!-- A service that runs and provides insights when you write a FQDN inside of the entry form.-->
+<!-- 1.Checks if the url is alive-->
+<!-- 2.Checks if the url is already in your database-->
+<!-- 3.Autopopulates the entry description based on the sites own description-->
+<!-- </div>-->
+<!-- </Tooltip>-->
+<!-- </HeaderPanelToggle>-->
+<!-- <HeaderPanelToggle size="sm"-->
+<!-- on:toggle={() => set_theme(enable_dark_theme ? ApplicationTheme.LIGHT : ApplicationTheme.DARK)}-->
+<!-- toggled="{enable_dark_theme}">-->
+<!-- Use dark theme-->
+<!-- </HeaderPanelToggle>-->
+<!-- </HeaderPanelLinks>-->
+<!-- </HeaderAction>-->
+<!-- <HeaderAction aria-label="Profile"-->
+<!-- bind:isOpen={profile_dropdown_is_open}-->
+<!-- icon={UserAvatarFilledAlt20}-->
+<!-- closeIcon={UserAvatarFilledAlt20}-->
+<!-- transition={false}>-->
+<!-- <HeaderPanelLinks>-->
+<!-- <HeaderPanelDivider>Logged in as {$session?.username}</HeaderPanelDivider>-->
+<!-- <HeaderPanelLink on:click={() => alert("Not implemented")}>Manage profile</HeaderPanelLink>-->
+<!-- <HeaderPanelLink on:click={() => access_token_modal_is_open = true}>Manage access tokens</HeaderPanelLink>-->
+<!-- <HeaderPanelLink on:click={download_data}>Download data</HeaderPanelLink>-->
+<!-- <HeaderPanelLink on:click={handle_logout}>Log out</HeaderPanelLink>-->
+<!-- </HeaderPanelLinks>-->
+<!-- </HeaderAction>-->
+<!-- </HeaderUtilities>-->
+<!--</Header>-->
diff --git a/src/webapp/src/routes/app/home.svelte b/src/webapp/src/routes/app/home.svelte
index 5b0b141..1714c5b 100644
--- a/src/webapp/src/routes/app/home.svelte
+++ b/src/webapp/src/routes/app/home.svelte
@@ -1,26 +1,26 @@
-<script lang="ts">
- import EntryForm from "@/components/forms/entry-form.svelte";
- import EntryList from "@/components/entry-list.svelte";
- import Header from "./_header.svelte";
- import {
- Column,
- Content,
- Grid,
- Row
- } from "carbon-components-svelte";
-</script>
+<!--<script lang="ts">-->
+<!-- import EntryForm from "@/components/forms/entry-form.svelte";-->
+<!-- import EntryList from "@/components/entry-list.svelte";-->
+<!-- import Header from "./_header.svelte";-->
+<!-- import {-->
+<!-- Column,-->
+<!-- Content,-->
+<!-- Grid,-->
+<!-- Row-->
+<!-- } from "carbon-components-svelte";-->
+<!--</script>-->
-<Header/>
+<!--<Header/>-->
-<Content>
- <Grid>
- <Row>
- <Column>
- <EntryForm/>
- </Column>
- <Column>
- <EntryList/>
- </Column>
- </Row>
- </Grid>
-</Content>
+<!--<Content>-->
+<!-- <Grid>-->
+<!-- <Row>-->
+<!-- <Column>-->
+<!-- <EntryForm/>-->
+<!-- </Column>-->
+<!-- <Column>-->
+<!-- <EntryList/>-->
+<!-- </Column>-->
+<!-- </Row>-->
+<!-- </Grid>-->
+<!--</Content>-->
diff --git a/src/webapp/src/routes/app/modals/access-tokens-modal.svelte b/src/webapp/src/routes/app/modals/access-tokens-modal.svelte
index d550f95..99c6685 100644
--- a/src/webapp/src/routes/app/modals/access-tokens-modal.svelte
+++ b/src/webapp/src/routes/app/modals/access-tokens-modal.svelte
@@ -1,151 +1,151 @@
-<script lang="ts">
- import {delete_token_async, get_tokens_async} from "@/lib/api/account";
- import {Modal, DataTable, ToolbarContent, Toolbar, ToolbarMenu, ToolbarMenuItem, Button, OverflowMenu, OverflowMenuItem, CodeSnippet, Link} from "carbon-components-svelte";
- import {onMount} from "svelte";
- import type {IAccessToken} from "@/lib/models/IAccessToken";
- import {api_docs} from "@/lib/configuration";
- import NewAccessTokenModal from "./new-access-token-modal.svelte";
+<!--<script lang="ts">-->
+<!-- import {delete_token_async, get_tokens_async} from "@/lib/api/account";-->
+<!-- import {Modal, DataTable, ToolbarContent, Toolbar, ToolbarMenu, ToolbarMenuItem, Button, OverflowMenu, OverflowMenuItem, CodeSnippet, Link} from "carbon-components-svelte";-->
+<!-- import {onMount} from "svelte";-->
+<!-- import type {IAccessToken} from "@/lib/models/IAccessToken";-->
+<!-- import {api_docs} from "@/lib/configuration";-->
+<!-- import NewAccessTokenModal from "./new-access-token-modal.svelte";-->
- export let open;
- let loading_tokens_table;
- let tokens = [] as Array<IAccessToken>;
- let create_access_token_modal_is_open = false;
- let copy_access_token_modal_is_open = false;
- let new_access_token = "";
- const table_headers = [
- {key: "created", value: "Created"},
- {key: "expiry_date", value: "Expires"},
- {key: "permissions", value: "Permissions"},
- {key: "overflow", empty: true},
- ];
+<!-- export let open;-->
+<!-- let loading_tokens_table;-->
+<!-- let tokens = [] as Array<IAccessToken>;-->
+<!-- let create_access_token_modal_is_open = false;-->
+<!-- let copy_access_token_modal_is_open = false;-->
+<!-- let new_access_token = "";-->
+<!-- const table_headers = [-->
+<!-- {key: "created", value: "Created"},-->
+<!-- {key: "expiry_date", value: "Expires"},-->
+<!-- {key: "permissions", value: "Permissions"},-->
+<!-- {key: "overflow", empty: true},-->
+<!-- ];-->
- function create_permission_string(token: IAccessToken): string {
- let permission_string = "";
- if (token.allow_create) permission_string += "create";
- if (token.allow_read) permission_string += " read";
- if (token.allow_update) permission_string += " update";
- if (token.allow_delete) permission_string += " delete";
- return permission_string;
- }
+<!-- function create_permission_string(token: IAccessToken): string {-->
+<!-- let permission_string = "";-->
+<!-- if (token.allow_create) permission_string += "create";-->
+<!-- if (token.allow_read) permission_string += " read";-->
+<!-- if (token.allow_update) permission_string += " update";-->
+<!-- if (token.allow_delete) permission_string += " delete";-->
+<!-- return permission_string;-->
+<!-- }-->
- async function load_tokens() {
- loading_tokens_table = true;
- const get_tokens_request = await get_tokens_async();
- loading_tokens_table = false;
- if (get_tokens_request.ok) {
- const response_json = await get_tokens_request.json();
- if (response_json?.length > 0) {
- const new_tokens = [];
- for (const token of response_json as Array<IAccessToken>) {
- new_tokens.push({
- id: token.id,
- expiry_date: new Date(token.expiry_date).toLocaleDateString(),
- created: new Date(token.created).toLocaleDateString(),
- permissions: create_permission_string(token),
- });
- }
- tokens = new_tokens;
- } else {
- tokens = [];
- }
- } else {
- tokens = [];
- }
- }
+<!-- async function load_tokens() {-->
+<!-- loading_tokens_table = true;-->
+<!-- const get_tokens_request = await get_tokens_async();-->
+<!-- loading_tokens_table = false;-->
+<!-- if (get_tokens_request.ok) {-->
+<!-- const response_json = await get_tokens_request.json();-->
+<!-- if (response_json?.length > 0) {-->
+<!-- const new_tokens = [];-->
+<!-- for (const token of response_json as Array<IAccessToken>) {-->
+<!-- new_tokens.push({-->
+<!-- id: token.id,-->
+<!-- expiry_date: new Date(token.expiry_date).toLocaleDateString(),-->
+<!-- created: new Date(token.created).toLocaleDateString(),-->
+<!-- permissions: create_permission_string(token),-->
+<!-- });-->
+<!-- }-->
+<!-- tokens = new_tokens;-->
+<!-- } else {-->
+<!-- tokens = [];-->
+<!-- }-->
+<!-- } else {-->
+<!-- tokens = [];-->
+<!-- }-->
+<!-- }-->
- async function delete_token(event) {
- const row = event.target.closest("tr");
- const id = row.id.substring(4, row.id.length);
- if (confirm("Are you sure you want to delete this token?")) {
- const http_request = await delete_token_async(id);
- if (http_request.ok) {
- await load_tokens();
- }
- }
- }
+<!-- async function delete_token(event) {-->
+<!-- const row = event.target.closest("tr");-->
+<!-- const id = row.id.substring(4, row.id.length);-->
+<!-- if (confirm("Are you sure you want to delete this token?")) {-->
+<!-- const http_request = await delete_token_async(id);-->
+<!-- if (http_request.ok) {-->
+<!-- await load_tokens();-->
+<!-- }-->
+<!-- }-->
+<!-- }-->
- async function delete_all_tokens() {
- if (confirm("Are you sure you want to delete all tokens?")) {
- for (const token of tokens) {
- await delete_token_async(token.id);
- }
- await load_tokens();
- }
- }
+<!-- async function delete_all_tokens() {-->
+<!-- if (confirm("Are you sure you want to delete all tokens?")) {-->
+<!-- for (const token of tokens) {-->
+<!-- await delete_token_async(token.id);-->
+<!-- }-->
+<!-- await load_tokens();-->
+<!-- }-->
+<!-- }-->
- async function handle_token_created(e) {
- const token = e.detail;
- console.log("Created token", token);
- create_access_token_modal_is_open = false;
- new_access_token = token;
- copy_access_token_modal_is_open = true;
- await load_tokens();
- }
+<!-- async function handle_token_created(e) {-->
+<!-- const token = e.detail;-->
+<!-- console.log("Created token", token);-->
+<!-- create_access_token_modal_is_open = false;-->
+<!-- new_access_token = token;-->
+<!-- copy_access_token_modal_is_open = true;-->
+<!-- await load_tokens();-->
+<!-- }-->
- function copy_access_token_modal_closed() {
- new_access_token = "";
- copy_access_token_modal_is_open = false;
- }
+<!-- function copy_access_token_modal_closed() {-->
+<!-- new_access_token = "";-->
+<!-- copy_access_token_modal_is_open = false;-->
+<!-- }-->
- onMount(async () => {
- await load_tokens();
- });
-</script>
+<!-- onMount(async () => {-->
+<!-- await load_tokens();-->
+<!-- });-->
+<!--</script>-->
-<Modal size="lg"
- passiveModal="{true}"
- {open}
- preventCloseOnClickOutside
- modalHeading="Manage access tokens"
- on:open
- on:close>
- <DataTable size="compact"
- sortable="{true}"
- headers={table_headers}
- style="padding-bottom: 50px"
- rows={tokens}>
- <Toolbar size="sm">
- <ToolbarContent>
- <ToolbarMenu>
- <ToolbarMenuItem>
- <Link href="{api_docs}"
- target="_blank">API documentation
- </Link>
- </ToolbarMenuItem>
- <ToolbarMenuItem danger
- on:click={delete_all_tokens}>
- Delete all tokens
- </ToolbarMenuItem>
- </ToolbarMenu>
- <Button on:click={() => create_access_token_modal_is_open = true}>Create token</Button>
- </ToolbarContent>
- </Toolbar>
- <svelte:fragment slot="cell"
- let:cell>
- {#if cell.key === "overflow"}
- <OverflowMenu flipped
- size="sm">
- <OverflowMenuItem danger
- on:click={delete_token}
- text="Delete"/>
- </OverflowMenu>
- {:else}
- {cell.value}
- {/if}
- </svelte:fragment>
- </DataTable>
-</Modal>
+<!--<Modal size="lg"-->
+<!-- passiveModal="{true}"-->
+<!-- {open}-->
+<!-- preventCloseOnClickOutside-->
+<!-- modalHeading="Manage access tokens"-->
+<!-- on:open-->
+<!-- on:close>-->
+<!-- <DataTable size="compact"-->
+<!-- sortable="{true}"-->
+<!-- headers={table_headers}-->
+<!-- style="padding-bottom: 50px"-->
+<!-- rows={tokens}>-->
+<!-- <Toolbar size="sm">-->
+<!-- <ToolbarContent>-->
+<!-- <ToolbarMenu>-->
+<!-- <ToolbarMenuItem>-->
+<!-- <Link href="{api_docs}"-->
+<!-- target="_blank">API documentation-->
+<!-- </Link>-->
+<!-- </ToolbarMenuItem>-->
+<!-- <ToolbarMenuItem danger-->
+<!-- on:click={delete_all_tokens}>-->
+<!-- Delete all tokens-->
+<!-- </ToolbarMenuItem>-->
+<!-- </ToolbarMenu>-->
+<!-- <Button on:click={() => create_access_token_modal_is_open = true}>Create token</Button>-->
+<!-- </ToolbarContent>-->
+<!-- </Toolbar>-->
+<!-- <svelte:fragment slot="cell"-->
+<!-- let:cell>-->
+<!-- {#if cell.key === "overflow"}-->
+<!-- <OverflowMenu flipped-->
+<!-- size="sm">-->
+<!-- <OverflowMenuItem danger-->
+<!-- on:click={delete_token}-->
+<!-- text="Delete"/>-->
+<!-- </OverflowMenu>-->
+<!-- {:else}-->
+<!-- {cell.value}-->
+<!-- {/if}-->
+<!-- </svelte:fragment>-->
+<!-- </DataTable>-->
+<!--</Modal>-->
-<Modal size="sm"
- passiveModal="{true}"
- preventCloseOnClickOutside
- modalHeading="Your access token"
- modalDescription="This will only be shown once"
- on:close={copy_access_token_modal_closed}
- open={copy_access_token_modal_is_open}>
- <CodeSnippet code={new_access_token}/>
- <br>
-</Modal>
+<!--<Modal size="sm"-->
+<!-- passiveModal="{true}"-->
+<!-- preventCloseOnClickOutside-->
+<!-- modalHeading="Your access token"-->
+<!-- modalDescription="This will only be shown once"-->
+<!-- on:close={copy_access_token_modal_closed}-->
+<!-- open={copy_access_token_modal_is_open}>-->
+<!-- <CodeSnippet code={new_access_token}/>-->
+<!-- <br>-->
+<!--</Modal>-->
-<NewAccessTokenModal bind:open={create_access_token_modal_is_open}
- on:created={handle_token_created}/>
+<!--<NewAccessTokenModal bind:open={create_access_token_modal_is_open}-->
+<!-- on:created={handle_token_created}/>-->
diff --git a/src/webapp/src/routes/app/modals/file-import-modal.svelte b/src/webapp/src/routes/app/modals/file-import-modal.svelte
index b013688..bc18d75 100644
--- a/src/webapp/src/routes/app/modals/file-import-modal.svelte
+++ b/src/webapp/src/routes/app/modals/file-import-modal.svelte
@@ -1,126 +1,126 @@
-<script lang="ts">
- import {Modal, FileUploader, Select, SelectItem, Form, FormGroup} from "carbon-components-svelte";
+<!--<script lang="ts">-->
+<!-- import {Modal, FileUploader, Select, SelectItem, Form, FormGroup} from "carbon-components-svelte";-->
- export let open;
+<!-- export let open;-->
- let available_fields = [];
- let import_json = [];
+<!-- let available_fields = [];-->
+<!-- let import_json = [];-->
- const mappings = {
- can_map: false,
- url: {
- value: "",
- error: "",
- validate() {
- }
- },
- tags: {
- value: "",
- error: "",
- available_fields: [],
- is_array: false,
- validate() {
- console.log(import_json);
- const first_tag = import_json[0][mappings.tags.value];
- console.log(first_tag);
- if (typeof first_tag === "object") {
- for (const field in first_tag) {
- mappings.tags.available_fields.push(field);
- }
- console.log(mappings.tags.available_fields);
- mappings.tags.is_array = true;
- } else {
- mappings.tags.is_array = false;
- }
- }
- },
- description: {
- value: "",
- error: "",
- validate() {
- }
- }
- };
+<!-- const mappings = {-->
+<!-- can_map: false,-->
+<!-- url: {-->
+<!-- value: "",-->
+<!-- error: "",-->
+<!-- validate() {-->
+<!-- }-->
+<!-- },-->
+<!-- tags: {-->
+<!-- value: "",-->
+<!-- error: "",-->
+<!-- available_fields: [],-->
+<!-- is_array: false,-->
+<!-- validate() {-->
+<!-- console.log(import_json);-->
+<!-- const first_tag = import_json[0][mappings.tags.value];-->
+<!-- console.log(first_tag);-->
+<!-- if (typeof first_tag === "object") {-->
+<!-- for (const field in first_tag) {-->
+<!-- mappings.tags.available_fields.push(field);-->
+<!-- }-->
+<!-- console.log(mappings.tags.available_fields);-->
+<!-- mappings.tags.is_array = true;-->
+<!-- } else {-->
+<!-- mappings.tags.is_array = false;-->
+<!-- }-->
+<!-- }-->
+<!-- },-->
+<!-- description: {-->
+<!-- value: "",-->
+<!-- error: "",-->
+<!-- validate() {-->
+<!-- }-->
+<!-- }-->
+<!-- };-->
- async function file_input_change(e) {
- const file = e.target.files[0];
- if (!file) return;
- const text = await file.text();
- import_json = JSON.parse(text);
- const first_entry = import_json[0];
- if (typeof first_entry !== "object") return;
- for (const field in first_entry) {
- available_fields.push(field);
- }
- mappings.can_map = available_fields.length >= 3;
- }
-</script>
+<!-- async function file_input_change(e) {-->
+<!-- const file = e.target.files[0];-->
+<!-- if (!file) return;-->
+<!-- const text = await file.text();-->
+<!-- import_json = JSON.parse(text);-->
+<!-- const first_entry = import_json[0];-->
+<!-- if (typeof first_entry !== "object") return;-->
+<!-- for (const field in first_entry) {-->
+<!-- available_fields.push(field);-->
+<!-- }-->
+<!-- mappings.can_map = available_fields.length >= 3;-->
+<!-- }-->
+<!--</script>-->
-<Modal size="lg"
- passiveModal="{true}"
- preventCloseOnClickOutside
- modalHeading="Import entries from a json file"
- on:close
- bind:open={open}>
+<!--<Modal size="lg"-->
+<!-- passiveModal="{true}"-->
+<!-- preventCloseOnClickOutside-->
+<!-- modalHeading="Import entries from a json file"-->
+<!-- on:close-->
+<!-- bind:open={open}>-->
- {#if mappings.can_map}
- <Form>
- <FormGroup legendText="Mappings"
- noMargin
- message
- messageText="Map the fields you want to import">
- <Select inline
- labelText="Url"
- error="{mappings.url.error !== ''}"
- errorMessage="{mappings.url.error}"
- on:change={mappings.url.validate}
- bind:selected={mappings.url.value}>
- {#each available_fields as field}
- <SelectItem value="{field}"
- text="{field}"/>
- {/each}
- </Select>
- <Select inline
- labelText="Tags"
- error="{mappings.tags.error !== ''}"
- errorMessage="{mappings.tags.error}"
- on:change={mappings.tags.validate}
- bind:selected={mappings.tags.value}>
- {#each available_fields as field}
- <SelectItem value="{field}"
- text="{field}"/>
- {/each}
- </Select>
- {#if mappings.tags.available_fields.length > 0}
- <Select inline
- labelText="Tags"
- error="{mappings.tags.error !== ''}"
- errorMessage="{mappings.tags.error}"
- bind:selected={mappings.tags.value}>
- {#each mappings.tags.available_fields as field}
- <SelectItem value="{field}"
- text="{field}"/>
- {/each}
- </Select>
- {/if}
- <Select inline
- labelText="Description"
- error="{mappings.description.error !== ''}"
- errorMessage="{mappings.description.error}"
- on:change={mappings.description.validate}
- bind:selected={mappings.description.value}>
- {#each available_fields as field}
- <SelectItem value="{field}"
- text="{field}"/>
- {/each}
- </Select>
- </FormGroup>
- </Form>
- {/if}
- <FileUploader
- buttonLabel="Select json file"
- accept={[".json"]}
- on:change={file_input_change}
- status=""
- />
-</Modal>
+<!-- {#if mappings.can_map}-->
+<!-- <Form>-->
+<!-- <FormGroup legendText="Mappings"-->
+<!-- noMargin-->
+<!-- message-->
+<!-- messageText="Map the fields you want to import">-->
+<!-- <Select inline-->
+<!-- labelText="Url"-->
+<!-- error="{mappings.url.error !== ''}"-->
+<!-- errorMessage="{mappings.url.error}"-->
+<!-- on:change={mappings.url.validate}-->
+<!-- bind:selected={mappings.url.value}>-->
+<!-- {#each available_fields as field}-->
+<!-- <SelectItem value="{field}"-->
+<!-- text="{field}"/>-->
+<!-- {/each}-->
+<!-- </Select>-->
+<!-- <Select inline-->
+<!-- labelText="Tags"-->
+<!-- error="{mappings.tags.error !== ''}"-->
+<!-- errorMessage="{mappings.tags.error}"-->
+<!-- on:change={mappings.tags.validate}-->
+<!-- bind:selected={mappings.tags.value}>-->
+<!-- {#each available_fields as field}-->
+<!-- <SelectItem value="{field}"-->
+<!-- text="{field}"/>-->
+<!-- {/each}-->
+<!-- </Select>-->
+<!-- {#if mappings.tags.available_fields.length > 0}-->
+<!-- <Select inline-->
+<!-- labelText="Tags"-->
+<!-- error="{mappings.tags.error !== ''}"-->
+<!-- errorMessage="{mappings.tags.error}"-->
+<!-- bind:selected={mappings.tags.value}>-->
+<!-- {#each mappings.tags.available_fields as field}-->
+<!-- <SelectItem value="{field}"-->
+<!-- text="{field}"/>-->
+<!-- {/each}-->
+<!-- </Select>-->
+<!-- {/if}-->
+<!-- <Select inline-->
+<!-- labelText="Description"-->
+<!-- error="{mappings.description.error !== ''}"-->
+<!-- errorMessage="{mappings.description.error}"-->
+<!-- on:change={mappings.description.validate}-->
+<!-- bind:selected={mappings.description.value}>-->
+<!-- {#each available_fields as field}-->
+<!-- <SelectItem value="{field}"-->
+<!-- text="{field}"/>-->
+<!-- {/each}-->
+<!-- </Select>-->
+<!-- </FormGroup>-->
+<!-- </Form>-->
+<!-- {/if}-->
+<!-- <FileUploader-->
+<!-- buttonLabel="Select json file"-->
+<!-- accept={[".json"]}-->
+<!-- on:change={file_input_change}-->
+<!-- status=""-->
+<!-- />-->
+<!--</Modal>-->
diff --git a/src/webapp/src/routes/app/modals/new-access-token-modal.svelte b/src/webapp/src/routes/app/modals/new-access-token-modal.svelte
index c130328..9f55431 100644
--- a/src/webapp/src/routes/app/modals/new-access-token-modal.svelte
+++ b/src/webapp/src/routes/app/modals/new-access-token-modal.svelte
@@ -1,133 +1,133 @@
-<script lang="ts">
- import {Checkbox, Form, FormGroup, Modal} from "carbon-components-svelte";
- import NativeDateInput from "@/components/carbon-extras/NativeDateInput.svelte";
- import type {ICreateTokenRequest} from "@/lib/models/ICreateTokenRequest";
- import {create_token_async} from "@/lib/api/account";
- import {createEventDispatcher} from "svelte";
+<!--<script lang="ts">-->
+<!-- import {Checkbox, Form, FormGroup, Modal} from "carbon-components-svelte";-->
+<!-- import NativeDateInput from "@/components/carbon-extras/NativeDateInput.svelte";-->
+<!-- import type {ICreateTokenRequest} from "@/lib/models/ICreateTokenRequest";-->
+<!-- import {create_token_async} from "@/lib/api/account";-->
+<!-- import {createEventDispatcher} from "svelte";-->
- export let open = false;
- const date = new Date();
- date.setDate(date.getDate() + 1);
- const default_expiry_date = date;
- const dispatch = createEventDispatcher();
- const form = {
- error: "",
- loading: false,
- expiry_date: {
- value: default_expiry_date,
- error: "",
- warning: "",
- reset() {
- form.expiry_date.value = default_expiry_date;
- },
- change() {
- },
- validate() {
- }
- },
- allow_create: {
- value: false,
- error: "",
- warning: "",
- reset() {
- form.allow_create.value = false;
- },
- change() {
- },
- validate() {
- }
- },
- allow_read: {
- value: false,
- error: "",
- warning: "",
- reset() {
- form.allow_read.value = false;
- },
- change() {
- },
- validate() {
- }
- },
- allow_update: {
- value: false,
- error: "",
- warning: "",
- reset() {
- form.allow_update.value = false;
- },
- change() {
- },
- validate() {
- }
- },
- allow_delete: {
- value: false,
- error: "",
- warning: "",
- reset() {
- form.allow_delete.value = false;
- },
- change() {
- },
- validate() {
- }
- },
- reset() {
- form.allow_read.reset();
- form.allow_delete.reset();
- form.allow_update.reset();
- form.allow_create.reset();
- form.expiry_date.reset();
- },
- payload(): ICreateTokenRequest {
- return {
- allow_delete: form.allow_delete.value,
- allow_read: form.allow_read.value,
- allow_update: form.allow_update.value,
- allow_create: form.allow_create.value,
- expiry_date: form.expiry_date.value,
- } as ICreateTokenRequest;
- },
- async submit() {
- form.loading = true;
- const http_request = await create_token_async(form.payload());
- form.loading = false;
- if (http_request.ok) {
- dispatch("created", await http_request.text());
- }
- }
- };
-</script>
+<!-- export let open = false;-->
+<!-- const date = new Date();-->
+<!-- date.setDate(date.getDate() + 1);-->
+<!-- const default_expiry_date = date;-->
+<!-- const dispatch = createEventDispatcher();-->
+<!-- const form = {-->
+<!-- error: "",-->
+<!-- loading: false,-->
+<!-- expiry_date: {-->
+<!-- value: default_expiry_date,-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- reset() {-->
+<!-- form.expiry_date.value = default_expiry_date;-->
+<!-- },-->
+<!-- change() {-->
+<!-- },-->
+<!-- validate() {-->
+<!-- }-->
+<!-- },-->
+<!-- allow_create: {-->
+<!-- value: false,-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- reset() {-->
+<!-- form.allow_create.value = false;-->
+<!-- },-->
+<!-- change() {-->
+<!-- },-->
+<!-- validate() {-->
+<!-- }-->
+<!-- },-->
+<!-- allow_read: {-->
+<!-- value: false,-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- reset() {-->
+<!-- form.allow_read.value = false;-->
+<!-- },-->
+<!-- change() {-->
+<!-- },-->
+<!-- validate() {-->
+<!-- }-->
+<!-- },-->
+<!-- allow_update: {-->
+<!-- value: false,-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- reset() {-->
+<!-- form.allow_update.value = false;-->
+<!-- },-->
+<!-- change() {-->
+<!-- },-->
+<!-- validate() {-->
+<!-- }-->
+<!-- },-->
+<!-- allow_delete: {-->
+<!-- value: false,-->
+<!-- error: "",-->
+<!-- warning: "",-->
+<!-- reset() {-->
+<!-- form.allow_delete.value = false;-->
+<!-- },-->
+<!-- change() {-->
+<!-- },-->
+<!-- validate() {-->
+<!-- }-->
+<!-- },-->
+<!-- reset() {-->
+<!-- form.allow_read.reset();-->
+<!-- form.allow_delete.reset();-->
+<!-- form.allow_update.reset();-->
+<!-- form.allow_create.reset();-->
+<!-- form.expiry_date.reset();-->
+<!-- },-->
+<!-- payload(): ICreateTokenRequest {-->
+<!-- return {-->
+<!-- allow_delete: form.allow_delete.value,-->
+<!-- allow_read: form.allow_read.value,-->
+<!-- allow_update: form.allow_update.value,-->
+<!-- allow_create: form.allow_create.value,-->
+<!-- expiry_date: form.expiry_date.value,-->
+<!-- } as ICreateTokenRequest;-->
+<!-- },-->
+<!-- async submit() {-->
+<!-- form.loading = true;-->
+<!-- const http_request = await create_token_async(form.payload());-->
+<!-- form.loading = false;-->
+<!-- if (http_request.ok) {-->
+<!-- dispatch("created", await http_request.text());-->
+<!-- }-->
+<!-- }-->
+<!-- };-->
+<!--</script>-->
-<Modal modalHeading="Create access token"
- preventCloseOnClickOutside
- hasForm
- primaryButtonText="Submit"
- secondaryButtonText="Cancel"
- style="padding-bottom: 50px;padding-right: 30px;"
- on:click:button--secondary={() => open = false}
- bind:open={open}
- on:submit={form.submit}>
- <Form>
- <FormGroup>
- <NativeDateInput label="Expiry date"
- minDate="{new Date()}"
- bind:value={form.expiry_date.value}/>
- </FormGroup>
- <FormGroup legendText="Permissions">
- <Checkbox id="permission-create"
- labelText="Create"
- bind:checked="{form.allow_create.value}"/>
- <Checkbox id="permission-read"
- labelText="Read"
- bind:checked="{form.allow_read.value}"/>
- <Checkbox id="permission-update"
- labelText="Update"
- bind:checked="{form.allow_update.value}"/>
- <Checkbox id="permission-delete"
- labelText="Delete"
- bind:checked="{form.allow_delete.value}"/>
- </FormGroup>
- </Form>
-</Modal>
+<!--<Modal modalHeading="Create access token"-->
+<!-- preventCloseOnClickOutside-->
+<!-- hasForm-->
+<!-- primaryButtonText="Submit"-->
+<!-- secondaryButtonText="Cancel"-->
+<!-- style="padding-bottom: 50px;padding-right: 30px;"-->
+<!-- on:click:button&#45;&#45;secondary={() => open = false}-->
+<!-- bind:open={open}-->
+<!-- on:submit={form.submit}>-->
+<!-- <Form>-->
+<!-- <FormGroup>-->
+<!-- <NativeDateInput label="Expiry date"-->
+<!-- minDate="{new Date()}"-->
+<!-- bind:value={form.expiry_date.value}/>-->
+<!-- </FormGroup>-->
+<!-- <FormGroup legendText="Permissions">-->
+<!-- <Checkbox id="permission-create"-->
+<!-- labelText="Create"-->
+<!-- bind:checked="{form.allow_create.value}"/>-->
+<!-- <Checkbox id="permission-read"-->
+<!-- labelText="Read"-->
+<!-- bind:checked="{form.allow_read.value}"/>-->
+<!-- <Checkbox id="permission-update"-->
+<!-- labelText="Update"-->
+<!-- bind:checked="{form.allow_update.value}"/>-->
+<!-- <Checkbox id="permission-delete"-->
+<!-- labelText="Delete"-->
+<!-- bind:checked="{form.allow_delete.value}"/>-->
+<!-- </FormGroup>-->
+<!-- </Form>-->
+<!--</Modal>-->
diff --git a/src/webapp/src/routes/public/login.svelte b/src/webapp/src/routes/public/login.svelte
index c0d65a6..b70267c 100644
--- a/src/webapp/src/routes/public/login.svelte
+++ b/src/webapp/src/routes/public/login.svelte
@@ -1,21 +1,120 @@
<script lang="ts">
- import {replace} from "svelte-spa-router";
- import LoginForm from "@/components/forms/login-form.svelte";
- import {Column, Content, Grid, Row} from "carbon-components-svelte";
+ import { replace } from "svelte-spa-router";
+ import { start_session_async } from "@/lib/stores/session";
+ import type { ICreateSessionRequest } from "@/lib/models/ICreateSessionRequest";
+ import type { IErrorResult } from "@/lib/models/IErrorResult";
+ import { api_base } from "@/lib/configuration";
+ import {
+ TextInput,
+ PasswordInput,
+ InlineNotification,
+ Button,
+ Checkbox,
+ } from "@/components/ui";
- async function handle_authenticated() {
- await replace("/app");
- }
+ const form = {
+ loading: false,
+ error: {} as IErrorResult,
+ username: {
+ value: "",
+ error: "",
+ validate() {
+ form.username.error = "";
+ let is_valid = true;
+ if (!form.username.value) {
+ form.username.error = "Username is required";
+ is_valid = false;
+ }
+ return is_valid;
+ },
+ },
+ password: {
+ value: "",
+ error: "",
+ validate() {
+ form.password.error = "";
+ let is_valid = true;
+ if (!form.password.value) {
+ form.password.error = "Password is required";
+ is_valid = false;
+ }
+ return is_valid;
+ },
+ },
+ persist: {
+ value: false,
+ error: "",
+ validate() {
+ return true;
+ },
+ },
+ is_valid() {
+ const username_is_valid = form.username.validate();
+ const password_is_valid = form.password.validate();
+ const persist_is_valid = form.persist.validate();
+ return username_is_valid && password_is_valid && persist_is_valid;
+ },
+ payload(): ICreateSessionRequest {
+ return {
+ username: this.username.value,
+ password: this.password.value,
+ persist: this.persist.value,
+ } as ICreateSessionRequest;
+ },
+ async submit() {
+ if (!form.is_valid()) return;
+ form.error = {} as IErrorResult;
+ form.loading = true;
+ const login_request = await start_session_async(form.payload());
+ form.loading = false;
+ if (login_request.ok) {
+ await replace("/app");
+ } else if (login_request.error) {
+ form.error = login_request.error;
+ }
+ },
+ };
</script>
-<Content>
- <Grid noGutter={true}>
- <Row>
- <Column sm={12}
- md={6}
- lg={6}>
- <LoginForm on:authenticated={handle_authenticated}/>
- </Column>
- </Row>
- </Grid>
-</Content>
+<form on:submit={form.submit} class="flex flex-col max-w-sm m-5">
+ <h1 class="text-2xl pb-2">Login</h1>
+ {#if form.error.title || form.error.text}
+ <InlineNotification
+ hide_close_button
+ title={form.error.title ?? ""}
+ subtitle={form.error.text ?? ""}
+ />
+ {/if}
+ <div class="flex flex-col gap-y-1.5">
+ <TextInput
+ type="text"
+ placeholder="Username"
+ invalid={form.username.error !== ""}
+ invalid_text={form.username.error}
+ bind:value={form.username.value}
+ />
+
+ <PasswordInput
+ placeholder="Password"
+ invalid={form.password.error !== ""}
+ invalid_text={form.password.error}
+ bind:value={form.password.value}
+ />
+ </div>
+ <div>
+ <Checkbox
+ name="persist"
+ label_text="Persist session"
+ bind:checked={form.persist.value}
+ />
+ <Button type="submit" disabled={form.loading}>Submit</Button>
+ </div>
+ <div>
+ <Button
+ kind="secondary"
+ href={api_base("account/create-github-session")}
+ >
+ Login with Github
+ </Button>
+ </div>
+</form>
diff --git a/src/webapp/src/vite-env.d.ts b/src/webapp/src/vite-env.d.ts
index 33a0646..4078e74 100644
--- a/src/webapp/src/vite-env.d.ts
+++ b/src/webapp/src/vite-env.d.ts
@@ -1,3 +1,2 @@
/// <reference types="svelte" />
/// <reference types="vite/client" />
-/// <reference types="validator" />
diff --git a/src/webapp/svelte.config.js b/src/webapp/svelte.config.js
index 866775a..b45af77 100644
--- a/src/webapp/svelte.config.js
+++ b/src/webapp/svelte.config.js
@@ -1,6 +1,9 @@
import sveltePreprocess from "svelte-preprocess";
-import {optimizeImports} from "carbon-preprocess-svelte";
export default {
- preprocess: [sveltePreprocess(), optimizeImports()],
+ preprocess: [
+ sveltePreprocess({
+ postcss: true,
+ }),
+ ],
};
diff --git a/src/webapp/tailwind.config.cjs b/src/webapp/tailwind.config.cjs
new file mode 100644
index 0000000..ccfc63f
--- /dev/null
+++ b/src/webapp/tailwind.config.cjs
@@ -0,0 +1,121 @@
+const forms = require("@tailwindcss/forms");
+
+module.exports = {
+ darkMode: "class",
+ content: ["./src/**/*.{html,js,svelte,ts}"],
+ plugins: [forms],
+ theme: {
+ extend: {
+ colors: {
+ gray: {
+ "50": "#f9fafb",
+ "100": "#f0f1f3",
+ "200": "#d9dbdf",
+ "300": "#b7bbc2",
+ "400": "#8f959f",
+ "500": "#6e7582",
+ "600": "#555e6e",
+ "700": "#3e4859",
+ "800": "#283242",
+ "900": "#131f30",
+ },
+ cerise: {
+ "50": "#fff6f6",
+ "100": "#ffefef",
+ "200": "#f9d3d3",
+ "300": "#eaa6a6",
+ "400": "#e56d6d",
+ "500": "#d93c3e",
+ "600": "#bd0e0f",
+ "700": "#930705",
+ "800": "#680605",
+ "900": "#470201",
+ },
+ orange: {
+ "50": "#fff8f1",
+ "100": "#fbecdf",
+ "200": "#f6d7bf",
+ "300": "#e5ad8b",
+ "400": "#d67a4a",
+ "500": "#c4540b",
+ "600": "#9c4303",
+ "700": "#713707",
+ "800": "#4a2702",
+ "900": "#2c1b01",
+ },
+ lemon: {
+ "50": "#fdfdea",
+ "100": "#fdf6be",
+ "200": "#f5e27b",
+ "300": "#d9bd2f",
+ "400": "#b6930d",
+ "500": "#967100",
+ "600": "#805501",
+ "700": "#643e02",
+ "800": "#422a00",
+ "900": "#271a00",
+ },
+ green: {
+ "50": "#f3faf7",
+ "100": "#daf5eb",
+ "200": "#b6e5d3",
+ "300": "#85c8ac",
+ "400": "#3ca773",
+ "500": "#108835",
+ "600": "#016d00",
+ "700": "#005301",
+ "800": "#003906",
+ "900": "#072408",
+ },
+ leaf: {
+ "50": "#edfafa",
+ "100": "#d5f5f6",
+ "200": "#aae7ea",
+ "300": "#69c8ce",
+ "400": "#13a2ad",
+ "500": "#0d828d",
+ "600": "#056874",
+ "700": "#06505c",
+ "800": "#043744",
+ "900": "#01222f",
+ },
+ azure: {
+ "50": "#f4faff",
+ "100": "#e2f0ff",
+ "200": "#c4defe",
+ "300": "#95bbee",
+ "400": "#5e95e4",
+ "500": "#2173e6",
+ "600": "#1358cc",
+ "700": "#1242a2",
+ "800": "#1a2e6c",
+ "900": "#161d38",
+ },
+ blue: {
+ "50": "#f5f8ff",
+ "100": "#e5edff",
+ "200": "#ccdafc",
+ "300": "#a5b8e9",
+ "400": "#7c91e1",
+ "500": "#5c69e9",
+ "600": "#4a46e1",
+ "700": "#3a31b9",
+ "800": "#282284",
+ "900": "#191452",
+ },
+ indigo: {
+ "50": "#faf9ff",
+ "100": "#f1effe",
+ "200": "#dcd7fc",
+ "300": "#bcb2f2",
+ "400": "#9e86e5",
+ "500": "#895ddb",
+ "600": "#8335c8",
+ "700": "#6620a9",
+ "800": "#48147b",
+ "900": "#2f0d4d",
+ },
+ }
+ }
+ }
+};
diff --git a/src/webapp/tsconfig.json b/src/webapp/tsconfig.json
index c143677..dbf7e23 100644
--- a/src/webapp/tsconfig.json
+++ b/src/webapp/tsconfig.json
@@ -8,6 +8,10 @@
"baseUrl": ".",
"allowJs": true,
"checkJs": true,
+ "types": [
+ "vite/client",
+ "@types/validator"
+ ],
"paths": {
"@/*": [
"src/*"
diff --git a/src/webapp/vite.config.js b/src/webapp/vite.config.js
index 8cbaae5..d8571ec 100644
--- a/src/webapp/vite.config.js
+++ b/src/webapp/vite.config.js
@@ -1,14 +1,13 @@
import {defineConfig} from "vite";
import {svelte} from "@sveltejs/vite-plugin-svelte";
import path from "path";
-import {optimizeCss} from "carbon-preprocess-svelte";
// https://vitejs.dev/config/
export default defineConfig({
- plugins: [svelte(), process.env.NODE_ENV === "production" && optimizeCss()],
+ plugins: [svelte()],
resolve: {
alias: {
- "@": path.resolve("/src"),
+ "@": "/src",
},
},
});