Add check icon feedback when copying RoomID and URL to clipboard:
- RoomID copy button now shows check icon for 2 seconds after copy
- URL copy button now shows check icon for 2 seconds after copy
- Consistent with existing QR code copy button behavior
The ThemeToggle component was causing hydration errors because the server
and client rendered different icons (Sun/Moon) based on the theme state.
Changes:
- Render a placeholder button until component is mounted
- Only render the actual theme icon after client-side hydration
- This ensures server and client HTML match during initial render
Fixes console error: 'Expected server HTML to contain a matching <circle> in <svg>'
Update backend/package-lock.json to ensure dependency consistency.
This file should be committed to the repository as per npm best practices
for reproducible builds across all environments.
- Restored QRCodeSVG component rendering in ShareCard for QR code display
- Fixed copy QR code and download QR code functionality
- Changed paste button label in SendTabPanel from 'Paste RoomID' to generic 'Paste'
- Keep 'Paste RoomID' label in RetrieveTabPanel where it's contextually appropriate
Resolve the remaining lint warnings without changing behavior by fixing hook dependency lists, removing the icon naming false positive, and switching the YouTube thumbnail to next/image for compliant rendering.
Align the next-intl message schema across components, hooks, and locale files so the frontend uses one canonical structure instead of compile-first workarounds. Restore Spanish, French, German, Japanese, and Korean translations to the new schema while narrowing clipboard hook dependencies to translation contracts.
- FAQSection: useTranslations with dynamic keys via type assertion
- ClipboardApp: useTranslations for JSX, keep useMessages for hooks
- SendTabPanel: useTranslations for html and roomStatus namespaces
- RetrieveTabPanel: useTranslations for html, roomStatus, and ClipboardApp
- FileListDisplay: useTranslations for FileListDisplay namespace
- FileUploadHandler: useTranslations for fileUploadHandler namespace
Only ClipboardApp.tsx retains useMessages for hooks requiring full messages object.
- Simplify flows.zh-CN.md to an entry + quick reference, add "Quick Navigation" and in-depth reading links, original sections 6/7/9/10 are retained in the entry page with titles but changed to links.
- Add in-depth reading sub-document:
- docs/ai-playbook/flows/frontend.zh-CN.md
- docs/ai-playbook/flows/backpressure-chunking.zh-CN.md
- docs/ai-playbook/flows/resume.zh-CN.md
- docs/ai-playbook/flows/reconnect-consistency.zh-CN.md
- docs/ai-playbook/index.zh-CN.md add "Process (In-depth reading split)" index
- Prevent server-side exceptions (Application error) on mobile after redirects
- useOneShotSlowHint: guard document; use global setTimeout; conditionally attach visibilitychange
- useConnectionFeedback: guard document.visibilityState; register/remove listeners only on client
- usePageSetup: guard window before tracking referrer and parsing roomId
- tracking: early return when window is undefined
- docs(flows): add “SSR & DOM access guard (must-read)” checklist; renumber next section