Commit Graph
2 Commits
Author SHA1 Message Date
jevb 0371a66f21 feat: replace all emoji icons with Lucide SVG icons
Add centralized icon factory (icons.ts) with 36 Lucide SVG icons
using createIcon() that returns properly attributed SVGSVGElements
with currentColor stroke for CSS color inheritance.

Replace all Unicode emoji characters across 25+ component files with
clean, consistent Lucide stroke icons. Add icon toggle states for
voice controls (mic/mic-off, headphones/headphones-off, camera/
camera-off). Show camera status icon in voice user rows.

Fix pre-existing XSS in DeleteChannelModal (innerHTML with channel
name). Migrate inline SVG in CertMismatchModal to createIcon().

Update CSS: add .icon base class, .icon-spin animation for loader,
remove obsolete .vu-icon-crossed styles, adjust containers for SVG
children. Add .vu-status class for camera indicator in voice rows.

Update 3 broken test assertions, add icons.ts unit tests (all 1089
tests pass).
2026-03-21 23:33:18 +01:00
jevb f36fb1ffdc feat: channel management — create, edit, delete, reorder with category-type enforcement
Server:
- Enforce category-type validation: text/announcement only under text categories,
  voice only under voice categories (400 on mismatch)
- Admin panel category field changed to dropdown with auto-filtered type options
- Default setup creates both Text Channels and Voice Channels categories

Client:
- Add create/edit/delete channel modals (admin/owner only)
- "+" button on category headers to create channels with pre-filled category
- Right-click context menu on channels for edit/delete
- Mouse-based drag-and-drop reordering within categories
- Admin API methods: adminCreateChannel, adminUpdateChannel, adminDeleteChannel
- Immediate local store update on reorder for instant feedback

Tests: 7 server integration tests, 31 client unit tests (create/edit/delete modals)
2026-03-18 11:28:13 +01:00