3 lines
20 KiB
JavaScript
3 lines
20 KiB
JavaScript
import{autocompletion as vt}from"@codemirror/autocomplete";import{basicSetup as qt,closeBrackets as Ye,lineNumbers as ee}from"codemirror";import{Compartment as j,EditorState as te}from"@codemirror/state";import{oneDark as Ut}from"@codemirror/theme-one-dark";import{EditorView as H,keymap as oe}from"@codemirror/view";import{redo as Ct,undo as Bt}from"@codemirror/commands";import{HighlightStyle as At,defaultHighlightStyle as It,foldEffect as et,indentUnit as Nt,syntaxHighlighting as tt}from"@codemirror/language";import{tags as Dt}from"@lezer/highlight";import{indentationMarkers as Rt}from"@replit/codemirror-indentation-markers";import{vscodeKeymap as Pt}from"@replit/codemirror-vscode-keymap";import{colorPicker as $t}from"@replit/codemirror-css-color-picker";var Be=()=>document.querySelector("#editor-mode");var Ae=(t,r)=>{let a;return(...m)=>{a&&clearTimeout(a),a=setTimeout(()=>t.apply(null,m),typeof r=="function"?r():r)}};var yt=()=>navigator.userAgent.includes("Mac")||navigator.platform.includes("Mac"),Ie=t=>yt()?t.metaKey:t.ctrlKey;var Ne=()=>String(Math.random())+"-"+Date.now().toFixed();var Re=["esm.sh","skypack","esm.run","jsdelivr.esm","fastly.jsdelivr.esm","gcore.jsdelivr.esm","testingcf.jsdelivr.esm","jsdelivr.b-cdn.esm","jspm"],Pe=["jsdelivr","fastly.jsdelivr","unpkg","gcore.jsdelivr","testingcf.jsdelivr","jsdelivr.b-cdn","npmcdn"],$e=["jsdelivr.gh","fastly.jsdelivr.gh","statically","gcore.jsdelivr.gh","testingcf.jsdelivr.gh","jsdelivr.b-cdn.gh"],w={getModuleUrl:(t,{isModule:r=!0,defaultCDN:a="esm.sh",external:m}={})=>{t=t.replace(/#nobundle/g,"");let h=u=>!m||!u.includes("https://esm.sh")?u:u.includes("?")?`${u}&external=${m}`:`${u}?external=${m}`,T=De(t,r,a);return T?h(T):r?h("https://esm.sh/"+t):"https://cdn.jsdelivr.net/npm/"+t},getUrl:(t,r)=>t.startsWith("http")||t.startsWith("data:")?t:De(t,!1,r||ft())||t,cdnLists:{npm:Pe,module:Re,gh:$e},checkCDNs:async(t,r)=>{let a=[r,...w.cdnLists.npm].filter(Boolean);for(let m of a)try{if((await fetch(w.getUrl(t,m),{method:"HEAD"})).ok)return m}catch{}return w.cdnLists.npm[0]}},ft=()=>{if(globalThis.appCDN)return globalThis.appCDN;try{return new URL(location.href).searchParams.get("appCDN")||w.cdnLists.npm[0]}catch{return w.cdnLists.npm[0]}},De=(t,r,a)=>{let m=r&&t.startsWith("unpkg:")?"?module":"";t.startsWith("gh:")?t=t.replace("gh",$e[0]):t.includes(":")||(t=(a||(r?Re[0]:Pe[0]))+":"+t);for(let h of Tt){let[T,u]=h;if(T.test(t))return t.replace(T,u)+m}return null},Tt=[[/^(esm\.sh:)(.+)/i,"https://esm.sh/$2"],[/^(npm:)(.+)/i,"https://esm.sh/$2"],[/^(node:)(.+)/i,"https://esm.sh/$2"],[/^(jsr:)(.+)/i,"https://esm.sh/jsr/$2"],[/^(skypack:)(.+)/i,"https://cdn.skypack.dev/$2"],[/^(jsdelivr:)(.+)/i,"https://cdn.jsdelivr.net/npm/$2"],[/^(fastly\.jsdelivr:)(.+)/i,"https://fastly.jsdelivr.net/npm/$2"],[/^(gcore\.jsdelivr:)(.+)/i,"https://gcore.jsdelivr.net/npm/$2"],[/^(testingcf\.jsdelivr:)(.+)/i,"https://testingcf.jsdelivr.net/npm/$2"],[/^(jsdelivr\.b-cdn:)(.+)/i,"https://jsdelivr.b-cdn.net/npm/$2"],[/^(jsdelivr\.gh:)(.+)/i,"https://cdn.jsdelivr.net/gh/$2"],[/^(fastly\.jsdelivr\.gh:)(.+)/i,"https://fastly.jsdelivr.net/gh/$2"],[/^(gcore\.jsdelivr\.gh:)(.+)/i,"https://gcore.jsdelivr.net/gh/$2"],[/^(testingcf\.jsdelivr\.gh:)(.+)/i,"https://testingcf.jsdelivr.net/gh/$2"],[/^(jsdelivr\.b-cdn\.gh:)(.+)/i,"https://jsdelivr.b-cdn.net/gh/$2"],[/^(statically:)(.+)/i,"https://cdn.statically.io/gh/$2"],[/^(esm\.run:)(.+)/i,"https://esm.run/$2"],[/^(jsdelivr\.esm:)(.+)/i,"https://cdn.jsdelivr.net/npm/$2/+esm"],[/^(fastly\.jsdelivr\.esm:)(.+)/i,"https://fastly.jsdelivr.net/npm/$2/+esm"],[/^(gcore\.jsdelivr\.esm:)(.+)/i,"https://gcore.jsdelivr.net/npm/$2/+esm"],[/^(testingcf\.jsdelivr\.esm:)(.+)/i,"https://testingcf.jsdelivr.net/npm/$2/+esm"],[/^(jsdelivr\.b-cdn\.esm:)(.+)/i,"https://jsdelivr.b-cdn.net/npm/$2/+esm"],[/^(jspm:)(.+)/i,"https://jspm.dev/$2"],[/^(esbuild:)(.+)/i,"https://esbuild.vercel.app/$2"],[/^(bundle\.run:)(.+)/i,"https://bundle.run/$2"],[/^(unpkg:)(.+)/i,"https://unpkg.com/$2"],[/^(npmcdn:)(.+)/i,"https://npmcdn.com/$2"],[/^(bundlejs:)(.+)/i,"https://deno.bundlejs.com/?file&q=$2"],[/^(bundle:)(.+)/i,"https://deno.bundlejs.com/?file&q=$2"],[/^(deno:)(.+)/i,"https://deno.bundlejs.com/?file&q=https://deno.land/x/$2/mod.ts"],[/^(https:\/\/deno\.land\/.+)/i,"https://deno.bundlejs.com/?file&q=$1"],[/^(github:|https:\/\/github\.com\/)(.[^\/]+?)\/(.[^\/]+?)\/(?!releases\/)(?:(?:blob|raw)\/)?(.+?\/.+)/i,"https://deno.bundlejs.com/?file&q=https://cdn.jsdelivr.net/gh/$2/$3@$4"],[/^(gist\.github:)(.+?\/[0-9a-f]+\/raw\/(?:[0-9a-f]+\/)?.+)$/i,"https://gist.githack.com/$2"],[/^(gitlab:|https:\/\/gitlab\.com\/)([^\/]+.*\/[^\/]+)\/(?:raw|blob)\/(.+?)(?:\?.*)?$/i,"https://deno.bundlejs.com/?file&q=https://gl.githack.com/$2/raw/$3"],[/^(bitbucket:|https:\/\/bitbucket\.org\/)([^\/]+\/[^\/]+)\/(?:raw|src)\/(.+?)(?:\?.*)?$/i,"https://deno.bundlejs.com/?file&q=https://bb.githack.com/$2/raw/$3"],[/^(bitbucket:)snippets\/([^\/]+\/[^\/]+)\/revisions\/([^\/\#\?]+)(?:\?[^#]*)?(?:\#file-(.+?))$/i,"https://bb.githack.com/!api/2.0/snippets/$2/$3/files/$4"],[/^(bitbucket:)snippets\/([^\/]+\/[^\/\#\?]+)(?:\?[^#]*)?(?:\#file-(.+?))$/i,"https://bb.githack.com/!api/2.0/snippets/$2/HEAD/files/$3"],[/^(bitbucket:)\!api\/2.0\/snippets\/([^\/]+\/[^\/]+\/[^\/]+)\/files\/(.+?)(?:\?.*)?$/i,"https://bb.githack.com/!api/2.0/snippets/$2/files/$3"],[/^(api\.bitbucket:)2.0\/snippets\/([^\/]+\/[^\/]+\/[^\/]+)\/files\/(.+?)(?:\?.*)?$/i,"https://bb.githack.com/!api/2.0/snippets/$2/files/$3"],[/^(rawgit:)(.+?\/[0-9a-f]+\/raw\/(?:[0-9a-f]+\/)?.+)$/i,"https://gist.githack.com/$2"],[/^(rawgit:|https:\/\/raw\.githubusercontent\.com)(\/[^\/]+\/[^\/]+|[0-9A-Za-z-]+\/[0-9a-f]+\/raw)\/(.+)/i,"https://deno.bundlejs.com/?file&q=https://raw.githack.com/$2/$3"]];var{getUrl:y,getModuleUrl:Qt}=w,v=y("@live-codes/browser-compilers@0.22.3/dist/");var Fe=y("cm6-theme-basic-light@0.2.0/dist/index.js"),We=y("cm6-theme-basic-dark@0.2.0/dist/index.js"),Oe=y("cm6-theme-gruvbox-light@0.2.0/dist/index.js"),ze=y("cm6-theme-gruvbox-dark@0.2.0/dist/index.js"),Ve=y("cm6-theme-material-dark@0.2.0/dist/index.js"),_e=y("cm6-theme-nord@0.2.0/dist/index.js"),Ge=y("cm6-theme-solarized-light@0.2.0/dist/index.js"),Ke=y("cm6-theme-solarized-dark@0.2.0/dist/index.js");var b=y("@live-codes/codemirror@0.3.2/build/");var Je=y("comlink@4.4.1/dist/");var S=y("@ddietr/codemirror-themes@1.4.2/dist/theme/");var g=y("thememirror@2.0.1/dist/themes/");var bt=t=>{let r=t.trim(),a,m;return t.includes(":")&&([a,r]=r.split(":"),a!=="monaco"&&a!=="codemirror"&&a!=="codejar"&&(a=void 0)),t.includes("@")&&([r,m]=r.split("@"),m!=="light"&&m!=="dark"&&(m=void 0)),{editor:a,editorTheme:r,theme:m}},Ze=({editor:t,editorTheme:r,theme:a,editorThemes:m})=>{if(!r)return null;let T=(typeof r=="string"?r.split(",").map(u=>u.trim()):r).map(bt);for(let u of T)if((u.editor===t||u.editor===void 0)&&(u.theme===a||u.theme===void 0)&&m.includes(u.editorTheme))return u.editorTheme;return null};import{EditorView as Et}from"@codemirror/view";import{HighlightStyle as Lt,syntaxHighlighting as Mt}from"@codemirror/language";var X=[{name:"amy",title:"Amy",url:g+"amy.js",exportName:"amy"},{name:"aura",title:"Aura",url:S+"aura.js",exportName:"aura"},{name:"ayu-light",title:"Ayu Light",url:g+"ayu-light.js",exportName:"ayuLight"},{name:"barf",title:"Barf",url:g+"barf.js",exportName:"barf"},{name:"basic-light",title:"Basic Light",url:Fe,exportName:"basicLight"},{name:"basic-dark",title:"Basic Dark",url:We,exportName:"basicDark"},{name:"bespin",title:"Bespin",url:g+"bespin.js",exportName:"bespin"},{name:"birds-of-paradise",title:"Birds of Paradise",url:g+"birds-of-paradise.js",exportName:"birdsOfParadise"},{name:"boys-and-girls",title:"Boys and Girls",url:g+"boys-and-girls.js",exportName:"boysAndGirls"},{name:"catppuccin-latte",title:"Catppuccin Latte",url:v+"catppuccin/codemirror/codemirror-theme-catppuccin.js",exportName:"catppuccinLatte"},{name:"catppuccin-frappe",title:"Catppuccin Frappe",url:v+"catppuccin/codemirror/codemirror-theme-catppuccin.js",exportName:"catppuccinFrappe"},{name:"catppuccin-macchiato",title:"Catppuccin Macchiato",url:v+"catppuccin/codemirror/codemirror-theme-catppuccin.js",exportName:"catppuccinMacchiato"},{name:"catppuccin-mocha",title:"Catppuccin Mocha",url:v+"catppuccin/codemirror/codemirror-theme-catppuccin.js",exportName:"catppuccinMocha"},{name:"clouds",title:"Clouds",url:g+"clouds.js",exportName:"clouds"},{name:"cobalt",title:"Cobalt",url:g+"cobalt.js",exportName:"cobalt"},{name:"cm-light",title:"Codemirror Light"},{name:"cool-glow",title:"Cool Glow",url:g+"cool-glow.js",exportName:"coolGlow"},{name:"dracula",title:"Dracula",url:g+"dracula.js",exportName:"dracula"},{name:"espresso",title:"Espresso",url:g+"espresso.js",exportName:"espresso"},{name:"github-dark",title:"GitHub Dark",url:S+"github-dark.js",exportName:"githubDark"},{name:"github-light",title:"GitHub Light",url:S+"github-light.js",exportName:"githubLight"},{name:"gruvbox-dark",title:"Gruvbox Dark",url:ze,exportName:"gruvboxDark"},{name:"gruvbox-light",title:"Gruvbox Light",url:Oe,exportName:"gruvboxLight"},{name:"material-dark",title:"Material Dark",url:Ve,exportName:"materialDark"},{name:"material-light",title:"Material Light",url:S+"material-light.js",exportName:"materialLight"},{name:"monochrome",title:"Monochrome"},{name:"monochrome-dark",title:"Monochrome Dark"},{name:"noctis-lilac",title:"Noctis Lilac",url:g+"noctis-lilac.js",exportName:"noctisLilac"},{name:"nord",title:"Nord",url:_e,exportName:"nord"},{name:"one-dark",title:"One Dark"},{name:"rose-pine-dawn",title:"Ros\xE9 Pine Dawn",url:g+"rose-pine-dawn.js",exportName:"rosePineDawn"},{name:"smoothy",title:"Smoothy",url:g+"smoothy.js",exportName:"smoothy"},{name:"solarized-dark",title:"Solarized Dark",url:Ke,exportName:"solarizedDark"},{name:"solarized-light",title:"Solarized Light",url:Ge,exportName:"solarizedLight"},{name:"tokyo-night",title:"Tokyo Night",url:S+"tokyo-night.js",exportName:"tokyoNight"},{name:"tokyo-night-day",title:"Tokyo Night Day",url:S+"tokyo-night-day.js",exportName:"tokyoNightDay"},{name:"tokyo-night-storm",title:"Tokyo Night Storm",url:S+"tokyo-night-storm.js",exportName:"tokyoNightStorm"},{name:"tomorrow",title:"Tomorrow",url:g+"tomorrow.js",exportName:"tomorrow"}],Qe=({variant:t,settings:r,styles:a})=>{let m=Et.theme({"&":{backgroundColor:r.background,color:r.foreground},".cm-content":{caretColor:r.caret},".cm-cursor, .cm-dropCursor":{borderLeftColor:r.caret},"&.cm-focused .cm-selectionBackgroundm .cm-selectionBackground, .cm-selectionMatch, .cm-content ::selection":{backgroundColor:r.selection},".cm-activeLine":{backgroundColor:r.lineHighlight},".cm-gutters":{backgroundColor:r.gutterBackground,color:r.gutterForeground},".cm-activeLineGutter":{backgroundColor:r.lineHighlight}},{dark:t==="dark"}),h=Lt.define(a);return[m,Mt(h)]},Xe={monochrome:Qe({variant:"light",settings:{background:"#fffffe",foreground:"#24292e",caret:"#24292e",selection:"#c8c8fa",gutterBackground:"#fffffe",gutterForeground:"#24292e",lineHighlight:"#f1faff"},styles:[]}),"monochrome-dark":Qe({variant:"dark",settings:{background:"#24292e",foreground:"#e2e2e3",caret:"#e2e2e3",selection:"#444d56",gutterBackground:"#24292e",gutterForeground:"#e2e2e3",lineHighlight:"#444d56"},styles:[]})};import{LanguageSupport as St,StreamLanguage as wt}from"@codemirror/language";import{html as jt}from"@codemirror/lang-html";import{css as Ht}from"@codemirror/lang-css";import{javascript as I}from"@codemirror/lang-javascript";import{json as kt}from"@codemirror/lang-json";var x=t=>new St(wt.define(t)),c=t=>b+t,i={vue:c("codemirror-lang-vue.js"),svelte:c("codemirror-lang-svelte.js"),liquid:c("codemirror-lang-liquid.js"),json:c("codemirror-lang-json.js"),markdown:c("codemirror-lang-markdown.js"),python:c("codemirror-lang-python.js"),php:c("codemirror-lang-php.js"),java:c("codemirror-lang-java.js"),clike:c("codemirror-lang-clike.js"),mllike:c("codemirror-lang-mllike.js"),cpp:c("codemirror-lang-cpp.js"),sql:c("codemirror-lang-sql.js"),wast:c("codemirror-lang-wast.js"),scss:c("codemirror-lang-scss.js"),coffeescript:c("codemirror-lang-coffeescript.js"),livescript:c("codemirror-lang-livescript.js"),ruby:c("codemirror-lang-ruby.js"),go:c("codemirror-lang-go.js"),perl:c("codemirror-lang-perl.js"),lua:c("codemirror-lang-lua.js"),r:c("codemirror-lang-r.js"),julia:c("codemirror-lang-julia.js"),scheme:c("codemirror-lang-scheme.js"),clojure:c("codemirror-lang-clojure.js"),tcl:c("codemirror-lang-tcl.js"),less:c("codemirror-lang-less.js"),stylus:c("codemirror-lang-stylus.js"),rust:c("codemirror-lang-rust.js"),swift:c("codemirror-lang-swift.js")},Y={html:async()=>jt(),css:async()=>Ht(),javascript:async()=>I(),typescript:async()=>I({typescript:!0}),jsx:async()=>I({jsx:!0}),tsx:async()=>I({jsx:!0,typescript:!0}),json:async()=>kt(),vue:async()=>(await import(i.vue)).vue(),svelte:async()=>(await import(i.svelte)).svelte(),liquid:async()=>(await import(i.liquid)).liquid(),markdown:async()=>(await import(i.markdown)).markdown(),python:async()=>(await import(i.python)).python(),php:async()=>(await import(i.php)).php(),go:async()=>(await import(i.go)).go(),java:async()=>(await import(i.java)).java(),cpp:async()=>(await import(i.cpp)).cpp(),sql:async()=>(await import(i.sql)).sql(),wat:async()=>(await import(i.wast)).wast(),scss:async()=>(await import(i.scss)).sass(),sass:async()=>(await import(i.scss)).sass({indented:!0}),coffeescript:async()=>x((await import(i.coffeescript)).coffeeScript),livescript:async()=>x((await import(i.livescript)).liveScript),ruby:async()=>x((await import(i.ruby)).ruby),perl:async()=>x((await import(i.perl)).perl),lua:async()=>x((await import(i.lua)).lua),r:async()=>x((await import(i.r)).r),julia:async()=>x((await import(i.julia)).julia),scheme:async()=>x((await import(i.scheme)).scheme),clojure:async()=>x((await import(i.clojure)).clojure),tcl:async()=>x((await import(i.tcl)).tcl),less:async()=>x((await import(i.less)).less),stylus:async()=>x((await import(i.stylus)).stylus),csharp:async()=>x((await import(i.clike)).csharp),ocaml:async()=>x((await import(i.mllike)).oCaml),rust:async()=>x((await import(i.rust)).rust),swift:async()=>x((await import(i.swift)).swift)};var N=[],re,D=!1,Ft=Ae(()=>D=!D,50),vo=async t=>{let{container:r,readonly:a,isEmbed:m,editorId:h,getFormatterConfig:T,getFontFamily:u,getLanguageExtension:ot}=t,d={...t};if(!r)throw new Error("editor container not found");let ne=async e=>Y[e]?.()||Y.html?.(),R=e=>e.startsWith("vue")?"vue":e.startsWith("svelte")?"svelte":e==="liquid"?"liquid":t.mapLanguage?.(e)||e,q={"one-dark":Ut,"cm-light":[tt(It),H.theme({"&":{backgroundColor:"#ffffff"}})],...Xe},se={dark:"one-dark",light:"cm-light"},ce=()=>q[ie]||q[se[t.theme]]||[],k=t.language,E=R(k),P=await ne(E),ie=await ke(t.theme,t.editorTheme),U=[],$=[],rt=e=>{e.docChanged&&$.forEach(o=>o(e))},L,F,W,O,z,V,le=e=>E==="typescript"?e:E==="javascript"?e.slice(0,-1):[],ae,me=new Promise(e=>ae=e),pe=async(e=!1)=>{let o=L&&e?"changeCodeMirrorLanguage":"initCodeMirrorTS";if(e&&(L=void 0),!["typescript","javascript"].includes(E)||L)return;let n=`${b}codemirror-ts.js`,[l,p,f]=await Promise.all([import(n),import(Je+"esm/comlink.min.js"),window.compiler.typescriptFeatures({feature:o,payload:k})]),{tsFacetWorker:M,tsSyncWorker:C,tsLinterWorker:Q,tsAutocompleteWorker:B,tsHoverWorker:dt}=l;if(!re){let Ue=document.querySelector("#compiler-frame");if(!Ue?.contentWindow)return;let Ce=p.wrap(p.windowEndpoint(Ue.contentWindow));await Ce.initialize(),re=Ce}let gt=Ne(),A=ot(k),xt=E==="typescript"&&!A?.endsWith("ts")&&!A?.endsWith("tsx")?A+".tsx":A,ht=`/${h}.${gt}.${xt}`;L=L||[M.of({worker:re,path:ht}),C(),vt({override:[B()]}),dt(),Q()],s.dispatch({effects:[ge.reconfigure(le(L))]})},nt=e=>{me.then(()=>{window.compiler.typescriptFeatures({feature:"addTypes",payload:e})})},ue=async e=>{let o={vim:`${b}codemirror-vim.js`,emacs:`${b}codemirror-emacs.js`,emmet:`${b}codemirror-emmet.js`,codeium:`${b}codemirror-codeium.js`,lineNumbersRelative:`${b}codemirror-line-numbers-relative.js`},[n,l,p,f,M]=await Promise.all([e.editorMode==="vim"?import(o.vim):Promise.resolve({}),e.editorMode==="emacs"?import(o.emacs):Promise.resolve({}),e.emmet?import(o.emmet):Promise.resolve({}),e.enableAI?import(o.codeium):Promise.resolve({}),e.lineNumbers==="relative"?import(o.lineNumbersRelative):Promise.resolve({})]);F=n.vim,W=l.emacs,O=p.emmet,z=f.codeium,V=M.lineNumbersRelative};await ue(t);let de=new j,ge=new j,xe=new j,he=new j,_=H.editable.of(!1),ye=new j,st=new j,fe=new j,ct=At.define([{tag:Dt.comment,fontStyle:"italic"}]),Te=e=>{let o=(e.fontSize??d.fontSize)||(m?12:14),n=u(e.fontFamily??d.fontFamily),l=e.tabSize??d.tabSize,p=e.useTabs??d.useTabs,f=e.wordWrap??d.wordWrap,M=e.emmet??d.emmet,C=e.lineNumbers??d.lineNumbers,Q=e.enableAI??d.enableAI,B=e.editorMode??d.editorMode;return[te.tabSize.of(l),Nt.of(p?" ":" ".repeat(l)),...f?[H.lineWrapping]:[],...B==="vim"&&F?[F()]:B==="emacs"&&W?[W()]:[],...M&&O?[O]:[],...C==="relative"&&V?[V()]:C&&ee?[ee()]:[],...Q&&z?[z(N,R)]:[],H.theme({"&":{height:"100%",fontSize:o+"px"},".cm-scroller":{overflow:"auto",fontFamily:n}})]},be=()=>{let e=[de.of(P),ge.of(["typescript","javascript"].includes(E)&&L?le(L):[]),H.updateListener.of(rt),he.of(ce()),tt(ct),ye.of(Te({})),xe.of(oe.of(U)),fe.of(d.closeBrackets?Ye():[]),qt,a?_:[],oe.of(Pt),Rt(),$t],o=[_,...e],n=[_,...e],l=[...e];return h==="console"?l:h==="compiled"?n:t.mode==="codeblock"?o:e},Ee=async e=>{let o=Be(),n=l=>{o&&(o.textContent=l)};e||n(""),e==="vim"&&n("Vim"),e==="emacs"&&n("Emacs")},s=new H({state:te.create({extensions:be(),doc:t.value}),parent:r});Ee(t.editorMode);let it=()=>h,G=()=>s.state.doc.toString(),K=(e="",o=!0)=>{o?s.setState(te.create({doc:e,extensions:be()})):s.dispatch({changes:{from:0,to:s.state.doc.length,insert:e}})},Le=()=>s.focus(),Me=()=>k,lt=(e,o)=>{k=e,E=R(k),ne(E).then(n=>{P=n,s.dispatch({effects:[de.reconfigure(P)]})}),me.then(()=>{pe(!0)}),o!=null&&K(o)},Se={editorId:h,getLanguage:Me,getValue:G};N.push(Se),pe().then(()=>{ae()});let at=e=>{$.push(e)},we={CtrlEnter:"Ctrl-Enter",ShiftEnter:"Shift-Enter",Enter:"Enter",UpArrow:"ArrowUp",DownArrow:"ArrowDown",ShiftAltF:"Shift-Alt-f"},J=(e,o,n)=>{U.push({key:o,run(){return n(),!0}}),s.dispatch({effects:xe.reconfigure(oe.of(U))})},je=e=>{e.code==="KeyM"&&Ie(e)&&(e.preventDefault(),Ft(),setTimeout(()=>{s.setTabFocusMode?.(D)},70))};s.setTabFocusMode(D),addEventListener("keydown",je);let Z,mt=e=>{e&&(Z=e,J("format",we.ShiftAltF,async()=>{await He(),Le()}))},He=async()=>{if(!Z)return;let e=s.state.selection.main.to,o=G(),n=await Z(o,e,T());K(n.formatted,!1);let l=n.cursorOffset>=0?n.cursorOffset:0;s.dispatch({selection:{anchor:l}})};async function ke(e,o){let n=Ze({editor:"codemirror",editorTheme:o,theme:e,editorThemes:X.map(f=>f.name)}),l=n||se[e],p=X.find(f=>f.name===l);if(!q[l]&&p?.url){let f=(await import(p.url))[p.exportName||"default"];q[l]=f}return l}let ve=(e,o)=>{ke(e,o).then(n=>{ie=n,s.dispatch({effects:he.reconfigure(ce())})})},pt=e=>{d={...e},ue(d).then(()=>{s.dispatch({effects:[ye.reconfigure(Te(d)),st.reconfigure(d.lineNumbers?ee():[]),fe.reconfigure(d.closeBrackets?Ye():[])]}),ve(d.theme,d.editorTheme),Ee(d.editorMode)})},ut=()=>{Bt({state:s.state,dispatch:s.dispatch})},qe=()=>{Ct({state:s.state,dispatch:s.dispatch})};return J("redo","Mod-Shift-z",qe),{getValue:G,setValue:K,getLanguage:Me,setLanguage:lt,getEditorId:it,focus:Le,getPosition:()=>{let e=s.state.selection.asSingle().ranges[0].from,o=s.state.doc.lineAt(e),n=o.number,l=e-o.from+1;return{lineNumber:n,column:l}},setPosition:({lineNumber:e,column:o=1})=>{let n=o-1,l=s.state.doc.lines>e?e:s.state.doc.lines,p=s.state.doc.line(l),f=p.length>n?n:p.length,M=p.from+f;s.dispatch({selection:{anchor:M},effects:[H.scrollIntoView(M,{x:"center",y:"center"})]})},foldRegions:()=>{let e=s.state.doc.toString(),o=/\/\/#region[\s\S]*?\/\/#endregion/g,n;for(;(n=o.exec(e))!==null;){let l=n.index+e.slice(n.index).indexOf(`
|
|
`),p=n.index+n[0].length;s.dispatch({effects:et.of({from:l,to:p})})}},foldLines:e=>{e.forEach(o=>{let n=0,l=s.state.doc.length;if(!(o.from<0||o.to<0||o.from>o.to))try{if(o.from&&(n=s.state.doc.line(o.from).from),o.to){let p=s.state.doc.line(o.to);l=p.from+p.length}s.dispatch({effects:et.of({from:n,to:l})})}catch{}})},addTypes:nt,onContentChanged:at,keyCodes:we,addKeyBinding:J,changeSettings:pt,registerFormatter:mt,format:He,isReadonly:a,setTheme:ve,undo:ut,redo:qe,destroy:()=>{$.length=0,U.length=0,s.destroy(),r.innerHTML="",N.splice(N.indexOf(Se),1),removeEventListener("keydown",je)},codemirror:s}};export{vo as createEditor};
|