From a8839ccb643e40c5387e9b5d61cb82b9131401ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Wed, 30 Aug 2023 16:41:57 +0200 Subject: [PATCH] fix: Use Lab for calculating text contrast color value (fix #3084) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- package-lock.json | 11 ++++++ package.json | 1 + src/components/cards/CardItem.vue | 1 + src/mixins/color.js | 63 ++----------------------------- 4 files changed, 16 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8d244015b..e182e9aec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "@nextcloud/router": "^2.1.2", "@nextcloud/vue": "^7.12.4", "blueimp-md5": "^2.19.0", + "chroma-js": "^2.4.2", "dompurify": "^3.0.5", "lodash": "^4.17.21", "markdown-it": "^13.0.1", @@ -6713,6 +6714,11 @@ "fsevents": "~2.3.2" } }, + "node_modules/chroma-js": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz", + "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "license": "MIT", @@ -24826,6 +24832,11 @@ "readdirp": "~3.6.0" } }, + "chroma-js": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.4.2.tgz", + "integrity": "sha512-U9eDw6+wt7V8z5NncY2jJfZa+hUH8XEj8FQHgFJTrUFnJfXYf4Ml4adI2vXZOjqRDpFWtYVWypDfZwnJ+HIR4A==" + }, "chrome-trace-event": { "version": "1.0.3", "peer": true diff --git a/package.json b/package.json index 8028de4fc..cfb79b881 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "@nextcloud/router": "^2.1.2", "@nextcloud/vue": "^7.12.4", "blueimp-md5": "^2.19.0", + "chroma-js": "^2.4.2", "dompurify": "^3.0.5", "lodash": "^4.17.21", "markdown-it": "^13.0.1", diff --git a/src/components/cards/CardItem.vue b/src/components/cards/CardItem.vue index f0a18cf90..a46ffcc9f 100644 --- a/src/components/cards/CardItem.vue +++ b/src/components/cards/CardItem.vue @@ -65,6 +65,7 @@ + 0.5 ? d / (2 - max - min) : d / (max + min) - switch (max) { - case r: - h = (g - b) / d + (g < b ? 6 : 0) - break - case g: - h = (b - r) / d + 2 - break - case b: - h = (r - g) / d + 4 - break - } - h /= 6 - } - return { - h, l, s, - } - }, textColor(hex) { - - const rgb = this.hexToRgb(hex) - if (rgb === null) { - return '#000000' - } - const { l } = this.rgb2hls(rgb) - - if (l < 0.5) { - return '#ffffff' - } else { - return '#000000' - } - + return chroma(hex).get('lab.l') > 50 ? '#000000' : '#ffffff' }, colorIsValid(hex) { - const re = /[A-Fa-f0-9]{6}/ if (re.test(hex)) { return true } return false - }, randomColor() { return Math.floor(Math.random() * (0xffffff + 1)).toString(16).padStart(6, '0')