11import { Attribute , mergeAttributes , Node } from "@tiptap/core" ;
2+ import { ReactNodeViewRenderer } from "@tiptap/react" ;
3+ import Tag from "./Tag" ;
24
35export default Node . create ( {
46 name : "tag" ,
@@ -12,71 +14,15 @@ export default Node.create({
1214 {
1315 tag : `span[data-type="${ this . name } "]` ,
1416 } ,
15- ] ;
17+ ]
1618 } ,
1719
1820 renderHTML ( { HTMLAttributes } ) {
1921 return [ "span" , mergeAttributes ( HTMLAttributes ) ] ;
2022 } ,
2123
22-
23- addNodeView : ( ) => ( { node, extension } ) => {
24- const span = document . createElement ( 'span' ) ;
25- span . className = 'mi-tag'
26- const { label, id, class : classes , style, ...restAttrs } = node . attrs
27- span . innerHTML = label
28- span . setAttribute ( 'data-type' , 'tag' )
29-
30- if ( id ) {
31- span . setAttribute ( 'data-id' , id )
32- }
33-
34- if ( extension . options . tagClassName ) {
35- span . classList . add ( extension . options . tagClassName )
36- }
37-
38- if ( classes ) {
39- if ( Array . isArray ( classes ) ) {
40- classes . forEach ( ( c ) => {
41- span . classList . add ( c as string )
42- } )
43- } else {
44- span . classList . add ( classes )
45- }
46- }
47-
48- if ( style ) {
49- Object . assign ( span . style , style )
50- }
51-
52- if ( Object . keys ( restAttrs ) . length ) {
53- Object . keys ( restAttrs ) . forEach ( ( key ) => {
54- span . dataset [ key ] = restAttrs [ key ]
55- } )
56- }
57-
58- // Add event listeners
59- if ( extension . options . eventHandlers ) {
60- Object . entries ( extension . options . eventHandlers ) . forEach ( ( [ eventName , handler ] ) => {
61- span . addEventListener ( eventName , handler as EventListener )
62- } )
63- }
64-
65- const dom = document . createElement ( 'span' )
66- dom . appendChild ( span )
67- // add zero-width space to make caret visible to outside of tag
68- dom . appendChild ( document . createTextNode ( '\u200B' ) )
69-
70- return {
71- dom,
72- destroy : ( ) => {
73- if ( extension . options . eventHandlers ) {
74- Object . entries ( extension . options . eventHandlers ) . forEach ( ( [ eventName , handler ] ) => {
75- span . removeEventListener ( eventName , handler as EventListener )
76- } )
77- }
78- }
79- }
24+ addNodeView ( ) {
25+ return ReactNodeViewRenderer ( Tag )
8026 } ,
8127
8228 addAttributes ( ) {
@@ -85,5 +31,5 @@ export default Node.create({
8531 extraAttrs [ key ] = { default : this . options . attrs [ key ] }
8632 }
8733 return extraAttrs
88- }
89- } ) ;
34+ } ,
35+ } )
0 commit comments