de431386ea
Messages: - Reply-to: hover action, composer chip with cancel, quote bubble inside the replying message with tap-to-jump + amber highlight ring - Search: header search button toggles in-conversation search bar with prev/next + match counter, auto-jump to active match - Forward: multi-select conversation picker. Attachments are now carried over: download + decrypt source, re-encrypt under each target conv-key, re-upload with fresh per-attachment keys, insert new attachment rows Conversations: - Archive + mute per member. New migration 20260420000001 adds `archived` + `muted_until` on conversation_members. Shared helpers: setConversationArchived / setConversationMutedUntil / isConversationMuted - ChatsPage: archive toggle in header with unread badge for archived bucket, split active/archived lists, muted indicator (BellOff icon, dimmed unread badge) - ConversationRowMenu via createPortal (escapes sidebar overflow clip), forwardRef-based MenuItem so submenu positioning refs survive React 18 - ConversationsContext: suppresses notification sound + OS notif when target conversation is muted - Refresh on `profiles UPDATE` realtime so peer avatar / displayName changes flow to conversation.members without manual refresh Resilience: - ErrorBoundary (Discord-style): centred spinner + escalating copy, no manual reload button. Backoff retry schedule [2s, 4s, 8s, 15s, 30s]. Uses a keyed Fragment (not a div wrapper) so flex h-full chains survive - App wrapped root + per-route RouteBoundary, conversation-level boundary - AuthContext: flip `ready` immediately on cached session read; validate getUser in background so a stalled/offline Supabase doesn't freeze the app on the loading spinner Crypto: - Swap libsodium-wrappers -> libsodium-wrappers-sumo (compact build was missing crypto_pwhash so Argon2id vault KDF threw, falling back to plaintext localStorage on every launch) - Shim d.ts for sumo types (sumo is API superset, no official types ship) - vite optimizeDeps includes sumo with the "require" condition - secureFileStore: exists(dir) check before mkdir; surface genuine permission errors instead of silent catch Tauri: - fs scope adds `$APPLOCALDATA` direct entry (not just /**) so the app data directory itself can be mkdir'd on first launch Chat layout: - Skip call_event messages when computing avatar run boundaries so a regular bubble followed by a call event from the same sender still shows its avatar
54 lines
1.6 KiB
JSON
54 lines
1.6 KiB
JSON
{
|
|
"name": "@chat-app/desktop",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "Tauri v2 desktop client (Windows / macOS / Linux)",
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "tauri dev",
|
|
"vite:dev": "vite",
|
|
"build": "tauri build",
|
|
"vite:build": "vite build",
|
|
"preview": "vite preview",
|
|
"lint": "eslint src --ext .ts,.tsx",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"clean": "rm -rf dist .turbo src-tauri/target *.tsbuildinfo"
|
|
},
|
|
"dependencies": {
|
|
"@chat-app/db-types": "workspace:*",
|
|
"@chat-app/shared": "workspace:*",
|
|
"@chat-app/ui-web": "workspace:*",
|
|
"@livekit/components-react": "^2.9.0",
|
|
"@supabase/supabase-js": "^2.46.0",
|
|
"@tauri-apps/api": "^2.1.1",
|
|
"@tauri-apps/plugin-fs": "^2.5.0",
|
|
"@tauri-apps/plugin-global-shortcut": "^2.3.1",
|
|
"@tauri-apps/plugin-notification": "^2.0.1",
|
|
"@tauri-apps/plugin-sql": "^2.0.1",
|
|
"@tauri-apps/plugin-stronghold": "^2.0.1",
|
|
"@tauri-apps/plugin-updater": "^2.10.1",
|
|
"i18next": "^23.16.4",
|
|
"libsodium-wrappers-sumo": "0.7.15",
|
|
"livekit-client": "^2.7.0",
|
|
"react": "^18.3.1",
|
|
"react-dom": "^18.3.1",
|
|
"react-i18next": "^15.1.1",
|
|
"react-router-dom": "^6.28.0",
|
|
"zustand": "^5.0.1"
|
|
},
|
|
"devDependencies": {
|
|
"@tauri-apps/cli": "^2.1.0",
|
|
"@types/libsodium-wrappers": "^0.7.14",
|
|
"@types/libsodium-wrappers-sumo": "^0.8.2",
|
|
"@types/react": "^18.3.12",
|
|
"@types/react-dom": "^18.3.1",
|
|
"@vitejs/plugin-react": "^4.3.3",
|
|
"autoprefixer": "^10.4.20",
|
|
"postcss": "^8.4.49",
|
|
"tailwindcss": "^3.4.15",
|
|
"vite": "^5.4.11"
|
|
}
|
|
}
|