byGalax
383245ec90
feat(P4B.T6): composer 'Whiteboard' button creates board + sends bubble
2026-05-16 20:36:03 +02:00
byGalax
5e59ee22f6
feat(P4B.T5): WhiteboardModal — fullscreen container + toolbar + clear-confirm
2026-05-16 20:29:24 +02:00
byGalax
be6f5b9c6f
feat(P4B.T4): WhiteboardCanvas — pen/eraser drawing engine
2026-05-16 20:27:09 +02:00
byGalax
2243c646ac
feat(P4B.T3): useWhiteboardStrokes hook with INSERT + bulk DELETE realtime
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 20:25:22 +02:00
byGalax
11a9c8b173
feat(P4A.T4): wire ImageAnnotator into composer attachment preview
...
Hover an image attachment in the composer to reveal a pencil-edit button;
clicking it opens ImageAnnotator and Save replaces the File in attachments[].
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 19:48:57 +02:00
byGalax
d623a59c87
feat(P4A.T3): annotator toolbar — tool/color/width/undo/redo controls
2026-05-16 19:46:00 +02:00
byGalax
2a2e334f51
feat(P4A.T2): annotator drawing engine — pen/arrow/rect/circle/text/highlighter
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 19:44:04 +02:00
byGalax
9228cc635c
feat(P4A.T1): ImageAnnotator modal skeleton with canvas mount + op-stack types
2026-05-16 19:41:36 +02:00
byGalax
e8a5d6dc5e
chore(desktop): release v0.19.0
2026-05-16 19:25:55 +02:00
byGalax
c5851195c7
fix(call): strip-toggle icon no longer touches its frame edges
...
Shrink the StripToggleIcon SVG from 18x18 to 14x14 px so the 2-people
icon sits centred with ~11 px of breathing room inside its 36x36 button,
matching the h-4/w-4 small-icon convention used elsewhere in InCallPanel.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 19:21:26 +02:00
byGalax
258ad3511d
fix(screen-share): preset dims no longer crop non-16:9 monitors
...
Pass width/height as { ideal: N } constraints (not exact values) so
Chromium preserves the source's aspect ratio instead of cropping
non-matching monitors. Previously a 1920x1200 monitor under a 1080p
preset lost the bottom 120px including the Windows taskbar.
The auto-preset fallback now omits width/height entirely (both set to
undefined) so getDisplayMedia uses the screen's native resolution.
Cast through `unknown` to satisfy LiveKit's VideoResolution type, which
declares width/height as plain number but Chromium accepts the full
MediaTrackConstraints shape at runtime.
2026-05-16 19:19:30 +02:00
byGalax
2583613d7f
feat(P3.T7): RemoteRevokedScreen overlay for own-device revocation
2026-05-16 19:15:15 +02:00
byGalax
04d9909e92
feat(P3.T6): Settings 'Geräte' tab with revoke + this-device badge
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-16 19:13:31 +02:00
byGalax
e05f5445e7
feat(P3.T5): useOwnDevices hook with realtime refresh
...
Adds useOwnDevices React hook that fetches the user device list via
listOwnDevices and re-fetches on any postgres_changes event on the
devices table, matching the channel/filter convention in AuthContext.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 19:10:48 +02:00
byGalax
a4f7a16c90
feat(P3.T4): ensure device row + revoke-realtime + revokedRemotely flag
2026-05-16 19:08:17 +02:00
byGalax
f6e0e4dd09
feat(P3.T3): app:hostname IPC for device-name default
2026-05-16 19:04:03 +02:00
byGalax
ef1f9f45d8
fix(desktop): swap GIF provider from Tenor (closed Jan 2026) to GIPHY
...
Google closed Tenor v2 to new API clients in Jan 2026, so the only
people who could use the picker were those with a pre-existing Google
Cloud Console key. Swapped to GIPHY's Developer API (still open, free
keys at https://developers.giphy.com/dashboard/ ).
- Env var renamed VITE_TENOR_API_KEY → VITE_GIPHY_API_KEY
- Endpoint, response mapping, error sentinel updated
- File still named tenor.ts for import-path stability — renaming
later if it bothers anyone
- Public GifResult interface unchanged so the picker UI didn't need
edits beyond the error-message switch
2026-05-16 18:25:18 +02:00
byGalax
95156a65eb
feat(desktop): view-once image attachments (sender toggle + recipient lightbox + tombstone)
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 18:18:39 +02:00
byGalax
cd79b77e6f
feat(desktop): GIF button + picker wired into composer
2026-05-16 18:07:40 +02:00
byGalax
7726498218
feat(desktop): GIF picker popover (Tenor + trending/search/recent)
2026-05-16 18:05:45 +02:00
byGalax
f1d9602a76
fix(desktop): read Tenor API key from VITE_TENOR_API_KEY env, no hardcoded credential
2026-05-16 18:03:20 +02:00
byGalax
45bcbb449c
feat(desktop): Tenor v2 GIF search/featured/recent client
2026-05-16 18:02:01 +02:00
byGalax
ef98efb938
feat(desktop): mention notifications via realtime + osNotify
2026-05-16 17:59:57 +02:00
byGalax
3dbeabd268
feat(desktop): pin/unpin from message context menu + side panel
2026-05-16 17:51:01 +02:00
byGalax
6bff163f09
feat(desktop): pinned-messages side panel
2026-05-16 17:47:39 +02:00
byGalax
ddeedeb71d
feat(desktop): pinned-messages pill in conv header
2026-05-16 17:45:43 +02:00
byGalax
7e85ffe548
feat(desktop): usePinnedMessages live hook
2026-05-16 17:43:45 +02:00
byGalax
ffaa6ceb70
feat(mobile): SecurityCenter — PIN change, recovery, reset, migration retry
2026-05-16 17:23:04 +02:00
byGalax
ccac822cb9
feat(mobile): settings hub with security section + signout
2026-05-16 17:21:57 +02:00
byGalax
74a0ef6c32
refactor(mobile): chats header opens settings instead of inline logout
2026-05-16 17:18:56 +02:00
byGalax
9de2c368bf
feat(desktop): optional wipe-on-close (Settings -> Sicherheit)
2026-05-16 17:17:59 +02:00
byGalax
88345420e0
refactor(mobile): AttachmentImage drops device-keyed props
2026-05-16 17:17:37 +02:00
byGalax
0354676d2f
refactor(mobile): MessageBubble drops ownDeviceId prop
2026-05-16 17:17:30 +02:00
byGalax
cb7bd99fb4
refactor(mobile): conversation detail uses ownUserId + drops senderDeviceId
2026-05-16 17:13:47 +02:00
byGalax
3b55fcaf2c
feat(mobile): (app) layout routes by userKeyState
2026-05-16 17:11:05 +02:00
byGalax
7ae1d5ba8c
feat(mobile): UserKey unlock screen (PIN entry + recovery tab + reset)
2026-05-16 17:09:50 +02:00
byGalax
50bfb5b137
feat(desktop): wipe local crypto + caches on sign-out
2026-05-16 17:09:01 +02:00
byGalax
41359816f1
feat(mobile): UserKey setup screen (PIN + optional recovery code)
2026-05-16 17:08:47 +02:00
byGalax
8ad212291a
feat(desktop): apply friend nicknames in header / bubble / mentions / call tile
2026-05-16 17:06:18 +02:00
byGalax
18a6365586
feat(mobile): PinInput component — 6-digit numeric pad
2026-05-16 17:04:25 +02:00
byGalax
898b7469bb
feat(desktop): set-nickname dialog + right-click trigger in friends list
2026-05-16 17:01:38 +02:00
byGalax
a5eadef663
feat(desktop): friendNicknames local store + useNickname hook
2026-05-16 16:58:14 +02:00
byGalax
e8074e7da0
feat(desktop): empty-state for empty conversation
2026-05-16 16:56:27 +02:00
byGalax
88409aff5d
feat(desktop): empty-state for friends list
2026-05-16 16:54:12 +02:00
byGalax
b7d7a85253
feat(desktop): empty-state for chat list
...
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 16:51:37 +02:00
byGalax
502c6af1b8
feat(desktop): EmptyState primitive component
2026-05-16 16:49:16 +02:00
byGalax
adc9686035
refactor(mobile): AuthProvider exposes userKeyState instead of device record
2026-05-16 16:47:55 +02:00
byGalax
472665b980
fix(desktop): tray badge — IPC handler died when icon.ico missing from packaged resources
2026-05-16 16:47:19 +02:00
byGalax
c52c65faa9
feat(mobile): userIdentity orchestrator (setup/unlock/cache/change-PIN/reset)
2026-05-16 16:43:50 +02:00
byGalax
79f1786ac6
feat(desktop): Settings — 🌐 Global toggle per voice hotkey
2026-05-16 16:43:00 +02:00