velaris-richtext-editor
Version:
A modern WYSIWYG rich text editor based on tiptap and shadcn ui for React
2 lines (1 loc) • 3.68 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("./index-COecBbaE.cjs"),n=require("react/jsx-runtime"),T=require("react"),l=require("./RichTextEditor-CWm5KSvH.cjs"),j=y.Extension.create({name:"textAlign",addOptions(){return{types:[],alignments:["left","center","right","justify"],defaultAlignment:null}},addGlobalAttributes(){return[{types:this.options.types,attributes:{textAlign:{default:this.options.defaultAlignment,parseHTML:t=>{const i=t.style.textAlign;return this.options.alignments.includes(i)?i:this.options.defaultAlignment},renderHTML:t=>t.textAlign?{style:`text-align: ${t.textAlign}`}:{}}}}]},addCommands(){return{setTextAlign:t=>({commands:i})=>this.options.alignments.includes(t)?this.options.types.map(s=>i.updateAttributes(s,{textAlign:t})).every(s=>s):!1,unsetTextAlign:()=>({commands:t})=>this.options.types.map(i=>t.resetAttributes(i,"textAlign")).every(i=>i)}},addKeyboardShortcuts(){return{"Mod-Shift-l":()=>this.editor.commands.setTextAlign("left"),"Mod-Shift-e":()=>this.editor.commands.setTextAlign("center"),"Mod-Shift-r":()=>this.editor.commands.setTextAlign("right"),"Mod-Shift-j":()=>this.editor.commands.setTextAlign("justify")}}});function b(t){var s;const i=T.useMemo(()=>{var o;const e=(o=t==null?void 0:t.items)==null?void 0:o.find(a=>a.isActive());return e&&!e.default?{...e,icon:e.icon?e.icon:t.icon}:{title:t==null?void 0:t.tooltip,icon:t.icon,isActive:()=>!1}},[t]);return n.jsxs(l.Popover,{modal:!0,children:[n.jsx(l.PopoverTrigger,{asChild:!0,disabled:t==null?void 0:t.disabled,children:n.jsx(l.ActionButton,{customClass:"!richtext-w-12 richtext-h-12",disabled:t==null?void 0:t.disabled,icon:t==null?void 0:t.icon,tooltip:t==null?void 0:t.tooltip,children:n.jsx(l.IconComponent,{className:"richtext-ml-1 richtext-size-3 richtext-text-zinc-500",name:"MenuDown"})})}),n.jsx(l.PopoverContent,{align:"start",className:"richtext-flex richtext-w-full richtext-min-w-4 richtext-flex-row richtext-gap-1 !richtext-p-[4px]",side:"bottom",children:(s=t==null?void 0:t.items)==null?void 0:s.map((e,d)=>{var o,a;return n.jsxs(l.Tooltip,{children:[n.jsx(l.TooltipTrigger,{asChild:!0,children:n.jsx(l.Toggle,{className:"richtext-size-7 richtext-p-1","data-state":i.title===e.title?"on":"off",onClick:e==null?void 0:e.action,pressed:i.title===e.title,size:"sm",children:(e==null?void 0:e.icon)&&n.jsx(l.IconComponent,{name:e.icon})})}),n.jsxs(l.TooltipContent,{className:"richtext-flex richtext-flex-col richtext-items-center",children:[n.jsx("span",{children:e.title}),!!((o=e.shortcutKeys)!=null&&o.length)&&n.jsx("span",{children:(a=e.shortcutKeys)==null?void 0:a.map(r=>l.getShortcutKey(r)).join(" ")})]})]},`text-align-${d}`)})})]})}const M=j.extend({addOptions(){var t;return{...(t=this.parent)==null?void 0:t.call(this),types:["heading","paragraph","list_item","title"],button({editor:i,extension:s,t:e}){var u;const d=((u=s.options)==null?void 0:u.alignments)||[],o={left:["mod","Shift","L"],center:["mod","Shift","E"],right:["mod","Shift","R"],justify:["mod","Shift","J"]},a={left:"AlignLeft",center:"AlignCenter",right:"AlignRight",justify:"AlignJustify"},r=d.map(c=>{var g,h,f;return{title:e(`editor.textalign.${c}.tooltip`),icon:a[c],shortcutKeys:o[c],isActive:()=>i.isActive({textAlign:c})||!1,action:()=>{var x,m;return(m=(x=i.commands)==null?void 0:x.setTextAlign)==null?void 0:m.call(x,c)},disabled:!((f=(h=(g=i==null?void 0:i.can)==null?void 0:g.call(i))==null?void 0:h.setTextAlign)!=null&&f.call(h,c))}}),A=r.filter(c=>c.disabled).length===r.length;return{component:b,componentProps:{icon:"AlignJustify",tooltip:e("editor.textalign.tooltip"),disabled:A,items:r}}}}}});exports.TextAlign=M;