๐Ÿ“ Sign Up | ๐Ÿ” Log In

โ† Root | โ†‘ Up

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ“„ shadcn/directory/udecode/plate/(plugins)/(functionality)/(combobox)/emoji.cn โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘

title: Emoji docs:

  • route: /docs/combobox title: ็ป„ๅˆๆก†
  • route: /docs/components/emoji-node title: Emoji่พ“ๅ…ฅๅ…ƒ็ด 
  • route: /docs/components/emoji-dropdown-menu title: Emojiๅทฅๅ…ทๆ ๆŒ‰้’ฎ

<ComponentPreview name="emoji-demo" /> <PackageInfo>

ๅŠŸ่ƒฝ็‰นๆ€ง

  • ้€š่ฟ‡่‡ชๅŠจ่กฅๅ…จๅปบ่ฎฎๅ†…่”ๆ’ๅ…ฅ่กจๆƒ…็ฌฆๅท
  • ้€š่ฟ‡่พ“ๅ…ฅ:ๅญ—็ฌฆๅŽ่ทŸ่กจๆƒ…ๅ็งฐ่งฆๅ‘๏ผˆไพ‹ๅฆ‚:apple: ๐ŸŽ๏ผ‰
  • ๅฏ่‡ชๅฎšไน‰็š„่กจๆƒ…ๆ•ฐๆฎๆบๅ’ŒๆธฒๆŸ“ๆ–นๅผ
</PackageInfo>

ๅฅ—ไปถไฝฟ็”จๆ–นๅผ

<Steps>

ๅฎ‰่ฃ…

ๆœ€ๅฟซๆท็š„ๆทปๅŠ ่กจๆƒ…ๅŠŸ่ƒฝๆ–นๅผๆ˜ฏไฝฟ็”จEmojiKit๏ผŒๅฎƒๅŒ…ๅซ้ข„้…็ฝฎ็š„EmojiPluginๅ’ŒEmojiInputPluginไปฅๅŠๅฎƒไปฌ็š„Plate UI็ป„ไปถใ€‚

<ComponentSource name="emoji-kit" />
  • EmojiInputElement: ๆธฒๆŸ“่กจๆƒ…่พ“ๅ…ฅ็ป„ๅˆๆก†

ๆทปๅŠ ๅฅ—ไปถ

import { createPlateEditor } from 'platejs/react';
import { EmojiKit } from '@/components/editor/plugins/emoji-kit';

const editor = createPlateEditor({
  plugins: [
    // ...ๅ…ถไป–ๆ’ไปถ,
    ...EmojiKit,
  ],
});
</Steps>

ๆ‰‹ๅŠจ้…็ฝฎๆ–นๅผ

<Steps>

ๅฎ‰่ฃ…

npm install @platejs/emoji @emoji-mart/data

ๆทปๅŠ ๆ’ไปถ

import { EmojiPlugin, EmojiInputPlugin } from '@platejs/emoji/react';
import { createPlateEditor } from 'platejs/react';

const editor = createPlateEditor({
  plugins: [
    // ...ๅ…ถไป–ๆ’ไปถ,
    EmojiPlugin,
    EmojiInputPlugin,
  ],
});

้…็ฝฎๆ’ไปถ

import { EmojiPlugin, EmojiInputPlugin } from '@platejs/emoji/react';
import { createPlateEditor } from 'platejs/react';
import { EmojiInputElement } from '@/components/ui/emoji-node';
import emojiMartData from '@emoji-mart/data';

const editor = createPlateEditor({
  plugins: [
    // ...ๅ…ถไป–ๆ’ไปถ,
    EmojiPlugin.configure({
      options: {
        data: emojiMartData,
        trigger: ':',
        triggerPreviousCharPattern: /^\s?$/,
        createEmojiNode: (emoji) => ({ text: emoji.skins[0].native }),
      },
    }),
    EmojiInputPlugin.withComponent(EmojiInputElement),
  ],
});
  • options.data: ๆฅ่‡ช@emoji-mart/dataๅŒ…็š„่กจๆƒ…ๆ•ฐๆฎ
  • options.trigger: ่งฆๅ‘่กจๆƒ…็ป„ๅˆๆก†็š„ๅญ—็ฌฆ๏ผˆ้ป˜่ฎค๏ผš:๏ผ‰
  • options.triggerPreviousCharPattern: ๅŒน้…่งฆๅ‘ๅญ—็ฌฆๅ‰ไธ€ไธชๅญ—็ฌฆ็š„ๆญฃๅˆ™่กจ่พพๅผ
  • options.createEmojiNode: ้€‰ๆ‹ฉ่กจๆƒ…ๆ—ถๅˆ›ๅปบ่กจๆƒ…่Š‚็‚น็š„ๅ‡ฝๆ•ฐใ€‚้ป˜่ฎคๆ’ๅ…ฅUnicodeๅญ—็ฌฆไฝœไธบๆ–‡ๆœฌ
  • withComponent: ไธบ่กจๆƒ…่พ“ๅ…ฅ็ป„ๅˆๆก†ๅˆ†้…UI็ป„ไปถ

ๆทปๅŠ ๅทฅๅ…ทๆ ๆŒ‰้’ฎ

ๆ‚จๅฏไปฅๅœจๅทฅๅ…ทๆ ไธญๆทปๅŠ EmojiToolbarButtonๆฅๆ’ๅ…ฅ่กจๆƒ…็ฌฆๅทใ€‚

</Steps>

ๆ’ไปถ่ฏดๆ˜Ž

EmojiPlugin

ๆไพ›่กจๆƒ…ๅŠŸ่ƒฝ็š„ๆ ธๅฟƒๆ’ไปถใ€‚ๆ‰ฉๅฑ•่‡ชTriggerComboboxPluginOptionsใ€‚

<API name="EmojiPlugin"> <APIOptions> <APIItem name="data" type="EmojiMartData" optional> ๆฅ่‡ช@emoji-mart/dataๅŒ…็š„่กจๆƒ…ๆ•ฐๆฎใ€‚ - **้ป˜่ฎคๅ€ผ:** ๅ†…็ฝฎ่กจๆƒ…ๅบ“ </APIItem> <APIItem name="createEmojiNode" type="(emoji: Emoji) => Descendant" optional> ๆŒ‡ๅฎš้€‰ๆ‹ฉ่กจๆƒ…ๆ—ถๆ’ๅ…ฅ่Š‚็‚น็š„ๅ‡ฝๆ•ฐใ€‚ - **้ป˜่ฎค่กŒไธบ:** ๆ’ๅ…ฅๅŒ…ๅซ่กจๆƒ…Unicodeๅญ—็ฌฆ็š„ๆ–‡ๆœฌ่Š‚็‚น </APIItem> <APIItem name="trigger" type="string" optional> ่งฆๅ‘่กจๆƒ…็ป„ๅˆๆก†็š„ๅญ—็ฌฆใ€‚ - **้ป˜่ฎคๅ€ผ:** `':'` </APIItem> <APIItem name="triggerPreviousCharPattern" type="RegExp" optional> ๅŒน้…่งฆๅ‘ๅญ—็ฌฆๅ‰ไธ€ไธชๅญ—็ฌฆ็š„ๆจกๅผใ€‚ - **้ป˜่ฎคๅ€ผ:** `/^\s?$/` </APIItem> <APIItem name="createComboboxInput" type="() => TElement" optional> ๅˆ›ๅปบ่งฆๅ‘ๆฟ€ๆดปๆ—ถ่พ“ๅ…ฅๅ…ƒ็ด ็š„ๅ‡ฝๆ•ฐใ€‚ </APIItem> </APIOptions> </API>

EmojiInputPlugin

ๅค„็†่กจๆƒ…ๆ’ๅ…ฅ็š„่พ“ๅ…ฅ่กŒไธบใ€‚

โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

โ† Root | โ†‘ Up