UNPKG

reactjs-tiptap-editor

Version:

A modern WYSIWYG rich text editor based on tiptap and shadcn ui for React

13 lines (12 loc) 14.9 kB
"use strict";const o=require("./clsx-CXbNJWDD.cjs");var _=Object.defineProperty,R=(t,e)=>{for(var s in e)_(t,s,{get:e[s],enumerable:!0})},D="listItem",v="textStyle",I=/^\s*([-+*])\s$/,A=o.Node3.create({name:"bulletList",addOptions(){return{itemTypeName:"listItem",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:"ul"}]},renderHTML({HTMLAttributes:t}){return["ul",o.mergeAttributes(this.options.HTMLAttributes,t),0]},markdownTokenName:"list",parseMarkdown:(t,e)=>t.type!=="list"||t.ordered?[]:{type:"bulletList",content:t.items?e.parseChildren(t.items):[]},renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,` `):"",markdownOptions:{indentsContent:!0},addCommands(){return{toggleBulletList:()=>({commands:t,chain:e})=>this.options.keepAttributes?e().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(D,this.editor.getAttributes(v)).run():t.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-8":()=>this.editor.commands.toggleBulletList()}},addInputRules(){let t=o.wrappingInputRule({find:I,type:this.type});return(this.options.keepMarks||this.options.keepAttributes)&&(t=o.wrappingInputRule({find:I,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:()=>this.editor.getAttributes(v),editor:this.editor})),[t]}}),B=o.Node3.create({name:"listItem",addOptions(){return{HTMLAttributes:{},bulletListTypeName:"bulletList",orderedListTypeName:"orderedList"}},content:"paragraph block*",defining:!0,parseHTML(){return[{tag:"li"}]},renderHTML({HTMLAttributes:t}){return["li",o.mergeAttributes(this.options.HTMLAttributes,t),0]},markdownTokenName:"list_item",parseMarkdown:(t,e)=>{if(t.type!=="list_item")return[];let s=[];if(t.tokens&&t.tokens.length>0)if(t.tokens.some(r=>r.type==="paragraph"))s=e.parseChildren(t.tokens);else{const r=t.tokens[0];if(r&&r.type==="text"&&r.tokens&&r.tokens.length>0){if(s=[{type:"paragraph",content:e.parseInline(r.tokens)}],t.tokens.length>1){const l=t.tokens.slice(1),a=e.parseChildren(l);s.push(...a)}}else s=e.parseChildren(t.tokens)}return s.length===0&&(s=[{type:"paragraph",content:[]}]),{type:"listItem",content:s}},renderMarkdown:(t,e,s)=>o.renderNestedMarkdownContent(t,e,n=>n.parentType==="bulletList"?"- ":n.parentType==="orderedList"?`${n.index+1}. `:"- ",s),addKeyboardShortcuts(){return{Enter:()=>this.editor.commands.splitListItem(this.name),Tab:()=>this.editor.commands.sinkListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)}}}),j={};R(j,{findListItemPos:()=>k,getNextListDepth:()=>y,handleBackspace:()=>b,handleDelete:()=>g,hasListBefore:()=>w,hasListItemAfter:()=>K,hasListItemBefore:()=>C,listItemHasSubList:()=>N,nextListIsDeeper:()=>E,nextListIsHigher:()=>H});var k=(t,e)=>{const{$from:s}=e.selection,n=o.getNodeType(t,e.schema);let r=null,i=s.depth,l=s.pos,a=null;for(;i>0&&a===null;)r=s.node(i),r.type===n?a=i:(i-=1,l-=1);return a===null?null:{$pos:e.doc.resolve(l),depth:a}},y=(t,e)=>{const s=k(t,e);if(!s)return!1;const[,n]=o.getNodeAtPosition(e,t,s.$pos.pos+4);return n},w=(t,e,s)=>{const{$anchor:n}=t.selection,r=Math.max(0,n.pos-2),i=t.doc.resolve(r).node();return!(!i||!s.includes(i.type.name))},C=(t,e)=>{var s;const{$anchor:n}=e.selection,r=e.doc.resolve(n.pos-2);return!(r.index()===0||((s=r.nodeBefore)==null?void 0:s.type.name)!==t)},N=(t,e,s)=>{if(!s)return!1;const n=o.getNodeType(t,e.schema);let r=!1;return s.descendants(i=>{i.type===n&&(r=!0)}),r},b=(t,e,s)=>{if(t.commands.undoInputRule())return!0;if(t.state.selection.from!==t.state.selection.to)return!1;if(!o.isNodeActive(t.state,e)&&w(t.state,e,s)){const{$anchor:a}=t.state.selection,h=t.state.doc.resolve(a.before()-1),m=[];h.node().descendants((c,p)=>{c.type.name===e&&m.push({node:c,pos:p})});const d=m.at(-1);if(!d)return!1;const u=t.state.doc.resolve(h.start()+d.pos+1);return t.chain().cut({from:a.start()-1,to:a.end()+1},u.end()).joinForward().run()}if(!o.isNodeActive(t.state,e)||!o.isAtStartOfNode(t.state))return!1;const n=k(e,t.state);if(!n)return!1;const i=t.state.doc.resolve(n.$pos.pos-2).node(n.depth),l=N(e,t.state,i);return C(e,t.state)&&!l?t.commands.joinItemBackward():t.chain().liftListItem(e).run()},E=(t,e)=>{const s=y(t,e),n=k(t,e);return!n||!s?!1:s>n.depth},H=(t,e)=>{const s=y(t,e),n=k(t,e);return!n||!s?!1:s<n.depth},g=(t,e)=>{if(!o.isNodeActive(t.state,e)||!o.isAtEndOfNode(t.state,e))return!1;const{selection:s}=t.state,{$from:n,$to:r}=s;return!s.empty&&n.sameParent(r)?!1:E(e,t.state)?t.chain().focus(t.state.selection.from+4).lift(e).joinBackward().run():H(e,t.state)?t.chain().joinForward().joinBackward().run():t.commands.joinItemForward()},K=(t,e)=>{var s;const{$anchor:n}=e.selection,r=e.doc.resolve(n.pos-n.parentOffset-2);return!(r.index()===r.parent.childCount-1||((s=r.nodeAfter)==null?void 0:s.type.name)!==t)},V=o.Extension.create({name:"listKeymap",addOptions(){return{listTypes:[{itemName:"listItem",wrapperNames:["bulletList","orderedList"]},{itemName:"taskItem",wrapperNames:["taskList"]}]}},addKeyboardShortcuts(){return{Delete:({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:s})=>{t.state.schema.nodes[s]!==void 0&&g(t,s)&&(e=!0)}),e},"Mod-Delete":({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:s})=>{t.state.schema.nodes[s]!==void 0&&g(t,s)&&(e=!0)}),e},Backspace:({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:s,wrapperNames:n})=>{t.state.schema.nodes[s]!==void 0&&b(t,s,n)&&(e=!0)}),e},"Mod-Backspace":({editor:t})=>{let e=!1;return this.options.listTypes.forEach(({itemName:s,wrapperNames:n})=>{t.state.schema.nodes[s]!==void 0&&b(t,s,n)&&(e=!0)}),e}}}}),T=/^(\s*)(\d+)\.\s+(.*)$/,X=/^\s/;function z(t){const e=[];let s=0,n=0;for(;s<t.length;){const r=t[s],i=r.match(T);if(!i)break;const[,l,a,h]=i,m=l.length;let d=h,u=s+1;const c=[r];for(;u<t.length;){const p=t[u];if(p.match(T))break;if(p.trim()==="")c.push(p),d+=` `,u+=1;else if(p.match(X))c.push(p),d+=` ${p.slice(m+2)}`,u+=1;else break}e.push({indent:m,number:parseInt(a,10),content:d.trim(),raw:c.join(` `)}),n=u,s=u}return[e,n]}function $(t,e,s){var n;const r=[];let i=0;for(;i<t.length;){const l=t[i];if(l.indent===e){const a=l.content.split(` `),h=((n=a[0])==null?void 0:n.trim())||"",m=[];h&&m.push({type:"paragraph",raw:h,tokens:s.inlineTokens(h)});const d=a.slice(1).join(` `).trim();if(d){const p=s.blockTokens(d);m.push(...p)}let u=i+1;const c=[];for(;u<t.length&&t[u].indent>e;)c.push(t[u]),u+=1;if(c.length>0){const p=Math.min(...c.map(L=>L.indent)),f=$(c,p,s);m.push({type:"list",ordered:!0,start:c[0].number,items:f,raw:c.map(L=>L.raw).join(` `)})}r.push({type:"list_item",raw:l.raw,tokens:m}),i=u}else i+=1}return r}function F(t,e){return t.map(s=>{if(s.type!=="list_item")return e.parseChildren([s])[0];const n=[];return s.tokens&&s.tokens.length>0&&s.tokens.forEach(r=>{if(r.type==="paragraph"||r.type==="list"||r.type==="blockquote"||r.type==="code")n.push(...e.parseChildren([r]));else if(r.type==="text"&&r.tokens){const i=e.parseChildren([r]);n.push({type:"paragraph",content:i})}else{const i=e.parseChildren([r]);i.length>0&&n.push(...i)}}),{type:"listItem",content:n}})}var q="listItem",M="textStyle",x=/^(\d+)\.\s$/,S=o.Node3.create({name:"orderedList",addOptions(){return{itemTypeName:"listItem",HTMLAttributes:{},keepMarks:!1,keepAttributes:!1}},group:"block list",content(){return`${this.options.itemTypeName}+`},addAttributes(){return{start:{default:1,parseHTML:t=>t.hasAttribute("start")?parseInt(t.getAttribute("start")||"",10):1},type:{default:null,parseHTML:t=>t.getAttribute("type")}}},parseHTML(){return[{tag:"ol"}]},renderHTML({HTMLAttributes:t}){const{start:e,...s}=t;return e===1?["ol",o.mergeAttributes(this.options.HTMLAttributes,s),0]:["ol",o.mergeAttributes(this.options.HTMLAttributes,t),0]},markdownTokenName:"list",parseMarkdown:(t,e)=>{if(t.type!=="list"||!t.ordered)return[];const s=t.start||1,n=t.items?F(t.items,e):[];return s!==1?{type:"orderedList",attrs:{start:s},content:n}:{type:"orderedList",content:n}},renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,` `):"",markdownTokenizer:{name:"orderedList",level:"block",start:t=>{const e=t.match(/^(\s*)(\d+)\.\s+/),s=e==null?void 0:e.index;return s!==void 0?s:-1},tokenize:(t,e,s)=>{var n;const r=t.split(` `),[i,l]=z(r);if(i.length===0)return;const a=$(i,0,s);return a.length===0?void 0:{type:"list",ordered:!0,start:((n=i[0])==null?void 0:n.number)||1,items:a,raw:r.slice(0,l).join(` `)}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleOrderedList:()=>({commands:t,chain:e})=>this.options.keepAttributes?e().toggleList(this.name,this.options.itemTypeName,this.options.keepMarks).updateAttributes(q,this.editor.getAttributes(M)).run():t.toggleList(this.name,this.options.itemTypeName,this.options.keepMarks)}},addKeyboardShortcuts(){return{"Mod-Shift-7":()=>this.editor.commands.toggleOrderedList()}},addInputRules(){let t=o.wrappingInputRule({find:x,type:this.type,getAttributes:e=>({start:+e[1]}),joinPredicate:(e,s)=>s.childCount+s.attrs.start===+e[1]});return(this.options.keepMarks||this.options.keepAttributes)&&(t=o.wrappingInputRule({find:x,type:this.type,keepMarks:this.options.keepMarks,keepAttributes:this.options.keepAttributes,getAttributes:e=>({start:+e[1],...this.editor.getAttributes(M)}),joinPredicate:(e,s)=>s.childCount+s.attrs.start===+e[1],editor:this.editor})),[t]}}),G=/^\s*(\[([( |x])?\])\s$/,O=o.Node3.create({name:"taskItem",addOptions(){return{nested:!1,HTMLAttributes:{},taskListTypeName:"taskList",a11y:void 0}},content(){return this.options.nested?"paragraph block*":"paragraph+"},defining:!0,addAttributes(){return{checked:{default:!1,keepOnSplit:!1,parseHTML:t=>{const e=t.getAttribute("data-checked");return e===""||e==="true"},renderHTML:t=>({"data-checked":t.checked})}}},parseHTML(){return[{tag:`li[data-type="${this.name}"]`,priority:51}]},renderHTML({node:t,HTMLAttributes:e}){return["li",o.mergeAttributes(this.options.HTMLAttributes,e,{"data-type":this.name}),["label",["input",{type:"checkbox",checked:t.attrs.checked?"checked":null}],["span"]],["div",0]]},parseMarkdown:(t,e)=>{const s=[];if(t.tokens&&t.tokens.length>0?s.push(e.createNode("paragraph",{},e.parseInline(t.tokens))):t.text?s.push(e.createNode("paragraph",{},[e.createNode("text",{text:t.text})])):s.push(e.createNode("paragraph",{},[])),t.nestedTokens&&t.nestedTokens.length>0){const n=e.parseChildren(t.nestedTokens);s.push(...n)}return e.createNode("taskItem",{checked:t.checked||!1},s)},renderMarkdown:(t,e)=>{var s;const r=`- [${(s=t.attrs)!=null&&s.checked?"x":" "}] `;return o.renderNestedMarkdownContent(t,e,r)},addKeyboardShortcuts(){const t={Enter:()=>this.editor.commands.splitListItem(this.name),"Shift-Tab":()=>this.editor.commands.liftListItem(this.name)};return this.options.nested?{...t,Tab:()=>this.editor.commands.sinkListItem(this.name)}:t},addNodeView(){return({node:t,HTMLAttributes:e,getPos:s,editor:n})=>{const r=document.createElement("li"),i=document.createElement("label"),l=document.createElement("span"),a=document.createElement("input"),h=document.createElement("div"),m=d=>{var u,c;a.ariaLabel=((c=(u=this.options.a11y)==null?void 0:u.checkboxLabel)==null?void 0:c.call(u,d,a.checked))||`Task item checkbox for ${d.textContent||"empty task item"}`};return m(t),i.contentEditable="false",a.type="checkbox",a.addEventListener("mousedown",d=>d.preventDefault()),a.addEventListener("change",d=>{if(!n.isEditable&&!this.options.onReadOnlyChecked){a.checked=!a.checked;return}const{checked:u}=d.target;n.isEditable&&typeof s=="function"&&n.chain().focus(void 0,{scrollIntoView:!1}).command(({tr:c})=>{const p=s();if(typeof p!="number")return!1;const f=c.doc.nodeAt(p);return c.setNodeMarkup(p,void 0,{...f==null?void 0:f.attrs,checked:u}),!0}).run(),!n.isEditable&&this.options.onReadOnlyChecked&&(this.options.onReadOnlyChecked(t,u)||(a.checked=!a.checked))}),Object.entries(this.options.HTMLAttributes).forEach(([d,u])=>{r.setAttribute(d,u)}),r.dataset.checked=t.attrs.checked,a.checked=t.attrs.checked,i.append(a,l),r.append(i,h),Object.entries(e).forEach(([d,u])=>{r.setAttribute(d,u)}),{dom:r,contentDOM:h,update:d=>d.type!==this.type?!1:(r.dataset.checked=d.attrs.checked,a.checked=d.attrs.checked,m(d),!0)}}},addInputRules(){return[o.wrappingInputRule({find:G,type:this.type,getAttributes:t=>({checked:t[t.length-1]==="x"})})]}}),P=o.Node3.create({name:"taskList",addOptions(){return{itemTypeName:"taskItem",HTMLAttributes:{}}},group:"block list",content(){return`${this.options.itemTypeName}+`},parseHTML(){return[{tag:`ul[data-type="${this.name}"]`,priority:51}]},renderHTML({HTMLAttributes:t}){return["ul",o.mergeAttributes(this.options.HTMLAttributes,t,{"data-type":this.name}),0]},parseMarkdown:(t,e)=>e.createNode("taskList",{},e.parseChildren(t.items||[])),renderMarkdown:(t,e)=>t.content?e.renderChildren(t.content,` `):"",markdownTokenizer:{name:"taskList",level:"block",start(t){var e;const s=(e=t.match(/^\s*[-+*]\s+\[([ xX])\]\s+/))==null?void 0:e.index;return s!==void 0?s:-1},tokenize(t,e,s){const n=i=>{const l=o.parseIndentedBlocks(i,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:a=>({indentLevel:a[1].length,mainContent:a[4],checked:a[3].toLowerCase()==="x"}),createToken:(a,h)=>({type:"taskItem",raw:"",mainContent:a.mainContent,indentLevel:a.indentLevel,checked:a.checked,text:a.mainContent,tokens:s.inlineTokens(a.mainContent),nestedTokens:h}),customNestedParser:n},s);return l?[{type:"taskList",raw:l.raw,items:l.items}]:s.blockTokens(i)},r=o.parseIndentedBlocks(t,{itemPattern:/^(\s*)([-+*])\s+\[([ xX])\]\s+(.*)$/,extractItemData:i=>({indentLevel:i[1].length,mainContent:i[4],checked:i[3].toLowerCase()==="x"}),createToken:(i,l)=>({type:"taskItem",raw:"",mainContent:i.mainContent,indentLevel:i.indentLevel,checked:i.checked,text:i.mainContent,tokens:s.inlineTokens(i.mainContent),nestedTokens:l}),customNestedParser:n},s);if(r)return{type:"taskList",raw:r.raw,items:r.items}}},markdownOptions:{indentsContent:!0},addCommands(){return{toggleTaskList:()=>({commands:t})=>t.toggleList(this.name,this.options.itemTypeName)}},addKeyboardShortcuts(){return{"Mod-Shift-9":()=>this.editor.commands.toggleTaskList()}}});o.Extension.create({name:"listKit",addExtensions(){const t=[];return this.options.bulletList!==!1&&t.push(A.configure(this.options.bulletList)),this.options.listItem!==!1&&t.push(B.configure(this.options.listItem)),this.options.listKeymap!==!1&&t.push(V.configure(this.options.listKeymap)),this.options.orderedList!==!1&&t.push(S.configure(this.options.orderedList)),this.options.taskItem!==!1&&t.push(O.configure(this.options.taskItem)),this.options.taskList!==!1&&t.push(P.configure(this.options.taskList)),t}});exports.BulletList=A;exports.OrderedList=S;exports.TaskItem=O;exports.TaskList=P;