From 817ce075d4c72774989ce29fbbb1aadd31c4fcfa Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Mon, 1 Jun 2026 20:25:40 +0200 Subject: [PATCH] feat(web): non-emoji group icons (inline SVG) for consistent cross-platform look MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Group icons are semantic keys rendered as inline SVG (mirroring iOS SF Symbols / Android Material) in the picker, group list and sidebar flags — instead of OS emoji that vary per platform. Legacy emoji values still render as a fallback. Co-Authored-By: Claude Opus 4.8 --- frontend/css/app.css | 5 ++++- frontend/js/calendar.js | 46 +++++++++++++++++++++++++++++++++-------- frontend/js/version.js | 2 +- 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/frontend/css/app.css b/frontend/css/app.css index 2e31c0a..981a443 100644 --- a/frontend/css/app.css +++ b/frontend/css/app.css @@ -1988,5 +1988,8 @@ a { color: var(--primary); text-decoration: none; } border-radius: 8px; cursor: pointer; } +.group-icon-opt { color: var(--text-1); } .group-icon-opt:hover { background: var(--bg-surface); } -.group-icon-opt.on { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; } +.group-icon-opt.on { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; color: var(--accent); } +/* SVG group icons render as block so they centre cleanly (vs emoji baseline). */ +.group-emoji svg, .cal-shared-flag svg, .group-icon-opt svg { display: block; } diff --git a/frontend/js/calendar.js b/frontend/js/calendar.js index c08e40a..fb92bd3 100644 --- a/frontend/js/calendar.js +++ b/frontend/js/calendar.js @@ -735,8 +735,8 @@ function renderCalendarList() {
${escHtml(e.name)} - ${e.isGroupCal ? `👥` : ''} - ${e.groupVisible ? `👥` : ''} + ${e.isGroupCal ? `${groupIconSvg('people', 13)}` : ''} + ${e.groupVisible ? `${groupIconSvg('people', 13)}` : ''} ${e.remove ? `` : ''} ` ).join(''); @@ -2303,7 +2303,7 @@ function renderGroupList() { } el.innerHTML = state.groups.map(g => `
- ${escHtml(g.icon || '👥')} + ${groupIconHtml(g.icon)} ${escHtml(g.name)} ` + picker.innerHTML = GROUP_ICON_KEYS.map(ic => + `` ).join(''); picker.querySelectorAll('.group-icon-opt').forEach(b => { b.addEventListener('click', () => { @@ -2508,7 +2536,7 @@ function bindGroupUI() { const memberIds = [...(modal.__memberIds || new Set())]; try { const name = document.getElementById('group-name').value.trim(); - const icon = modal.__icon || '👥'; + const icon = modal.__icon || 'people'; if (!name) { showToast(t('error_enter_title'), true); return; } if (groupId) { // Manage mode: update name/icon, then sync member additions/removals. diff --git a/frontend/js/version.js b/frontend/js/version.js index 468d31d..a139d4f 100644 --- a/frontend/js/version.js +++ b/frontend/js/version.js @@ -1,2 +1,2 @@ // Increment APP_VERSION with every code change -export const APP_VERSION = 'v42'; +export const APP_VERSION = 'v43';