Find out what's new in Tiptap Editor 3.0

Emoji Trigger Button

A fully accessible emoji trigger button for Tiptap editors. Insert emoji trigger characters to activate emoji selection with keyboard shortcut support and flexible positioning options.

Installation

Add the component via the Tiptap CLI:

npx @tiptap/cli@latest add emoji-trigger-button

Components

<EmojiTriggerButton />

A prebuilt React component that inserts emoji trigger characters in the editor.

Usage

export default function MyEditor() {
  return (
    <EmojiTriggerButton
      editor={editor}
      text="Emoji"
      trigger="::"
      hideWhenUnavailable={true}
      showShortcut={true}
      onTriggerApplied={(trigger) => console.log(`Trigger applied: ${trigger}`)}
    />
  )
}

Props

NameTypeDefaultDescription
editorEditor | nullundefinedThe Tiptap editor instance
nodeNode | nullundefinedOptional node to insert trigger after
nodePosnumber | nullundefinedOptional position of the node to insert trigger after
textstringundefinedOptional text label for the button
triggerstring":"The trigger text to insert
hideWhenUnavailablebooleanfalseHides the button when trigger insertion is not available
onTriggerApplied(trigger: string) => voidundefinedCallback fired after a successful trigger insertion
showShortcutbooleanfalseShows a keyboard shortcut badge (if available)

Hooks

useEmojiTrigger()

A custom hook to build your own emoji trigger button with full control over rendering and behavior.

Usage

function MyEmojiTriggerButton() {
  const { isVisible, handleAddTrigger, canAddTrigger, label, shortcutKeys, trigger, Icon } =
    useEmojiTrigger({
      editor: myEditor,
      trigger: '::',
      hideWhenUnavailable: true,
      onTriggerApplied: (trigger) => console.log(`Applied: ${trigger}`),
    })

  if (!isVisible) return null

  return (
    <button onClick={handleAddTrigger} disabled={!canAddTrigger} aria-label={label}>
      <Icon />
      {label} ({trigger}){shortcutKeys && <Badge>{parseShortcutKeys({ shortcutKeys })}</Badge>}
    </button>
  )
}

Props

NameTypeDefaultDescription
editorEditor | nullundefinedThe Tiptap editor instance
nodeNode | nullundefinedOptional node to insert trigger after
nodePosnumber | nullundefinedOptional position of the node to insert trigger after
triggerstring":"The trigger text to insert
hideWhenUnavailablebooleanfalseHides the button if trigger cannot be inserted
onTriggerApplied(trigger: string) => voidundefinedCallback fired after successful trigger insertion

Return Values

NameTypeDescription
isVisiblebooleanWhether the button should be rendered
canAddTriggerbooleanIf the emoji trigger can be inserted
handleAddTrigger() => booleanFunction to insert the emoji trigger
labelstringAccessible label text for the button
shortcutKeysstringKeyboard shortcut (Cmd/Ctrl + Shift + E)
triggerstringThe current trigger text
IconReact.FCIcon component for the emoji trigger button (SmilePlusIcon)

Utilities

canAddEmojiTrigger(editor)

Checks if an emoji trigger can be inserted in the current editor state.

import { canAddEmojiTrigger } from '@/registry/tiptap-ui/emoji-trigger-button'

const canAdd = canAddEmojiTrigger(editor)

addEmojiTrigger(editor, trigger?, node?, nodePos?)

Programmatically inserts an emoji trigger at the current selection or specified position.

import { addEmojiTrigger } from '@/registry/tiptap-ui/emoji-trigger-button'

const success = addEmojiTrigger(editor, ':') // Insert at cursor
const successAtNode = addEmojiTrigger(editor, '::', node, nodePos) // Insert at node

Keyboard Shortcuts

The emoji trigger button supports the following keyboard shortcut:

  • Cmd/Ctrl + Shift + E: Insert emoji trigger at cursor position

The shortcut is automatically registered when using either the <EmojiTriggerButton /> component or the useEmojiTrigger() hook.

Requirements

Dependencies

  • @tiptap/react - Core Tiptap React integration
  • react-hotkeys-hook - Keyboard shortcut management

Referenced Components

  • use-tiptap-editor (hook)
  • button (primitive)
  • badge (primitive)
  • tiptap-utils (lib)
  • smile-plus-icon (icon)