From 64ea25e89e4bdcafd7209fc1300cb7a46a34ffdb Mon Sep 17 00:00:00 2001
From: sam
Date: Mon, 24 Feb 2025 21:32:20 +0100
Subject: [PATCH] feat(frontend): avatar cropping
---
Foxnouns.Frontend/package.json | 3 +-
Foxnouns.Frontend/pnpm-lock.yaml | 22 +++--
.../lib/components/editor/AvatarEditor.svelte | 89 ++++++++++++++++++-
.../src/lib/i18n/locales/en.json | 4 +-
4 files changed, 108 insertions(+), 10 deletions(-)
diff --git a/Foxnouns.Frontend/package.json b/Foxnouns.Frontend/package.json
index d140f11..a76a918 100644
--- a/Foxnouns.Frontend/package.json
+++ b/Foxnouns.Frontend/package.json
@@ -15,7 +15,7 @@
"@sveltejs/adapter-node": "^5.2.10",
"@sveltejs/kit": "^2.12.1",
"@sveltejs/vite-plugin-svelte": "^5.0.2",
- "@sveltestrap/sveltestrap": "^6.2.7",
+ "@sveltestrap/sveltestrap": "^7.1.0",
"@types/eslint": "^9.6.1",
"@types/luxon": "^3.4.2",
"@types/markdown-it": "^14.1.2",
@@ -31,6 +31,7 @@
"svelte": "^5.14.3",
"svelte-bootstrap-icons": "^3.1.1",
"svelte-check": "^4.1.1",
+ "svelte-easy-crop": "^4.0.0",
"sveltekit-i18n": "^2.4.2",
"typescript": "^5.7.2",
"typescript-eslint": "^8.18.1",
diff --git a/Foxnouns.Frontend/pnpm-lock.yaml b/Foxnouns.Frontend/pnpm-lock.yaml
index c77b36c..46b0010 100644
--- a/Foxnouns.Frontend/pnpm-lock.yaml
+++ b/Foxnouns.Frontend/pnpm-lock.yaml
@@ -55,8 +55,8 @@ importers:
specifier: ^5.0.2
version: 5.0.2(svelte@5.14.3)(vite@6.0.3(@types/node@22.12.0)(sass@1.83.0))
'@sveltestrap/sveltestrap':
- specifier: ^6.2.7
- version: 6.2.7(svelte@5.14.3)
+ specifier: ^7.1.0
+ version: 7.1.0(svelte@5.14.3)
'@types/eslint':
specifier: ^9.6.1
version: 9.6.1
@@ -102,6 +102,9 @@ importers:
svelte-check:
specifier: ^4.1.1
version: 4.1.1(picomatch@4.0.2)(svelte@5.14.3)(typescript@5.7.2)
+ svelte-easy-crop:
+ specifier: ^4.0.0
+ version: 4.0.0(svelte@5.14.3)
sveltekit-i18n:
specifier: ^2.4.2
version: 2.4.2(svelte@5.14.3)
@@ -1002,8 +1005,8 @@ packages:
'@sveltekit-i18n/parser-default@1.1.1':
resolution: {integrity: sha512-/gtzLlqm/sox7EoPKD56BxGZktK/syGc79EbJAPWY5KVitQD9SM0TP8yJCqDxTVPk7Lk0WJhrBGUE2Nn0f5M1w==}
- '@sveltestrap/sveltestrap@6.2.7':
- resolution: {integrity: sha512-WwLLfAFUb42BGuRrf3Vbct30bQMzlEMMipN/MfxhjuLTmLQeW9muVJfPyvjtWS+mY+RjkSCoHvAp/ZobP1NLlQ==}
+ '@sveltestrap/sveltestrap@7.1.0':
+ resolution: {integrity: sha512-TpIx25kqLV+z+VD3yfqYayOI1IaCeWFbT0uqM6NfA4vQgDs9PjFwmjkU4YEAlV/ngs9e7xPmaRWE7lkrg4Miow==}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0 || ^5.0.0-next.0
@@ -1967,6 +1970,11 @@ packages:
svelte: ^4.0.0 || ^5.0.0-next.0
typescript: '>=5.0.0'
+ svelte-easy-crop@4.0.0:
+ resolution: {integrity: sha512-/asrrCYypXwCsPqJ07m7s7QArJwrdfEt7D1UN9hC4WF3GgEtuqmGuVi5DGeJVtBpKu5388gYFtCgQz9lA+/Rtg==}
+ peerDependencies:
+ svelte: ^4.0.0 || ^5.0.0
+
svelte-eslint-parser@0.43.0:
resolution: {integrity: sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -3079,7 +3087,7 @@ snapshots:
'@sveltekit-i18n/parser-default@1.1.1': {}
- '@sveltestrap/sveltestrap@6.2.7(svelte@5.14.3)':
+ '@sveltestrap/sveltestrap@7.1.0(svelte@5.14.3)':
dependencies:
'@popperjs/core': 2.11.8
svelte: 5.14.3
@@ -4051,6 +4059,10 @@ snapshots:
transitivePeerDependencies:
- picomatch
+ svelte-easy-crop@4.0.0(svelte@5.14.3):
+ dependencies:
+ svelte: 5.14.3
+
svelte-eslint-parser@0.43.0(svelte@5.14.3):
dependencies:
eslint-scope: 7.2.2
diff --git a/Foxnouns.Frontend/src/lib/components/editor/AvatarEditor.svelte b/Foxnouns.Frontend/src/lib/components/editor/AvatarEditor.svelte
index e18c6b6..a945bbf 100644
--- a/Foxnouns.Frontend/src/lib/components/editor/AvatarEditor.svelte
+++ b/Foxnouns.Frontend/src/lib/components/editor/AvatarEditor.svelte
@@ -1,7 +1,8 @@
@@ -44,6 +86,41 @@
+ (cropperOpen = !cropperOpen)}
+>
+
+
+ {#if uncroppedAvatar}
+
+ {/if}
+
+
+
+
{/if}
+
+
diff --git a/Foxnouns.Frontend/src/lib/i18n/locales/en.json b/Foxnouns.Frontend/src/lib/i18n/locales/en.json
index 7f2b2ab..7145181 100644
--- a/Foxnouns.Frontend/src/lib/i18n/locales/en.json
+++ b/Foxnouns.Frontend/src/lib/i18n/locales/en.json
@@ -291,7 +291,9 @@
"custom-preference-muted": "Show as muted text",
"custom-preference-favourite": "Treat like favourite",
"custom-preference-notice": "Want to edit your custom preferences?",
- "custom-preference-notice-link": "Go to settings"
+ "custom-preference-notice-link": "Go to settings",
+ "crop-avatar-header": "Crop avatar",
+ "crop-avatar-button": "Crop"
},
"cancel": "Cancel",
"report": {