diff --git a/app.py b/app.py index f7f9178..ba2f08a 100644 --- a/app.py +++ b/app.py @@ -10,6 +10,7 @@ import hashlib import re import traceback import bcrypt +import colorsys from pillow_heif import register_heif_opener from datetime import datetime, timedelta, UTC, timezone @@ -782,8 +783,7 @@ def get_admin_expense_summary(): } -def category_to_color(name): - """Generuje powtarzalny pastelowy kolor HEX na podstawie nazwy kategorii.""" +""" def category_to_color(name): hash_val = int(hashlib.md5(name.encode("utf-8")).hexdigest(), 16) r = (hash_val & 0xFF0000) >> 16 g = (hash_val & 0x00FF00) >> 8 @@ -793,6 +793,21 @@ def category_to_color(name): g = (g + 255) // 2 b = (b + 255) // 2 return f"#{r:02x}{g:02x}{b:02x}" + """ + +def category_to_color(name): + # Hashuj nazwę kategorii, aby uzyskać deterministyczną barwę + hash_val = int(hashlib.md5(name.encode("utf-8")).hexdigest(), 16) + # Ustal odcień (hue) — pseudo-losowo, ale unikalnie dla każdej nazwy + hue = (hash_val % 360) / 360.0 # 0..1 + # Wysoka saturacja (nasycenie, żeby kolor był wyrazisty, nie pastelowy) + saturation = 0.75 + ((hash_val >> 8) % 20) / 100.0 # 0.75 - 0.95 + # Średnia jasność — nie za jasno, by nie kontrastować z białym tekstem, ale wyraźnie na ciemnym tle + lightness = 0.40 + ((hash_val >> 16) % 15) / 100.0 # 0.40 - 0.55 + + # Zamiana HLS → RGB + r, g, b = colorsys.hls_to_rgb(hue, lightness, saturation) + return f"#{int(r*255):02x}{int(g*255):02x}{int(b*255):02x}" def get_total_expenses_grouped_by_category(