velaris-richtext-editor
Version:
A modern WYSIWYG rich text editor based on tiptap and shadcn ui for React
2 lines (1 loc) • 11.1 kB
JavaScript
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x=require("./index-COecBbaE.cjs"),g=require("react/jsx-runtime"),M=require("./RichTextEditor-CWm5KSvH.cjs");var C=200,f=function(){};f.prototype.append=function(e){return e.length?(e=f.from(e),!this.length&&e||e.length<C&&this.leafAppend(e)||this.length<C&&e.leafPrepend(this)||this.appendInner(e)):this};f.prototype.prepend=function(e){return e.length?f.from(e).append(this):this};f.prototype.appendInner=function(e){return new k(this,e)};f.prototype.slice=function(e,t){return e===void 0&&(e=0),t===void 0&&(t=this.length),e>=t?f.empty:this.sliceInner(Math.max(0,e),Math.min(this.length,t))};f.prototype.get=function(e){if(!(e<0||e>=this.length))return this.getInner(e)};f.prototype.forEach=function(e,t,n){t===void 0&&(t=0),n===void 0&&(n=this.length),t<=n?this.forEachInner(e,t,n,0):this.forEachInvertedInner(e,t,n,0)};f.prototype.map=function(e,t,n){t===void 0&&(t=0),n===void 0&&(n=this.length);var r=[];return this.forEach(function(s,l){return r.push(e(s,l))},t,n),r};f.from=function(e){return e instanceof f?e:e&&e.length?new A(e):f.empty};var A=function(i){function e(n){i.call(this),this.values=n}i&&(e.__proto__=i),e.prototype=Object.create(i&&i.prototype),e.prototype.constructor=e;var t={length:{configurable:!0},depth:{configurable:!0}};return e.prototype.flatten=function(){return this.values},e.prototype.sliceInner=function(r,s){return r==0&&s==this.length?this:new e(this.values.slice(r,s))},e.prototype.getInner=function(r){return this.values[r]},e.prototype.forEachInner=function(r,s,l,o){for(var p=s;p<l;p++)if(r(this.values[p],o+p)===!1)return!1},e.prototype.forEachInvertedInner=function(r,s,l,o){for(var p=s-1;p>=l;p--)if(r(this.values[p],o+p)===!1)return!1},e.prototype.leafAppend=function(r){if(this.length+r.length<=C)return new e(this.values.concat(r.flatten()))},e.prototype.leafPrepend=function(r){if(this.length+r.length<=C)return new e(r.flatten().concat(this.values))},t.length.get=function(){return this.values.length},t.depth.get=function(){return 0},Object.defineProperties(e.prototype,t),e}(f);f.empty=new A([]);var k=function(i){function e(t,n){i.call(this),this.left=t,this.right=n,this.length=t.length+n.length,this.depth=Math.max(t.depth,n.depth)+1}return i&&(e.__proto__=i),e.prototype=Object.create(i&&i.prototype),e.prototype.constructor=e,e.prototype.flatten=function(){return this.left.flatten().concat(this.right.flatten())},e.prototype.getInner=function(n){return n<this.left.length?this.left.get(n):this.right.get(n-this.left.length)},e.prototype.forEachInner=function(n,r,s,l){var o=this.left.length;if(r<o&&this.left.forEachInner(n,r,Math.min(s,o),l)===!1||s>o&&this.right.forEachInner(n,Math.max(r-o,0),Math.min(this.length,s)-o,l+o)===!1)return!1},e.prototype.forEachInvertedInner=function(n,r,s,l){var o=this.left.length;if(r>o&&this.right.forEachInvertedInner(n,r-o,Math.max(s,o)-o,l+o)===!1||s<o&&this.left.forEachInvertedInner(n,Math.min(r,o),s,l)===!1)return!1},e.prototype.sliceInner=function(n,r){if(n==0&&r==this.length)return this;var s=this.left.length;return r<=s?this.left.slice(n,r):n>=s?this.right.slice(n-s,r-s):this.left.slice(n,s).append(this.right.slice(0,r-s))},e.prototype.leafAppend=function(n){var r=this.right.leafAppend(n);if(r)return new e(this.left,r)},e.prototype.leafPrepend=function(n){var r=this.left.leafPrepend(n);if(r)return new e(r,this.right)},e.prototype.appendInner=function(n){return this.left.depth>=Math.max(this.right.depth,n.depth)+1?new e(this.left,new e(this.right,n)):new e(this,n)},e}(f);const S=500;class m{constructor(e,t){this.items=e,this.eventCount=t}popEvent(e,t){if(this.eventCount==0)return null;let n=this.items.length;for(;;n--)if(this.items.get(n-1).selection){--n;break}let r,s;t&&(r=this.remapping(n,this.items.length),s=r.maps.length);let l=e.tr,o,p,a=[],c=[];return this.items.forEach((u,h)=>{if(!u.step){r||(r=this.remapping(n,h+1),s=r.maps.length),s--,c.push(u);return}if(r){c.push(new v(u.map));let d=u.step.map(r.slice(s)),w;d&&l.maybeStep(d).doc&&(w=l.mapping.maps[l.mapping.maps.length-1],a.push(new v(w,void 0,void 0,a.length+c.length))),s--,w&&r.appendMap(w,s)}else l.maybeStep(u.step);if(u.selection)return o=r?u.selection.map(r.slice(s)):u.selection,p=new m(this.items.slice(0,n).append(c.reverse().concat(a)),this.eventCount-1),!1},this.items.length,0),{remaining:p,transform:l,selection:o}}addTransform(e,t,n,r){let s=[],l=this.eventCount,o=this.items,p=!r&&o.length?o.get(o.length-1):null;for(let c=0;c<e.steps.length;c++){let u=e.steps[c].invert(e.docs[c]),h=new v(e.mapping.maps[c],u,t),d;(d=p&&p.merge(h))&&(h=d,c?s.pop():o=o.slice(0,o.length-1)),s.push(h),t&&(l++,t=void 0),r||(p=h)}let a=l-n.depth;return a>L&&(o=G(o,a),l-=a),new m(o.append(s),l)}remapping(e,t){let n=new x.Mapping;return this.items.forEach((r,s)=>{let l=r.mirrorOffset!=null&&s-r.mirrorOffset>=e?n.maps.length-r.mirrorOffset:void 0;n.appendMap(r.map,l)},e,t),n}addMaps(e){return this.eventCount==0?this:new m(this.items.append(e.map(t=>new v(t))),this.eventCount)}rebased(e,t){if(!this.eventCount)return this;let n=[],r=Math.max(0,this.items.length-t),s=e.mapping,l=e.steps.length,o=this.eventCount;this.items.forEach(h=>{h.selection&&o--},r);let p=t;this.items.forEach(h=>{let d=s.getMirror(--p);if(d==null)return;l=Math.min(l,d);let w=s.maps[d];if(h.step){let _=e.steps[d].invert(e.docs[d]),b=h.selection&&h.selection.map(s.slice(p+1,d));b&&o++,n.push(new v(w,_,b))}else n.push(new v(w))},r);let a=[];for(let h=t;h<l;h++)a.push(new v(s.maps[h]));let c=this.items.slice(0,r).append(a).append(n),u=new m(c,o);return u.emptyItemCount()>S&&(u=u.compress(this.items.length-n.length)),u}emptyItemCount(){let e=0;return this.items.forEach(t=>{t.step||e++}),e}compress(e=this.items.length){let t=this.remapping(0,e),n=t.maps.length,r=[],s=0;return this.items.forEach((l,o)=>{if(o>=e)r.push(l),l.selection&&s++;else if(l.step){let p=l.step.map(t.slice(n)),a=p&&p.getMap();if(n--,a&&t.appendMap(a,n),p){let c=l.selection&&l.selection.map(t.slice(n));c&&s++;let u=new v(a.invert(),p,c),h,d=r.length-1;(h=r.length&&r[d].merge(u))?r[d]=h:r.push(u)}}else l.map&&n--},this.items.length,0),new m(f.from(r.reverse()),s)}}m.empty=new m(f.empty,0);function G(i,e){let t;return i.forEach((n,r)=>{if(n.selection&&e--==0)return t=r,!1}),i.slice(t)}class v{constructor(e,t,n,r){this.map=e,this.step=t,this.selection=n,this.mirrorOffset=r}merge(e){if(this.step&&e.step&&!e.selection){let t=e.step.merge(this.step);if(t)return new v(t.getMap().invert(),t,this.selection)}}}class y{constructor(e,t,n,r,s){this.done=e,this.undone=t,this.prevRanges=n,this.prevTime=r,this.prevComposition=s}}const L=20;function F(i,e,t,n){let r=t.getMeta(I),s;if(r)return r.historyState;t.getMeta(R)&&(i=new y(i.done,i.undone,null,0,-1));let l=t.getMeta("appendedTransaction");if(t.steps.length==0)return i;if(l&&l.getMeta(I))return l.getMeta(I).redo?new y(i.done.addTransform(t,void 0,n,E(e)),i.undone,O(t.mapping.maps),i.prevTime,i.prevComposition):new y(i.done,i.undone.addTransform(t,void 0,n,E(e)),null,i.prevTime,i.prevComposition);if(t.getMeta("addToHistory")!==!1&&!(l&&l.getMeta("addToHistory")===!1)){let o=t.getMeta("composition"),p=i.prevTime==0||!l&&i.prevComposition!=o&&(i.prevTime<(t.time||0)-n.newGroupDelay||!z(t,i.prevRanges)),a=l?T(i.prevRanges,t.mapping):O(t.mapping.maps);return new y(i.done.addTransform(t,p?e.selection.getBookmark():void 0,n,E(e)),m.empty,a,t.time,o??i.prevComposition)}else return(s=t.getMeta("rebased"))?new y(i.done.rebased(t,s),i.undone.rebased(t,s),T(i.prevRanges,t.mapping),i.prevTime,i.prevComposition):new y(i.done.addMaps(t.mapping.maps),i.undone.addMaps(t.mapping.maps),T(i.prevRanges,t.mapping),i.prevTime,i.prevComposition)}function z(i,e){if(!e)return!1;if(!i.docChanged)return!0;let t=!1;return i.mapping.maps[0].forEach((n,r)=>{for(let s=0;s<e.length;s+=2)n<=e[s+1]&&r>=e[s]&&(t=!0)}),t}function O(i){let e=[];for(let t=i.length-1;t>=0&&e.length==0;t--)i[t].forEach((n,r,s,l)=>e.push(s,l));return e}function T(i,e){if(!i)return null;let t=[];for(let n=0;n<i.length;n+=2){let r=e.map(i[n],1),s=e.map(i[n+1],-1);r<=s&&t.push(r,s)}return t}function N(i,e,t){let n=E(e),r=I.get(e).spec.config,s=(t?i.undone:i.done).popEvent(e,n);if(!s)return null;let l=s.selection.resolve(s.transform.doc),o=(t?i.done:i.undone).addTransform(s.transform,e.selection.getBookmark(),r,n),p=new y(t?o:s.remaining,t?s.remaining:o,null,0,-1);return s.transform.setSelection(l).setMeta(I,{redo:t,historyState:p})}let P=!1,j=null;function E(i){let e=i.plugins;if(j!=e){P=!1,j=e;for(let t=0;t<e.length;t++)if(e[t].spec.historyPreserveItems){P=!0;break}}return P}const I=new x.PluginKey("history"),R=new x.PluginKey("closeHistory");function U(i={}){return i={depth:i.depth||100,newGroupDelay:i.newGroupDelay||500},new x.Plugin({key:I,state:{init(){return new y(m.empty,m.empty,null,0,-1)},apply(e,t,n){return F(t,n,e,i)}},config:i,props:{handleDOMEvents:{beforeinput(e,t){let n=t.inputType,r=n=="historyUndo"?D:n=="historyRedo"?K:null;return r?(t.preventDefault(),r(e.state,e.dispatch)):!1}}}})}function H(i,e){return(t,n)=>{let r=I.getState(t);if(!r||(i?r.undone:r.done).eventCount==0)return!1;if(n){let s=N(r,t,i);s&&n(e?s.scrollIntoView():s)}return!0}}const D=H(!1,!0),K=H(!0,!0),Z=x.Extension.create({name:"history",addOptions(){return{depth:100,newGroupDelay:500}},addCommands(){return{undo:()=>({state:i,dispatch:e})=>D(i,e),redo:()=>({state:i,dispatch:e})=>K(i,e)}},addProseMirrorPlugins(){return[U(this.options)]},addKeyboardShortcuts(){return{"Mod-z":()=>this.editor.commands.undo(),"Shift-Mod-z":()=>this.editor.commands.redo(),"Mod-y":()=>this.editor.commands.redo(),"Mod-я":()=>this.editor.commands.undo(),"Shift-Mod-я":()=>this.editor.commands.redo()}}});function $(i){var a;const{icon:e=void 0,tooltip:t=void 0,customClass:n="",tooltipOptions:r={},action:s=void 0,isActive:l=void 0,children:o}=i,p=M.icons[e];return g.jsxs(M.Tooltip,{children:[g.jsx(M.TooltipTrigger,{asChild:!0,children:g.jsxs(M.Toggle,{size:"sm",className:`richtext-w-[32px] richtext-h-[32px] ${n}`,disabled:l==null?void 0:l(),onClick:s,children:[p&&g.jsx(p,{className:"richtext-w-4 richtext-h-4"}),o&&g.jsx(g.Fragment,{children:o})]})}),t&&g.jsx(M.TooltipContent,{...r,children:g.jsxs("div",{className:"richtext-flex richtext-flex-col richtext-items-center richtext-text-center richtext-max-w-24",children:[g.jsx("div",{children:t}),!!((a=i==null?void 0:i.shortcutKeys)!=null&&a.length)&&g.jsx("span",{children:M.getShortcutKeys(i==null?void 0:i.shortcutKeys)})]})})]})}const V=["undo","redo"],W=Z.extend({addOptions(){var i;return{...(i=this.parent)==null?void 0:i.call(this),depth:100,newGroupDelay:500,button:({editor:e,t})=>V.map(n=>({component:$,componentProps:{action:()=>{n==="undo"&&e.chain().focus().undo().run(),n==="redo"&&e.chain().focus().redo().run()},shortcutKeys:n==="undo"?["mod","Z"]:["shift","mod","Z"],disabled:n==="undo"?!e.can().undo():!e.can().redo(),isActive:()=>n==="undo"?!e.can().undo():!e.can().redo(),icon:n==="undo"?"Undo2":"Redo2",tooltip:t(`editor.${n}.tooltip`)}}))}}});exports.History=W;