feat: add GIF picker support#448
Conversation
Sentry Preview Error TriageNo Sentry errors found for this PR's preview deployment as of Sun, 28 Jun 2026 19:29:38 GMT. This comment updates automatically after each push. |
Code Coverage OverviewLanguages: JavaScript JavaScript / code-coverage/vitestThe overall coverage in the branch remains at 29%, unchanged from the branch. Show a code coverage summary of the most impacted files.
Updated |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8bd0ad5ca5
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a6a63e4252
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a55e9bb4f7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 45a177ce75
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Deploying with
|
| Status | Preview URL | Commit | Alias | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! | https://pr-448-charm.justin-tech.workers.dev | 7a02227 | pr-448 |
Sun, 28 Jun 2026 19:31:33 GMT |
Description
Port the upstream GIF picker work into Charm using Klipy-backed search, an mxc proxy send path, and account-data favorites.
This adds a GIF tab alongside the existing emoji and sticker pickers, wires GIF selection into
RoomInput, renders GIF search results and empty/error states in the picker, and adds favoriting controls in both the picker and GIF message renderer. The feature is config-driven throughconfig.json/useClientConfigwithgifs.proxyUrlandgifs.klipyApiKey, matching the upstream Sable implementation from PR SableClient#970.Fixes #86
Related to SableClient#60
Type of change
Checklist:
AI disclosure:
This PR ports the upstream GIF picker work into Charm’s current composer and media stack. It extends the emoji board types, tabs, search UI, item renderer, and empty-state components to support GIF search results and favorites, adds client-config and Matrix account-data types for the Klipy API key, proxy host, and saved favorites, and introduces a small
useFavoriteGifshook for reading those favorites. InRoomInput, it adds a GIF picker entry point and a send path that converts selected Klipy CDN URLs into proxiedmxc://media IDs before sending them as image messages. InImageContent, it layers GIF favorite controls onto Charm’s newer media-loading and caching implementation so existing image behavior is preserved while GIFs can still be favorited from the timeline.