Pular para o conteúdo

Mention

Componente de entrada para mencionar usuários, tags ou outras entidades com sugestões de autocompletar.

import { Mention } from 'asterui'

Mention Básico

Entrada de menção simples com acionador @.

import { Mention } from 'asterui'
import { useState } from 'react'

function App() {
  const users = [
    { value: 'john', label: 'John Doe' },
    { value: 'jane', label: 'Jane Smith' },
    { value: 'bob', label: 'Bob Johnson' },
    { value: 'alice', label: 'Alice Williams' },
  ]
  
  const [text, setText] = useState('')
  
  return (
      <div>
        <Mention
          options={users}
          value={text}
          onChange={setText}
          placeholder="Type @ to mention someone"
        />
        <div className="mt-2 text-sm text-base-content/70">
          Text: {text || '(empty)'}
        </div>
      </div>
    )
}

export default App

Prefixo Personalizado

Usando prefixo # para menções de hashtag.

import { Mention } from 'asterui'
import { useState } from 'react'

function App() {
  const tags = [
    { value: 'react', label: 'React' },
    { value: 'typescript', label: 'TypeScript' },
    { value: 'javascript', label: 'JavaScript' },
    { value: 'webdev', label: 'Web Development' },
  ]
  
  const [text, setText] = useState('')
  
  return (
      <div>
        <Mention
          options={tags}
          value={text}
          onChange={setText}
          prefix="#"
          placeholder="Type # to add hashtag"
        />
        <div className="mt-2 text-sm text-base-content/70">
          Text: {text || '(empty)'}
        </div>
      </div>
    )
}

export default App

Múltiplos Acionadores

Usando múltiplos componentes de menção com diferentes prefixos.

import { Mention, Space } from 'asterui'
import { useState } from 'react'

function App() {
  const users = [
    { value: 'john', label: 'John Doe' },
    { value: 'jane', label: 'Jane Smith' },
    { value: 'bob', label: 'Bob Johnson' },
    { value: 'alice', label: 'Alice Williams' },
  ]
  
  const tags = [
    { value: 'react', label: 'React' },
    { value: 'typescript', label: 'TypeScript' },
    { value: 'javascript', label: 'JavaScript' },
    { value: 'webdev', label: 'Web Development' },
  ]
  
  const [userText, setUserText] = useState('')
  const [tagText, setTagText] = useState('')
  
  return (
      <Space direction="vertical" size="md">
        <div>
          <label className="block mb-2 text-sm font-medium">
            Mention Users (@)
          </label>
          <Mention
            options={users}
            value={userText}
            onChange={setUserText}
            prefix="@"
            placeholder="Type @ to mention users"
          />
          <div className="mt-1 text-xs text-base-content/70">
            {userText || '(empty)'}
          </div>
        </div>
  
        <div>
          <label className="block mb-2 text-sm font-medium">
            Add Tags (#)
          </label>
          <Mention
            options={tags}
            value={tagText}
            onChange={setTagText}
            prefix="#"
            placeholder="Type # to add tags"
          />
          <div className="mt-1 text-xs text-base-content/70">
            {tagText || '(empty)'}
          </div>
        </div>
      </Space>
    )
}

export default App
PropriedadeDescriçãoTipoPadrão
optionsArray de opções de mençãoArray<{ value: string, label: string }>-
valueValor controladostring-
onChangeCallback quando valor muda(value: string) => void-
prefixCaractere que aciona sugestões de mençãostring'@'
splitCaractere usado para dividir menções na entradastring-
placeholderTexto placeholder da entradastring-
disabledDesabilitar a entrada de mençãobooleanfalse
classNameClasses CSS adicionaisstring-
data-testidID de teste para testesstring-
  • / - Navegar pelas sugestões de menção
  • Enter - Selecionar menção destacada
  • Esc - Fechar dropdown de menção
  • Suporte completo de navegação por teclado para selecionar menções
  • Atributos ARIA para leitores de tela anunciarem sugestões
  • Gerenciamento de foco quando dropdown abre e fecha
  • Indicadores visuais claros para itens selecionados e focados