Emoji
Type ":" anywhere inside a run, followed by a search term, for a filterable emoji picker — :fire narrows straight to 🔥. Unlike the other inline types on this page, picking an emoji doesn't insert a special run — it inserts the emoji character itself as plain text, so it behaves exactly like any other character afterward (selectable, deletable, no atomic-node semantics).
Wired up via its own trigger hook, deliberately separate from "/":
import { useEmojiMenuTrigger, SlashMenu } from 'noteloom';
const emojiMenu = useEmojiMenuTrigger(containerRef);
<SlashMenu
isOpen={emojiMenu.isOpen}
rect={emojiMenu.rect}
commands={emojiMenu.commands}
runId={emojiMenu.runId}
onSelect={emojiMenu.selectCommand}
onClose={emojiMenu.close}
menuId="be-emoji-menu"
ariaLabel="Emoji"
/>This renders through the same generic
<SlashMenu /> component used for "/" and "@" — it's a plain filterable popover, not slash-specific. Give each mounted instance a distinct menuId/ariaLabel so they never collide.Using it in your editor
<NoteloomEditor> already wires useEmojiMenuTrigger + this <SlashMenu /> instance internally — nothing to register or opt into, unlike the atomic inline types on the rest of this page. The code above is only relevant if you're building the surface yourself via the granular API.