feat(composer): full categorized emoji picker, shared catalog (LC-389) #401

Merged
longjacksonle merged 1 commit from feat/lc-389-full-emoji-picker into main 2026-06-20 05:31:22 +02:00

Apply the same full categorized emoji set to the composer's emoji button. The composer picker (GET /rooms/{id}/emoji-picker) previously shipped only a curated ~48 "popular" glyphs; it now renders the complete Unicode set organized into the eight standard categories plus the room's custom emojis, matching the reaction picker.

Factor the category grouping into a shared crate::emoji_catalog (the (Group, slug, label-key, tab-glyph) table + the name-plus-shortcodes keyword builder) so both pickers are one source of truth and cannot drift. The reaction picker now consumes it too.

The composer picker reuses the reaction picker's client hooks: its root id already starts with "picker-" and it now carries data-lc-emoji-tabs / data-lc-emoji-cat alongside the existing data-lc-emoji-filter / -grid / -name, so the LC-274 filter, the LC-389 section-collapse, and the tab-scroll handler all apply with no new JS. Buttons keep data-lc-emoji-insert (cursor splice) instead of an hx-post. EmojiPickerFragment moves from a flat suggestions list to a Vec; the template renders the tab strip + labeled sections. Panel widened to w-72 for the 8-column grid.

The :shortcode: autocomplete (get_autocomplete) is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Apply the same full categorized emoji set to the composer's emoji button. The composer picker (GET /rooms/{id}/emoji-picker) previously shipped only a curated ~48 "popular" glyphs; it now renders the complete Unicode set organized into the eight standard categories plus the room's custom emojis, matching the reaction picker. Factor the category grouping into a shared `crate::emoji_catalog` (the `(Group, slug, label-key, tab-glyph)` table + the name-plus-shortcodes keyword builder) so both pickers are one source of truth and cannot drift. The reaction picker now consumes it too. The composer picker reuses the reaction picker's client hooks: its root id already starts with "picker-" and it now carries data-lc-emoji-tabs / data-lc-emoji-cat alongside the existing data-lc-emoji-filter / -grid / -name, so the LC-274 filter, the LC-389 section-collapse, and the tab-scroll handler all apply with no new JS. Buttons keep data-lc-emoji-insert (cursor splice) instead of an hx-post. EmojiPickerFragment moves from a flat suggestions list to a Vec<EmojiCategory>; the template renders the tab strip + labeled sections. Panel widened to w-72 for the 8-column grid. The `:shortcode:` autocomplete (get_autocomplete) is unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(composer): full categorized emoji picker, shared catalog (LC-389)
All checks were successful
check-secrets / Nosey parker (push) Successful in 3s
check-secrets / TruffleHog (push) Successful in 4s
check-secrets / Kingfisher (push) Successful in 5s
check-secrets / Kingfisher (pull_request) Successful in 4s
Create release / Create release from merged PR (pull_request) Has been skipped
check-secrets / TruffleHog (pull_request) Successful in 4s
check-secrets / Nosey parker (pull_request) Successful in 5s
Check / clippy + fmt + tests (pull_request) Successful in 5m7s
5a931fc7fa
Apply the same full categorized emoji set to the composer's emoji button. The composer picker (GET /rooms/{id}/emoji-picker) previously shipped only a curated ~48 "popular" glyphs; it now renders the complete Unicode set organized into the eight standard categories plus the room's custom emojis, matching the reaction picker.

Factor the category grouping into a shared `crate::emoji_catalog` (the `(Group, slug, label-key, tab-glyph)` table + the name-plus-shortcodes keyword builder) so both pickers are one source of truth and cannot drift. The reaction picker now consumes it too.

The composer picker reuses the reaction picker's client hooks: its root id already starts with "picker-" and it now carries data-lc-emoji-tabs / data-lc-emoji-cat alongside the existing data-lc-emoji-filter / -grid / -name, so the LC-274 filter, the LC-389 section-collapse, and the tab-scroll handler all apply with no new JS. Buttons keep data-lc-emoji-insert (cursor splice) instead of an hx-post. EmojiPickerFragment moves from a flat suggestions list to a Vec<EmojiCategory>; the template renders the tab strip + labeled sections. Panel widened to w-72 for the 8-column grid.

The `:shortcode:` autocomplete (get_autocomplete) is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
longjacksonle deleted branch feat/lc-389-full-emoji-picker 2026-06-20 05:31:22 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/lets-chat!401
No description provided.