feat(composer): full categorized emoji picker, shared catalog (LC-389) #401
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/lc-389-full-emoji-picker"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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>