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

โ† Root | โ†‘ Up

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

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

title: ๆๅŠๅŠŸ่ƒฝ docs:

  • route: /docs/combobox title: ็ป„ๅˆๆก†
  • route: /docs/components/mention-node title: ๆๅŠ่Š‚็‚น

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

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

  • ๆ™บ่ƒฝ่‡ชๅŠจ่กฅๅ…จ๏ผŒๅฏ็”จไบŽๆๅŠ็”จๆˆทใ€้กต้ขๆˆ–ไปปไฝ•ๅผ•็”จ
  • ้€š่ฟ‡ๅฏ้…็ฝฎๅญ—็ฌฆ่งฆๅ‘๏ผˆ้ป˜่ฎค๏ผš@๏ผ‰
  • ้”ฎ็›˜ๅฏผ่ˆชไธŽ้€‰ๆ‹ฉ
  • ๅฏ่‡ชๅฎšไน‰็š„ๆๅŠๆ•ฐๆฎไธŽๆธฒๆŸ“ๆ–นๅผ
</PackageInfo>

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

<Steps>

ๅฎ‰่ฃ…

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

<ComponentSource name="mention-kit" />

ๆทปๅŠ ๅฅ—ไปถ

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

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

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

<Steps>

ๅฎ‰่ฃ…

npm install @platejs/mention

ๆทปๅŠ ๆ’ไปถ

import { MentionPlugin, MentionInputPlugin } from '@platejs/mention/react';
import { createPlateEditor } from 'platejs/react';

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

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

import { MentionPlugin, MentionInputPlugin } from '@platejs/mention/react';
import { createPlateEditor } from 'platejs/react';
import { MentionElement, MentionInputElement } from '@/components/ui/mention-node';

const editor = createPlateEditor({
  plugins: [
    // ...ๅ…ถไป–ๆ’ไปถ
    MentionPlugin.configure({
      options: {
        trigger: '@',
        triggerPreviousCharPattern: /^$|^[\s"']$/,
        insertSpaceAfterMention: false,
      },
    }).withComponent(MentionElement),
    MentionInputPlugin.withComponent(MentionInputElement),
  ],
});
  • options.trigger: ่งฆๅ‘ๆๅŠ็ป„ๅˆๆก†็š„ๅญ—็ฌฆ
  • options.triggerPreviousCharPattern: ่งฆๅ‘ๅญ—็ฌฆๅ‰ไธ€ไธชๅญ—็ฌฆ็š„ๆญฃๅˆ™่กจ่พพๅผๆจกๅผใ€‚ๅฅ—ไปถไฝฟ็”จ /^$|^[\s"']$/ ๅ…่ฎธๅœจ่กŒ้ฆ–ใ€็ฉบ็™ฝ็ฌฆๅŽๆˆ–ๅผ•ๅทๅŽ่งฆๅ‘ๆๅŠ
  • options.insertSpaceAfterMention: ๆ˜ฏๅฆๅœจๆ’ๅ…ฅๆๅŠๅŽ่‡ชๅŠจๆทปๅŠ ็ฉบๆ ผ
  • withComponent: ๅˆ†้…็”จไบŽๆธฒๆŸ“ๆๅŠๅ’ŒๆๅŠ่พ“ๅ…ฅ็š„UI็ป„ไปถ
</Steps>

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

MentionPlugin

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

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

MentionInputPlugin

ๆไพ›ๆๅŠ่พ“ๅ…ฅๅŠŸ่ƒฝ็š„ๆ’ไปถใ€‚

APIๆŽฅๅฃ

api.insert.mention

ๅœจๅฝ“ๅ‰้€‰ๅŒบๆ’ๅ…ฅๆๅŠๅ…ƒ็ด ใ€‚

<API name="api.insert.mention"> <APIParameters> <APIItem name="options" type="object"> <APISubList> <APISubListItem parent="options" name="search" type="string"> ่งฆๅ‘ๆๅŠ็š„ๆœ็ดขๆ–‡ๆœฌใ€‚ </APISubListItem> <APISubListItem parent="options" name="value" type="any"> ๅญ˜ๅ‚จๅœจๆๅŠๅ…ƒ็ด ไธญ็š„ๅ€ผใ€‚ </APISubListItem> <APISubListItem parent="options" name="key" type="any" optional> ๆๅŠๅ…ƒ็ด ็š„ๅฏ้€‰้”ฎๅ€ผใ€‚ </APISubListItem> </APISubList> </APIItem> </APIParameters> </API>

getMentionOnSelectItem

่Žทๅ–ๅค„็†ๆๅŠ็ป„ๅˆๆก†้กน้€‰ๆ‹ฉ็š„ๅค„็†ๅ™จใ€‚

<API name="getMentionOnSelectItem"> <APIOptions> <APIItem name="key" type="string" optional> ๆๅŠๆ’ไปถ็š„ๆ’ไปถ้”ฎใ€‚ - **้ป˜่ฎคๅ€ผ:** `MentionPlugin.key` </APIItem> </APIOptions> <APIReturns> ๅค„็†ๆๅŠ้กน้€‰ๆ‹ฉ็š„ๅ‡ฝๆ•ฐใ€‚ </APIReturns> </API>
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

โ† Root | โ†‘ Up