feat: reaction TDS styling, debounce read receipts, Escape to skip boot, type fixes

- lotus-terminal.css.ts: add reaction chip styles for dark + light TDS modes
  (cyan border/bg for unselected, orange accent for own/pressed reactions)
- useRoomReadPositions: debounce receipt handler at 150ms (M-3)
- lotus-boot.ts: Escape key skips boot animation (I-3)
- RoomInput.tsx: replace (uploadRes as any) with typed assertion (M-7)
- CallEmbedProvider: call mention detection, audio cleanup, display name (C-1, C-2, M-5)
- EventReaders: timestamps in seen-by modal, filter self, TDS styling
- ReadReceiptAvatars: StackedAvatar pill, TDS visual treatment
- chatBackground: add waves/neon/aurora backgrounds
- RoomView: auto-apply tactical bg when TDS active and bg is none
- settings: extend ChatBackground union type
This commit is contained in:
root
2026-05-16 01:34:20 -04:00
parent 1e5d5f3fe4
commit 4c4d61600d
10 changed files with 270 additions and 68 deletions
+15
View File
@@ -29,6 +29,7 @@ export function resetBootSequence(): void {
export function runLotusBootSequence(force = false): void {
if (!force && sessionStorage.getItem(STORAGE_KEY)) return;
if (document.getElementById('lt-boot')) return;
sessionStorage.setItem(STORAGE_KEY, '1');
const overlay = document.createElement('div');
@@ -58,11 +59,25 @@ export function runLotusBootSequence(force = false): void {
overlay.appendChild(pre);
document.body.appendChild(overlay);
const dismiss = (): void => {
clearInterval(interval);
document.removeEventListener('keydown', onKey);
overlay.style.transition = 'opacity 0.4s ease';
overlay.style.opacity = '0';
setTimeout(() => overlay.remove(), 400);
};
const onKey = (e: KeyboardEvent): void => {
if (e.key === 'Escape') dismiss();
};
document.addEventListener('keydown', onKey);
let i = 0;
let text = '';
const interval = setInterval(() => {
if (i >= BOOT_MESSAGES.length) {
clearInterval(interval);
document.removeEventListener('keydown', onKey);
setTimeout(() => {
overlay.style.transition = 'opacity 0.5s ease';
overlay.style.opacity = '0';