From 39a36462bb1c18c24ad9b97d9203c42a50b6b50a Mon Sep 17 00:00:00 2001 From: Bart van der Braak Date: Wed, 31 Jan 2024 01:24:57 +0100 Subject: [PATCH] feat: add dashboard and settings pages and components --- apps/web/package.json | 7 +- apps/web/pnpm-lock.yaml | 186 +++-- apps/web/src/app.pcss | 2 +- .../src/lib/components/site/icons/index.ts | 5 +- .../ui/avatar/avatar-fallback.svelte | 16 + .../components/ui/avatar/avatar-image.svelte | 18 + .../lib/components/ui/avatar/avatar.svelte | 18 + .../web/src/lib/components/ui/avatar/index.ts | 13 + .../src/lib/components/ui/badge/badge.svelte | 18 + apps/web/src/lib/components/ui/badge/index.ts | 22 + .../components/ui/checkbox/checkbox.svelte | 34 + .../src/lib/components/ui/checkbox/index.ts | 6 + .../ui/command/command-dialog.svelte | 23 + .../ui/command/command-empty.svelte | 12 + .../ui/command/command-group.svelte | 18 + .../ui/command/command-input.svelte | 23 + .../components/ui/command/command-item.svelte | 19 + .../components/ui/command/command-list.svelte | 15 + .../ui/command/command-separator.svelte | 10 + .../ui/command/command-shortcut.svelte | 16 + .../lib/components/ui/command/command.svelte | 22 + .../src/lib/components/ui/command/index.ts | 37 + .../ui/dialog/dialog-content.svelte | 36 + .../ui/dialog/dialog-description.svelte | 16 + .../components/ui/dialog/dialog-footer.svelte | 16 + .../components/ui/dialog/dialog-header.svelte | 13 + .../ui/dialog/dialog-overlay.svelte | 21 + .../components/ui/dialog/dialog-portal.svelte | 9 + .../components/ui/dialog/dialog-title.svelte | 16 + .../web/src/lib/components/ui/dialog/index.ts | 34 + .../lib/components/ui/form/form-button.svelte | 9 + .../components/ui/form/form-checkbox.svelte | 26 + .../ui/form/form-description.svelte | 16 + .../lib/components/ui/form/form-input.svelte | 28 + .../lib/components/ui/form/form-item.svelte | 12 + .../lib/components/ui/form/form-label.svelte | 17 + .../ui/form/form-native-select.svelte | 26 + .../ui/form/form-radio-group.svelte | 22 + .../ui/form/form-select-trigger.svelte | 18 + .../lib/components/ui/form/form-select.svelte | 20 + .../lib/components/ui/form/form-switch.svelte | 24 + .../components/ui/form/form-textarea.svelte | 29 + .../components/ui/form/form-validation.svelte | 14 + apps/web/src/lib/components/ui/form/index.ts | 82 ++ .../src/lib/components/ui/popover/index.ts | 14 + .../ui/popover/popover-content.svelte | 27 + .../lib/components/ui/radio-group/index.ts | 15 + .../ui/radio-group/radio-group-item.svelte | 30 + .../ui/radio-group/radio-group.svelte | 14 + .../web/src/lib/components/ui/select/index.ts | 34 + .../ui/select/select-content.svelte | 36 + .../components/ui/select/select-item.svelte | 35 + .../components/ui/select/select-label.svelte | 13 + .../ui/select/select-separator.svelte | 11 + .../ui/select/select-trigger.svelte | 22 + .../src/lib/components/ui/separator/index.ts | 7 + .../components/ui/separator/separator.svelte | 22 + .../web/src/lib/components/ui/switch/index.ts | 7 + .../lib/components/ui/switch/switch.svelte | 28 + apps/web/src/lib/components/ui/table/index.ts | 28 + .../lib/components/ui/table/table-body.svelte | 13 + .../components/ui/table/table-caption.svelte | 13 + .../lib/components/ui/table/table-cell.svelte | 21 + .../components/ui/table/table-footer.svelte | 13 + .../lib/components/ui/table/table-head.svelte | 19 + .../components/ui/table/table-header.svelte | 14 + .../lib/components/ui/table/table-row.svelte | 23 + .../src/lib/components/ui/table/table.svelte | 15 + .../src/lib/components/ui/textarea/index.ts | 28 + .../components/ui/textarea/textarea.svelte | 33 + .../src/routes/(auth)/login/+page.server.ts | 17 +- apps/web/src/routes/(auth)/login/+page.svelte | 37 +- .../src/routes/(auth)/register/+page.svelte | 7 +- .../routes/(auth)/reset-password/+page.svelte | 7 +- .../(components)/data-table-checkbox.svelte | 12 + .../data-table-column-header.svelte | 62 ++ .../data-table-faceted-filter.svelte | 96 +++ .../(components)/data-table-pagination.svelte | 89 +++ .../data-table-priority-cell.svelte | 15 + .../data-table-row-actions.svelte | 46 ++ .../data-table-status-cell.svelte | 16 + .../(components)/data-table-title-cell.svelte | 17 + .../(components)/data-table-toolbar.svelte | 69 ++ .../data-table-view-options.svelte | 42 ++ .../dashboard/(components)/data-table.svelte | 222 ++++++ .../dashboard/(components)/index.ts | 10 + .../dashboard/(components)/user-nav.svelte | 45 ++ .../(dashboard)/dashboard/(data)/data.ts | 71 ++ .../(dashboard)/dashboard/(data)/schemas.ts | 13 + .../(dashboard)/dashboard/(data)/tasks.json | 702 ++++++++++++++++++ .../routes/(dashboard)/dashboard/+page.svelte | 20 +- .../settings/(components)/sidebar-nav.svelte | 43 ++ .../(dashboard)/settings/+layout.svelte | 41 + .../(dashboard)/settings/+page.server.ts | 24 + .../routes/(dashboard)/settings/+page.svelte | 15 + .../settings/account/+page.server.ts | 24 + .../(dashboard)/settings/account/+page.svelte | 18 + .../settings/account/account-form.svelte | 85 +++ .../settings/appearance/+page.server.ts | 24 + .../settings/appearance/+page.svelte | 18 + .../appearance/appearance-form.svelte | 108 +++ .../settings/notifications/+page.server.ts | 24 + .../settings/notifications/+page.svelte | 16 + .../notifications/notifications-form.svelte | 113 +++ .../(dashboard)/settings/profile-form.svelte | 88 +++ apps/web/src/routes/+layout.server.ts | 4 +- apps/web/src/routes/+layout.svelte | 2 +- apps/web/src/routes/+page.server.ts | 7 - apps/web/src/routes/+page.svelte | 38 +- 109 files changed, 3770 insertions(+), 116 deletions(-) create mode 100644 apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte create mode 100644 apps/web/src/lib/components/ui/avatar/avatar-image.svelte create mode 100644 apps/web/src/lib/components/ui/avatar/avatar.svelte create mode 100644 apps/web/src/lib/components/ui/avatar/index.ts create mode 100644 apps/web/src/lib/components/ui/badge/badge.svelte create mode 100644 apps/web/src/lib/components/ui/badge/index.ts create mode 100644 apps/web/src/lib/components/ui/checkbox/checkbox.svelte create mode 100644 apps/web/src/lib/components/ui/checkbox/index.ts create mode 100644 apps/web/src/lib/components/ui/command/command-dialog.svelte create mode 100644 apps/web/src/lib/components/ui/command/command-empty.svelte create mode 100644 apps/web/src/lib/components/ui/command/command-group.svelte create mode 100644 apps/web/src/lib/components/ui/command/command-input.svelte create mode 100644 apps/web/src/lib/components/ui/command/command-item.svelte create mode 100644 apps/web/src/lib/components/ui/command/command-list.svelte create mode 100644 apps/web/src/lib/components/ui/command/command-separator.svelte create mode 100644 apps/web/src/lib/components/ui/command/command-shortcut.svelte create mode 100644 apps/web/src/lib/components/ui/command/command.svelte create mode 100644 apps/web/src/lib/components/ui/command/index.ts create mode 100644 apps/web/src/lib/components/ui/dialog/dialog-content.svelte create mode 100644 apps/web/src/lib/components/ui/dialog/dialog-description.svelte create mode 100644 apps/web/src/lib/components/ui/dialog/dialog-footer.svelte create mode 100644 apps/web/src/lib/components/ui/dialog/dialog-header.svelte create mode 100644 apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte create mode 100644 apps/web/src/lib/components/ui/dialog/dialog-portal.svelte create mode 100644 apps/web/src/lib/components/ui/dialog/dialog-title.svelte create mode 100644 apps/web/src/lib/components/ui/dialog/index.ts create mode 100644 apps/web/src/lib/components/ui/form/form-button.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-checkbox.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-description.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-input.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-item.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-label.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-native-select.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-radio-group.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-select-trigger.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-select.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-switch.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-textarea.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-validation.svelte create mode 100644 apps/web/src/lib/components/ui/form/index.ts create mode 100644 apps/web/src/lib/components/ui/popover/index.ts create mode 100644 apps/web/src/lib/components/ui/popover/popover-content.svelte create mode 100644 apps/web/src/lib/components/ui/radio-group/index.ts create mode 100644 apps/web/src/lib/components/ui/radio-group/radio-group-item.svelte create mode 100644 apps/web/src/lib/components/ui/radio-group/radio-group.svelte create mode 100644 apps/web/src/lib/components/ui/select/index.ts create mode 100644 apps/web/src/lib/components/ui/select/select-content.svelte create mode 100644 apps/web/src/lib/components/ui/select/select-item.svelte create mode 100644 apps/web/src/lib/components/ui/select/select-label.svelte create mode 100644 apps/web/src/lib/components/ui/select/select-separator.svelte create mode 100644 apps/web/src/lib/components/ui/select/select-trigger.svelte create mode 100644 apps/web/src/lib/components/ui/separator/index.ts create mode 100644 apps/web/src/lib/components/ui/separator/separator.svelte create mode 100644 apps/web/src/lib/components/ui/switch/index.ts create mode 100644 apps/web/src/lib/components/ui/switch/switch.svelte create mode 100644 apps/web/src/lib/components/ui/table/index.ts create mode 100644 apps/web/src/lib/components/ui/table/table-body.svelte create mode 100644 apps/web/src/lib/components/ui/table/table-caption.svelte create mode 100644 apps/web/src/lib/components/ui/table/table-cell.svelte create mode 100644 apps/web/src/lib/components/ui/table/table-footer.svelte create mode 100644 apps/web/src/lib/components/ui/table/table-head.svelte create mode 100644 apps/web/src/lib/components/ui/table/table-header.svelte create mode 100644 apps/web/src/lib/components/ui/table/table-row.svelte create mode 100644 apps/web/src/lib/components/ui/table/table.svelte create mode 100644 apps/web/src/lib/components/ui/textarea/index.ts create mode 100644 apps/web/src/lib/components/ui/textarea/textarea.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-checkbox.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-column-header.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-faceted-filter.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-pagination.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-priority-cell.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-row-actions.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-status-cell.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-title-cell.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-toolbar.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table-view-options.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/data-table.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/index.ts create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(components)/user-nav.svelte create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(data)/data.ts create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(data)/schemas.ts create mode 100644 apps/web/src/routes/(dashboard)/dashboard/(data)/tasks.json create mode 100644 apps/web/src/routes/(dashboard)/settings/(components)/sidebar-nav.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/+layout.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/+page.server.ts create mode 100644 apps/web/src/routes/(dashboard)/settings/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/account/+page.server.ts create mode 100644 apps/web/src/routes/(dashboard)/settings/account/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/account/account-form.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/appearance/+page.server.ts create mode 100644 apps/web/src/routes/(dashboard)/settings/appearance/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/appearance/appearance-form.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/notifications/+page.server.ts create mode 100644 apps/web/src/routes/(dashboard)/settings/notifications/+page.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/notifications/notifications-form.svelte create mode 100644 apps/web/src/routes/(dashboard)/settings/profile-form.svelte delete mode 100644 apps/web/src/routes/+page.server.ts diff --git a/apps/web/package.json b/apps/web/package.json index 33f9d75..6f45161 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -29,19 +29,24 @@ "prettier-plugin-tailwindcss": "^0.5.9", "svelte": "^4.2.7", "svelte-check": "^3.6.0", + "sveltekit-superforms": "^1.13.4", "tailwindcss": "^3.3.6", "tslib": "^2.4.1", "typescript": "^5.0.0", - "vite": "^5.0.3" + "vite": "^5.0.3", + "zod": "^3.22.4" }, "type": "module", "dependencies": { "bits-ui": "^0.15.1", "clsx": "^2.1.0", + "cmdk-sv": "^0.0.13", + "formsnap": "^0.4.3", "lucide-svelte": "^0.316.0", "mode-watcher": "^0.1.2", "pocketbase": "^0.21.0", "radix-icons-svelte": "^1.2.1", + "svelte-headless-table": "^0.18.1", "tailwind-merge": "^2.2.1", "tailwind-variants": "^0.1.20" } diff --git a/apps/web/pnpm-lock.yaml b/apps/web/pnpm-lock.yaml index 161bb8b..6ea71e9 100644 --- a/apps/web/pnpm-lock.yaml +++ b/apps/web/pnpm-lock.yaml @@ -11,6 +11,12 @@ dependencies: clsx: specifier: ^2.1.0 version: 2.1.0 + cmdk-sv: + specifier: ^0.0.13 + version: 0.0.13(svelte@4.2.9) + formsnap: + specifier: ^0.4.3 + version: 0.4.3(svelte@4.2.9)(sveltekit-superforms@1.13.4)(zod@3.22.4) lucide-svelte: specifier: ^0.316.0 version: 0.316.0(svelte@4.2.9) @@ -23,6 +29,9 @@ dependencies: radix-icons-svelte: specifier: ^1.2.1 version: 1.2.1 + svelte-headless-table: + specifier: ^0.18.1 + version: 0.18.1(svelte@4.2.9) tailwind-merge: specifier: ^2.2.1 version: 2.2.1 @@ -82,6 +91,9 @@ devDependencies: svelte-check: specifier: ^3.6.0 version: 3.6.3(postcss-load-config@5.0.2)(postcss@8.4.33)(svelte@4.2.9) + sveltekit-superforms: + specifier: ^1.13.4 + version: 1.13.4(@sveltejs/kit@2.5.0)(svelte@4.2.9)(zod@3.22.4) tailwindcss: specifier: ^3.3.6 version: 3.4.1 @@ -94,6 +106,9 @@ devDependencies: vite: specifier: ^5.0.3 version: 5.0.12 + zod: + specifier: ^3.22.4 + version: 3.22.4 packages: @@ -126,7 +141,6 @@ packages: cpu: [ppc64] os: [aix] requiresBuild: true - dev: true optional: true /@esbuild/android-arm64@0.19.12: @@ -135,7 +149,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm@0.19.12: @@ -144,7 +157,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-x64@0.19.12: @@ -153,7 +165,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/darwin-arm64@0.19.12: @@ -162,7 +173,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-x64@0.19.12: @@ -171,7 +181,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-arm64@0.19.12: @@ -180,7 +189,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-x64@0.19.12: @@ -189,7 +197,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm64@0.19.12: @@ -198,7 +205,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm@0.19.12: @@ -207,7 +213,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ia32@0.19.12: @@ -216,7 +221,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-loong64@0.19.12: @@ -225,7 +229,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-mips64el@0.19.12: @@ -234,7 +237,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ppc64@0.19.12: @@ -243,7 +245,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-riscv64@0.19.12: @@ -252,7 +253,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-s390x@0.19.12: @@ -261,7 +261,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-x64@0.19.12: @@ -270,7 +269,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/netbsd-x64@0.19.12: @@ -279,7 +277,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true /@esbuild/openbsd-x64@0.19.12: @@ -288,7 +285,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true /@esbuild/sunos-x64@0.19.12: @@ -297,7 +293,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true /@esbuild/win32-arm64@0.19.12: @@ -306,7 +301,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-ia32@0.19.12: @@ -315,7 +309,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-x64@0.19.12: @@ -324,7 +317,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): @@ -443,6 +435,20 @@ packages: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + /@melt-ui/svelte@0.61.2(svelte@4.2.9): + resolution: {integrity: sha512-BHkD9G31zQBToA4euDRBgTQRvWxT9scufOVCXgDO6HKTvyxFspbWT2bgiSFqAK4BbAGDn9Ao36Q8F9O71KN4OQ==} + peerDependencies: + svelte: '>=3 <5' + dependencies: + '@floating-ui/core': 1.6.0 + '@floating-ui/dom': 1.6.1 + '@internationalized/date': 3.5.1 + dequal: 2.0.3 + focus-trap: 7.5.4 + nanoid: 4.0.2 + svelte: 4.2.9 + dev: false + /@melt-ui/svelte@0.68.0(svelte@4.2.9): resolution: {integrity: sha512-/QvA98hnYEodZtHJ71+ocum/WWp30hVNt3F8uiZKnNYwZDaiQYjlyR9AaGKYcZLCe6R68op1mfCzc0kTzJilyA==} peerDependencies: @@ -483,14 +489,12 @@ packages: /@polka/url@1.0.0-next.24: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} - dev: true /@rollup/rollup-android-arm-eabi@4.9.6: resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@rollup/rollup-android-arm64@4.9.6: @@ -498,7 +502,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@rollup/rollup-darwin-arm64@4.9.6: @@ -506,7 +509,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@rollup/rollup-darwin-x64@4.9.6: @@ -514,7 +516,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-arm-gnueabihf@4.9.6: @@ -522,7 +523,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-arm64-gnu@4.9.6: @@ -530,7 +530,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-arm64-musl@4.9.6: @@ -538,7 +537,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-riscv64-gnu@4.9.6: @@ -546,7 +544,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-x64-gnu@4.9.6: @@ -554,7 +551,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-linux-x64-musl@4.9.6: @@ -562,7 +558,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@rollup/rollup-win32-arm64-msvc@4.9.6: @@ -570,7 +565,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@rollup/rollup-win32-ia32-msvc@4.9.6: @@ -578,7 +572,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@rollup/rollup-win32-x64-msvc@4.9.6: @@ -586,7 +579,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@sveltejs/adapter-auto@3.1.1(@sveltejs/kit@2.5.0): @@ -623,7 +615,6 @@ packages: svelte: 4.2.9 tiny-glob: 0.2.9 vite: 5.0.12 - dev: true /@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12): resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==} @@ -639,7 +630,6 @@ packages: vite: 5.0.12 transitivePeerDependencies: - supports-color - dev: true /@sveltejs/vite-plugin-svelte@3.0.2(svelte@4.2.9)(vite@5.0.12): resolution: {integrity: sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==} @@ -659,7 +649,6 @@ packages: vitefu: 0.2.5(vite@5.0.12) transitivePeerDependencies: - supports-color - dev: true /@swc/helpers@0.5.3: resolution: {integrity: sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==} @@ -669,7 +658,6 @@ packages: /@types/cookie@0.6.0: resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - dev: true /@types/eslint@8.56.0: resolution: {integrity: sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==} @@ -935,6 +923,16 @@ packages: svelte: 4.2.9 dev: false + /bits-ui@0.9.9(svelte@4.2.9): + resolution: {integrity: sha512-LkdkyTtpXdkjBzPZJVJgpcre4fut6DONoprMfadHFo82HNUhph+02CxDjYEcZcThb5z4YjSxMlCYvQPZm+YtfQ==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + '@melt-ui/svelte': 0.61.2(svelte@4.2.9) + nanoid: 5.0.4 + svelte: 4.2.9 + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1008,6 +1006,16 @@ packages: engines: {node: '>=6'} dev: false + /cmdk-sv@0.0.13(svelte@4.2.9): + resolution: {integrity: sha512-WrYn0MMdVyzJx+KuOQy028/7mv+uMwO1cxVBM0uJ4KA+50PX792epsj8Yw3It8WfWR8Rae7siBCg54mIAlKsiw==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + bits-ui: 0.9.9(svelte@4.2.9) + nanoid: 5.0.4 + svelte: 4.2.9 + dev: false + /code-red@1.0.4: resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} dependencies: @@ -1037,7 +1045,6 @@ packages: /cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} - dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -1069,7 +1076,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1078,7 +1084,6 @@ packages: /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - dev: true /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} @@ -1091,7 +1096,6 @@ packages: /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} - dev: true /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -1159,7 +1163,6 @@ packages: '@esbuild/win32-arm64': 0.19.12 '@esbuild/win32-ia32': 0.19.12 '@esbuild/win32-x64': 0.19.12 - dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -1280,7 +1283,6 @@ packages: /esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} - dev: true /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} @@ -1394,6 +1396,18 @@ packages: cross-spawn: 7.0.3 signal-exit: 4.1.0 + /formsnap@0.4.3(svelte@4.2.9)(sveltekit-superforms@1.13.4)(zod@3.22.4): + resolution: {integrity: sha512-PWVq78XVUHhAU1tcVGKeGamk6B4Opkk1uVNRW2YofiQpnA5Bry1c3TQjB9cVDw5u4oAwmDvIoAzVHlrAIgc+tw==} + peerDependencies: + svelte: ^4.0.0 + sveltekit-superforms: ^1.7.1 + zod: ^3.22.2 + dependencies: + svelte: 4.2.9 + sveltekit-superforms: 1.13.4(@sveltejs/kit@2.5.0)(svelte@4.2.9)(zod@3.22.4) + zod: 3.22.4 + dev: false + /fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} dev: true @@ -1455,7 +1469,6 @@ packages: /globalyzer@0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - dev: true /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} @@ -1471,7 +1484,6 @@ packages: /globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1507,7 +1519,6 @@ packages: /import-meta-resolve@4.0.0: resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -1607,7 +1618,10 @@ packages: /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - dev: true + + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} /known-css-properties@0.29.0: resolution: {integrity: sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==} @@ -1728,16 +1742,13 @@ packages: /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - dev: true /mrmime@2.0.0: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} - dev: true /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -1751,6 +1762,12 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /nanoid@4.0.2: + resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + dev: false + /nanoid@5.0.4: resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==} engines: {node: ^18 || >=20} @@ -2144,7 +2161,6 @@ packages: '@rollup/rollup-win32-ia32-msvc': 4.9.6 '@rollup/rollup-win32-x64-msvc': 4.9.6 fsevents: 2.3.3 - dev: true /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2156,7 +2172,6 @@ packages: engines: {node: '>=6'} dependencies: mri: 1.2.0 - dev: true /sander@0.5.1: resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} @@ -2177,7 +2192,6 @@ packages: /set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -2200,7 +2214,6 @@ packages: '@polka/url': 1.0.0-next.24 mrmime: 2.0.0 totalist: 3.0.1 - dev: true /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -2329,6 +2342,17 @@ packages: svelte: 4.2.9 dev: true + /svelte-headless-table@0.18.1(svelte@4.2.9): + resolution: {integrity: sha512-pcZIi36u8RV9B3m0oG6000az7tvT6CCK+c8qBUuNUQSChsfJySC5ryGdJSTFlAYBVRGUgZlqYOKGUgSbOfIrnA==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + svelte: 4.2.9 + svelte-keyed: 2.0.0(svelte@4.2.9) + svelte-render: 2.0.0(svelte@4.2.9) + svelte-subscribe: 2.0.1(svelte@4.2.9) + dev: false + /svelte-hmr@0.15.3(svelte@4.2.9): resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==} engines: {node: ^12.20 || ^14.13.1 || >= 16} @@ -2336,7 +2360,14 @@ packages: svelte: ^3.19.0 || ^4.0.0 dependencies: svelte: 4.2.9 - dev: true + + /svelte-keyed@2.0.0(svelte@4.2.9): + resolution: {integrity: sha512-7TeEn+QbJC2OJrHiuM0T8vMBkms3DNpTE+Ir+NtnVBnBMA78aL4f1ft9t0Hn/pBbD/TnIXi4YfjFRAgtN+DZ5g==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + svelte: 4.2.9 + dev: false /svelte-preprocess@5.1.3(postcss-load-config@5.0.2)(postcss@8.4.33)(svelte@4.2.9)(typescript@5.3.3): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} @@ -2387,6 +2418,23 @@ packages: typescript: 5.3.3 dev: true + /svelte-render@2.0.0(svelte@4.2.9): + resolution: {integrity: sha512-YWMwXGlUlnlb8QhEd138Kmay2KfU6sE7jj3epoYZuHe3M2voGdXfgqYJY7gGizW55N0zDWtuRaY3Rh6PGcGQyQ==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + svelte: 4.2.9 + svelte-subscribe: 2.0.1(svelte@4.2.9) + dev: false + + /svelte-subscribe@2.0.1(svelte@4.2.9): + resolution: {integrity: sha512-eKXIjLxB4C7eQWPqKEdxcGfNXm2g/qJ67zmEZK/GigCZMfrTR3m7DPY93R6MX+5uoqM1FRYxl8LZ1oy4URWi2A==} + peerDependencies: + svelte: ^4.0.0 + dependencies: + svelte: 4.2.9 + dev: false + /svelte@4.2.9: resolution: {integrity: sha512-hsoB/WZGEPFXeRRLPhPrbRz67PhP6sqYgvwcAs+gWdSQSvNDw+/lTeUJSWe5h2xC97Fz/8QxAOqItwBzNJPU8w==} engines: {node: '>=16'} @@ -2406,6 +2454,19 @@ packages: magic-string: 0.30.5 periscopic: 3.1.0 + /sveltekit-superforms@1.13.4(@sveltejs/kit@2.5.0)(svelte@4.2.9)(zod@3.22.4): + resolution: {integrity: sha512-rM2+Ictaw7OAIorCLmvg82orci/mtO9ZouI4emtx8SyYngx9aED+eNZlHPLufgB6D7geL2a+hMSFtM3zmMQixQ==} + peerDependencies: + '@sveltejs/kit': 1.x || 2.x + svelte: 3.x || 4.x + zod: 3.x + dependencies: + '@sveltejs/kit': 2.5.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.9)(vite@5.0.12) + devalue: 4.3.2 + klona: 2.0.6 + svelte: 4.2.9 + zod: 3.22.4 + /tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} dev: false @@ -2480,7 +2541,6 @@ packages: dependencies: globalyzer: 0.1.0 globrex: 0.1.2 - dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -2491,7 +2551,6 @@ packages: /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - dev: true /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} @@ -2579,7 +2638,6 @@ packages: rollup: 4.9.6 optionalDependencies: fsevents: 2.3.3 - dev: true /vitefu@0.2.5(vite@5.0.12): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} @@ -2590,7 +2648,6 @@ packages: optional: true dependencies: vite: 5.0.12 - dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -2636,3 +2693,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} diff --git a/apps/web/src/app.pcss b/apps/web/src/app.pcss index b97609b..671c1fb 100644 --- a/apps/web/src/app.pcss +++ b/apps/web/src/app.pcss @@ -23,7 +23,7 @@ --border: 0 0% 89.8%; --input: 0 0% 89.8%; --ring: 0 72.2% 50.6%; - --radius: 0rem; + --radius: 0.5rem; } .dark { --background: 0 0% 3.9%; diff --git a/apps/web/src/lib/components/site/icons/index.ts b/apps/web/src/lib/components/site/icons/index.ts index 31b1354..7f5bb39 100644 --- a/apps/web/src/lib/components/site/icons/index.ts +++ b/apps/web/src/lib/components/site/icons/index.ts @@ -1,5 +1,5 @@ import type { Icon as LucideIcon } from 'lucide-svelte'; -import { Loader2 } from 'lucide-svelte'; +import { ArrowRight, Loader2 } from 'lucide-svelte'; import { GithubLogo, VercelLogo, LinkedinLogo } from 'radix-icons-svelte'; import Logo from './logo.svelte'; import Svelte from './svelte.svelte'; @@ -14,5 +14,6 @@ export const Icons = { svelte: Svelte, vercel: VercelLogo, linkedIn: LinkedinLogo, - spinner: Loader2 + spinner: Loader2, + arrowRight: ArrowRight, }; diff --git a/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte b/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte new file mode 100644 index 0000000..a1ca69f --- /dev/null +++ b/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/avatar/avatar-image.svelte b/apps/web/src/lib/components/ui/avatar/avatar-image.svelte new file mode 100644 index 0000000..27b0e7d --- /dev/null +++ b/apps/web/src/lib/components/ui/avatar/avatar-image.svelte @@ -0,0 +1,18 @@ + + + diff --git a/apps/web/src/lib/components/ui/avatar/avatar.svelte b/apps/web/src/lib/components/ui/avatar/avatar.svelte new file mode 100644 index 0000000..99ae927 --- /dev/null +++ b/apps/web/src/lib/components/ui/avatar/avatar.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/avatar/index.ts b/apps/web/src/lib/components/ui/avatar/index.ts new file mode 100644 index 0000000..b08c780 --- /dev/null +++ b/apps/web/src/lib/components/ui/avatar/index.ts @@ -0,0 +1,13 @@ +import Root from "./avatar.svelte"; +import Image from "./avatar-image.svelte"; +import Fallback from "./avatar-fallback.svelte"; + +export { + Root, + Image, + Fallback, + // + Root as Avatar, + Image as AvatarImage, + Fallback as AvatarFallback +}; diff --git a/apps/web/src/lib/components/ui/badge/badge.svelte b/apps/web/src/lib/components/ui/badge/badge.svelte new file mode 100644 index 0000000..58ec3b0 --- /dev/null +++ b/apps/web/src/lib/components/ui/badge/badge.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/badge/index.ts b/apps/web/src/lib/components/ui/badge/index.ts new file mode 100644 index 0000000..2fa5bf2 --- /dev/null +++ b/apps/web/src/lib/components/ui/badge/index.ts @@ -0,0 +1,22 @@ +import { tv, type VariantProps } from "tailwind-variants"; + +export { default as Badge } from "./badge.svelte"; +export const badgeVariants = tv({ + base: "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 select-none", + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + outline: "text-foreground" + } + }, + defaultVariants: { + variant: "default" + } +}); + +export type Variant = VariantProps["variant"]; diff --git a/apps/web/src/lib/components/ui/checkbox/checkbox.svelte b/apps/web/src/lib/components/ui/checkbox/checkbox.svelte new file mode 100644 index 0000000..d824610 --- /dev/null +++ b/apps/web/src/lib/components/ui/checkbox/checkbox.svelte @@ -0,0 +1,34 @@ + + + + + {#if isIndeterminate} + + {:else} + + {/if} + + diff --git a/apps/web/src/lib/components/ui/checkbox/index.ts b/apps/web/src/lib/components/ui/checkbox/index.ts new file mode 100644 index 0000000..5fba5a4 --- /dev/null +++ b/apps/web/src/lib/components/ui/checkbox/index.ts @@ -0,0 +1,6 @@ +import Root from "./checkbox.svelte"; +export { + Root, + // + Root as Checkbox +}; diff --git a/apps/web/src/lib/components/ui/command/command-dialog.svelte b/apps/web/src/lib/components/ui/command/command-dialog.svelte new file mode 100644 index 0000000..4e71dfd --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-dialog.svelte @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/apps/web/src/lib/components/ui/command/command-empty.svelte b/apps/web/src/lib/components/ui/command/command-empty.svelte new file mode 100644 index 0000000..dc74bf5 --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-empty.svelte @@ -0,0 +1,12 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/command/command-group.svelte b/apps/web/src/lib/components/ui/command/command-group.svelte new file mode 100644 index 0000000..198a3df --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-group.svelte @@ -0,0 +1,18 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/command/command-input.svelte b/apps/web/src/lib/components/ui/command/command-input.svelte new file mode 100644 index 0000000..4752823 --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-input.svelte @@ -0,0 +1,23 @@ + + +
+ + +
diff --git a/apps/web/src/lib/components/ui/command/command-item.svelte b/apps/web/src/lib/components/ui/command/command-item.svelte new file mode 100644 index 0000000..89a9e97 --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-item.svelte @@ -0,0 +1,19 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/command/command-list.svelte b/apps/web/src/lib/components/ui/command/command-list.svelte new file mode 100644 index 0000000..6b1c915 --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-list.svelte @@ -0,0 +1,15 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/command/command-separator.svelte b/apps/web/src/lib/components/ui/command/command-separator.svelte new file mode 100644 index 0000000..51aa2da --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-separator.svelte @@ -0,0 +1,10 @@ + + + diff --git a/apps/web/src/lib/components/ui/command/command-shortcut.svelte b/apps/web/src/lib/components/ui/command/command-shortcut.svelte new file mode 100644 index 0000000..517e9e9 --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command-shortcut.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/command/command.svelte b/apps/web/src/lib/components/ui/command/command.svelte new file mode 100644 index 0000000..2806759 --- /dev/null +++ b/apps/web/src/lib/components/ui/command/command.svelte @@ -0,0 +1,22 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/command/index.ts b/apps/web/src/lib/components/ui/command/index.ts new file mode 100644 index 0000000..6fdefa6 --- /dev/null +++ b/apps/web/src/lib/components/ui/command/index.ts @@ -0,0 +1,37 @@ +import { Command as CommandPrimitive } from "cmdk-sv"; + +import Root from "./command.svelte"; +import Dialog from "./command-dialog.svelte"; +import Empty from "./command-empty.svelte"; +import Group from "./command-group.svelte"; +import Item from "./command-item.svelte"; +import Input from "./command-input.svelte"; +import List from "./command-list.svelte"; +import Separator from "./command-separator.svelte"; +import Shortcut from "./command-shortcut.svelte"; + +const Loading = CommandPrimitive.Loading; + +export { + Root, + Dialog, + Empty, + Group, + Item, + Input, + List, + Separator, + Shortcut, + Loading, + // + Root as Command, + Dialog as CommandDialog, + Empty as CommandEmpty, + Group as CommandGroup, + Item as CommandItem, + Input as CommandInput, + List as CommandList, + Separator as CommandSeparator, + Shortcut as CommandShortcut, + Loading as CommandLoading +}; diff --git a/apps/web/src/lib/components/ui/dialog/dialog-content.svelte b/apps/web/src/lib/components/ui/dialog/dialog-content.svelte new file mode 100644 index 0000000..9f78e8a --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/dialog-content.svelte @@ -0,0 +1,36 @@ + + + + + + + + + Close + + + diff --git a/apps/web/src/lib/components/ui/dialog/dialog-description.svelte b/apps/web/src/lib/components/ui/dialog/dialog-description.svelte new file mode 100644 index 0000000..7250e09 --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/dialog-description.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte b/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte new file mode 100644 index 0000000..3c41773 --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte @@ -0,0 +1,16 @@ + + +
+ +
diff --git a/apps/web/src/lib/components/ui/dialog/dialog-header.svelte b/apps/web/src/lib/components/ui/dialog/dialog-header.svelte new file mode 100644 index 0000000..180244f --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/dialog-header.svelte @@ -0,0 +1,13 @@ + + +
+ +
diff --git a/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte b/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte new file mode 100644 index 0000000..ffec38c --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte @@ -0,0 +1,21 @@ + + + diff --git a/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte b/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte new file mode 100644 index 0000000..400e62b --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dialog/dialog-title.svelte b/apps/web/src/lib/components/ui/dialog/dialog-title.svelte new file mode 100644 index 0000000..fb863c9 --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/dialog-title.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/dialog/index.ts b/apps/web/src/lib/components/ui/dialog/index.ts new file mode 100644 index 0000000..c05c48e --- /dev/null +++ b/apps/web/src/lib/components/ui/dialog/index.ts @@ -0,0 +1,34 @@ +import { Dialog as DialogPrimitive } from "bits-ui"; + +const Root = DialogPrimitive.Root; +const Trigger = DialogPrimitive.Trigger; + +import Title from "./dialog-title.svelte"; +import Portal from "./dialog-portal.svelte"; +import Footer from "./dialog-footer.svelte"; +import Header from "./dialog-header.svelte"; +import Overlay from "./dialog-overlay.svelte"; +import Content from "./dialog-content.svelte"; +import Description from "./dialog-description.svelte"; + +export { + Root, + Title, + Portal, + Footer, + Header, + Trigger, + Overlay, + Content, + Description, + // + Root as Dialog, + Title as DialogTitle, + Portal as DialogPortal, + Footer as DialogFooter, + Header as DialogHeader, + Trigger as DialogTrigger, + Overlay as DialogOverlay, + Content as DialogContent, + Description as DialogDescription +}; diff --git a/apps/web/src/lib/components/ui/form/form-button.svelte b/apps/web/src/lib/components/ui/form/form-button.svelte new file mode 100644 index 0000000..024f9dc --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-button.svelte @@ -0,0 +1,9 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/form/form-checkbox.svelte b/apps/web/src/lib/components/ui/form/form-checkbox.svelte new file mode 100644 index 0000000..46b9151 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-checkbox.svelte @@ -0,0 +1,26 @@ + + + { + onCheckedChange?.(v); + setValue(v); + }} + {...$$restProps} + on:click + on:keydown +/> + diff --git a/apps/web/src/lib/components/ui/form/form-description.svelte b/apps/web/src/lib/components/ui/form/form-description.svelte new file mode 100644 index 0000000..9f45008 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-description.svelte @@ -0,0 +1,16 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/form/form-input.svelte b/apps/web/src/lib/components/ui/form/form-input.svelte new file mode 100644 index 0000000..224f44a --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-input.svelte @@ -0,0 +1,28 @@ + + + diff --git a/apps/web/src/lib/components/ui/form/form-item.svelte b/apps/web/src/lib/components/ui/form/form-item.svelte new file mode 100644 index 0000000..0e5daa4 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-item.svelte @@ -0,0 +1,12 @@ + + +
+ +
diff --git a/apps/web/src/lib/components/ui/form/form-label.svelte b/apps/web/src/lib/components/ui/form/form-label.svelte new file mode 100644 index 0000000..2a4ead6 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-label.svelte @@ -0,0 +1,17 @@ + + + diff --git a/apps/web/src/lib/components/ui/form/form-native-select.svelte b/apps/web/src/lib/components/ui/form/form-native-select.svelte new file mode 100644 index 0000000..d046bb3 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-native-select.svelte @@ -0,0 +1,26 @@ + + +
+ + + + +
diff --git a/apps/web/src/lib/components/ui/form/form-radio-group.svelte b/apps/web/src/lib/components/ui/form/form-radio-group.svelte new file mode 100644 index 0000000..91f6b80 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-radio-group.svelte @@ -0,0 +1,22 @@ + + + { + onValueChange?.(v); + setValue(v); + }} + {...$$restProps} +> + + + diff --git a/apps/web/src/lib/components/ui/form/form-select-trigger.svelte b/apps/web/src/lib/components/ui/form/form-select-trigger.svelte new file mode 100644 index 0000000..27990d6 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-select-trigger.svelte @@ -0,0 +1,18 @@ + + + + + + + diff --git a/apps/web/src/lib/components/ui/form/form-select.svelte b/apps/web/src/lib/components/ui/form/form-select.svelte new file mode 100644 index 0000000..ff022bb --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-select.svelte @@ -0,0 +1,20 @@ + + + { + onSelectedChange?.(v); + setValue(v ? v.value : undefined); + }} + {...$$restProps} +> + + + diff --git a/apps/web/src/lib/components/ui/form/form-switch.svelte b/apps/web/src/lib/components/ui/form/form-switch.svelte new file mode 100644 index 0000000..8b909dc --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-switch.svelte @@ -0,0 +1,24 @@ + + + { + onCheckedChange?.(v); + setValue(v); + }} + {...$$restProps} + on:click + on:keydown +/> + diff --git a/apps/web/src/lib/components/ui/form/form-textarea.svelte b/apps/web/src/lib/components/ui/form/form-textarea.svelte new file mode 100644 index 0000000..edc553d --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-textarea.svelte @@ -0,0 +1,29 @@ + + +