Skip to content

feat: add GIF picker support#448

Merged
Just-Insane merged 14 commits into
integrationfrom
codex/issue-86-gif-picker
Jun 28, 2026
Merged

feat: add GIF picker support#448
Just-Insane merged 14 commits into
integrationfrom
codex/issue-86-gif-picker

Conversation

@Just-Insane

Copy link
Copy Markdown
Collaborator

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 through config.json / useClientConfig with gifs.proxyUrl and gifs.klipyApiKey, matching the upstream Sable implementation from PR SableClient#970.

Fixes #86
Related to SableClient#60

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings

AI disclosure:

  • Partially AI assisted (clarify which code was AI assisted and briefly explain what it does).
  • Fully AI generated (explain what all the generated code does in moderate detail).
    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 useFavoriteGifs hook for reading those favorites. In RoomInput, it adds a GIF picker entry point and a send path that converts selected Klipy CDN URLs into proxied mxc:// media IDs before sending them as image messages. In ImageContent, 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.

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown

Sentry Preview Error Triage

No 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.

Comment thread src/app/components/emoji-board/EmojiBoard.tsx Outdated
@github-code-quality

github-code-quality Bot commented Jun 28, 2026

Copy link
Copy Markdown

Code Coverage Overview

Languages: JavaScript

JavaScript / code-coverage/vitest

The overall coverage in the branch remains at 29%, unchanged from the branch.

Show a code coverage summary of the most impacted files.
File afa342a 2ea9c4a +/-
src/app/compone...onents/Item.tsx 20% 9% -11%
src/app/compone...onents/Tabs.tsx 25% 20% -5%
src/app/hooks/u...ClientConfig.ts 76% 72% -4%
src/app/feature...ReportModal.tsx 17% 15% -2%
src/app/compone.../EmojiBoard.tsx 7% 6% -1%
src/app/feature...m/RoomInput.tsx 1% 1% 0%
src/app/compone...mageContent.tsx 1% 1% 0%
src/app/hooks/useCommands.ts 11% 11% 0%
src/app/hooks/u...FavoriteGifs.ts 0% 15% +15%
src/app/utils/gifs.ts 0% 33% +33%

Updated June 28, 2026 19:32 UTC
Code Coverage is in Public Preview. Learn more and provide us with your feedback.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/app/components/message/content/ImageContent.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/components/emoji-board/EmojiBoard.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread config.json
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/components/emoji-board/EmojiBoard.tsx
Comment thread src/app/components/emoji-board/components/Item.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/components/emoji-board/components/Item.tsx Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/app/hooks/useFavoriteGifs.ts Outdated
Comment thread src/app/components/emoji-board/EmojiBoard.tsx
Comment thread src/app/components/emoji-board/components/Item.tsx Outdated
Comment thread src/app/components/emoji-board/EmojiBoard.tsx Outdated
Comment thread src/app/components/emoji-board/EmojiBoard.tsx
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx Outdated
@Just-Insane Just-Insane enabled auto-merge June 28, 2026 15:56
Comment thread src/app/components/emoji-board/EmojiBoard.tsx
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/hooks/useFavoriteGifs.ts Outdated
Comment thread src/app/components/message/content/ImageContent.tsx Outdated
Comment thread src/app/components/emoji-board/EmojiBoard.tsx
Comment thread src/app/components/emoji-board/EmojiBoard.tsx
Comment thread src/app/components/emoji-board/EmojiBoard.tsx

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/app/hooks/useFavoriteGifs.ts
Comment thread src/app/components/emoji-board/EmojiBoard.tsx
Comment thread src/app/components/emoji-board/EmojiBoard.tsx Outdated
Comment thread src/app/components/emoji-board/components/SearchInput.tsx
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx Outdated
Comment thread src/app/features/room/RoomInput.tsx

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/app/features/room/RoomInput.tsx
Comment thread src/app/components/message/content/ImageContent.tsx Outdated
Comment thread src/app/components/message/content/ImageContent.tsx Outdated
@github-actions

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

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

@Just-Insane Just-Insane merged commit 2042c29 into integration Jun 28, 2026
19 checks passed
@Just-Insane Just-Insane deleted the codex/issue-86-gif-picker branch June 28, 2026 19:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GIF Picker

1 participant