From e0a7d520b24edc3e5bfc6fdfc1357b4c7bef1837 Mon Sep 17 00:00:00 2001 From: Samuel Weirich <4281791+SamuelWei@users.noreply.github.com> Date: Wed, 15 Apr 2026 21:33:53 +0200 Subject: [PATCH 01/12] Replace vue-cropperjs with cropperjs Show profile image rounded during cropping and inside profile page --- package-lock.json | 14 +--- package.json | 2 +- resources/css/app/_cropperjs.css | 36 ++++++++++ resources/css/app/app.css | 1 + resources/js/components/UserAvatar.vue | 8 +-- .../components/UserProfileImageSelector.vue | 65 ++++++++++++------- resources/js/views/AdminUsersNew.vue | 1 - 7 files changed, 83 insertions(+), 44 deletions(-) create mode 100644 resources/css/app/_cropperjs.css diff --git a/package-lock.json b/package-lock.json index 4dcccf4eb..ca27cef69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "axios": "^1.14.0", "chart.js": "^4.5.1", "chartjs-adapter-date-fns": "^3.0.0", + "cropperjs": "^1.6.2", "date-fns": "^4.1.0", "dompurify": "^3.3.3", "dotenv": "^17.4.1", @@ -44,7 +45,6 @@ "vue": "^3.5", "vue-axe": "^3.1.2", "vue-chartjs": "^5.3.3", - "vue-cropperjs": "^5.0.0", "vue-i18n": "^11.3", "vue-multiselect": "^3.5.0", "vue-router": "^5.0.4" @@ -12397,18 +12397,6 @@ "vue": "^3.0.0-0 || ^2.7.0" } }, - "node_modules/vue-cropperjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vue-cropperjs/-/vue-cropperjs-5.0.0.tgz", - "integrity": "sha512-RhnC8O33uRZNkn74aiHZwNHnBJOXWlS4P6gsRI0lw4cZlWjKSCywZI9oSI9POlIPI6OYv30jvnHMXGch85tw7w==", - "license": "MIT", - "dependencies": { - "cropperjs": "^1.5.6" - }, - "peerDependencies": { - "vue": ">=3.0.0" - } - }, "node_modules/vue-eslint-parser": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.4.0.tgz", diff --git a/package.json b/package.json index 09bbe7dd7..bd36a10ba 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "axios": "^1.14.0", "chart.js": "^4.5.1", "chartjs-adapter-date-fns": "^3.0.0", + "cropperjs": "^1.6.2", "date-fns": "^4.1.0", "dompurify": "^3.3.3", "dotenv": "^17.4.1", @@ -76,7 +77,6 @@ "vue": "^3.5", "vue-axe": "^3.1.2", "vue-chartjs": "^5.3.3", - "vue-cropperjs": "^5.0.0", "vue-i18n": "^11.3", "vue-multiselect": "^3.5.0", "vue-router": "^5.0.4" diff --git a/resources/css/app/_cropperjs.css b/resources/css/app/_cropperjs.css new file mode 100644 index 000000000..8fb82bdd7 --- /dev/null +++ b/resources/css/app/_cropperjs.css @@ -0,0 +1,36 @@ +@import "cropperjs/dist/cropper.css"; + +.cropper-container { + img { + display: block; + + /* This rule is very important, please don't ignore this */ + max-width: 100%; + } + + .cropper-view-box, + .cropper-face { + border-radius: 50%; + } + + /* The css styles for `outline` do not follow `border-radius` on iOS/Safari (#979). */ + .cropper-view-box { + outline: 0; + box-shadow: 0 0 0 2px #fff; + } + + .cropper-line { + background-color: #fff; + } + + .cropper-point { + background-color: #fff; + } + + .cropper-point.point-n, + .cropper-point.point-w, + .cropper-point.point-s, + .cropper-point.point-e { + display: none; + } +} diff --git a/resources/css/app/app.css b/resources/css/app/app.css index 0cbdd1cea..ca04289ee 100644 --- a/resources/css/app/app.css +++ b/resources/css/app/app.css @@ -6,3 +6,4 @@ @import "./_profile-image.css"; @import "./_color-select.css"; @import "./_stretched-link.css"; +@import "./_cropperjs.css"; diff --git a/resources/js/components/UserAvatar.vue b/resources/js/components/UserAvatar.vue index 230e043b8..41c3039c2 100644 --- a/resources/js/components/UserAvatar.vue +++ b/resources/js/components/UserAvatar.vue @@ -1,11 +1,11 @@ @@ -30,10 +30,6 @@ const props = defineProps({ type: [String, null], default: null, }, - shape: { - type: String, - default: "circle", - }, }); const avatarLabel = computed(() => { diff --git a/resources/js/components/UserProfileImageSelector.vue b/resources/js/components/UserProfileImageSelector.vue index f3ab26b5e..ce3396156 100644 --- a/resources/js/components/UserProfileImageSelector.vue +++ b/resources/js/components/UserProfileImageSelector.vue @@ -7,7 +7,7 @@ @@ -101,7 +98,7 @@ severity="secondary" :disabled="isLoadingAction" data-test="dialog-cancel-button" - @click="modalVisible = false" + @click="closeModal" />