UNPKG

@thebase/ui

Version:

CDN-installable Owl and Bootstrap 5 UI component library.

2 lines (1 loc) • 4.84 kB
import"./chunk-23NN352E.js";var R;function te(){return R??(R=new Promise((n,e)=>{if(document.getElementById("bu-text-editor-crepe-theme")){n();return}let o=document.createElement("link");o.id="bu-text-editor-crepe-theme",o.rel="stylesheet",o.href=new URL("./theme/common/style.css",import.meta.url).href,o.addEventListener("load",()=>n()),o.addEventListener("error",()=>e(new Error("BaseUI text editor: failed to load Crepe theme CSS."))),document.head.append(o)})),R}async function ce({root:n,value:e="",onChange:o,collaborative:t=!1,providerType:r="webrtc",room:i="bu-text-editor",url:a,password:c,signaling:s,user:l,placeholder:m}={}){if(!n)throw new Error("BaseUI text editor: missing root element.");let[{Crepe:h},H,x,T,F,U]=await Promise.all([import("./esm-H2D66MX5.js"),import("./core-T2SC7EXQ.js"),import("./utils-H6AH4ARX.js"),import("./diff-K3BORLOX.js"),import("./streaming-S7JA52O3.js"),import("./lib-32AGHSKT.js"),te()]),{editorViewCtx:k,schemaCtx:D}=H,{getHTML:p}=x,{diff:B,diffPluginKey:I,getPendingChanges:z,startDiffReviewCmd:K,startDiffReviewFromDocCmd:O,acceptAllDiffsCmd:V,acceptDiffChunkCmd:W,acceptDiffRangeCmd:q,rejectDiffChunkCmd:N,rejectDiffRangeCmd:G,clearDiffReviewCmd:J}=T,{streaming:Q,startStreamingCmd:X,pushChunkCmd:Y,endStreamingCmd:Z,abortStreamingCmd:_}=F,{emoji:$}=U,{callCommand:L}=x;n.replaceChildren();let b=document.createElement("div");b.className="bu-text-editor-surface",n.append(b);let d=new h({root:b,defaultValue:t?"":{type:"html",dom:y(e)},features:{[h.Feature.Latex]:!1,[h.Feature.AI]:!1},featureConfigs:m?{[h.Feature.Placeholder]:{text:m}}:{}});d.editor.use(B).use(Q).use($);let C="";d.on(S=>{S.updated(w=>{let g=p()(w);if(g!==C){let v=C;C=g,o?.(g,v,w)}})});let A={callCommand:L,editorViewCtx:k,schemaCtx:D,diffPluginKey:I,getPendingChanges:z,startDiffReviewCmd:K,startDiffReviewFromDocCmd:O,acceptAllDiffsCmd:V,acceptDiffChunkCmd:W,acceptDiffRangeCmd:q,rejectDiffChunkCmd:N,rejectDiffRangeCmd:G,clearDiffReviewCmd:J},E={callCommand:L,startStreamingCmd:X,pushChunkCmd:Y,endStreamingCmd:Z,abortStreamingCmd:_},P=[],u=null,f=null;if(t){let[{Doc:S},w]=await Promise.all([import("./yjs-H3MVN7TP.js"),import("./lib-QZEOHNSS.js")]),{collab:g,collabServiceCtx:v}=w;f=new S,u=await ie({providerType:r,ydoc:f,room:i,url:a,password:c,signaling:s}),u.awareness?.setLocalStateField("user",ae(l)),d.editor.use(g),await d.create();let M;return d.editor.action(ee=>{M=ee.get(v).bindDoc(f).setAwareness(u.awareness).applyTemplate({type:"html",dom:y(e)}).connect()}),P.push(()=>M?.disconnect(),()=>u.destroy?.(),()=>f.destroy()),C=d.editor.action(p()),u.connect?.(),j(d,A,E,P,n,u,f,k,p,D)}return await d.create(),C=d.editor.action(p()),j(d,A,E,P,n,u,f,k,p,D)}function y(n){let e=document.createElement("div");return e.innerHTML=String(n||"").trim()||"<p></p>",e}function j(n,e,o,t,r,i,a,c,s,l){return{editor:n.editor,provider:i,doc:a,focus:()=>n.editor.action(m=>m.get(c).focus()),getHTML:()=>n.editor.action(s()),setHTML:m=>ne(n.editor,m,c,l),diff:oe(n.editor,e),streaming:re(n.editor,o),destroy:()=>{for(let m of t)m();n.destroy(),r.replaceChildren()}}}async function ne(n,e,o,t){let{DOMParser:r,Slice:i}=await import("./model-VKXPTJEQ.js");n.action(a=>{let c=a.get(t),s=a.get(o),l=r.fromSchema(c).parse(y(e));s.dispatch(s.state.tr.replace(0,s.state.doc.content.size,new i(l.content,0,0)))})}function oe(n,e){let o=(t,r)=>n.action(e.callCommand(t,r));return{startFromMarkdown:t=>o(e.startDiffReviewCmd.key,t),startFromHTML:async t=>{let{DOMParser:r}=await import("./model-VKXPTJEQ.js"),i=n.action(a=>r.fromSchema(a.get(e.schemaCtx)).parse(y(t)));return o(e.startDiffReviewFromDocCmd.key,i)},acceptAll:()=>o(e.acceptAllDiffsCmd.key),acceptChunk:t=>o(e.acceptDiffChunkCmd.key,t),rejectChunk:t=>o(e.rejectDiffChunkCmd.key,t),acceptRange:t=>o(e.acceptDiffRangeCmd.key,t),rejectRange:t=>o(e.rejectDiffRangeCmd.key,t),clear:()=>o(e.clearDiffReviewCmd.key),getPendingChanges:()=>n.action(t=>{let r=e.diffPluginKey.getState(t.get(e.editorViewCtx).state);return r?e.getPendingChanges(r):[]})}}function re(n,e){let o=(t,r)=>n.action(e.callCommand(t,r));return{start:t=>o(e.startStreamingCmd.key,t),pushChunk:t=>o(e.pushChunkCmd.key,t),end:t=>o(e.endStreamingCmd.key,t),abort:()=>o(e.abortStreamingCmd.key)}}async function ie({providerType:n,ydoc:e,room:o,url:t,password:r,signaling:i}){if(n==="websocket"){if(!t)throw new Error("BaseUI text editor: collaborative websocket mode requires a `url`.");let{WebsocketProvider:l}=await import("./y-websocket-YOL5ECIU.js");return new l(t,o,e,{connect:!1})}let{WebrtcProvider:a}=await import("./y-webrtc-VQGJXSXG.js"),c={};r&&(c.password=r),Array.isArray(i)&&i.length&&(c.signaling=i);let s=new a(o,e,c);return s.disconnect(),s}function ae(n){let e=n&&typeof n=="object"?n:{};return{name:e.name||"Anonymous",color:e.color||"#2563eb",...e}}export{ce as createMilkdownTextEditor};