+import I,{forwardRef as v,useEffect as N,useImperativeHandle as O,useRef as C}from"react";function T(n){return typeof n=="object"&&n.type==="tag"}function V(n){return{type:"tag",attrs:{...n.attrs}}}function g(n){let r=[];return n.forEach(t=>{var s;t.type==="paragraph"&&(r.push([]),(s=t==null?void 0:t.content)==null||s.forEach(e=>{var a,u;e.type==="text"&&e.text&&((a=r.at(-1))==null||a.push(e.text)),e.type==="tag"&&((u=r.at(-1))==null||u.push(V(e)))}))}),r}function m(n){let r=[];return n.forEach((t,s)=>{Array.isArray(r[s])||r.push({type:"paragraph",content:[]});let e=r.at(-1);typeof t=="string"&&(e!=null&&e.content)&&e.content.push({type:"text",text:t}),!Array.isArray(t)&&T(t)&&(e!=null&&e.content)&&e.content.push({type:"tag",attrs:{...t.attrs}}),Array.isArray(t)&&t.forEach(a=>{typeof a=="string"&&(e!=null&&e.content)&&e.content.push({type:"text",text:a}),typeof a=="object"&&a.type==="tag"&&(e!=null&&e.content)&&e.content.push({type:"tag",attrs:{...a.attrs}})})}),r}import{EditorContent as L,useEditor as H}from"@tiptap/react";import R from"@tiptap/extension-document";import P from"@tiptap/extension-paragraph";import j from"@tiptap/extension-text";import S from"@tiptap/extension-placeholder";import{mergeAttributes as E,Node as A}from"@tiptap/core";var y=A.create({name:"tag",group:"inline",inline:!0,atom:!0,selectable:!1,parseHTML(){return[{tag:`span[data-type="${this.name}"]`}]},renderHTML({HTMLAttributes:n}){return["span",E(n)]},addNodeView:()=>({node:n,extension:r})=>{let t=document.createElement("span");t.className="mi-tag";let{label:s,id:e,class:a,style:u,...d}=n.attrs;t.innerHTML=s,t.setAttribute("data-type","tag"),e&&t.setAttribute("data-id",e),r.options.tagClassName&&t.classList.add(r.options.tagClassName),a&&(Array.isArray(a)?a.forEach(i=>{t.classList.add(i)}):t.classList.add(a)),u&&Object.assign(t.style,u),Object.keys(d).length&&Object.keys(d).forEach(i=>{t.dataset[i]=d[i]}),r.options.eventHandlers&&Object.entries(r.options.eventHandlers).forEach(([i,f])=>{t.addEventListener(i,f)});let c=document.createElement("span");return c.appendChild(t),c.appendChild(document.createTextNode("\u200B")),{dom:c,destroy:()=>{r.options.eventHandlers&&Object.entries(r.options.eventHandlers).forEach(([i,f])=>{t.removeEventListener(i,f)})}}},addAttributes(){let n={};for(let r in this.options.attrs)n[r]={default:this.options.attrs[r]};return n}});var J={id:void 0,label:void 0,class:void 0,style:void 0},k=v((n,r)=>{let{onChange:t,value:s,placeholder:e,readonly:a=!1,tagClassName:u,editorOptions:d,className:c,tagAttrs:i,tagEventHandlers:f,...M}=n,l=C(null),o=H({editorProps:{attributes:{class:`mix-input ${c}`}},extensions:[R,P.configure({HTMLAttributes:{class:"mi-paragraph"}}),j,S.configure({placeholder:e}),y.configure({tagClassName:u,attrs:{...J,...i},eventHandlers:f})],onUpdate:({editor:p})=>{var x;t==null||t(g(((x=p==null?void 0:p.getJSON())==null?void 0:x.content)||[]))},...d}),b=p=>{o==null||o.chain().focus().insertContent(p).run()};return N(()=>{let p=m(s);p.length===0&&(p=[{type:"paragraph"}]),JSON.stringify(p)!==JSON.stringify(o==null?void 0:o.getJSON().content)&&(o==null||o.commands.setContent(p))},[s]),O(r,()=>({element:l.current,editor:o,insertContent:b})),I.createElement(L,{editor:o,innerRef:l,...M})}),h=k;var et=h;export{et as default};
0 commit comments