Search on the Kobra input, a category rail that scrolls the list and follows it, recents, a skin tone button and a footer for the emoji in focus.
Pick one, or search. Arrow keys move through the grid and Enter picks.
The same picker in a Kobra popover on a button. A pick inserts the emoji and closes.
Your own data and your own rail. No network, no version filtering.
skinTone and onSkinToneChange. The footer button cycles the tones.
Controlled: medium
sm 28px, default 36px, lg 44px. Columns follow the size, or pass columns.
The row under the rail is stored under recentsKey, shared by every picker that uses it, and survives reloads.