luxe-edit 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -49,6 +49,11 @@ declare function getEditorTree(json: any): any;
49
49
 
50
50
  interface LuxeEditorProps {
51
51
  initialConfig: Partial<InitialConfigType>;
52
+ /**
53
+ * Optional initial editor content as a serialized Lexical editor state (JSON).
54
+ * This is ideal for loading content from a database for editing.
55
+ */
56
+ initialJSON?: any;
52
57
  showFloatingToolbar?: boolean;
53
58
  showToolbar?: boolean;
54
59
  toolbarItems?: ToolbarItem[];
@@ -57,6 +62,6 @@ interface LuxeEditorProps {
57
62
  ignoreInitialChange?: boolean;
58
63
  children?: React__default.ReactNode;
59
64
  }
60
- declare function LuxeEditor({ initialConfig, showFloatingToolbar, showToolbar, toolbarItems, floatingToolbarItems, onChange, ignoreInitialChange, children }: LuxeEditorProps): react_jsx_runtime.JSX.Element;
65
+ declare function LuxeEditor({ initialConfig, initialJSON, showFloatingToolbar, showToolbar, toolbarItems, floatingToolbarItems, onChange, ignoreInitialChange, children }: LuxeEditorProps): react_jsx_runtime.JSX.Element;
61
66
 
62
67
  export { FloatingToolbarPlugin, LuxeEditor, type LuxeEditorProps, Toolbar, type ToolbarItem, type ToolbarItemType, getEditorDOM, getEditorFormattedText, getEditorJSON, getEditorText, getEditorTree };
package/dist/index.d.ts CHANGED
@@ -49,6 +49,11 @@ declare function getEditorTree(json: any): any;
49
49
 
50
50
  interface LuxeEditorProps {
51
51
  initialConfig: Partial<InitialConfigType>;
52
+ /**
53
+ * Optional initial editor content as a serialized Lexical editor state (JSON).
54
+ * This is ideal for loading content from a database for editing.
55
+ */
56
+ initialJSON?: any;
52
57
  showFloatingToolbar?: boolean;
53
58
  showToolbar?: boolean;
54
59
  toolbarItems?: ToolbarItem[];
@@ -57,6 +62,6 @@ interface LuxeEditorProps {
57
62
  ignoreInitialChange?: boolean;
58
63
  children?: React__default.ReactNode;
59
64
  }
60
- declare function LuxeEditor({ initialConfig, showFloatingToolbar, showToolbar, toolbarItems, floatingToolbarItems, onChange, ignoreInitialChange, children }: LuxeEditorProps): react_jsx_runtime.JSX.Element;
65
+ declare function LuxeEditor({ initialConfig, initialJSON, showFloatingToolbar, showToolbar, toolbarItems, floatingToolbarItems, onChange, ignoreInitialChange, children }: LuxeEditorProps): react_jsx_runtime.JSX.Element;
61
66
 
62
67
  export { FloatingToolbarPlugin, LuxeEditor, type LuxeEditorProps, Toolbar, type ToolbarItem, type ToolbarItemType, getEditorDOM, getEditorFormattedText, getEditorJSON, getEditorText, getEditorTree };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- "use strict";var ve=Object.create;var j=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var Ne=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var Ie=(e,r)=>{for(var o in r)j(e,o,{get:r[o],enumerable:!0})},te=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of Ee(r))!Le.call(e,l)&&l!==o&&j(e,l,{get:()=>r[l],enumerable:!(t=ke(r,l))||t.enumerable});return e};var we=(e,r,o)=>(o=e!=null?ve(Ne(e)):{},te(r||!e||!e.__esModule?j(o,"default",{value:e,enumerable:!0}):o,e)),Re=e=>te(j({},"__esModule",{value:!0}),e);var Pe={};Ie(Pe,{FloatingToolbarPlugin:()=>X,LuxeEditor:()=>Ke,Toolbar:()=>J,getEditorDOM:()=>ce,getEditorFormattedText:()=>de,getEditorJSON:()=>le,getEditorText:()=>se,getEditorTree:()=>pe});module.exports=Re(Pe);var _=we(require("react")),ge=require("@lexical/react/LexicalComposer"),fe=require("@lexical/react/LexicalRichTextPlugin"),he=require("@lexical/react/LexicalContentEditable"),be=require("@lexical/react/LexicalHistoryPlugin"),me=require("@lexical/react/LexicalErrorBoundary"),xe=require("@lexical/react/LexicalLinkPlugin"),ye=require("@lexical/rich-text"),q=require("@lexical/link"),Y=require("lexical"),Te=require("@lexical/react/LexicalComposerContext");var re=require("@lexical/react/LexicalComposerContext"),v=require("lexical"),V=require("@lexical/selection"),G=require("@lexical/rich-text"),D=require("react"),ie=require("react-dom");var oe=require("@lexical/react/LexicalComposerContext"),ne=require("@lexical/utils"),a=require("lexical"),Z=require("@lexical/selection"),W=require("@lexical/rich-text"),F=require("@lexical/link"),b=require("react"),p=require("react/jsx-runtime"),Q=["#000000","#ffffff","#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff","#808080","#800000","#008000","#000080","#808000","#800080","#008080"];function B(e){return{undo:"\u21B6",redo:"\u21B7",divider:"",bold:"B",italic:"I",underline:"U",strikethrough:"S",heading1:"H1",heading2:"H2",heading3:"H3",heading4:"H4",heading5:"H5",heading6:"H6",paragraph:"P",alignLeft:"\u2B05",alignCenter:"\u2B0C",alignRight:"\u27A1",alignJustify:"\u2B0C",textColor:"A",backgroundColor:"\u2B1B",fullscreen:"\u26F6",headingDropdown:"Normal",link:"\u{1F517}"}[e]||e}function Se(){return(0,p.jsx)("div",{style:{width:"1px",height:"24px",background:"#e5e7eb",margin:"0 4px"}})}function Me({item:e,onAction:r}){let[o,t]=(0,b.useState)(!1),l=(0,b.useRef)(null),s=e.colors||Q;return(0,b.useEffect)(()=>{let i=u=>{l.current&&!l.current.contains(u.target)&&t(!1)};if(o)return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[o]),e.color?(0,p.jsx)("button",{onClick:()=>r(e,e.color),title:`${e.type==="textColor"?"Text":"Background"} Color: ${e.color}`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:e.type==="backgroundColor"?e.color:"white",color:e.type==="textColor"?e.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center"},children:e.icon||B(e.type)}):(0,p.jsxs)("div",{style:{position:"relative"},ref:l,children:[(0,p.jsxs)("button",{onClick:()=>t(!o),title:`${e.type==="textColor"?"Text":"Background"} Color`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",position:"relative"},children:[e.icon||(0,p.jsx)("span",{style:{display:"block",width:"20px",height:"20px",background:e.type==="backgroundColor"?"linear-gradient(45deg, #808080 25%, transparent 25%), linear-gradient(-45deg, #808080 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #808080 75%), linear-gradient(-45deg, transparent 75%, #808080 75%)":"currentColor",backgroundSize:e.type==="backgroundColor"?"8px 8px":"auto",backgroundPosition:e.type==="backgroundColor"?"0 0, 0 4px, 4px -4px, -4px 0px":"auto"},children:e.type==="textColor"&&(0,p.jsx)("span",{style:{color:"#000",fontSize:"12px"},children:"A"})}),(0,p.jsx)("span",{style:{marginLeft:"4px",fontSize:"10px"},children:"\u25BC"})]}),o&&(0,p.jsxs)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"8px",display:"grid",gridTemplateColumns:"repeat(5, 1fr)",gap:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"160px"},children:[s.map(i=>(0,p.jsxs)("button",{onClick:()=>{r(e,i),t(!1)},title:i,style:{width:"24px",height:"24px",borderRadius:"4px",border:e.type==="textColor"?`3px solid ${i}`:"1px solid #e5e7eb",background:e.type==="backgroundColor"?i:"white",color:e.type==="textColor"?"#000":"inherit",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"12px",fontWeight:"bold",position:"relative"},children:[e.type==="textColor"&&(0,p.jsx)("span",{style:{color:i,fontSize:"14px",fontWeight:"bold",lineHeight:"1"},children:"A"}),e.type==="backgroundColor"&&i==="#ffffff"&&(0,p.jsx)("span",{style:{color:"#000",fontSize:"10px",border:"1px solid #ccc",width:"12px",height:"12px",display:"block"},children:"\u25A1"})]},i)),(0,p.jsx)("input",{type:"color",onChange:i=>{r(e,i.target.value),t(!1)},style:{gridColumn:"1 / -1",width:"100%",height:"32px",border:"1px solid #e5e7eb",borderRadius:"4px",cursor:"pointer"}})]})]})}function $e({item:e,onAction:r,currentBlockType:o="paragraph"}){let[t,l]=(0,b.useState)(!1),s=(0,b.useRef)(null);(0,b.useEffect)(()=>{let g=n=>{s.current&&!s.current.contains(n.target)&&l(!1)};if(t)return document.addEventListener("mousedown",g),()=>document.removeEventListener("mousedown",g)},[t]);let i=()=>o==="paragraph"?"Normal":o.startsWith("h")?`Heading ${o.replace("h","")}`:"Normal",u=g=>{r(e,void 0,g),l(!1)},h=[{value:"paragraph",label:"Normal"},{value:"h1",label:"Heading 1"},{value:"h2",label:"Heading 2"},{value:"h3",label:"Heading 3"},{value:"h4",label:"Heading 4"},{value:"h5",label:"Heading 5"},{value:"h6",label:"Heading 6"}];return(0,p.jsxs)("div",{style:{position:"relative"},ref:s,children:[(0,p.jsxs)("button",{onClick:()=>l(!t),title:"Heading",style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"100px",height:"32px",display:"flex",alignItems:"center",justifyContent:"space-between",position:"relative",fontSize:o==="paragraph"?"14px":o==="h1"?"20px":o==="h2"?"18px":o==="h3"?"16px":"14px",fontWeight:o!=="paragraph"?"bold":"normal"},children:[(0,p.jsx)("span",{children:e.label||i()}),(0,p.jsx)("span",{style:{marginLeft:"8px",fontSize:"10px"},children:"\u25BC"})]}),t&&(0,p.jsx)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"150px"},children:h.map(g=>(0,p.jsx)("button",{onClick:()=>u(g.value),style:{width:"100%",padding:"8px 12px",border:"none",background:o===g.value?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",textAlign:"left",fontSize:g.value==="paragraph"?"14px":g.value==="h1"?"20px":g.value==="h2"?"18px":g.value==="h3"?"16px":"14px",fontWeight:g.value!=="paragraph"?"bold":"normal",display:"flex",alignItems:"center"},onMouseEnter:n=>{o!==g.value&&(n.currentTarget.style.background="#f3f4f6")},onMouseLeave:n=>{o!==g.value?n.currentTarget.style.background="transparent":n.currentTarget.style.background="#e5e7eb"},children:g.label},g.value))})]})}function He({item:e,onAction:r,editor:o}){let[t,l]=(0,b.useState)(!1),[s,i]=(0,b.useState)(""),[u,h]=(0,b.useState)(!1),g=(0,b.useRef)(null),n=(0,b.useRef)(null);(0,b.useEffect)(()=>{let d=()=>{o.getEditorState().read(()=>{let H=(0,a.$getSelection)();if((0,a.$isRangeSelection)(H)){let E=H.getNodes(),w=null;for(let N of E){let c=N.getParent();for(;c!==null;){if((0,F.$isLinkNode)(c)){w=c;break}c=c.getParent()}if(w)break}w&&(0,F.$isLinkNode)(w)?(h(!0),i(w.getURL())):(h(!1),i(""))}else h(!1),i("")})},y=o.registerUpdateListener(()=>{d()}),x=o.registerCommand(a.SELECTION_CHANGE_COMMAND,()=>(d(),!1),a.COMMAND_PRIORITY_LOW);return d(),()=>{y(),x()}},[o]),(0,b.useEffect)(()=>{let d=y=>{g.current&&!g.current.contains(y.target)&&l(!1)};if(t)return document.addEventListener("mousedown",d),setTimeout(()=>n.current?.focus(),0),()=>document.removeEventListener("mousedown",d)},[t,u,s]);let m=()=>{if(!s.trim()){o.dispatchCommand(F.TOGGLE_LINK_COMMAND,null),l(!1),i("");return}let d=s.trim();!d.startsWith("http://")&&!d.startsWith("https://")&&!d.startsWith("mailto:")&&!d.startsWith("#")&&!d.startsWith("/")&&(d="https://"+d),o.dispatchCommand(F.TOGGLE_LINK_COMMAND,d),l(!1),i("")},f=()=>{o.dispatchCommand(F.TOGGLE_LINK_COMMAND,null),l(!1),i("")},T=d=>{d.key==="Enter"?(d.preventDefault(),m()):d.key==="Escape"&&(l(!1),i(""))};return(0,p.jsxs)("div",{style:{position:"relative"},ref:g,children:[(0,p.jsx)("button",{onClick:()=>{l(!t)},title:u?"Edit Link":"Insert Link",style:{padding:"6px 12px",border:"none",background:u?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:d=>{u||(d.currentTarget.style.background="#f3f4f6")},onMouseLeave:d=>{u?d.currentTarget.style.background="#e5e7eb":d.currentTarget.style.background="transparent"},children:e.icon||B(e.type)}),t&&(0,p.jsxs)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"12px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"300px"},children:[(0,p.jsx)("input",{ref:n,type:"text",placeholder:"Enter URL (e.g., https://example.com)",value:s,onChange:d=>i(d.target.value),onKeyDown:T,style:{width:"100%",padding:"8px",border:"1px solid #e5e7eb",borderRadius:"4px",fontSize:"14px",marginBottom:"8px"}}),(0,p.jsxs)("div",{style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[u&&(0,p.jsx)("button",{onClick:f,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px",color:"#dc2626"},children:"Remove"}),(0,p.jsx)("button",{onClick:()=>l(!1),style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:"Cancel"}),(0,p.jsx)("button",{onClick:m,style:{padding:"6px 12px",border:"none",background:"#3b82f6",color:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:u?"Update":"Insert"})]})]})]})}function Oe({item:e,active:r=!1,disabled:o=!1,onAction:t,currentBlockType:l}){let i=e.type.startsWith("heading")&&e.type!=="headingDropdown"?parseInt(e.type.replace("heading","")):null,u=e.label||B(e.type);return e.type==="divider"?(0,p.jsx)(Se,{}):e.type==="headingDropdown"?(0,p.jsx)($e,{item:e,onAction:t,currentBlockType:l}):e.type==="textColor"||e.type==="backgroundColor"?(0,p.jsx)(Me,{item:e,onAction:t}):(0,p.jsx)("button",{onClick:()=>t(e),disabled:o,title:e.type.charAt(0).toUpperCase()+e.type.slice(1).replace(/([A-Z])/g," $1").trim(),style:{padding:"6px 12px",border:"none",background:r?"#e5e7eb":"transparent",cursor:o?"not-allowed":"pointer",borderRadius:"4px",fontWeight:e.type==="bold"?"bold":"normal",fontStyle:e.type==="italic"?"italic":"normal",textDecoration:e.type==="underline"?"underline":e.type==="strikethrough"?"line-through":"none",fontSize:i?`${18-i*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s",opacity:o?.5:1},onMouseEnter:h=>{!o&&!r&&(h.currentTarget.style.background="#f3f4f6")},onMouseLeave:h=>{r?h.currentTarget.style.background="#e5e7eb":h.currentTarget.style.background="transparent"},children:e.icon||u})}function J({items:e,onFullscreenToggle:r,isFullscreen:o=!1}){let[t]=(0,oe.useLexicalComposerContext)(),[l,s]=(0,b.useState)(!1),[i,u]=(0,b.useState)(!1),[h,g]=(0,b.useState)(!1),[n,m]=(0,b.useState)(!1),[f,T]=(0,b.useState)(!1),[d,y]=(0,b.useState)(!1),[x,H]=(0,b.useState)("paragraph"),E=(0,b.useCallback)(()=>{let c=(0,a.$getSelection)();if((0,a.$isRangeSelection)(c)){g(c.hasFormat("bold")),m(c.hasFormat("italic")),T(c.hasFormat("underline")),y(c.hasFormat("strikethrough"));let R=c.anchor.getNode(),S=R.getKey()==="root"?R:R.getTopLevelElementOrThrow(),C=S.getKey();if(t.getElementByKey(C)!==null){let I=(0,W.$isHeadingNode)(S)?S.getTag():S.getType();H(I)}}},[t]);(0,b.useEffect)(()=>(0,ne.mergeRegister)(t.registerUpdateListener(({editorState:c})=>{c.read(()=>{E()})}),t.registerCommand(a.SELECTION_CHANGE_COMMAND,()=>(E(),!1),a.COMMAND_PRIORITY_LOW),t.registerCommand(a.CAN_UNDO_COMMAND,c=>(s(c),!1),a.COMMAND_PRIORITY_LOW),t.registerCommand(a.CAN_REDO_COMMAND,c=>(u(c),!1),a.COMMAND_PRIORITY_LOW)),[t,E]);let w=(0,b.useCallback)((c,R,S)=>{let{type:C}=c;if(C==="fullscreen"){r?.();return}if(C==="undo"){t.dispatchCommand(a.UNDO_COMMAND,void 0);return}if(C==="redo"){t.dispatchCommand(a.REDO_COMMAND,void 0);return}if(C==="textColor"&&R){t.update(()=>{let L=(0,a.$getSelection)();(0,a.$isRangeSelection)(L)&&(0,Z.$patchStyleText)(L,{color:R})});return}if(C==="backgroundColor"&&R){t.update(()=>{let L=(0,a.$getSelection)();(0,a.$isRangeSelection)(L)&&(0,Z.$patchStyleText)(L,{"background-color":R})});return}if(C==="bold"||C==="italic"||C==="underline"||C==="strikethrough"){t.dispatchCommand(a.FORMAT_TEXT_COMMAND,C);return}if(C==="alignLeft"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"left");return}if(C==="alignCenter"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"center");return}if(C==="alignRight"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"right");return}if(C==="alignJustify"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"justify");return}if(C==="headingDropdown"&&S){if(S==="paragraph")t.update(()=>{let L=(0,a.$getSelection)();if((0,a.$isRangeSelection)(L)){let I=L.anchor.getNode(),k=I.getKey()==="root"?I:I.getTopLevelElementOrThrow(),M=k.getKey();if(t.getElementByKey(M)!==null&&(0,W.$isHeadingNode)(k)&&(0,a.$isElementNode)(k)){let A=(0,a.$createParagraphNode)(),P=k.getChildren();A.append(...P),k.replace(A),A.selectEnd()}}});else{let L=S;t.update(()=>{let I=(0,a.$getSelection)();if((0,a.$isRangeSelection)(I)){let k=I.anchor.getNode(),M=k.getKey()==="root"?k:k.getTopLevelElementOrThrow(),K=M.getKey();if(t.getElementByKey(K)!==null&&(0,a.$isElementNode)(M)){let P=(0,W.$createHeadingNode)(L),z=M.getChildren();P.append(...z),M.replace(P),P.selectEnd()}}})}return}if(C.startsWith("heading")&&C!=="headingDropdown"){let I=`h${parseInt(C.replace("heading",""))}`;t.update(()=>{let k=(0,a.$getSelection)();if((0,a.$isRangeSelection)(k)){let M=k.anchor.getNode(),K=M.getKey()==="root"?M:M.getTopLevelElementOrThrow(),A=K.getKey();if(t.getElementByKey(A)!==null&&(0,a.$isElementNode)(K)){let z=(0,W.$createHeadingNode)(I),Ce=K.getChildren();z.append(...Ce),K.replace(z),z.selectEnd()}}});return}if(C==="paragraph"){t.update(()=>{let L=(0,a.$getSelection)();if((0,a.$isRangeSelection)(L)){let I=L.anchor.getNode(),k=I.getKey()==="root"?I:I.getTopLevelElementOrThrow(),M=k.getKey();if(t.getElementByKey(M)!==null&&(0,W.$isHeadingNode)(k)&&(0,a.$isElementNode)(k)){let A=(0,a.$createParagraphNode)(),P=k.getChildren();A.append(...P),k.replace(A),A.selectEnd()}}});return}},[t,r]),N=c=>{switch(c){case"undo":return{disabled:!l};case"redo":return{disabled:!i};case"bold":return{active:h};case"italic":return{active:n};case"underline":return{active:f};case"strikethrough":return{active:d};case"fullscreen":return{active:o};case"heading1":return{active:x==="h1"};case"heading2":return{active:x==="h2"};case"heading3":return{active:x==="h3"};case"heading4":return{active:x==="h4"};case"heading5":return{active:x==="h5"};case"heading6":return{active:x==="h6"};case"paragraph":return{active:x==="paragraph"};default:return{}}};return(0,p.jsx)("div",{className:"luxe-toolbar",style:{display:"flex",gap:"4px",alignItems:"center",background:"white",borderBottom:"1px solid #e5e7eb",borderRadius:"8px 8px 0 0",padding:"8px",flexWrap:"wrap"},children:e.map((c,R)=>{let S=N(c.type);return c.type==="link"?(0,p.jsx)(He,{item:c,onAction:w,editor:t},`${c.type}-${R}`):(0,p.jsx)(Oe,{item:c,active:S.active,disabled:S.disabled,onAction:w,currentBlockType:x},`${c.type}-${R}`)})})}var U=require("react/jsx-runtime"),Ae=[{type:"bold"},{type:"italic"},{type:"underline"}];function De(e){let r=["bold","italic","underline","strikethrough","textColor","backgroundColor"];return e.filter(o=>r.includes(o.type))}function X({enabled:e=!0,items:r}){let o=r?De(r).slice(0,4):Ae,[t]=(0,re.useLexicalComposerContext)(),[l,s]=(0,D.useState)(null),[i,u]=(0,D.useState)(null);(0,D.useEffect)(()=>{let n=t.getRootElement();n&&u(n)},[t]);let h=(0,D.useCallback)(()=>{if(!i)return;let n=window.getSelection();if(!n||n.rangeCount===0||n.isCollapsed){s(null);return}try{let m=n.getRangeAt(0);if(!i.contains(m.commonAncestorContainer)){s(null);return}let f=m.getBoundingClientRect();f&&f.width>0&&f.height>0?t.getEditorState().read(()=>{let T=(0,v.$getSelection)();T&&(0,v.$isRangeSelection)(T)&&!T.isCollapsed()?s({x:f.left+f.width/2,y:f.top-40}):s(null)}):s(null)}catch{s(null)}},[t,i]);(0,D.useEffect)(()=>{if(!i)return;let n=t.registerUpdateListener(()=>{setTimeout(()=>h(),10)});return()=>{n()}},[t,i,h]),(0,D.useEffect)(()=>{let n=()=>{setTimeout(()=>h(),50)},m=()=>{setTimeout(()=>h(),50)},f=()=>{setTimeout(()=>h(),50)};return document.addEventListener("mouseup",n),document.addEventListener("keyup",m),document.addEventListener("selectionchange",f),()=>{document.removeEventListener("mouseup",n),document.removeEventListener("keyup",m),document.removeEventListener("selectionchange",f)}},[h]);let g=(0,D.useCallback)((n,m)=>{let{type:f}=n;if(f==="textColor"&&m){t.update(()=>{let T=(0,v.$getSelection)();(0,v.$isRangeSelection)(T)&&(0,V.$patchStyleText)(T,{color:m})});return}if(f==="backgroundColor"&&m){t.update(()=>{let T=(0,v.$getSelection)();(0,v.$isRangeSelection)(T)&&(0,V.$patchStyleText)(T,{"background-color":m})});return}if(f==="bold"||f==="italic"||f==="underline"||f==="strikethrough"){t.dispatchCommand(v.FORMAT_TEXT_COMMAND,f);return}if(f.startsWith("heading")){let d=`h${parseInt(f.replace("heading",""))}`;t.update(()=>{let y=(0,v.$getSelection)();if((0,v.$isRangeSelection)(y)){let x=y.anchor.getNode(),H=x.getKey()==="root"?x:x.getTopLevelElementOrThrow(),E=H.getKey();if(t.getElementByKey(E)!==null&&(0,v.$isElementNode)(H)){let N=(0,G.$createHeadingNode)(d),c=H.getChildren();N.append(...c),H.replace(N),N.selectEnd()}}});return}if(f==="paragraph"){t.update(()=>{let T=(0,v.$getSelection)();if((0,v.$isRangeSelection)(T)){let d=T.anchor.getNode(),y=d.getKey()==="root"?d:d.getTopLevelElementOrThrow(),x=y.getKey();if(t.getElementByKey(x)!==null&&(0,G.$isHeadingNode)(y)&&(0,v.$isElementNode)(y)){let E=(0,v.$createParagraphNode)(),w=y.getChildren();E.append(...w),y.replace(E),E.selectEnd()}}});return}},[t]);return!e||!o||o.length===0||!l?null:(0,ie.createPortal)((0,U.jsx)("div",{className:"luxe-floating-toolbar",style:{position:"fixed",top:`${l.y}px`,left:`${l.x}px`,transform:"translateX(-50%)",display:"flex",gap:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3},children:o.map((n,m)=>{let f=n.label||B(n.type),d=n.type.startsWith("heading")?parseInt(n.type.replace("heading","")):null;if(n.type==="textColor"||n.type==="backgroundColor"){let y=n.colors||Q.slice(0,6);return(0,U.jsx)("div",{style:{display:"flex",gap:"2px"},children:n.color?(0,U.jsx)("button",{onClick:()=>g(n,n.color),title:`${n.type==="textColor"?"Text":"Background"} Color`,style:{padding:"4px 8px",border:"1px solid #e5e7eb",background:n.type==="backgroundColor"?n.color:"white",color:n.type==="textColor"?n.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"28px",height:"28px"},children:n.type==="textColor"?"A":"\u25A0"}):y.map(x=>(0,U.jsx)("button",{onClick:()=>g(n,x),title:x,style:{width:"24px",height:"24px",border:n.type==="textColor"?`3px solid ${x}`:"1px solid #e5e7eb",background:n.type==="backgroundColor"?x:"white",color:n.type==="textColor"?"#000":"inherit",cursor:"pointer",borderRadius:"3px",fontSize:"10px",display:"flex",alignItems:"center",justifyContent:"center"},children:n.type==="textColor"&&(0,U.jsx)("span",{style:{color:x,fontSize:"12px",fontWeight:"bold",lineHeight:"1"},children:"A"})},x))},`${n.type}-${m}`)}return(0,U.jsx)("button",{onClick:()=>g(n),title:n.type.charAt(0).toUpperCase()+n.type.slice(1),style:{padding:"6px 12px",border:"none",background:"transparent",cursor:"pointer",borderRadius:"4px",fontWeight:n.type==="bold"?"bold":"normal",fontStyle:n.type==="italic"?"italic":"normal",textDecoration:n.type==="underline"?"underline":n.type==="strikethrough"?"line-through":"none",fontSize:d?`${18-d*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:y=>{y.currentTarget.style.background="#f3f4f6"},onMouseLeave:y=>{y.currentTarget.style.background="transparent"},children:n.icon||f},`${n.type}-${m}`)})}),document.body)}var O=require("lexical"),ae=require("@lexical/rich-text");function le(e){return e.toJSON()}function se(e){let r="";return e.read(()=>{r=(0,O.$getRoot)().getTextContent()}),r}function ee(e,r){let o=(r&1)!==0,t=(r&2)!==0,l=(r&4)!==0,s=(r&8)!==0;return o&&t?e=`***${e}***`:o?e=`**${e}**`:t&&(e=`*${e}*`),l&&(e=`__${e}__`),s&&(e=`~~${e}~~`),e}function de(e){let r="";return e.read(()=>{let t=(0,O.$getRoot)().getChildren(),l=s=>{let i="";if((0,ae.$isHeadingNode)(s)){let u=s.getTag(),h=parseInt(u.replace("h","")),g="#".repeat(h),n=s.getChildren(),m="";for(let f of n)(0,O.$isTextNode)(f)?m+=ee(f.getTextContent(),f.getFormat()):(0,O.$isElementNode)(f)&&(m+=l(f));i+=`${g} ${m}
2
+ "use strict";var ve=Object.create;var J=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var Ee=Object.getOwnPropertyNames;var Ne=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var Ie=(e,r)=>{for(var o in r)J(e,o,{get:r[o],enumerable:!0})},oe=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of Ee(r))!Le.call(e,l)&&l!==o&&J(e,l,{get:()=>r[l],enumerable:!(t=ke(r,l))||t.enumerable});return e};var we=(e,r,o)=>(o=e!=null?ve(Ne(e)):{},oe(r||!e||!e.__esModule?J(o,"default",{value:e,enumerable:!0}):o,e)),Se=e=>oe(J({},"__esModule",{value:!0}),e);var Fe={};Ie(Fe,{FloatingToolbarPlugin:()=>X,LuxeEditor:()=>We,Toolbar:()=>j,getEditorDOM:()=>pe,getEditorFormattedText:()=>ce,getEditorJSON:()=>se,getEditorText:()=>de,getEditorTree:()=>ue});module.exports=Se(Fe);var z=we(require("react")),fe=require("@lexical/react/LexicalComposer"),he=require("@lexical/react/LexicalRichTextPlugin"),be=require("@lexical/react/LexicalContentEditable"),me=require("@lexical/react/LexicalHistoryPlugin"),xe=require("@lexical/react/LexicalErrorBoundary"),ye=require("@lexical/react/LexicalLinkPlugin"),Te=require("@lexical/rich-text"),q=require("@lexical/link"),Y=require("lexical"),te=require("@lexical/react/LexicalComposerContext");var ie=require("@lexical/react/LexicalComposerContext"),v=require("lexical"),V=require("@lexical/selection"),G=require("@lexical/rich-text"),D=require("react"),ae=require("react-dom");var ne=require("@lexical/react/LexicalComposerContext"),re=require("@lexical/utils"),a=require("lexical"),Z=require("@lexical/selection"),W=require("@lexical/rich-text"),F=require("@lexical/link"),b=require("react"),p=require("react/jsx-runtime"),Q=["#000000","#ffffff","#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff","#808080","#800000","#008000","#000080","#808000","#800080","#008080"];function B(e){return{undo:"\u21B6",redo:"\u21B7",divider:"",bold:"B",italic:"I",underline:"U",strikethrough:"S",heading1:"H1",heading2:"H2",heading3:"H3",heading4:"H4",heading5:"H5",heading6:"H6",paragraph:"P",alignLeft:"\u2B05",alignCenter:"\u2B0C",alignRight:"\u27A1",alignJustify:"\u2B0C",textColor:"A",backgroundColor:"\u2B1B",fullscreen:"\u26F6",headingDropdown:"Normal",link:"\u{1F517}"}[e]||e}function Re(){return(0,p.jsx)("div",{style:{width:"1px",height:"24px",background:"#e5e7eb",margin:"0 4px"}})}function Me({item:e,onAction:r}){let[o,t]=(0,b.useState)(!1),l=(0,b.useRef)(null),s=e.colors||Q;return(0,b.useEffect)(()=>{let i=u=>{l.current&&!l.current.contains(u.target)&&t(!1)};if(o)return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[o]),e.color?(0,p.jsx)("button",{onClick:()=>r(e,e.color),title:`${e.type==="textColor"?"Text":"Background"} Color: ${e.color}`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:e.type==="backgroundColor"?e.color:"white",color:e.type==="textColor"?e.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center"},children:e.icon||B(e.type)}):(0,p.jsxs)("div",{style:{position:"relative"},ref:l,children:[(0,p.jsxs)("button",{onClick:()=>t(!o),title:`${e.type==="textColor"?"Text":"Background"} Color`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",position:"relative"},children:[e.icon||(0,p.jsx)("span",{style:{display:"block",width:"20px",height:"20px",background:e.type==="backgroundColor"?"linear-gradient(45deg, #808080 25%, transparent 25%), linear-gradient(-45deg, #808080 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #808080 75%), linear-gradient(-45deg, transparent 75%, #808080 75%)":"currentColor",backgroundSize:e.type==="backgroundColor"?"8px 8px":"auto",backgroundPosition:e.type==="backgroundColor"?"0 0, 0 4px, 4px -4px, -4px 0px":"auto"},children:e.type==="textColor"&&(0,p.jsx)("span",{style:{color:"#000",fontSize:"12px"},children:"A"})}),(0,p.jsx)("span",{style:{marginLeft:"4px",fontSize:"10px"},children:"\u25BC"})]}),o&&(0,p.jsxs)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"8px",display:"grid",gridTemplateColumns:"repeat(5, 1fr)",gap:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"160px"},children:[s.map(i=>(0,p.jsxs)("button",{onClick:()=>{r(e,i),t(!1)},title:i,style:{width:"24px",height:"24px",borderRadius:"4px",border:e.type==="textColor"?`3px solid ${i}`:"1px solid #e5e7eb",background:e.type==="backgroundColor"?i:"white",color:e.type==="textColor"?"#000":"inherit",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"12px",fontWeight:"bold",position:"relative"},children:[e.type==="textColor"&&(0,p.jsx)("span",{style:{color:i,fontSize:"14px",fontWeight:"bold",lineHeight:"1"},children:"A"}),e.type==="backgroundColor"&&i==="#ffffff"&&(0,p.jsx)("span",{style:{color:"#000",fontSize:"10px",border:"1px solid #ccc",width:"12px",height:"12px",display:"block"},children:"\u25A1"})]},i)),(0,p.jsx)("input",{type:"color",onChange:i=>{r(e,i.target.value),t(!1)},style:{gridColumn:"1 / -1",width:"100%",height:"32px",border:"1px solid #e5e7eb",borderRadius:"4px",cursor:"pointer"}})]})]})}function He({item:e,onAction:r,currentBlockType:o="paragraph"}){let[t,l]=(0,b.useState)(!1),s=(0,b.useRef)(null);(0,b.useEffect)(()=>{let c=n=>{s.current&&!s.current.contains(n.target)&&l(!1)};if(t)return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[t]);let i=()=>o==="paragraph"?"Normal":o.startsWith("h")?`Heading ${o.replace("h","")}`:"Normal",u=c=>{r(e,void 0,c),l(!1)},f=[{value:"paragraph",label:"Normal"},{value:"h1",label:"Heading 1"},{value:"h2",label:"Heading 2"},{value:"h3",label:"Heading 3"},{value:"h4",label:"Heading 4"},{value:"h5",label:"Heading 5"},{value:"h6",label:"Heading 6"}];return(0,p.jsxs)("div",{style:{position:"relative"},ref:s,children:[(0,p.jsxs)("button",{onClick:()=>l(!t),title:"Heading",style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"100px",height:"32px",display:"flex",alignItems:"center",justifyContent:"space-between",position:"relative",fontSize:o==="paragraph"?"14px":o==="h1"?"20px":o==="h2"?"18px":o==="h3"?"16px":"14px",fontWeight:o!=="paragraph"?"bold":"normal"},children:[(0,p.jsx)("span",{children:e.label||i()}),(0,p.jsx)("span",{style:{marginLeft:"8px",fontSize:"10px"},children:"\u25BC"})]}),t&&(0,p.jsx)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"150px"},children:f.map(c=>(0,p.jsx)("button",{onClick:()=>u(c.value),style:{width:"100%",padding:"8px 12px",border:"none",background:o===c.value?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",textAlign:"left",fontSize:c.value==="paragraph"?"14px":c.value==="h1"?"20px":c.value==="h2"?"18px":c.value==="h3"?"16px":"14px",fontWeight:c.value!=="paragraph"?"bold":"normal",display:"flex",alignItems:"center"},onMouseEnter:n=>{o!==c.value&&(n.currentTarget.style.background="#f3f4f6")},onMouseLeave:n=>{o!==c.value?n.currentTarget.style.background="transparent":n.currentTarget.style.background="#e5e7eb"},children:c.label},c.value))})]})}function $e({item:e,onAction:r,editor:o}){let[t,l]=(0,b.useState)(!1),[s,i]=(0,b.useState)(""),[u,f]=(0,b.useState)(!1),c=(0,b.useRef)(null),n=(0,b.useRef)(null);(0,b.useEffect)(()=>{let d=()=>{o.getEditorState().read(()=>{let R=(0,a.$getSelection)();if((0,a.$isRangeSelection)(R)){let E=R.getNodes(),I=null;for(let M of E){let h=M.getParent();for(;h!==null;){if((0,F.$isLinkNode)(h)){I=h;break}h=h.getParent()}if(I)break}I&&(0,F.$isLinkNode)(I)?(f(!0),i(I.getURL())):(f(!1),i(""))}else f(!1),i("")})},y=o.registerUpdateListener(()=>{d()}),x=o.registerCommand(a.SELECTION_CHANGE_COMMAND,()=>(d(),!1),a.COMMAND_PRIORITY_LOW);return d(),()=>{y(),x()}},[o]),(0,b.useEffect)(()=>{let d=y=>{c.current&&!c.current.contains(y.target)&&l(!1)};if(t)return document.addEventListener("mousedown",d),setTimeout(()=>n.current?.focus(),0),()=>document.removeEventListener("mousedown",d)},[t,u,s]);let m=()=>{if(!s.trim()){o.dispatchCommand(F.TOGGLE_LINK_COMMAND,null),l(!1),i("");return}let d=s.trim();!d.startsWith("http://")&&!d.startsWith("https://")&&!d.startsWith("mailto:")&&!d.startsWith("#")&&!d.startsWith("/")&&(d="https://"+d),o.dispatchCommand(F.TOGGLE_LINK_COMMAND,d),l(!1),i("")},g=()=>{o.dispatchCommand(F.TOGGLE_LINK_COMMAND,null),l(!1),i("")},C=d=>{d.key==="Enter"?(d.preventDefault(),m()):d.key==="Escape"&&(l(!1),i(""))};return(0,p.jsxs)("div",{style:{position:"relative"},ref:c,children:[(0,p.jsx)("button",{onClick:()=>{l(!t)},title:u?"Edit Link":"Insert Link",style:{padding:"6px 12px",border:"none",background:u?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:d=>{u||(d.currentTarget.style.background="#f3f4f6")},onMouseLeave:d=>{u?d.currentTarget.style.background="#e5e7eb":d.currentTarget.style.background="transparent"},children:e.icon||B(e.type)}),t&&(0,p.jsxs)("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"12px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"300px"},children:[(0,p.jsx)("input",{ref:n,type:"text",placeholder:"Enter URL (e.g., https://example.com)",value:s,onChange:d=>i(d.target.value),onKeyDown:C,style:{width:"100%",padding:"8px",border:"1px solid #e5e7eb",borderRadius:"4px",fontSize:"14px",marginBottom:"8px"}}),(0,p.jsxs)("div",{style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[u&&(0,p.jsx)("button",{onClick:g,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px",color:"#dc2626"},children:"Remove"}),(0,p.jsx)("button",{onClick:()=>l(!1),style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:"Cancel"}),(0,p.jsx)("button",{onClick:m,style:{padding:"6px 12px",border:"none",background:"#3b82f6",color:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:u?"Update":"Insert"})]})]})]})}function Oe({item:e,active:r=!1,disabled:o=!1,onAction:t,currentBlockType:l}){let i=e.type.startsWith("heading")&&e.type!=="headingDropdown"?parseInt(e.type.replace("heading","")):null,u=e.label||B(e.type);return e.type==="divider"?(0,p.jsx)(Re,{}):e.type==="headingDropdown"?(0,p.jsx)(He,{item:e,onAction:t,currentBlockType:l}):e.type==="textColor"||e.type==="backgroundColor"?(0,p.jsx)(Me,{item:e,onAction:t}):(0,p.jsx)("button",{onClick:()=>t(e),disabled:o,title:e.type.charAt(0).toUpperCase()+e.type.slice(1).replace(/([A-Z])/g," $1").trim(),style:{padding:"6px 12px",border:"none",background:r?"#e5e7eb":"transparent",cursor:o?"not-allowed":"pointer",borderRadius:"4px",fontWeight:e.type==="bold"?"bold":"normal",fontStyle:e.type==="italic"?"italic":"normal",textDecoration:e.type==="underline"?"underline":e.type==="strikethrough"?"line-through":"none",fontSize:i?`${18-i*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s",opacity:o?.5:1},onMouseEnter:f=>{!o&&!r&&(f.currentTarget.style.background="#f3f4f6")},onMouseLeave:f=>{r?f.currentTarget.style.background="#e5e7eb":f.currentTarget.style.background="transparent"},children:e.icon||u})}function j({items:e,onFullscreenToggle:r,isFullscreen:o=!1}){let[t]=(0,ne.useLexicalComposerContext)(),[l,s]=(0,b.useState)(!1),[i,u]=(0,b.useState)(!1),[f,c]=(0,b.useState)(!1),[n,m]=(0,b.useState)(!1),[g,C]=(0,b.useState)(!1),[d,y]=(0,b.useState)(!1),[x,R]=(0,b.useState)("paragraph"),E=(0,b.useCallback)(()=>{let h=(0,a.$getSelection)();if((0,a.$isRangeSelection)(h)){c(h.hasFormat("bold")),m(h.hasFormat("italic")),C(h.hasFormat("underline")),y(h.hasFormat("strikethrough"));let H=h.anchor.getNode(),$=H.getKey()==="root"?H:H.getTopLevelElementOrThrow(),T=$.getKey();if(t.getElementByKey(T)!==null){let L=(0,W.$isHeadingNode)($)?$.getTag():$.getType();R(L)}}},[t]);(0,b.useEffect)(()=>(0,re.mergeRegister)(t.registerUpdateListener(({editorState:h})=>{h.read(()=>{E()})}),t.registerCommand(a.SELECTION_CHANGE_COMMAND,()=>(E(),!1),a.COMMAND_PRIORITY_LOW),t.registerCommand(a.CAN_UNDO_COMMAND,h=>(s(h),!1),a.COMMAND_PRIORITY_LOW),t.registerCommand(a.CAN_REDO_COMMAND,h=>(u(h),!1),a.COMMAND_PRIORITY_LOW)),[t,E]);let I=(0,b.useCallback)((h,H,$)=>{let{type:T}=h;if(T==="fullscreen"){r?.();return}if(T==="undo"){t.dispatchCommand(a.UNDO_COMMAND,void 0);return}if(T==="redo"){t.dispatchCommand(a.REDO_COMMAND,void 0);return}if(T==="textColor"&&H){t.update(()=>{let N=(0,a.$getSelection)();(0,a.$isRangeSelection)(N)&&(0,Z.$patchStyleText)(N,{color:H})});return}if(T==="backgroundColor"&&H){t.update(()=>{let N=(0,a.$getSelection)();(0,a.$isRangeSelection)(N)&&(0,Z.$patchStyleText)(N,{"background-color":H})});return}if(T==="bold"||T==="italic"||T==="underline"||T==="strikethrough"){t.dispatchCommand(a.FORMAT_TEXT_COMMAND,T);return}if(T==="alignLeft"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"left");return}if(T==="alignCenter"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"center");return}if(T==="alignRight"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"right");return}if(T==="alignJustify"){t.dispatchCommand(a.FORMAT_ELEMENT_COMMAND,"justify");return}if(T==="headingDropdown"&&$){if($==="paragraph")t.update(()=>{let N=(0,a.$getSelection)();if((0,a.$isRangeSelection)(N)){let L=N.anchor.getNode(),k=L.getKey()==="root"?L:L.getTopLevelElementOrThrow(),S=k.getKey();if(t.getElementByKey(S)!==null&&(0,W.$isHeadingNode)(k)&&(0,a.$isElementNode)(k)){let A=(0,a.$createParagraphNode)(),P=k.getChildren();A.append(...P),k.replace(A),A.selectEnd()}}});else{let N=$;t.update(()=>{let L=(0,a.$getSelection)();if((0,a.$isRangeSelection)(L)){let k=L.anchor.getNode(),S=k.getKey()==="root"?k:k.getTopLevelElementOrThrow(),K=S.getKey();if(t.getElementByKey(K)!==null&&(0,a.$isElementNode)(S)){let P=(0,W.$createHeadingNode)(N),_=S.getChildren();P.append(..._),S.replace(P),P.selectEnd()}}})}return}if(T.startsWith("heading")&&T!=="headingDropdown"){let L=`h${parseInt(T.replace("heading",""))}`;t.update(()=>{let k=(0,a.$getSelection)();if((0,a.$isRangeSelection)(k)){let S=k.anchor.getNode(),K=S.getKey()==="root"?S:S.getTopLevelElementOrThrow(),A=K.getKey();if(t.getElementByKey(A)!==null&&(0,a.$isElementNode)(K)){let _=(0,W.$createHeadingNode)(L),Ce=K.getChildren();_.append(...Ce),K.replace(_),_.selectEnd()}}});return}if(T==="paragraph"){t.update(()=>{let N=(0,a.$getSelection)();if((0,a.$isRangeSelection)(N)){let L=N.anchor.getNode(),k=L.getKey()==="root"?L:L.getTopLevelElementOrThrow(),S=k.getKey();if(t.getElementByKey(S)!==null&&(0,W.$isHeadingNode)(k)&&(0,a.$isElementNode)(k)){let A=(0,a.$createParagraphNode)(),P=k.getChildren();A.append(...P),k.replace(A),A.selectEnd()}}});return}},[t,r]),M=h=>{switch(h){case"undo":return{disabled:!l};case"redo":return{disabled:!i};case"bold":return{active:f};case"italic":return{active:n};case"underline":return{active:g};case"strikethrough":return{active:d};case"fullscreen":return{active:o};case"heading1":return{active:x==="h1"};case"heading2":return{active:x==="h2"};case"heading3":return{active:x==="h3"};case"heading4":return{active:x==="h4"};case"heading5":return{active:x==="h5"};case"heading6":return{active:x==="h6"};case"paragraph":return{active:x==="paragraph"};default:return{}}};return(0,p.jsx)("div",{className:"luxe-toolbar",style:{display:"flex",gap:"4px",alignItems:"center",background:"white",borderBottom:"1px solid #e5e7eb",borderRadius:"8px 8px 0 0",padding:"8px",flexWrap:"wrap"},children:e.map((h,H)=>{let $=M(h.type);return h.type==="link"?(0,p.jsx)($e,{item:h,onAction:I,editor:t},`${h.type}-${H}`):(0,p.jsx)(Oe,{item:h,active:$.active,disabled:$.disabled,onAction:I,currentBlockType:x},`${h.type}-${H}`)})})}var U=require("react/jsx-runtime"),Ae=[{type:"bold"},{type:"italic"},{type:"underline"}];function De(e){let r=["bold","italic","underline","strikethrough","textColor","backgroundColor"];return e.filter(o=>r.includes(o.type))}function X({enabled:e=!0,items:r}){let o=r?De(r).slice(0,4):Ae,[t]=(0,ie.useLexicalComposerContext)(),[l,s]=(0,D.useState)(null),[i,u]=(0,D.useState)(null);(0,D.useEffect)(()=>{let n=t.getRootElement();n&&u(n)},[t]);let f=(0,D.useCallback)(()=>{if(!i)return;let n=window.getSelection();if(!n||n.rangeCount===0||n.isCollapsed){s(null);return}try{let m=n.getRangeAt(0);if(!i.contains(m.commonAncestorContainer)){s(null);return}let g=m.getBoundingClientRect();g&&g.width>0&&g.height>0?t.getEditorState().read(()=>{let C=(0,v.$getSelection)();C&&(0,v.$isRangeSelection)(C)&&!C.isCollapsed()?s({x:g.left+g.width/2,y:g.top-40}):s(null)}):s(null)}catch{s(null)}},[t,i]);(0,D.useEffect)(()=>{if(!i)return;let n=t.registerUpdateListener(()=>{setTimeout(()=>f(),10)});return()=>{n()}},[t,i,f]),(0,D.useEffect)(()=>{let n=()=>{setTimeout(()=>f(),50)},m=()=>{setTimeout(()=>f(),50)},g=()=>{setTimeout(()=>f(),50)};return document.addEventListener("mouseup",n),document.addEventListener("keyup",m),document.addEventListener("selectionchange",g),()=>{document.removeEventListener("mouseup",n),document.removeEventListener("keyup",m),document.removeEventListener("selectionchange",g)}},[f]);let c=(0,D.useCallback)((n,m)=>{let{type:g}=n;if(g==="textColor"&&m){t.update(()=>{let C=(0,v.$getSelection)();(0,v.$isRangeSelection)(C)&&(0,V.$patchStyleText)(C,{color:m})});return}if(g==="backgroundColor"&&m){t.update(()=>{let C=(0,v.$getSelection)();(0,v.$isRangeSelection)(C)&&(0,V.$patchStyleText)(C,{"background-color":m})});return}if(g==="bold"||g==="italic"||g==="underline"||g==="strikethrough"){t.dispatchCommand(v.FORMAT_TEXT_COMMAND,g);return}if(g.startsWith("heading")){let d=`h${parseInt(g.replace("heading",""))}`;t.update(()=>{let y=(0,v.$getSelection)();if((0,v.$isRangeSelection)(y)){let x=y.anchor.getNode(),R=x.getKey()==="root"?x:x.getTopLevelElementOrThrow(),E=R.getKey();if(t.getElementByKey(E)!==null&&(0,v.$isElementNode)(R)){let M=(0,G.$createHeadingNode)(d),h=R.getChildren();M.append(...h),R.replace(M),M.selectEnd()}}});return}if(g==="paragraph"){t.update(()=>{let C=(0,v.$getSelection)();if((0,v.$isRangeSelection)(C)){let d=C.anchor.getNode(),y=d.getKey()==="root"?d:d.getTopLevelElementOrThrow(),x=y.getKey();if(t.getElementByKey(x)!==null&&(0,G.$isHeadingNode)(y)&&(0,v.$isElementNode)(y)){let E=(0,v.$createParagraphNode)(),I=y.getChildren();E.append(...I),y.replace(E),E.selectEnd()}}});return}},[t]);return!e||!o||o.length===0||!l?null:(0,ae.createPortal)((0,U.jsx)("div",{className:"luxe-floating-toolbar",style:{position:"fixed",top:`${l.y}px`,left:`${l.x}px`,transform:"translateX(-50%)",display:"flex",gap:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3},children:o.map((n,m)=>{let g=n.label||B(n.type),d=n.type.startsWith("heading")?parseInt(n.type.replace("heading","")):null;if(n.type==="textColor"||n.type==="backgroundColor"){let y=n.colors||Q.slice(0,6);return(0,U.jsx)("div",{style:{display:"flex",gap:"2px"},children:n.color?(0,U.jsx)("button",{onClick:()=>c(n,n.color),title:`${n.type==="textColor"?"Text":"Background"} Color`,style:{padding:"4px 8px",border:"1px solid #e5e7eb",background:n.type==="backgroundColor"?n.color:"white",color:n.type==="textColor"?n.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"28px",height:"28px"},children:n.type==="textColor"?"A":"\u25A0"}):y.map(x=>(0,U.jsx)("button",{onClick:()=>c(n,x),title:x,style:{width:"24px",height:"24px",border:n.type==="textColor"?`3px solid ${x}`:"1px solid #e5e7eb",background:n.type==="backgroundColor"?x:"white",color:n.type==="textColor"?"#000":"inherit",cursor:"pointer",borderRadius:"3px",fontSize:"10px",display:"flex",alignItems:"center",justifyContent:"center"},children:n.type==="textColor"&&(0,U.jsx)("span",{style:{color:x,fontSize:"12px",fontWeight:"bold",lineHeight:"1"},children:"A"})},x))},`${n.type}-${m}`)}return(0,U.jsx)("button",{onClick:()=>c(n),title:n.type.charAt(0).toUpperCase()+n.type.slice(1),style:{padding:"6px 12px",border:"none",background:"transparent",cursor:"pointer",borderRadius:"4px",fontWeight:n.type==="bold"?"bold":"normal",fontStyle:n.type==="italic"?"italic":"normal",textDecoration:n.type==="underline"?"underline":n.type==="strikethrough"?"line-through":"none",fontSize:d?`${18-d*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:y=>{y.currentTarget.style.background="#f3f4f6"},onMouseLeave:y=>{y.currentTarget.style.background="transparent"},children:n.icon||g},`${n.type}-${m}`)})}),document.body)}var O=require("lexical"),le=require("@lexical/rich-text");function se(e){return e.toJSON()}function de(e){let r="";return e.read(()=>{r=(0,O.$getRoot)().getTextContent()}),r}function ee(e,r){let o=(r&1)!==0,t=(r&2)!==0,l=(r&4)!==0,s=(r&8)!==0;return o&&t?e=`***${e}***`:o?e=`**${e}**`:t&&(e=`*${e}*`),l&&(e=`__${e}__`),s&&(e=`~~${e}~~`),e}function ce(e){let r="";return e.read(()=>{let t=(0,O.$getRoot)().getChildren(),l=s=>{let i="";if((0,le.$isHeadingNode)(s)){let u=s.getTag(),f=parseInt(u.replace("h","")),c="#".repeat(f),n=s.getChildren(),m="";for(let g of n)(0,O.$isTextNode)(g)?m+=ee(g.getTextContent(),g.getFormat()):(0,O.$isElementNode)(g)&&(m+=l(g));i+=`${c} ${m}
3
3
 
4
- `}else if((0,O.$isElementNode)(s)){let u=s.getChildren(),h="";for(let n of u)(0,O.$isTextNode)(n)?h+=ee(n.getTextContent(),n.getFormat()):(0,O.$isElementNode)(n)&&(h+=l(n));let g=s.getType();g==="paragraph"?i+=h+`
4
+ `}else if((0,O.$isElementNode)(s)){let u=s.getChildren(),f="";for(let n of u)(0,O.$isTextNode)(n)?f+=ee(n.getTextContent(),n.getFormat()):(0,O.$isElementNode)(n)&&(f+=l(n));let c=s.getType();c==="paragraph"?i+=f+`
5
5
 
6
- `:i+=h}else(0,O.$isTextNode)(s)&&(i+=ee(s.getTextContent(),s.getFormat()));return i};for(let s of t)r+=l(s)}),r.trim()}function ce(e){if(!e)return"";try{let r=e.getRootElement();if(!r)return"";let o=r.querySelector('[contenteditable="true"]');if(o)return(o.innerHTML||"").trim()||"";if(r.hasAttribute("contenteditable")&&r.getAttribute("contenteditable")==="true")return r.innerHTML||"";let t=Array.from(r.children).filter(l=>{let s=l.id||"",i=l.className||"";return!s.includes("toolbar")&&!i.includes("toolbar")});if(t.length>0){for(let l of t)if(l.hasAttribute("contenteditable"))return l.innerHTML||"";return t[0].innerHTML||""}return r.innerHTML||""}catch(r){return console.error("Error getting editor DOM:",r),""}}function pe(e){if(!e||!e.root)return null;let r=(o,t=0)=>{if(!o)return null;let l=o.type||"unknown",s=o.key||"",i=o.children||[],u={type:l,key:s,depth:t,children:[]};return o.tag&&(u.tag=o.tag),o.format!==void 0&&(u.format=o.format),o.text&&(u.text=o.text.substring(0,50)+(o.text.length>50?"...":"")),o.style&&(u.style=o.style),o.indent&&(u.indent=o.indent),o.direction&&(u.direction=o.direction),Array.isArray(i)&&(u.children=i.map(h=>r(h,t+1)).filter(Boolean)),u};return r(e.root)}var $=require("react/jsx-runtime"),ue={paragraph:"luxe-paragraph",heading:{h1:"luxe-heading-h1",h2:"luxe-heading-h2",h3:"luxe-heading-h3",h4:"luxe-heading-h4",h5:"luxe-heading-h5",h6:"luxe-heading-h6"},text:{bold:"luxe-bold",italic:"luxe-italic",underline:"luxe-underline",strikethrough:"luxe-strikethrough"}};function Ke({initialConfig:e,showFloatingToolbar:r=!0,showToolbar:o=!0,toolbarItems:t,floatingToolbarItems:l,onChange:s,ignoreInitialChange:i=!0,children:u}){let[h,g]=_.default.useState(!1),n=[ye.HeadingNode,Y.ParagraphNode,Y.TextNode,q.LinkNode,q.AutoLinkNode],m=e.theme?{...ue,...e.theme}:ue,{theme:f,...T}=e,d=T.onUpdate,y=_.default.memo(()=>{let[N]=(0,Te.useLexicalComposerContext)(),c=_.default.useRef(!0);return _.default.useEffect(()=>{if(s)return N.registerUpdateListener(({editorState:R,prevEditorState:S})=>{if(i&&c.current&&S.isEmpty()){c.current=!1;return}c.current=!1,s(R,N)})},[N,s,i]),null}),x={namespace:"LuxeEditor",theme:m,nodes:n,onError:N=>console.error(N),onUpdate:d,...T},E=t||[{type:"undo"},{type:"redo"},{type:"divider"},{type:"bold"},{type:"italic"},{type:"underline"},{type:"strikethrough"},{type:"divider"},{type:"headingDropdown"},{type:"divider"},{type:"link"}],w=_.default.useCallback(()=>{g(N=>!N)},[]);return(0,$.jsx)(ge.LexicalComposer,{initialConfig:x,children:(0,$.jsxs)("div",{className:`luxe-editor-container ${h?"luxe-editor-fullscreen":""}`,children:[o&&E&&E.length>0&&(0,$.jsx)(J,{items:E,onFullscreenToggle:w,isFullscreen:h}),(0,$.jsx)(fe.RichTextPlugin,{contentEditable:(0,$.jsx)(he.ContentEditable,{className:"luxe-input"}),placeholder:(0,$.jsx)("div",{className:"luxe-placeholder",children:"Start writing..."}),ErrorBoundary:me.LexicalErrorBoundary}),(0,$.jsx)(be.HistoryPlugin,{}),(0,$.jsx)(xe.LinkPlugin,{}),s&&(0,$.jsx)(y,{}),r&&(0,$.jsx)(X,{enabled:!0,items:l||E}),u]})})}0&&(module.exports={FloatingToolbarPlugin,LuxeEditor,Toolbar,getEditorDOM,getEditorFormattedText,getEditorJSON,getEditorText,getEditorTree});
6
+ `:i+=f}else(0,O.$isTextNode)(s)&&(i+=ee(s.getTextContent(),s.getFormat()));return i};for(let s of t)r+=l(s)}),r.trim()}function pe(e){if(!e)return"";try{let r=e.getRootElement();if(!r)return"";let o=r.querySelector('[contenteditable="true"]');if(o)return(o.innerHTML||"").trim()||"";if(r.hasAttribute("contenteditable")&&r.getAttribute("contenteditable")==="true")return r.innerHTML||"";let t=Array.from(r.children).filter(l=>{let s=l.id||"",i=l.className||"";return!s.includes("toolbar")&&!i.includes("toolbar")});if(t.length>0){for(let l of t)if(l.hasAttribute("contenteditable"))return l.innerHTML||"";return t[0].innerHTML||""}return r.innerHTML||""}catch(r){return console.error("Error getting editor DOM:",r),""}}function ue(e){if(!e||!e.root)return null;let r=(o,t=0)=>{if(!o)return null;let l=o.type||"unknown",s=o.key||"",i=o.children||[],u={type:l,key:s,depth:t,children:[]};return o.tag&&(u.tag=o.tag),o.format!==void 0&&(u.format=o.format),o.text&&(u.text=o.text.substring(0,50)+(o.text.length>50?"...":"")),o.style&&(u.style=o.style),o.indent&&(u.indent=o.indent),o.direction&&(u.direction=o.direction),Array.isArray(i)&&(u.children=i.map(f=>r(f,t+1)).filter(Boolean)),u};return r(e.root)}var w=require("react/jsx-runtime"),ge={paragraph:"luxe-paragraph",heading:{h1:"luxe-heading-h1",h2:"luxe-heading-h2",h3:"luxe-heading-h3",h4:"luxe-heading-h4",h5:"luxe-heading-h5",h6:"luxe-heading-h6"},text:{bold:"luxe-bold",italic:"luxe-italic",underline:"luxe-underline",strikethrough:"luxe-strikethrough"}};function Ke({onChange:e,ignoreInitialChange:r}){let[o]=(0,te.useLexicalComposerContext)(),t=z.default.useRef(!0);return z.default.useEffect(()=>o.registerUpdateListener(({editorState:l,prevEditorState:s})=>{if(r&&t.current&&s.isEmpty()){t.current=!1;return}t.current=!1,e(l,o)}),[o,e,r]),null}function Pe({initialJSON:e}){let[r]=(0,te.useLexicalComposerContext)(),o=z.default.useRef(!1);return z.default.useEffect(()=>{if(!(!e||o.current))try{let t=r.parseEditorState(e);r.setEditorState(t),o.current=!0}catch(t){console.error("LuxeEditor: Failed to parse initialJSON",t)}},[r,e]),null}function We({initialConfig:e,initialJSON:r,showFloatingToolbar:o=!0,showToolbar:t=!0,toolbarItems:l,floatingToolbarItems:s,onChange:i,ignoreInitialChange:u=!0,children:f}){let[c,n]=z.default.useState(!1),m=[Te.HeadingNode,Y.ParagraphNode,Y.TextNode,q.LinkNode,q.AutoLinkNode],g=e.theme?{...ge,...e.theme}:ge,{theme:C,...d}=e,y=d.onUpdate,x={namespace:"LuxeEditor",theme:g,nodes:m,onError:M=>console.error(M),onUpdate:y,...d},E=l||[{type:"undo"},{type:"redo"},{type:"divider"},{type:"bold"},{type:"italic"},{type:"underline"},{type:"strikethrough"},{type:"divider"},{type:"headingDropdown"},{type:"divider"},{type:"link"}],I=z.default.useCallback(()=>{n(M=>!M)},[]);return(0,w.jsx)(fe.LexicalComposer,{initialConfig:x,children:(0,w.jsxs)("div",{className:`luxe-editor-container ${c?"luxe-editor-fullscreen":""}`,children:[t&&E&&E.length>0&&(0,w.jsx)(j,{items:E,onFullscreenToggle:I,isFullscreen:c}),(0,w.jsx)(he.RichTextPlugin,{contentEditable:(0,w.jsx)(be.ContentEditable,{className:"luxe-input"}),placeholder:(0,w.jsx)("div",{className:"luxe-placeholder",children:"Start writing..."}),ErrorBoundary:xe.LexicalErrorBoundary}),(0,w.jsx)(me.HistoryPlugin,{}),(0,w.jsx)(ye.LinkPlugin,{}),i&&(0,w.jsx)(Ke,{onChange:i,ignoreInitialChange:u}),r&&(0,w.jsx)(Pe,{initialJSON:r}),o&&(0,w.jsx)(X,{enabled:!0,items:s||E}),f]})})}0&&(module.exports={FloatingToolbarPlugin,LuxeEditor,Toolbar,getEditorDOM,getEditorFormattedText,getEditorJSON,getEditorText,getEditorTree});
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import B from"react";import{LexicalComposer as ze}from"@lexical/react/LexicalComposer";import{RichTextPlugin as Be}from"@lexical/react/LexicalRichTextPlugin";import{ContentEditable as je}from"@lexical/react/LexicalContentEditable";import{HistoryPlugin as Je}from"@lexical/react/LexicalHistoryPlugin";import{LexicalErrorBoundary as Ge}from"@lexical/react/LexicalErrorBoundary";import{LinkPlugin as Xe}from"@lexical/react/LexicalLinkPlugin";import{HeadingNode as qe}from"@lexical/rich-text";import{LinkNode as Ye,AutoLinkNode as Ze}from"@lexical/link";import{ParagraphNode as Qe,TextNode as Ve}from"lexical";import{useLexicalComposerContext as et}from"@lexical/react/LexicalComposerContext";import{useLexicalComposerContext as Re}from"@lexical/react/LexicalComposerContext";import{$getSelection as _,$isRangeSelection as z,FORMAT_TEXT_COMMAND as Se,$createParagraphNode as Me,$isElementNode as ce}from"lexical";import{$patchStyleText as pe}from"@lexical/selection";import{$createHeadingNode as $e,$isHeadingNode as He}from"@lexical/rich-text";import{useCallback as ue,useEffect as V,useState as ge}from"react";import{createPortal as Oe}from"react-dom";import{useLexicalComposerContext as me}from"@lexical/react/LexicalComposerContext";import{mergeRegister as xe}from"@lexical/utils";import{$getSelection as D,$isRangeSelection as K,$createParagraphNode as re,$isElementNode as j,CAN_REDO_COMMAND as ye,CAN_UNDO_COMMAND as Te,COMMAND_PRIORITY_LOW as G,FORMAT_ELEMENT_COMMAND as J,FORMAT_TEXT_COMMAND as Ce,REDO_COMMAND as ve,SELECTION_CHANGE_COMMAND as de,UNDO_COMMAND as ke}from"lexical";import{$patchStyleText as ie}from"@lexical/selection";import{$createHeadingNode as ae,$isHeadingNode as q}from"@lexical/rich-text";import{$isLinkNode as le,TOGGLE_LINK_COMMAND as Y}from"@lexical/link";import{useCallback as se,useEffect as F,useState as R,useRef as X}from"react";import{jsx as b,jsxs as $}from"react/jsx-runtime";var Z=["#000000","#ffffff","#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff","#808080","#800000","#008000","#000080","#808000","#800080","#008080"];function U(e){return{undo:"\u21B6",redo:"\u21B7",divider:"",bold:"B",italic:"I",underline:"U",strikethrough:"S",heading1:"H1",heading2:"H2",heading3:"H3",heading4:"H4",heading5:"H5",heading6:"H6",paragraph:"P",alignLeft:"\u2B05",alignCenter:"\u2B0C",alignRight:"\u27A1",alignJustify:"\u2B0C",textColor:"A",backgroundColor:"\u2B1B",fullscreen:"\u26F6",headingDropdown:"Normal",link:"\u{1F517}"}[e]||e}function Ee(){return b("div",{style:{width:"1px",height:"24px",background:"#e5e7eb",margin:"0 4px"}})}function Ne({item:e,onAction:i}){let[n,t]=R(!1),l=X(null),a=e.colors||Z;return F(()=>{let r=c=>{l.current&&!l.current.contains(c.target)&&t(!1)};if(n)return document.addEventListener("mousedown",r),()=>document.removeEventListener("mousedown",r)},[n]),e.color?b("button",{onClick:()=>i(e,e.color),title:`${e.type==="textColor"?"Text":"Background"} Color: ${e.color}`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:e.type==="backgroundColor"?e.color:"white",color:e.type==="textColor"?e.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center"},children:e.icon||U(e.type)}):$("div",{style:{position:"relative"},ref:l,children:[$("button",{onClick:()=>t(!n),title:`${e.type==="textColor"?"Text":"Background"} Color`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",position:"relative"},children:[e.icon||b("span",{style:{display:"block",width:"20px",height:"20px",background:e.type==="backgroundColor"?"linear-gradient(45deg, #808080 25%, transparent 25%), linear-gradient(-45deg, #808080 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #808080 75%), linear-gradient(-45deg, transparent 75%, #808080 75%)":"currentColor",backgroundSize:e.type==="backgroundColor"?"8px 8px":"auto",backgroundPosition:e.type==="backgroundColor"?"0 0, 0 4px, 4px -4px, -4px 0px":"auto"},children:e.type==="textColor"&&b("span",{style:{color:"#000",fontSize:"12px"},children:"A"})}),b("span",{style:{marginLeft:"4px",fontSize:"10px"},children:"\u25BC"})]}),n&&$("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"8px",display:"grid",gridTemplateColumns:"repeat(5, 1fr)",gap:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"160px"},children:[a.map(r=>$("button",{onClick:()=>{i(e,r),t(!1)},title:r,style:{width:"24px",height:"24px",borderRadius:"4px",border:e.type==="textColor"?`3px solid ${r}`:"1px solid #e5e7eb",background:e.type==="backgroundColor"?r:"white",color:e.type==="textColor"?"#000":"inherit",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"12px",fontWeight:"bold",position:"relative"},children:[e.type==="textColor"&&b("span",{style:{color:r,fontSize:"14px",fontWeight:"bold",lineHeight:"1"},children:"A"}),e.type==="backgroundColor"&&r==="#ffffff"&&b("span",{style:{color:"#000",fontSize:"10px",border:"1px solid #ccc",width:"12px",height:"12px",display:"block"},children:"\u25A1"})]},r)),b("input",{type:"color",onChange:r=>{i(e,r.target.value),t(!1)},style:{gridColumn:"1 / -1",width:"100%",height:"32px",border:"1px solid #e5e7eb",borderRadius:"4px",cursor:"pointer"}})]})]})}function Le({item:e,onAction:i,currentBlockType:n="paragraph"}){let[t,l]=R(!1),a=X(null);F(()=>{let p=o=>{a.current&&!a.current.contains(o.target)&&l(!1)};if(t)return document.addEventListener("mousedown",p),()=>document.removeEventListener("mousedown",p)},[t]);let r=()=>n==="paragraph"?"Normal":n.startsWith("h")?`Heading ${n.replace("h","")}`:"Normal",c=p=>{i(e,void 0,p),l(!1)},g=[{value:"paragraph",label:"Normal"},{value:"h1",label:"Heading 1"},{value:"h2",label:"Heading 2"},{value:"h3",label:"Heading 3"},{value:"h4",label:"Heading 4"},{value:"h5",label:"Heading 5"},{value:"h6",label:"Heading 6"}];return $("div",{style:{position:"relative"},ref:a,children:[$("button",{onClick:()=>l(!t),title:"Heading",style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"100px",height:"32px",display:"flex",alignItems:"center",justifyContent:"space-between",position:"relative",fontSize:n==="paragraph"?"14px":n==="h1"?"20px":n==="h2"?"18px":n==="h3"?"16px":"14px",fontWeight:n!=="paragraph"?"bold":"normal"},children:[b("span",{children:e.label||r()}),b("span",{style:{marginLeft:"8px",fontSize:"10px"},children:"\u25BC"})]}),t&&b("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"150px"},children:g.map(p=>b("button",{onClick:()=>c(p.value),style:{width:"100%",padding:"8px 12px",border:"none",background:n===p.value?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",textAlign:"left",fontSize:p.value==="paragraph"?"14px":p.value==="h1"?"20px":p.value==="h2"?"18px":p.value==="h3"?"16px":"14px",fontWeight:p.value!=="paragraph"?"bold":"normal",display:"flex",alignItems:"center"},onMouseEnter:o=>{n!==p.value&&(o.currentTarget.style.background="#f3f4f6")},onMouseLeave:o=>{n!==p.value?o.currentTarget.style.background="transparent":o.currentTarget.style.background="#e5e7eb"},children:p.label},p.value))})]})}function Ie({item:e,onAction:i,editor:n}){let[t,l]=R(!1),[a,r]=R(""),[c,g]=R(!1),p=X(null),o=X(null);F(()=>{let s=()=>{n.getEditorState().read(()=>{let S=D();if(K(S)){let C=S.getNodes(),N=null;for(let v of C){let d=v.getParent();for(;d!==null;){if(le(d)){N=d;break}d=d.getParent()}if(N)break}N&&le(N)?(g(!0),r(N.getURL())):(g(!1),r(""))}else g(!1),r("")})},m=n.registerUpdateListener(()=>{s()}),h=n.registerCommand(de,()=>(s(),!1),G);return s(),()=>{m(),h()}},[n]),F(()=>{let s=m=>{p.current&&!p.current.contains(m.target)&&l(!1)};if(t)return document.addEventListener("mousedown",s),setTimeout(()=>o.current?.focus(),0),()=>document.removeEventListener("mousedown",s)},[t,c,a]);let f=()=>{if(!a.trim()){n.dispatchCommand(Y,null),l(!1),r("");return}let s=a.trim();!s.startsWith("http://")&&!s.startsWith("https://")&&!s.startsWith("mailto:")&&!s.startsWith("#")&&!s.startsWith("/")&&(s="https://"+s),n.dispatchCommand(Y,s),l(!1),r("")},u=()=>{n.dispatchCommand(Y,null),l(!1),r("")},x=s=>{s.key==="Enter"?(s.preventDefault(),f()):s.key==="Escape"&&(l(!1),r(""))};return $("div",{style:{position:"relative"},ref:p,children:[b("button",{onClick:()=>{l(!t)},title:c?"Edit Link":"Insert Link",style:{padding:"6px 12px",border:"none",background:c?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:s=>{c||(s.currentTarget.style.background="#f3f4f6")},onMouseLeave:s=>{c?s.currentTarget.style.background="#e5e7eb":s.currentTarget.style.background="transparent"},children:e.icon||U(e.type)}),t&&$("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"12px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"300px"},children:[b("input",{ref:o,type:"text",placeholder:"Enter URL (e.g., https://example.com)",value:a,onChange:s=>r(s.target.value),onKeyDown:x,style:{width:"100%",padding:"8px",border:"1px solid #e5e7eb",borderRadius:"4px",fontSize:"14px",marginBottom:"8px"}}),$("div",{style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[c&&b("button",{onClick:u,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px",color:"#dc2626"},children:"Remove"}),b("button",{onClick:()=>l(!1),style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:"Cancel"}),b("button",{onClick:f,style:{padding:"6px 12px",border:"none",background:"#3b82f6",color:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:c?"Update":"Insert"})]})]})]})}function we({item:e,active:i=!1,disabled:n=!1,onAction:t,currentBlockType:l}){let r=e.type.startsWith("heading")&&e.type!=="headingDropdown"?parseInt(e.type.replace("heading","")):null,c=e.label||U(e.type);return e.type==="divider"?b(Ee,{}):e.type==="headingDropdown"?b(Le,{item:e,onAction:t,currentBlockType:l}):e.type==="textColor"||e.type==="backgroundColor"?b(Ne,{item:e,onAction:t}):b("button",{onClick:()=>t(e),disabled:n,title:e.type.charAt(0).toUpperCase()+e.type.slice(1).replace(/([A-Z])/g," $1").trim(),style:{padding:"6px 12px",border:"none",background:i?"#e5e7eb":"transparent",cursor:n?"not-allowed":"pointer",borderRadius:"4px",fontWeight:e.type==="bold"?"bold":"normal",fontStyle:e.type==="italic"?"italic":"normal",textDecoration:e.type==="underline"?"underline":e.type==="strikethrough"?"line-through":"none",fontSize:r?`${18-r*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s",opacity:n?.5:1},onMouseEnter:g=>{!n&&!i&&(g.currentTarget.style.background="#f3f4f6")},onMouseLeave:g=>{i?g.currentTarget.style.background="#e5e7eb":g.currentTarget.style.background="transparent"},children:e.icon||c})}function Q({items:e,onFullscreenToggle:i,isFullscreen:n=!1}){let[t]=me(),[l,a]=R(!1),[r,c]=R(!1),[g,p]=R(!1),[o,f]=R(!1),[u,x]=R(!1),[s,m]=R(!1),[h,S]=R("paragraph"),C=se(()=>{let d=D();if(K(d)){p(d.hasFormat("bold")),f(d.hasFormat("italic")),x(d.hasFormat("underline")),m(d.hasFormat("strikethrough"));let L=d.anchor.getNode(),I=L.getKey()==="root"?L:L.getTopLevelElementOrThrow(),y=I.getKey();if(t.getElementByKey(y)!==null){let E=q(I)?I.getTag():I.getType();S(E)}}},[t]);F(()=>xe(t.registerUpdateListener(({editorState:d})=>{d.read(()=>{C()})}),t.registerCommand(de,()=>(C(),!1),G),t.registerCommand(Te,d=>(a(d),!1),G),t.registerCommand(ye,d=>(c(d),!1),G)),[t,C]);let N=se((d,L,I)=>{let{type:y}=d;if(y==="fullscreen"){i?.();return}if(y==="undo"){t.dispatchCommand(ke,void 0);return}if(y==="redo"){t.dispatchCommand(ve,void 0);return}if(y==="textColor"&&L){t.update(()=>{let k=D();K(k)&&ie(k,{color:L})});return}if(y==="backgroundColor"&&L){t.update(()=>{let k=D();K(k)&&ie(k,{"background-color":L})});return}if(y==="bold"||y==="italic"||y==="underline"||y==="strikethrough"){t.dispatchCommand(Ce,y);return}if(y==="alignLeft"){t.dispatchCommand(J,"left");return}if(y==="alignCenter"){t.dispatchCommand(J,"center");return}if(y==="alignRight"){t.dispatchCommand(J,"right");return}if(y==="alignJustify"){t.dispatchCommand(J,"justify");return}if(y==="headingDropdown"&&I){if(I==="paragraph")t.update(()=>{let k=D();if(K(k)){let E=k.anchor.getNode(),T=E.getKey()==="root"?E:E.getTopLevelElementOrThrow(),w=T.getKey();if(t.getElementByKey(w)!==null&&q(T)&&j(T)){let M=re(),A=T.getChildren();M.append(...A),T.replace(M),M.selectEnd()}}});else{let k=I;t.update(()=>{let E=D();if(K(E)){let T=E.anchor.getNode(),w=T.getKey()==="root"?T:T.getTopLevelElementOrThrow(),O=w.getKey();if(t.getElementByKey(O)!==null&&j(w)){let A=ae(k),W=w.getChildren();A.append(...W),w.replace(A),A.selectEnd()}}})}return}if(y.startsWith("heading")&&y!=="headingDropdown"){let E=`h${parseInt(y.replace("heading",""))}`;t.update(()=>{let T=D();if(K(T)){let w=T.anchor.getNode(),O=w.getKey()==="root"?w:w.getTopLevelElementOrThrow(),M=O.getKey();if(t.getElementByKey(M)!==null&&j(O)){let W=ae(E),be=O.getChildren();W.append(...be),O.replace(W),W.selectEnd()}}});return}if(y==="paragraph"){t.update(()=>{let k=D();if(K(k)){let E=k.anchor.getNode(),T=E.getKey()==="root"?E:E.getTopLevelElementOrThrow(),w=T.getKey();if(t.getElementByKey(w)!==null&&q(T)&&j(T)){let M=re(),A=T.getChildren();M.append(...A),T.replace(M),M.selectEnd()}}});return}},[t,i]),v=d=>{switch(d){case"undo":return{disabled:!l};case"redo":return{disabled:!r};case"bold":return{active:g};case"italic":return{active:o};case"underline":return{active:u};case"strikethrough":return{active:s};case"fullscreen":return{active:n};case"heading1":return{active:h==="h1"};case"heading2":return{active:h==="h2"};case"heading3":return{active:h==="h3"};case"heading4":return{active:h==="h4"};case"heading5":return{active:h==="h5"};case"heading6":return{active:h==="h6"};case"paragraph":return{active:h==="paragraph"};default:return{}}};return b("div",{className:"luxe-toolbar",style:{display:"flex",gap:"4px",alignItems:"center",background:"white",borderBottom:"1px solid #e5e7eb",borderRadius:"8px 8px 0 0",padding:"8px",flexWrap:"wrap"},children:e.map((d,L)=>{let I=v(d.type);return d.type==="link"?b(Ie,{item:d,onAction:N,editor:t},`${d.type}-${L}`):b(we,{item:d,active:I.active,disabled:I.disabled,onAction:N,currentBlockType:h},`${d.type}-${L}`)})})}import{jsx as P}from"react/jsx-runtime";var Ae=[{type:"bold"},{type:"italic"},{type:"underline"}];function De(e){let i=["bold","italic","underline","strikethrough","textColor","backgroundColor"];return e.filter(n=>i.includes(n.type))}function ee({enabled:e=!0,items:i}){let n=i?De(i).slice(0,4):Ae,[t]=Re(),[l,a]=ge(null),[r,c]=ge(null);V(()=>{let o=t.getRootElement();o&&c(o)},[t]);let g=ue(()=>{if(!r)return;let o=window.getSelection();if(!o||o.rangeCount===0||o.isCollapsed){a(null);return}try{let f=o.getRangeAt(0);if(!r.contains(f.commonAncestorContainer)){a(null);return}let u=f.getBoundingClientRect();u&&u.width>0&&u.height>0?t.getEditorState().read(()=>{let x=_();x&&z(x)&&!x.isCollapsed()?a({x:u.left+u.width/2,y:u.top-40}):a(null)}):a(null)}catch{a(null)}},[t,r]);V(()=>{if(!r)return;let o=t.registerUpdateListener(()=>{setTimeout(()=>g(),10)});return()=>{o()}},[t,r,g]),V(()=>{let o=()=>{setTimeout(()=>g(),50)},f=()=>{setTimeout(()=>g(),50)},u=()=>{setTimeout(()=>g(),50)};return document.addEventListener("mouseup",o),document.addEventListener("keyup",f),document.addEventListener("selectionchange",u),()=>{document.removeEventListener("mouseup",o),document.removeEventListener("keyup",f),document.removeEventListener("selectionchange",u)}},[g]);let p=ue((o,f)=>{let{type:u}=o;if(u==="textColor"&&f){t.update(()=>{let x=_();z(x)&&pe(x,{color:f})});return}if(u==="backgroundColor"&&f){t.update(()=>{let x=_();z(x)&&pe(x,{"background-color":f})});return}if(u==="bold"||u==="italic"||u==="underline"||u==="strikethrough"){t.dispatchCommand(Se,u);return}if(u.startsWith("heading")){let s=`h${parseInt(u.replace("heading",""))}`;t.update(()=>{let m=_();if(z(m)){let h=m.anchor.getNode(),S=h.getKey()==="root"?h:h.getTopLevelElementOrThrow(),C=S.getKey();if(t.getElementByKey(C)!==null&&ce(S)){let v=$e(s),d=S.getChildren();v.append(...d),S.replace(v),v.selectEnd()}}});return}if(u==="paragraph"){t.update(()=>{let x=_();if(z(x)){let s=x.anchor.getNode(),m=s.getKey()==="root"?s:s.getTopLevelElementOrThrow(),h=m.getKey();if(t.getElementByKey(h)!==null&&He(m)&&ce(m)){let C=Me(),N=m.getChildren();C.append(...N),m.replace(C),C.selectEnd()}}});return}},[t]);return!e||!n||n.length===0||!l?null:Oe(P("div",{className:"luxe-floating-toolbar",style:{position:"fixed",top:`${l.y}px`,left:`${l.x}px`,transform:"translateX(-50%)",display:"flex",gap:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3},children:n.map((o,f)=>{let u=o.label||U(o.type),s=o.type.startsWith("heading")?parseInt(o.type.replace("heading","")):null;if(o.type==="textColor"||o.type==="backgroundColor"){let m=o.colors||Z.slice(0,6);return P("div",{style:{display:"flex",gap:"2px"},children:o.color?P("button",{onClick:()=>p(o,o.color),title:`${o.type==="textColor"?"Text":"Background"} Color`,style:{padding:"4px 8px",border:"1px solid #e5e7eb",background:o.type==="backgroundColor"?o.color:"white",color:o.type==="textColor"?o.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"28px",height:"28px"},children:o.type==="textColor"?"A":"\u25A0"}):m.map(h=>P("button",{onClick:()=>p(o,h),title:h,style:{width:"24px",height:"24px",border:o.type==="textColor"?`3px solid ${h}`:"1px solid #e5e7eb",background:o.type==="backgroundColor"?h:"white",color:o.type==="textColor"?"#000":"inherit",cursor:"pointer",borderRadius:"3px",fontSize:"10px",display:"flex",alignItems:"center",justifyContent:"center"},children:o.type==="textColor"&&P("span",{style:{color:h,fontSize:"12px",fontWeight:"bold",lineHeight:"1"},children:"A"})},h))},`${o.type}-${f}`)}return P("button",{onClick:()=>p(o),title:o.type.charAt(0).toUpperCase()+o.type.slice(1),style:{padding:"6px 12px",border:"none",background:"transparent",cursor:"pointer",borderRadius:"4px",fontWeight:o.type==="bold"?"bold":"normal",fontStyle:o.type==="italic"?"italic":"normal",textDecoration:o.type==="underline"?"underline":o.type==="strikethrough"?"line-through":"none",fontSize:s?`${18-s*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:m=>{m.currentTarget.style.background="#f3f4f6"},onMouseLeave:m=>{m.currentTarget.style.background="transparent"},children:o.icon||u},`${o.type}-${f}`)})}),document.body)}import{$getRoot as fe,$isElementNode as te,$isTextNode as oe}from"lexical";import{$isHeadingNode as Ke}from"@lexical/rich-text";function Pe(e){return e.toJSON()}function We(e){let i="";return e.read(()=>{i=fe().getTextContent()}),i}function ne(e,i){let n=(i&1)!==0,t=(i&2)!==0,l=(i&4)!==0,a=(i&8)!==0;return n&&t?e=`***${e}***`:n?e=`**${e}**`:t&&(e=`*${e}*`),l&&(e=`__${e}__`),a&&(e=`~~${e}~~`),e}function Fe(e){let i="";return e.read(()=>{let t=fe().getChildren(),l=a=>{let r="";if(Ke(a)){let c=a.getTag(),g=parseInt(c.replace("h","")),p="#".repeat(g),o=a.getChildren(),f="";for(let u of o)oe(u)?f+=ne(u.getTextContent(),u.getFormat()):te(u)&&(f+=l(u));r+=`${p} ${f}
2
+ import W from"react";import{LexicalComposer as Be}from"@lexical/react/LexicalComposer";import{RichTextPlugin as Je}from"@lexical/react/LexicalRichTextPlugin";import{ContentEditable as je}from"@lexical/react/LexicalContentEditable";import{HistoryPlugin as Ge}from"@lexical/react/LexicalHistoryPlugin";import{LexicalErrorBoundary as Xe}from"@lexical/react/LexicalErrorBoundary";import{LinkPlugin as qe}from"@lexical/react/LexicalLinkPlugin";import{HeadingNode as Ye}from"@lexical/rich-text";import{LinkNode as Ze,AutoLinkNode as Qe}from"@lexical/link";import{ParagraphNode as Ve,TextNode as et}from"lexical";import{useLexicalComposerContext as be}from"@lexical/react/LexicalComposerContext";import{useLexicalComposerContext as Re}from"@lexical/react/LexicalComposerContext";import{$getSelection as _,$isRangeSelection as B,FORMAT_TEXT_COMMAND as Me,$createParagraphNode as He,$isElementNode as ce}from"lexical";import{$patchStyleText as pe}from"@lexical/selection";import{$createHeadingNode as $e,$isHeadingNode as Oe}from"@lexical/rich-text";import{useCallback as ue,useEffect as V,useState as ge}from"react";import{createPortal as Ae}from"react-dom";import{useLexicalComposerContext as xe}from"@lexical/react/LexicalComposerContext";import{mergeRegister as ye}from"@lexical/utils";import{$getSelection as D,$isRangeSelection as K,$createParagraphNode as re,$isElementNode as J,CAN_REDO_COMMAND as Te,CAN_UNDO_COMMAND as Ce,COMMAND_PRIORITY_LOW as G,FORMAT_ELEMENT_COMMAND as j,FORMAT_TEXT_COMMAND as ve,REDO_COMMAND as ke,SELECTION_CHANGE_COMMAND as de,UNDO_COMMAND as Ee}from"lexical";import{$patchStyleText as ie}from"@lexical/selection";import{$createHeadingNode as ae,$isHeadingNode as q}from"@lexical/rich-text";import{$isLinkNode as le,TOGGLE_LINK_COMMAND as Y}from"@lexical/link";import{useCallback as se,useEffect as U,useState as L,useRef as X}from"react";import{jsx as b,jsxs as $}from"react/jsx-runtime";var Z=["#000000","#ffffff","#ff0000","#00ff00","#0000ff","#ffff00","#ff00ff","#00ffff","#808080","#800000","#008000","#000080","#808000","#800080","#008080"];function z(e){return{undo:"\u21B6",redo:"\u21B7",divider:"",bold:"B",italic:"I",underline:"U",strikethrough:"S",heading1:"H1",heading2:"H2",heading3:"H3",heading4:"H4",heading5:"H5",heading6:"H6",paragraph:"P",alignLeft:"\u2B05",alignCenter:"\u2B0C",alignRight:"\u27A1",alignJustify:"\u2B0C",textColor:"A",backgroundColor:"\u2B1B",fullscreen:"\u26F6",headingDropdown:"Normal",link:"\u{1F517}"}[e]||e}function Ne(){return b("div",{style:{width:"1px",height:"24px",background:"#e5e7eb",margin:"0 4px"}})}function Le({item:e,onAction:r}){let[o,t]=L(!1),l=X(null),a=e.colors||Z;return U(()=>{let i=c=>{l.current&&!l.current.contains(c.target)&&t(!1)};if(o)return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[o]),e.color?b("button",{onClick:()=>r(e,e.color),title:`${e.type==="textColor"?"Text":"Background"} Color: ${e.color}`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:e.type==="backgroundColor"?e.color:"white",color:e.type==="textColor"?e.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center"},children:e.icon||z(e.type)}):$("div",{style:{position:"relative"},ref:l,children:[$("button",{onClick:()=>t(!o),title:`${e.type==="textColor"?"Text":"Background"} Color`,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"40px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",position:"relative"},children:[e.icon||b("span",{style:{display:"block",width:"20px",height:"20px",background:e.type==="backgroundColor"?"linear-gradient(45deg, #808080 25%, transparent 25%), linear-gradient(-45deg, #808080 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #808080 75%), linear-gradient(-45deg, transparent 75%, #808080 75%)":"currentColor",backgroundSize:e.type==="backgroundColor"?"8px 8px":"auto",backgroundPosition:e.type==="backgroundColor"?"0 0, 0 4px, 4px -4px, -4px 0px":"auto"},children:e.type==="textColor"&&b("span",{style:{color:"#000",fontSize:"12px"},children:"A"})}),b("span",{style:{marginLeft:"4px",fontSize:"10px"},children:"\u25BC"})]}),o&&$("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"8px",display:"grid",gridTemplateColumns:"repeat(5, 1fr)",gap:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"160px"},children:[a.map(i=>$("button",{onClick:()=>{r(e,i),t(!1)},title:i,style:{width:"24px",height:"24px",borderRadius:"4px",border:e.type==="textColor"?`3px solid ${i}`:"1px solid #e5e7eb",background:e.type==="backgroundColor"?i:"white",color:e.type==="textColor"?"#000":"inherit",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"12px",fontWeight:"bold",position:"relative"},children:[e.type==="textColor"&&b("span",{style:{color:i,fontSize:"14px",fontWeight:"bold",lineHeight:"1"},children:"A"}),e.type==="backgroundColor"&&i==="#ffffff"&&b("span",{style:{color:"#000",fontSize:"10px",border:"1px solid #ccc",width:"12px",height:"12px",display:"block"},children:"\u25A1"})]},i)),b("input",{type:"color",onChange:i=>{r(e,i.target.value),t(!1)},style:{gridColumn:"1 / -1",width:"100%",height:"32px",border:"1px solid #e5e7eb",borderRadius:"4px",cursor:"pointer"}})]})]})}function Ie({item:e,onAction:r,currentBlockType:o="paragraph"}){let[t,l]=L(!1),a=X(null);U(()=>{let d=n=>{a.current&&!a.current.contains(n.target)&&l(!1)};if(t)return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[t]);let i=()=>o==="paragraph"?"Normal":o.startsWith("h")?`Heading ${o.replace("h","")}`:"Normal",c=d=>{r(e,void 0,d),l(!1)},u=[{value:"paragraph",label:"Normal"},{value:"h1",label:"Heading 1"},{value:"h2",label:"Heading 2"},{value:"h3",label:"Heading 3"},{value:"h4",label:"Heading 4"},{value:"h5",label:"Heading 5"},{value:"h6",label:"Heading 6"}];return $("div",{style:{position:"relative"},ref:a,children:[$("button",{onClick:()=>l(!t),title:"Heading",style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",minWidth:"100px",height:"32px",display:"flex",alignItems:"center",justifyContent:"space-between",position:"relative",fontSize:o==="paragraph"?"14px":o==="h1"?"20px":o==="h2"?"18px":o==="h3"?"16px":"14px",fontWeight:o!=="paragraph"?"bold":"normal"},children:[b("span",{children:e.label||i()}),b("span",{style:{marginLeft:"8px",fontSize:"10px"},children:"\u25BC"})]}),t&&b("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"150px"},children:u.map(d=>b("button",{onClick:()=>c(d.value),style:{width:"100%",padding:"8px 12px",border:"none",background:o===d.value?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",textAlign:"left",fontSize:d.value==="paragraph"?"14px":d.value==="h1"?"20px":d.value==="h2"?"18px":d.value==="h3"?"16px":"14px",fontWeight:d.value!=="paragraph"?"bold":"normal",display:"flex",alignItems:"center"},onMouseEnter:n=>{o!==d.value&&(n.currentTarget.style.background="#f3f4f6")},onMouseLeave:n=>{o!==d.value?n.currentTarget.style.background="transparent":n.currentTarget.style.background="#e5e7eb"},children:d.label},d.value))})]})}function we({item:e,onAction:r,editor:o}){let[t,l]=L(!1),[a,i]=L(""),[c,u]=L(!1),d=X(null),n=X(null);U(()=>{let s=()=>{o.getEditorState().read(()=>{let I=D();if(K(I)){let C=I.getNodes(),E=null;for(let w of C){let g=w.getParent();for(;g!==null;){if(le(g)){E=g;break}g=g.getParent()}if(E)break}E&&le(E)?(u(!0),i(E.getURL())):(u(!1),i(""))}else u(!1),i("")})},m=o.registerUpdateListener(()=>{s()}),h=o.registerCommand(de,()=>(s(),!1),G);return s(),()=>{m(),h()}},[o]),U(()=>{let s=m=>{d.current&&!d.current.contains(m.target)&&l(!1)};if(t)return document.addEventListener("mousedown",s),setTimeout(()=>n.current?.focus(),0),()=>document.removeEventListener("mousedown",s)},[t,c,a]);let f=()=>{if(!a.trim()){o.dispatchCommand(Y,null),l(!1),i("");return}let s=a.trim();!s.startsWith("http://")&&!s.startsWith("https://")&&!s.startsWith("mailto:")&&!s.startsWith("#")&&!s.startsWith("/")&&(s="https://"+s),o.dispatchCommand(Y,s),l(!1),i("")},p=()=>{o.dispatchCommand(Y,null),l(!1),i("")},y=s=>{s.key==="Enter"?(s.preventDefault(),f()):s.key==="Escape"&&(l(!1),i(""))};return $("div",{style:{position:"relative"},ref:d,children:[b("button",{onClick:()=>{l(!t)},title:c?"Edit Link":"Insert Link",style:{padding:"6px 12px",border:"none",background:c?"#e5e7eb":"transparent",cursor:"pointer",borderRadius:"4px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:s=>{c||(s.currentTarget.style.background="#f3f4f6")},onMouseLeave:s=>{c?s.currentTarget.style.background="#e5e7eb":s.currentTarget.style.background="transparent"},children:e.icon||z(e.type)}),t&&$("div",{style:{position:"absolute",top:"100%",left:0,marginTop:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"12px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3,minWidth:"300px"},children:[b("input",{ref:n,type:"text",placeholder:"Enter URL (e.g., https://example.com)",value:a,onChange:s=>i(s.target.value),onKeyDown:y,style:{width:"100%",padding:"8px",border:"1px solid #e5e7eb",borderRadius:"4px",fontSize:"14px",marginBottom:"8px"}}),$("div",{style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[c&&b("button",{onClick:p,style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px",color:"#dc2626"},children:"Remove"}),b("button",{onClick:()=>l(!1),style:{padding:"6px 12px",border:"1px solid #e5e7eb",background:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:"Cancel"}),b("button",{onClick:f,style:{padding:"6px 12px",border:"none",background:"#3b82f6",color:"white",cursor:"pointer",borderRadius:"4px",fontSize:"14px"},children:c?"Update":"Insert"})]})]})]})}function Se({item:e,active:r=!1,disabled:o=!1,onAction:t,currentBlockType:l}){let i=e.type.startsWith("heading")&&e.type!=="headingDropdown"?parseInt(e.type.replace("heading","")):null,c=e.label||z(e.type);return e.type==="divider"?b(Ne,{}):e.type==="headingDropdown"?b(Ie,{item:e,onAction:t,currentBlockType:l}):e.type==="textColor"||e.type==="backgroundColor"?b(Le,{item:e,onAction:t}):b("button",{onClick:()=>t(e),disabled:o,title:e.type.charAt(0).toUpperCase()+e.type.slice(1).replace(/([A-Z])/g," $1").trim(),style:{padding:"6px 12px",border:"none",background:r?"#e5e7eb":"transparent",cursor:o?"not-allowed":"pointer",borderRadius:"4px",fontWeight:e.type==="bold"?"bold":"normal",fontStyle:e.type==="italic"?"italic":"normal",textDecoration:e.type==="underline"?"underline":e.type==="strikethrough"?"line-through":"none",fontSize:i?`${18-i*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s",opacity:o?.5:1},onMouseEnter:u=>{!o&&!r&&(u.currentTarget.style.background="#f3f4f6")},onMouseLeave:u=>{r?u.currentTarget.style.background="#e5e7eb":u.currentTarget.style.background="transparent"},children:e.icon||c})}function Q({items:e,onFullscreenToggle:r,isFullscreen:o=!1}){let[t]=xe(),[l,a]=L(!1),[i,c]=L(!1),[u,d]=L(!1),[n,f]=L(!1),[p,y]=L(!1),[s,m]=L(!1),[h,I]=L("paragraph"),C=se(()=>{let g=D();if(K(g)){d(g.hasFormat("bold")),f(g.hasFormat("italic")),y(g.hasFormat("underline")),m(g.hasFormat("strikethrough"));let S=g.anchor.getNode(),R=S.getKey()==="root"?S:S.getTopLevelElementOrThrow(),x=R.getKey();if(t.getElementByKey(x)!==null){let k=q(R)?R.getTag():R.getType();I(k)}}},[t]);U(()=>ye(t.registerUpdateListener(({editorState:g})=>{g.read(()=>{C()})}),t.registerCommand(de,()=>(C(),!1),G),t.registerCommand(Ce,g=>(a(g),!1),G),t.registerCommand(Te,g=>(c(g),!1),G)),[t,C]);let E=se((g,S,R)=>{let{type:x}=g;if(x==="fullscreen"){r?.();return}if(x==="undo"){t.dispatchCommand(Ee,void 0);return}if(x==="redo"){t.dispatchCommand(ke,void 0);return}if(x==="textColor"&&S){t.update(()=>{let v=D();K(v)&&ie(v,{color:S})});return}if(x==="backgroundColor"&&S){t.update(()=>{let v=D();K(v)&&ie(v,{"background-color":S})});return}if(x==="bold"||x==="italic"||x==="underline"||x==="strikethrough"){t.dispatchCommand(ve,x);return}if(x==="alignLeft"){t.dispatchCommand(j,"left");return}if(x==="alignCenter"){t.dispatchCommand(j,"center");return}if(x==="alignRight"){t.dispatchCommand(j,"right");return}if(x==="alignJustify"){t.dispatchCommand(j,"justify");return}if(x==="headingDropdown"&&R){if(R==="paragraph")t.update(()=>{let v=D();if(K(v)){let k=v.anchor.getNode(),T=k.getKey()==="root"?k:k.getTopLevelElementOrThrow(),N=T.getKey();if(t.getElementByKey(N)!==null&&q(T)&&J(T)){let M=re(),A=T.getChildren();M.append(...A),T.replace(M),M.selectEnd()}}});else{let v=R;t.update(()=>{let k=D();if(K(k)){let T=k.anchor.getNode(),N=T.getKey()==="root"?T:T.getTopLevelElementOrThrow(),O=N.getKey();if(t.getElementByKey(O)!==null&&J(N)){let A=ae(v),F=N.getChildren();A.append(...F),N.replace(A),A.selectEnd()}}})}return}if(x.startsWith("heading")&&x!=="headingDropdown"){let k=`h${parseInt(x.replace("heading",""))}`;t.update(()=>{let T=D();if(K(T)){let N=T.anchor.getNode(),O=N.getKey()==="root"?N:N.getTopLevelElementOrThrow(),M=O.getKey();if(t.getElementByKey(M)!==null&&J(O)){let F=ae(k),me=O.getChildren();F.append(...me),O.replace(F),F.selectEnd()}}});return}if(x==="paragraph"){t.update(()=>{let v=D();if(K(v)){let k=v.anchor.getNode(),T=k.getKey()==="root"?k:k.getTopLevelElementOrThrow(),N=T.getKey();if(t.getElementByKey(N)!==null&&q(T)&&J(T)){let M=re(),A=T.getChildren();M.append(...A),T.replace(M),M.selectEnd()}}});return}},[t,r]),w=g=>{switch(g){case"undo":return{disabled:!l};case"redo":return{disabled:!i};case"bold":return{active:u};case"italic":return{active:n};case"underline":return{active:p};case"strikethrough":return{active:s};case"fullscreen":return{active:o};case"heading1":return{active:h==="h1"};case"heading2":return{active:h==="h2"};case"heading3":return{active:h==="h3"};case"heading4":return{active:h==="h4"};case"heading5":return{active:h==="h5"};case"heading6":return{active:h==="h6"};case"paragraph":return{active:h==="paragraph"};default:return{}}};return b("div",{className:"luxe-toolbar",style:{display:"flex",gap:"4px",alignItems:"center",background:"white",borderBottom:"1px solid #e5e7eb",borderRadius:"8px 8px 0 0",padding:"8px",flexWrap:"wrap"},children:e.map((g,S)=>{let R=w(g.type);return g.type==="link"?b(we,{item:g,onAction:E,editor:t},`${g.type}-${S}`):b(Se,{item:g,active:R.active,disabled:R.disabled,onAction:E,currentBlockType:h},`${g.type}-${S}`)})})}import{jsx as P}from"react/jsx-runtime";var De=[{type:"bold"},{type:"italic"},{type:"underline"}];function Ke(e){let r=["bold","italic","underline","strikethrough","textColor","backgroundColor"];return e.filter(o=>r.includes(o.type))}function ee({enabled:e=!0,items:r}){let o=r?Ke(r).slice(0,4):De,[t]=Re(),[l,a]=ge(null),[i,c]=ge(null);V(()=>{let n=t.getRootElement();n&&c(n)},[t]);let u=ue(()=>{if(!i)return;let n=window.getSelection();if(!n||n.rangeCount===0||n.isCollapsed){a(null);return}try{let f=n.getRangeAt(0);if(!i.contains(f.commonAncestorContainer)){a(null);return}let p=f.getBoundingClientRect();p&&p.width>0&&p.height>0?t.getEditorState().read(()=>{let y=_();y&&B(y)&&!y.isCollapsed()?a({x:p.left+p.width/2,y:p.top-40}):a(null)}):a(null)}catch{a(null)}},[t,i]);V(()=>{if(!i)return;let n=t.registerUpdateListener(()=>{setTimeout(()=>u(),10)});return()=>{n()}},[t,i,u]),V(()=>{let n=()=>{setTimeout(()=>u(),50)},f=()=>{setTimeout(()=>u(),50)},p=()=>{setTimeout(()=>u(),50)};return document.addEventListener("mouseup",n),document.addEventListener("keyup",f),document.addEventListener("selectionchange",p),()=>{document.removeEventListener("mouseup",n),document.removeEventListener("keyup",f),document.removeEventListener("selectionchange",p)}},[u]);let d=ue((n,f)=>{let{type:p}=n;if(p==="textColor"&&f){t.update(()=>{let y=_();B(y)&&pe(y,{color:f})});return}if(p==="backgroundColor"&&f){t.update(()=>{let y=_();B(y)&&pe(y,{"background-color":f})});return}if(p==="bold"||p==="italic"||p==="underline"||p==="strikethrough"){t.dispatchCommand(Me,p);return}if(p.startsWith("heading")){let s=`h${parseInt(p.replace("heading",""))}`;t.update(()=>{let m=_();if(B(m)){let h=m.anchor.getNode(),I=h.getKey()==="root"?h:h.getTopLevelElementOrThrow(),C=I.getKey();if(t.getElementByKey(C)!==null&&ce(I)){let w=$e(s),g=I.getChildren();w.append(...g),I.replace(w),w.selectEnd()}}});return}if(p==="paragraph"){t.update(()=>{let y=_();if(B(y)){let s=y.anchor.getNode(),m=s.getKey()==="root"?s:s.getTopLevelElementOrThrow(),h=m.getKey();if(t.getElementByKey(h)!==null&&Oe(m)&&ce(m)){let C=He(),E=m.getChildren();C.append(...E),m.replace(C),C.selectEnd()}}});return}},[t]);return!e||!o||o.length===0||!l?null:Ae(P("div",{className:"luxe-floating-toolbar",style:{position:"fixed",top:`${l.y}px`,left:`${l.x}px`,transform:"translateX(-50%)",display:"flex",gap:"4px",background:"white",border:"1px solid #e5e7eb",borderRadius:"6px",padding:"4px",boxShadow:"0 4px 6px -1px rgba(0, 0, 0, 0.1)",zIndex:1e3},children:o.map((n,f)=>{let p=n.label||z(n.type),s=n.type.startsWith("heading")?parseInt(n.type.replace("heading","")):null;if(n.type==="textColor"||n.type==="backgroundColor"){let m=n.colors||Z.slice(0,6);return P("div",{style:{display:"flex",gap:"2px"},children:n.color?P("button",{onClick:()=>d(n,n.color),title:`${n.type==="textColor"?"Text":"Background"} Color`,style:{padding:"4px 8px",border:"1px solid #e5e7eb",background:n.type==="backgroundColor"?n.color:"white",color:n.type==="textColor"?n.color:"#000",cursor:"pointer",borderRadius:"4px",minWidth:"28px",height:"28px"},children:n.type==="textColor"?"A":"\u25A0"}):m.map(h=>P("button",{onClick:()=>d(n,h),title:h,style:{width:"24px",height:"24px",border:n.type==="textColor"?`3px solid ${h}`:"1px solid #e5e7eb",background:n.type==="backgroundColor"?h:"white",color:n.type==="textColor"?"#000":"inherit",cursor:"pointer",borderRadius:"3px",fontSize:"10px",display:"flex",alignItems:"center",justifyContent:"center"},children:n.type==="textColor"&&P("span",{style:{color:h,fontSize:"12px",fontWeight:"bold",lineHeight:"1"},children:"A"})},h))},`${n.type}-${f}`)}return P("button",{onClick:()=>d(n),title:n.type.charAt(0).toUpperCase()+n.type.slice(1),style:{padding:"6px 12px",border:"none",background:"transparent",cursor:"pointer",borderRadius:"4px",fontWeight:n.type==="bold"?"bold":"normal",fontStyle:n.type==="italic"?"italic":"normal",textDecoration:n.type==="underline"?"underline":n.type==="strikethrough"?"line-through":"none",fontSize:s?`${18-s*2}px`:"14px",minWidth:"32px",display:"flex",alignItems:"center",justifyContent:"center",transition:"background-color 0.2s"},onMouseEnter:m=>{m.currentTarget.style.background="#f3f4f6"},onMouseLeave:m=>{m.currentTarget.style.background="transparent"},children:n.icon||p},`${n.type}-${f}`)})}),document.body)}import{$getRoot as fe,$isElementNode as te,$isTextNode as oe}from"lexical";import{$isHeadingNode as Pe}from"@lexical/rich-text";function We(e){return e.toJSON()}function Fe(e){let r="";return e.read(()=>{r=fe().getTextContent()}),r}function ne(e,r){let o=(r&1)!==0,t=(r&2)!==0,l=(r&4)!==0,a=(r&8)!==0;return o&&t?e=`***${e}***`:o?e=`**${e}**`:t&&(e=`*${e}*`),l&&(e=`__${e}__`),a&&(e=`~~${e}~~`),e}function Ue(e){let r="";return e.read(()=>{let t=fe().getChildren(),l=a=>{let i="";if(Pe(a)){let c=a.getTag(),u=parseInt(c.replace("h","")),d="#".repeat(u),n=a.getChildren(),f="";for(let p of n)oe(p)?f+=ne(p.getTextContent(),p.getFormat()):te(p)&&(f+=l(p));i+=`${d} ${f}
3
3
 
4
- `}else if(te(a)){let c=a.getChildren(),g="";for(let o of c)oe(o)?g+=ne(o.getTextContent(),o.getFormat()):te(o)&&(g+=l(o));let p=a.getType();p==="paragraph"?r+=g+`
4
+ `}else if(te(a)){let c=a.getChildren(),u="";for(let n of c)oe(n)?u+=ne(n.getTextContent(),n.getFormat()):te(n)&&(u+=l(n));let d=a.getType();d==="paragraph"?i+=u+`
5
5
 
6
- `:r+=g}else oe(a)&&(r+=ne(a.getTextContent(),a.getFormat()));return r};for(let a of t)i+=l(a)}),i.trim()}function Ue(e){if(!e)return"";try{let i=e.getRootElement();if(!i)return"";let n=i.querySelector('[contenteditable="true"]');if(n)return(n.innerHTML||"").trim()||"";if(i.hasAttribute("contenteditable")&&i.getAttribute("contenteditable")==="true")return i.innerHTML||"";let t=Array.from(i.children).filter(l=>{let a=l.id||"",r=l.className||"";return!a.includes("toolbar")&&!r.includes("toolbar")});if(t.length>0){for(let l of t)if(l.hasAttribute("contenteditable"))return l.innerHTML||"";return t[0].innerHTML||""}return i.innerHTML||""}catch(i){return console.error("Error getting editor DOM:",i),""}}function _e(e){if(!e||!e.root)return null;let i=(n,t=0)=>{if(!n)return null;let l=n.type||"unknown",a=n.key||"",r=n.children||[],c={type:l,key:a,depth:t,children:[]};return n.tag&&(c.tag=n.tag),n.format!==void 0&&(c.format=n.format),n.text&&(c.text=n.text.substring(0,50)+(n.text.length>50?"...":"")),n.style&&(c.style=n.style),n.indent&&(c.indent=n.indent),n.direction&&(c.direction=n.direction),Array.isArray(r)&&(c.children=r.map(g=>i(g,t+1)).filter(Boolean)),c};return i(e.root)}import{jsx as H,jsxs as tt}from"react/jsx-runtime";var he={paragraph:"luxe-paragraph",heading:{h1:"luxe-heading-h1",h2:"luxe-heading-h2",h3:"luxe-heading-h3",h4:"luxe-heading-h4",h5:"luxe-heading-h5",h6:"luxe-heading-h6"},text:{bold:"luxe-bold",italic:"luxe-italic",underline:"luxe-underline",strikethrough:"luxe-strikethrough"}};function Ut({initialConfig:e,showFloatingToolbar:i=!0,showToolbar:n=!0,toolbarItems:t,floatingToolbarItems:l,onChange:a,ignoreInitialChange:r=!0,children:c}){let[g,p]=B.useState(!1),o=[qe,Qe,Ve,Ye,Ze],f=e.theme?{...he,...e.theme}:he,{theme:u,...x}=e,s=x.onUpdate,m=B.memo(()=>{let[v]=et(),d=B.useRef(!0);return B.useEffect(()=>{if(a)return v.registerUpdateListener(({editorState:L,prevEditorState:I})=>{if(r&&d.current&&I.isEmpty()){d.current=!1;return}d.current=!1,a(L,v)})},[v,a,r]),null}),h={namespace:"LuxeEditor",theme:f,nodes:o,onError:v=>console.error(v),onUpdate:s,...x},C=t||[{type:"undo"},{type:"redo"},{type:"divider"},{type:"bold"},{type:"italic"},{type:"underline"},{type:"strikethrough"},{type:"divider"},{type:"headingDropdown"},{type:"divider"},{type:"link"}],N=B.useCallback(()=>{p(v=>!v)},[]);return H(ze,{initialConfig:h,children:tt("div",{className:`luxe-editor-container ${g?"luxe-editor-fullscreen":""}`,children:[n&&C&&C.length>0&&H(Q,{items:C,onFullscreenToggle:N,isFullscreen:g}),H(Be,{contentEditable:H(je,{className:"luxe-input"}),placeholder:H("div",{className:"luxe-placeholder",children:"Start writing..."}),ErrorBoundary:Ge}),H(Je,{}),H(Xe,{}),a&&H(m,{}),i&&H(ee,{enabled:!0,items:l||C}),c]})})}export{ee as FloatingToolbarPlugin,Ut as LuxeEditor,Q as Toolbar,Ue as getEditorDOM,Fe as getEditorFormattedText,Pe as getEditorJSON,We as getEditorText,_e as getEditorTree};
6
+ `:i+=u}else oe(a)&&(i+=ne(a.getTextContent(),a.getFormat()));return i};for(let a of t)r+=l(a)}),r.trim()}function ze(e){if(!e)return"";try{let r=e.getRootElement();if(!r)return"";let o=r.querySelector('[contenteditable="true"]');if(o)return(o.innerHTML||"").trim()||"";if(r.hasAttribute("contenteditable")&&r.getAttribute("contenteditable")==="true")return r.innerHTML||"";let t=Array.from(r.children).filter(l=>{let a=l.id||"",i=l.className||"";return!a.includes("toolbar")&&!i.includes("toolbar")});if(t.length>0){for(let l of t)if(l.hasAttribute("contenteditable"))return l.innerHTML||"";return t[0].innerHTML||""}return r.innerHTML||""}catch(r){return console.error("Error getting editor DOM:",r),""}}function _e(e){if(!e||!e.root)return null;let r=(o,t=0)=>{if(!o)return null;let l=o.type||"unknown",a=o.key||"",i=o.children||[],c={type:l,key:a,depth:t,children:[]};return o.tag&&(c.tag=o.tag),o.format!==void 0&&(c.format=o.format),o.text&&(c.text=o.text.substring(0,50)+(o.text.length>50?"...":"")),o.style&&(c.style=o.style),o.indent&&(c.indent=o.indent),o.direction&&(c.direction=o.direction),Array.isArray(i)&&(c.children=i.map(u=>r(u,t+1)).filter(Boolean)),c};return r(e.root)}import{jsx as H,jsxs as nt}from"react/jsx-runtime";var he={paragraph:"luxe-paragraph",heading:{h1:"luxe-heading-h1",h2:"luxe-heading-h2",h3:"luxe-heading-h3",h4:"luxe-heading-h4",h5:"luxe-heading-h5",h6:"luxe-heading-h6"},text:{bold:"luxe-bold",italic:"luxe-italic",underline:"luxe-underline",strikethrough:"luxe-strikethrough"}};function tt({onChange:e,ignoreInitialChange:r}){let[o]=be(),t=W.useRef(!0);return W.useEffect(()=>o.registerUpdateListener(({editorState:l,prevEditorState:a})=>{if(r&&t.current&&a.isEmpty()){t.current=!1;return}t.current=!1,e(l,o)}),[o,e,r]),null}function ot({initialJSON:e}){let[r]=be(),o=W.useRef(!1);return W.useEffect(()=>{if(!(!e||o.current))try{let t=r.parseEditorState(e);r.setEditorState(t),o.current=!0}catch(t){console.error("LuxeEditor: Failed to parse initialJSON",t)}},[r,e]),null}function _t({initialConfig:e,initialJSON:r,showFloatingToolbar:o=!0,showToolbar:t=!0,toolbarItems:l,floatingToolbarItems:a,onChange:i,ignoreInitialChange:c=!0,children:u}){let[d,n]=W.useState(!1),f=[Ye,Ve,et,Ze,Qe],p=e.theme?{...he,...e.theme}:he,{theme:y,...s}=e,m=s.onUpdate,h={namespace:"LuxeEditor",theme:p,nodes:f,onError:w=>console.error(w),onUpdate:m,...s},C=l||[{type:"undo"},{type:"redo"},{type:"divider"},{type:"bold"},{type:"italic"},{type:"underline"},{type:"strikethrough"},{type:"divider"},{type:"headingDropdown"},{type:"divider"},{type:"link"}],E=W.useCallback(()=>{n(w=>!w)},[]);return H(Be,{initialConfig:h,children:nt("div",{className:`luxe-editor-container ${d?"luxe-editor-fullscreen":""}`,children:[t&&C&&C.length>0&&H(Q,{items:C,onFullscreenToggle:E,isFullscreen:d}),H(Je,{contentEditable:H(je,{className:"luxe-input"}),placeholder:H("div",{className:"luxe-placeholder",children:"Start writing..."}),ErrorBoundary:Xe}),H(Ge,{}),H(qe,{}),i&&H(tt,{onChange:i,ignoreInitialChange:c}),r&&H(ot,{initialJSON:r}),o&&H(ee,{enabled:!0,items:a||C}),u]})})}export{ee as FloatingToolbarPlugin,_t as LuxeEditor,Q as Toolbar,ze as getEditorDOM,Ue as getEditorFormattedText,We as getEditorJSON,Fe as getEditorText,_e as getEditorTree};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luxe-edit",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "A beautiful, customizable rich text editor for React built on Lexical with customizable toolbars and floating toolbar support",
5
5
  "keywords": [
6
6
  "react",