+
-
![Uploaded Photo]()
{
+ setSize(index);
+ }
+ "
/>
+
-
+
+
+
+
+
+
+ Rotate left
+
+
+
+
+
+
+
+ Flip horizontal
+
+
-->
+
+
+
+
+
+ Flip vertical
+
+
+
+
+
+
+
+ Rotate right
+
+
-
{{ photo.photoName }}
+
{{ photo.photoName }}
-
+
diff --git a/frontend/package.json b/frontend/package.json
index b7acd483..33ff0094 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -76,6 +76,7 @@
"tailwindcss-animate": "^1.0.7",
"vaul-vue": "^0.4.1",
"vue": "3.4.8",
+ "vue-advanced-cropper": "^2.8.9",
"vue-router": "^4.5.0",
"vue-sonner": "^1.3.0"
}
diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml
index e8385c5f..64298b64 100644
--- a/frontend/pnpm-lock.yaml
+++ b/frontend/pnpm-lock.yaml
@@ -110,6 +110,9 @@ importers:
vue:
specifier: 3.4.8
version: 3.4.8(typescript@5.6.2)
+ vue-advanced-cropper:
+ specifier: ^2.8.9
+ version: 2.8.9(vue@3.4.8(typescript@5.6.2))
vue-router:
specifier: ^4.5.0
version: 4.5.0(vue@3.4.8(typescript@5.6.2))
@@ -2510,6 +2513,9 @@ packages:
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+ classnames@2.5.1:
+ resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
+
clean-regexp@1.0.0:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
engines: {node: '>=4'}
@@ -2763,6 +2769,9 @@ packages:
de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ debounce@1.2.1:
+ resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
+
debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
@@ -2926,6 +2935,9 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ easy-bem@1.1.1:
+ resolution: {integrity: sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A==}
+
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
@@ -5891,6 +5903,12 @@ packages:
vscode-uri@3.1.0:
resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+ vue-advanced-cropper@2.8.9:
+ resolution: {integrity: sha512-1jc5gO674kVGpJKekoaol6ZlwaF5VYDLSBwBOUpViW0IOrrRsyLw6XNszjEqgbavvqinlKNS6Kqlom3B5M72Tw==}
+ engines: {node: '>=8', npm: '>=5'}
+ peerDependencies:
+ vue: ^3.0.0
+
vue-bundle-renderer@2.1.1:
resolution: {integrity: sha512-+qALLI5cQncuetYOXp4yScwYvqh8c6SMXee3B+M7oTZxOgtESP0l4j/fXdEJoZ+EdMxkGWIj+aSEyjXkOdmd7g==}
@@ -8915,6 +8933,8 @@ snapshots:
dependencies:
clsx: 2.1.1
+ classnames@2.5.1: {}
+
clean-regexp@1.0.0:
dependencies:
escape-string-regexp: 1.0.5
@@ -9157,6 +9177,8 @@ snapshots:
de-indent@1.0.2: {}
+ debounce@1.2.1: {}
+
debug@2.6.9:
dependencies:
ms: 2.0.0
@@ -9284,6 +9306,8 @@ snapshots:
eastasianwidth@0.2.0: {}
+ easy-bem@1.1.1: {}
+
ee-first@1.1.1: {}
ejs@3.1.10:
@@ -12728,6 +12752,13 @@ snapshots:
vscode-uri@3.1.0: {}
+ vue-advanced-cropper@2.8.9(vue@3.4.8(typescript@5.6.2)):
+ dependencies:
+ classnames: 2.5.1
+ debounce: 1.2.1
+ easy-bem: 1.1.1
+ vue: 3.4.8(typescript@5.6.2)
+
vue-bundle-renderer@2.1.1:
dependencies:
ufo: 1.5.4