Aller au contenu

RichTextEditor

Un éditeur WYSIWYG adaptatif au thème basé sur Tiptap pour l’édition de texte riche avec une barre d’outils personnalisable.

Ce composant nécessite les packages @tiptap et @aster-ui/icons comme dépendances peer :

Fenêtre de terminal
npm install @aster-ui/icons @tiptap/react @tiptap/starter-kit @tiptap/extension-link @tiptap/extension-placeholder @tiptap/extension-underline
import { RichTextEditor } from 'asterui/editor'

Éditeur basique

Éditeur de texte riche simple avec barre d'outils par défaut.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <RichTextEditor placeholder="Start writing..." />
    )
}

export default App

Éditeur contrôlé

Éditeur avec valeur contrôlée affichant la sortie HTML.

import { RichTextEditor } from 'asterui/editor'
import { useState } from 'react'

function App() {
  const [content, setContent] = useState('<p>Edit this text...</p>')
  
  return (
      <Space direction="vertical" size="md" block>
        <RichTextEditor value={content} onChange={setContent} />
        <Card size="sm" className="bg-base-200">
          <p className="text-sm font-medium mb-2">HTML Output:</p>
          <code className="text-xs break-all">{content}</code>
        </Card>
      </Space>
    )
}

export default App

Barre d'outils minimale

Éditeur avec uniquement les options de formatage de base.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <RichTextEditor
        placeholder="Simple formatting only..."
        toolbar={['bold', 'italic', 'underline', '|', 'link']}
      />
    )
}

export default App

Barre d'outils complète

Éditeur avec toutes les options de barre d'outils disponibles.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <RichTextEditor
        placeholder="All formatting options..."
        toolbar={[
          'bold',
          'italic',
          'underline',
          'strikethrough',
          '|',
          'heading1',
          'heading2',
          'heading3',
          '|',
          'bulletList',
          'orderedList',
          'blockquote',
          '|',
          'code',
          'codeBlock',
          'horizontalRule',
          '|',
          'link',
          '|',
          'undo',
          'redo',
        ]}
      />
    )
}

export default App

Sans barre d'outils

Écriture sans distraction sans barre d'outils.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <RichTextEditor
        hideToolbar
        placeholder="Write without distractions..."
        minHeight={150}
      />
    )
}

export default App

Tailles

Différentes variantes de taille de texte.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <Space direction="vertical" size="md" block>
        <div>
          <p className="text-sm mb-1">Small</p>
          <RichTextEditor
            size="sm"
            placeholder="Small editor..."
            toolbar={['bold', 'italic', 'link']}
            minHeight={100}
          />
        </div>
        <div>
          <p className="text-sm mb-1">Medium (default)</p>
          <RichTextEditor
            size="md"
            placeholder="Medium editor..."
            toolbar={['bold', 'italic', 'link']}
            minHeight={100}
          />
        </div>
        <div>
          <p className="text-sm mb-1">Large</p>
          <RichTextEditor
            size="lg"
            placeholder="Large editor..."
            toolbar={['bold', 'italic', 'link']}
            minHeight={100}
          />
        </div>
      </Space>
    )
}

export default App

Hauteur maximale avec défilement

Éditeur avec hauteur maximale fixe qui défile.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <RichTextEditor
        placeholder="This editor scrolls when content exceeds max height..."
        minHeight={100}
        maxHeight={200}
        value="<p>Try adding more content to see the scrolling behavior.</p><p>Keep typing...</p><p>More text here...</p><p>And more...</p><p>Even more content...</p><p>The editor will scroll!</p>"
      />
    )
}

export default App

Mode lecture seule

Afficher le contenu formaté sans édition.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <RichTextEditor
        readOnly
        hideToolbar
        value="<h2>Read-Only Content</h2><p>This content <strong>cannot be edited</strong>. It's useful for displaying formatted content without allowing modifications.</p><ul><li>Item one</li><li>Item two</li><li>Item three</li></ul>"
      />
    )
}

export default App

Sans bordure

Éditeur sans bordure, utile dans les cartes.

import { RichTextEditor } from 'asterui/editor'

function App() {
  return (
      <Card>
        <RichTextEditor
          bordered={false}
          placeholder="Borderless editor inside a card..."
          minHeight={150}
        />
      </Card>
    )
}

export default App

Accès à l'instance de l'éditeur

Accédez à l'instance de l'éditeur Tiptap pour les fonctionnalités avancées.

import { RichTextEditor } from 'asterui/editor'
import { useState } from 'react'

function App() {
  const [wordCount, setWordCount] = useState(0)
  
  return (
      <Space direction="vertical" size="sm" block>
        <RichTextEditor
          placeholder="Start typing to see word count..."
          onEditorReady={(editor) => {
            editor.on('update', () => {
              const text = editor.getText()
              const words = text.trim().split(/\s+/).filter(Boolean).length
              setWordCount(words)
            })
          }}
        />
        <p className="text-sm text-base-content/60">Word count: {wordCount}</p>
      </Space>
    )
}

export default App
PropriétéDescriptionTypeDéfaut
valueContenu HTML (contrôlé)string''
onChangeCallback lorsque le contenu change(html: string) => void-
placeholderTexte de l’espace réservéstring'Start typing...'
toolbarÉléments de barre d’outils à afficherToolbarItem[][ensemble par défaut]
hideToolbarMasquer la barre d’outilsbooleanfalse
readOnlyRendre l’éditeur en lecture seulebooleanfalse
autoFocusMise au point automatique au montagebooleanfalse
minHeightHauteur minimale de l’éditeurstring | number200
maxHeightHauteur maximale (active le défilement)string | number-
sizeVariante de taille de texte'sm' | 'md' | 'lg''md'
borderedAfficher la bordure autour de l’éditeurbooleantrue
onEditorReadyCallback avec l’instance de l’éditeur Tiptap(editor: Editor) => void-
PropriétéDescription
boldTexte en gras
italicTexte en italique
underlineTexte souligné
strikethroughTexte barré
codeCode en ligne
heading1Titre niveau 1
heading2Titre niveau 2
heading3Titre niveau 3
bulletListListe non ordonnée
orderedListListe ordonnée
blockquoteCitation
codeBlockBloc de code
horizontalRuleLigne horizontale
linkInsérer/modifier un lien
undoAnnuler la dernière modification
redoRétablir la dernière modification
|Séparateur de barre d’outils