Tiptap Editor - éditeur WYSIWYG headless
(github.com/ueberdosis)- Framework headless qui ne fournit pas d’interface utilisateur, ce qui facilite le stylisme
- Fonctionne très bien avec React, Vue, Svelte, Alpine.js, Next.js, Nuxt.js et JavaScript vanilla
- Basé sur ProseMirror
9 commentaires
Personnellement, c’est l’éditeur que j’ai trouvé le plus confortable à utiliser et le plus facile à étendre.
Beaucoup des frustrations que j’avais ressenties en créant un éditeur avec Slate ont vraiment été résolues ici.
Pourriez-vous partager ce qui vous a posé problème lorsque vous avez utilisé l’éditeur Slate ?
De mon côté, je n’ai utilisé que Tiptap, mais comme j’ai entendu dire que Slate était bien, ça a éveillé mon intérêt !!
La création de composants externes est bien plus pratique. Surtout avec React, où l’on utilise son propre DOM, il faut un rendu sous forme de composants plutôt qu’en HTML, et comme Tiptap a été conçu dès le départ en pensant à la modularisation, j’ai trouvé qu’il était plus facile à modifier.
Globalement, j’ai trouvé la documentation de Slate difficile, et comme c’était très brut, j’ai eu l’impression qu’il y avait encore plus de choses à apprendre pour implémenter les fonctionnalités que je voulais.
Ça remonte à environ 2 ans, donc mes souvenirs peuvent être un peu différents, mais j’ai rencontré ce genre de problèmes.
Oh.... merci~ !
On peut voir un exemple d’éditeur fonctionnel sur https://tiptap.dev/docs/editor/installation/react#7-the-complete-setup.
Personnellement, je trouve que la documentation est plutôt bien faite, mais il y a des éléments nécessitant un abonnement payant qui se glissent au milieu.
Ça ne va pas jusqu’à rendre la lecture de la documentation inconfortable, mais c’est assez fort et un peu agaçant à la fois de réussir à donner envie de choses dont on n’a même pas besoin… c’est un sentiment assez complexe.
J’ai du mal à être d’accord avec l’idée que la documentation est plutôt bien faite. À mes yeux, l’écart entre la documentation de démarrage et la documentation de l’API est trop important, ce qui rend la courbe d’apprentissage élevée. Dans notre projet React, nous avons jugé que le style de documentation de Prosemirror et de react-prosemirror était plus convivial et plus abouti pour les utilisateurs ; nous avons donc choisi react-prosemirror et non tiptap.
Pendant que nous essayions de comprendre les exemples React afin de créer un exemple de code de POC pour nos besoins, nous avons rencontré les problèmes suivants.
editor().chain().focus()? Il n’y a aucune explication sur les principes de conception ou le fonctionnement du method chaining.src, j’ai poussé un soupir. Je ne comprends pas l’intention derrière la création de modules aussi minuscules. Si même des fonctionnalités aussi petites deviennent des packages, cela ne risque-t-il pas de faire peser davantage la gestion des versions des dépendances que d’améliorer la réutilisabilité ?J’ai du mal à être d’accord sur les points 1-3, 4-6 et 8, parce que je n’y ressens absolument ni doute ni inconfort.
1-2
StarterKit, comme son nom l’indique, est un kit pour démarrer, donc au moment d’une utilisation réelle il ne me semble pas avoir beaucoup d’importance.
Dans le cas de ListItem, c’est bien comme vous l’avez dit. C’est un élément destiné à la configuration de l’extension Color. Là encore, je pense qu’il suffit simplement de ne pas utiliser StarterKit.
3
chain().something().run()n’est qu’une forme de sucre syntaxique, mais je pense que cela fournit une fonctionnalité adaptée au concept d’une bibliothèque batteries incluses.Je l’utilise de façon très pratique dans les environnements mobiles, où des actions comme mettre en gras puis redonner le focus sont en pratique indispensables.
4
Je ne connais pas bien ce point, car je n’utilise pas cette fonctionnalité.
(Je pense que c’est aussi un avantage en contrepartie du défaut que vous avez mentionné au point 1, à savoir sortir de l’état de concentration, dans la mesure où l’on n’a pas besoin de voir des informations sur des fonctionnalités que l’on n’utilisera pas.)
5-6
C’est bien documenté dans la documentation de chaque extension, et cela ne diffère en rien de l’implémentation d’un éditeur en général.
Honnêtement, pour le point 6, je ne suis même pas sûr d’avoir bien compris ce que voulait dire savvykang... Je continue à me dire : « Pourquoi est-ce une interrogation...? De quel indice peut-on bien avoir besoin...? » haha...
7
« Comme pour les autres nœuds », on peut vérifier le focus avec
editor.isActive('table').Cela dit, je ne pense pas que ce soit un problème qui se résolve simplement en identifiant le nœud actuellement focalisé. Cela ressemble à une exigence qui demande de prendre en compte beaucoup d’aspects, comme le filtrage du collage ou encore l’insertion via les outils de développement.
8
Je suis d’accord sur le fait que cela alourdit la gestion des versions des dépendances, mais je pense qu’il y a aussi l’avantage de ne pas embarquer du code pour des fonctionnalités dont on n’a pas besoin.
Dans notre cas précisément, nous étions justement dans une situation où nous n’avions pas besoin d’utiliser l’extension Color que vous avez mentionnée. J’ai l’impression que chaque approche a ses avantages et ses inconvénients.
.
Je pense que
react-prosemirrorettiptapque vous avez mentionnés relèvent de concepts complètement différents.un outil qui permet d’utiliser
prosemirrorde manière idiomatique avec Reactvs
un outil qui, qu’il soit ou non basé sur
prosemirror, n’a pas cela pour point central, mais rassemble en tout cas tout ce qu’il faut pour implémenter un éditeur adapté à mon serviceComme il est déjà populaire dans l’écosystème Vue, j’hésitais à en parler ou non,
mais après l’avoir utilisé cette fois en l’intégrant à Sveltekit, j’en ai été assez satisfait pour le partager.
Dans l’écosystème Svelte, je cherchais un éditeur WYSIWYG vraiment convaincant sans trouver mon bonheur,
et si certains d’entre vous se posent la même question, cela peut valoir le coup de l’essayer au moins une fois.