+ ${b}
+ ${s&&"pkg"===l.name?i.html`<${ho} value=${null==o||null===(r=o.terminal_outputs)||void 0===r?void 0:r.nbpkg_sync} />`:s&&"backend_launch"===l.name?i.html`<${ho} value=${a} />`:void 0}
+ `},Eo=e=>/^\d+$/.test(e),$o=(e,t)=>{const n=bo.indexOf(e.name),o=bo.indexOf(t.name);if(-1===n&&-1===o)return null!=e.started_at||null!=t.started_at?(e.started_at??1/0)-(t.started_at??1/0):Eo(e.name)&&Eo(t.name)?parseInt(e.name)-parseInt(t.name):e.name.localeCompare(t.name);{let e=e=>-1===e?1/0:e;return e(n)-e(o)}},xo=e=>null!=e.finished_at,So=e=>null!=e.started_at,No=e=>So(e)&&!xo(e),Co=e=>Object.values(e.subtasks).reduce(((e,t)=>e+Co(t)),xo(e)?1:0),Ao=e=>Object.values(e.subtasks).reduce(((e,t)=>e+Ao(t)),1),Mo=(e,t,n,o={})=>({name:e,subtasks:o,timing:"local",started_at:i.useMemo((()=>t||n?Date.now()/1e3:null),[t||n]),finished_at:i.useMemo((()=>n?Date.now()/1e3:null),[n])}),Oo=(e,t)=>{const n=i.useRef(t);i.useEffect((()=>{let o=e(n.current);return n.current=t,o}),t)};i=r("cNaMA");ue=r("4zMEb");var To=r("41Mhf");const Ro={wait_for_user:0,requesting:.4,created:.6,responded:.7,notebook_running:.9,ready:1},Lo=e=>e.endsWith("/")?e:e+"/",Do=e=>fetch(`https://stats.plutojl.org/count?p=/${e}&s=${screen.width},${screen.height},${devicePixelRatio}#skip_sw`,{cache:"no-cache"}).catch((()=>{})),Io=async({setStatePromise:e,connect:t,launch_params:n})=>{try{Do("binder-start"),await e(ce((e=>{e.backend_launch_phase=Ro.requesting,e.disable_ui=!1,e.notebook.status_tree=null})));const{binder_session_url:o,binder_session_token:a}=await((e,{on_log:t})=>new Promise(((n,o)=>{console.log("Starting binder connection to",e);try{let a=new EventSource(e);a.onerror=t=>{console.error("Binder error: Lost connection to "+e,t),a.close(),o(t)};let r=null,i="",l=e=>{console.log("Binder: ",e,` at ${(new Date).toLocaleTimeString()}`),i=`${i}${e}\n`,t(i)};a.onmessage=t=>{let i=JSON.parse(t.data);switch(i.phase&&i.phase!==r&&(r=i.phase.toLowerCase(),l(`\n\n⏱️ Binder subphase: ${r}\n`)),i.message&&l(i.message.replace("] ","]\n")),i.phase){case"failed":console.error("Binder error: Failed to build",e,i),a.close(),o(new Error(i));break;case"ready":a.close(),n({binder_session_url:Lo(i.url)+"pluto/",binder_session_token:i.token})}}}catch(e){console.error(e),o("Failed to open event source the mybinder.org. This probably means that the URL is invalid.")}})))(n.binder_url.replace("mybinder.org/v2/","mybinder.org/build/"),{on_log:t=>e(ce((e=>{e.backend_launch_logs=t})))}),r=e=>To.with_query_params(e,{token:a});console.log("Binder URL:",r(o)),window.shutdown_binder=()=>{fetch(r(new URL("../api/shutdown",o)),{method:"POST"})},await e(ce((e=>{e.backend_launch_phase=Ro.created,e.binder_session_url=o,e.binder_session_token=a}))),await fetch(r(o)),await e(ce((e=>{e.backend_launch_phase=Ro.responded})));let i=async()=>{const e=r(To.with_query_params(new URL("notebookupload",o),{name:new URLSearchParams(window.location.search).get("name"),execution_allowed:"true"}));return console.log("downloading locally and uploading ",e,n.notebookfile),fetch(e,{method:"POST",body:await(await fetch(new Request(n.notebookfile,{integrity:n.notebookfile_integrity}))).arrayBuffer()})},l=async(e,t)=>{const n=To.with_query_params(new URL("open",o),{[e]:t});return console.log(`open ${e}:`,n),fetch(r(n),{method:"POST"})},s=(e,t)=>()=>l(e,t),c=n.notebookfile.startsWith("data:")?[i]:[s("path",n.notebookfile),s("url",new URL(n.notebookfile,window.location.href).href),i],d=new Response;for(let e of c)if(d=await e(),d.ok)break;if(!d.ok){let e=await d.blob();return void(window.location.href=URL.createObjectURL(e))}const u=await d.text(),p=r(To.with_query_params(new URL("edit",o),{id:u}));console.info("notebook_id:",u),await e(ce((e=>{e.notebook.notebook_id=u,e.backend_launch_phase=Ro.notebook_running,e.refresh_target=p}))),console.log("Connecting WebSocket");const m=t(r(new URL("channels",ue.ws_address_from_base(o))));await ue.timeout_promise(m,2e4).catch((e=>{console.error("Failed to establish connection within 20 seconds. Navigating to the edit URL directly.",e),window.parent.location.href=p}))}catch(e){console.error("Failed to initialize binder!",e),alert("Something went wrong! 😮\n\nWe failed to initialize the binder connection. Please try again with a different browser, or come back later.")}};var Po=r("hrGZZ");const jo=e=>window.dispatchEvent(new CustomEvent("open_bottom_right_panel",{detail:e}));let Bo=({desired_doc_query:e,on_update_doc_query:t,notebook:n,connected:o,backend_launch_phase:a,backend_launch_logs:r,sanitize_html:l=!0})=>{let s=i.useRef();const c=i.useRef(!1),[d,u]=i.useState(null),p=null==d;Po.useEventListener(window,"open_bottom_right_panel",(e=>{console.log(e.detail),c.current=!1,u(e.detail),"none"===window.getComputedStyle(s.current).display&&alert("This browser window is too small to show docs.\n\nMake the window bigger, or try zooming out.")}),[u]);const m=Fo(n,a),[g,h]=i.useMemo((()=>null==m?[0,0]:[Ao(m)-1,Co(m)-(xo(m)?1:0)]),[m]),f=h{let t=i.useContext(we);const[n,o]=i.useState(0);return i.useEffect((()=>{if(e){let e=async()=>{let e=()=>t.send("current_time").then((e=>e.message.time)),n=()=>Date.now()/1e3;for(let t=0;t<16;t++)await e();let a=await n(),r=await e(),i=await e(),l=(a+await n())/2-(r+i)/2;isNaN(l)||o(l)};e();let n=setInterval(e,6e4);return()=>clearInterval(n)}}),[e]),n})({connected:o});return i.html`
+
+ `};const Uo=(e,t)=>{const[n,o]=i.useState(!1);return i.useEffect((()=>{if(e){let e=setTimeout((()=>{o(!0)}),t);return()=>clearTimeout(e)}o(!1)}),[e]),n},Fo=(e,t)=>{var n;const o=zo(t);return null==t?e.status_tree:{name:"notebook",started_at:0,finished_at:null,subtasks:{...null===(n=e.status_tree)||void 0===n?void 0:n.subtasks,backend_launch:o}}},zo=e=>{let t=e??-1;const n=Object.fromEntries(["requesting","created","responded","notebook_running"].map((e=>{let n=Ro[e],o=`backend_${e}`;return[o,Mo(o,t>=n,t>n)]})));return Mo("backend_launch",null!=e&&e>Ro.wait_for_user,e===Ro.ready,n)};let{autocompletion:qo,completionKeymap:Ho,completionStatus:Wo,acceptCompletion:Go,selectedCompletion:Ko}=Nt.autocomplete;const Zo=qo()[1];const Vo=[{key:"Tab",run:e=>{if(Go(e))return!0;if(e.state.readOnly)return!1;let t=e.state.selection.main;if(!t.empty)return!1;let n=e.state.sliceDoc(t.from-1,t.from),o=e.state.sliceDoc(e.state.doc.lineAt(t.from).from,t.from);return!"\t \n=".includes(n)&&(!(")"===n&&!o.includes("?"))&&Nt.autocomplete.startCompletion(e))}},{key:"?",run:e=>null!=Nt.autocomplete.completionStatus(e.state)&&(jo("docs"),!0)},{key:".",run:e=>(Go(e),!1)}];let Qo=e=>Nt.EditorView.updateListener.of((t=>{if(null==Ko(t.state))return;let n=t.state.field(Zo,!1),o=null==n?void 0:n.open;if(null==o)return;let a=o.options[o.selected],r=a.completion.apply??a.completion.label;if("string"!=typeof r)return;const i=t.view.state.field(Zo).active.find((e=>e.source==a.source));if(!(null==i?void 0:i.from))return;const l=i.from,s=Math.min(i.to,t.state.doc.length);let c=t.state.update({changes:{from:l,to:s,insert:r}}),d=qn(c.state);null!=d&&e(d)}));const Xo=e=>e.matchBefore(/\\[\d\w_\^:]*/);let Yo=e=>/^[@\p{L}\p{Sc}\d_][\p{L}\p{Nl}\p{Sc}\d_!]*"?$/u.test(e)?null:":"===e?`:(${e})`:`:${e}`;const Jo={name:"Suggestions",header:()=>document.createElement("div"),rank:0},ea={name:"Operators",rank:1},ta=(e,t)=>3*t+(/^\p{Ll}/u.test(e)?2:/^\p{Lu}/u.test(e)?1:0),na=[".",",","(","[","{"],oa=/^(.*\s)?(baremodule|begin|break|catch|const|continue|do|else|elseif|end|export|false|finally|for|function|global|if|import|let|local|macro|module|quote|return|struct|true|try|using|while)$/,aa=e=>/[\p{L}\p{Nl}\p{Sc}\d_!]*$/u.test(e)&&!oa.test(e),ra=e=>async t=>{if(Xo(t))return null;if(!t.explicit&&la(t))return null;if(!t.explicit&&null!=t.tokenBefore(["Number","Comment","String","TripleString"]))return null;let n=t.state.sliceDoc(0,t.pos),o=(e=>e.matchBefore(/\.\:[^\s"'`()\[\].]*/))(t);o&&(n=n.slice(0,o.from+1)+n.slice(o.from+2));const a=t.state.facet(Gn);let r=await e({text:n});if(!r)return null;let{start:i,stop:l,results:s}=r;o&&(l+=1);const c=n.slice(0,i).endsWith("."),d=null!=t.matchBefore(/\~[^\s\"]*/);return{from:i,to:l,validFor:aa,commitCharacters:na,filter:!d,options:[...s.filter((([e,n,o,r,i])=>(t.explicit||"path"!=i)&&!(r&&(e=>null!=e&&Object.keys(a).includes(e))(e)))).map((([e,t,o,a,r,i],l)=>{let s="method"===r?n:c?Yo(e)??e:e;return t="Function"===t&&e.startsWith("@")?"Macro":t,{label:e,apply:s,type:ye.cl({c_notexported:!o,[`c_${t}`]:!0,[`completion_${r}`]:!0,c_from_notebook:a})??void 0,section:Jo,boost:"keyword_argument"===r?7:c?ta(s,o):void 0}})),...s.filter((([e])=>c&&null!=Yo(e))).map((([e,t,n],o)=>{let a=Yo(e)??"";return{label:a,apply:a,type:(n?"":"c_notexported ")+(null==t?"":"c_"+t),section:ea,is_not_exported:!n}}))]}},ia=async e=>{var t;if(Xo(e))return null;if(!e.explicit&&la(e))return null;if(!e.explicit&&null!=e.tokenBefore(["Number","Comment","String","TripleString"]))return null;const n=await Nt.autocomplete.completeAnyWord(e);if(null===n)return null;const o=e.tokenBefore(["Identifier","Number"]);return null==o||"Number"===(null===(t=o.type)||void 0===t?void 0:t.name)?null:{from:n.from,commitCharacters:na,options:n.options.map((({label:e},t)=>({label:e,apply:e,type:void 0,section:Jo})))}},la=e=>{let t=e.matchBefore(oa),n=e.matchBefore(/(catch|local|module|abstract type|struct|macro|const|for|function|let|do) ([@\p{L}\p{Nl}\p{Sc}\d_!,\(\)]|, )*$/u),o=e.matchBefore(/do [\(\), \p{L}\p{Nl}\p{Sc}\d_!]*$/u);return t||n||o},sa=async e=>{if(Xo(e))return null;if(!e.explicit&&la(e))return null;if(!e.explicit&&null!=e.tokenBefore(["Number","Comment","String","TripleString"]))return null;const t=e.state.facet(Gn);if(e.matchBefore(/\.[\p{L}\p{Nl}\p{Sc}\d_!]*$/u))return null;const n=await Nt.autocomplete.completeFromList(Object.keys(t).map((e=>({label:e,apply:e,type:"c_from_notebook completion_module c_Any",section:Jo}))))(e);return null==n?null:{...n,validFor:aa,commitCharacters:na}},ca=["\\sqrt","\\pi","\\approx"],da=["🐶","🐱","🐭","🐰","🐼","🐨","🐸","🐔","🐧"],ua=(e,t,n,o)=>{const a=e.state.sliceDoc(n,o);let r=t.detail??t.label;if(!t.label.startsWith("\\:")&&a!==t.label){(function(e,t){const n=Nt.syntaxTree(e).resolve(t);return null!=n&&("TripleString"===n.name||"String"===n.name)})(e.state,o)&&(r=t.label)}e.dispatch({changes:{from:n,to:o,insert:r},annotations:Nt.autocomplete.pickedCompletion.of(t)})},pa=e=>{let t=null;return async n=>{if(!Xo(n))return null;if(!n.explicit&&la(n))return null;if(!n.explicit&&null!=n.tokenBefore(["Number","Comment"]))return null;const o=await(async()=>{if(null==t){const n=await e().catch((e=>(console.warn("Failed to fetch special symbols",e),null)));if(null!=n){const{latex:e,emoji:o}=n;t=[o,e].flatMap((e=>Object.entries(e).map((([e,t])=>({label:e,apply:ua,detail:t??void 0,type:"c_special_symbol",boost:"\\in"===e?3:ca.includes(e)?2:da.includes(t)?1:0})))))}}return t})();return await Nt.autocomplete.completeFromList(o??[])(n)}};Nt.EditorView.updateListener.of((e=>{for(let n of e.transactions){var t;let o=n.annotation(Nt.autocomplete.pickedCompletion);o&&"string"==typeof o.apply&&o.apply.endsWith("/")&&(null===(t=o.type)||void 0===t?void 0:t.match(/(^| )completion_path( |$)/))&&Nt.autocomplete.startCompletion(e.view)}}));let ma=({request_autocomplete:e,request_special_symbols:t,on_update_doc_query:n})=>{let o=null,a=null;return[qo({activateOnTyping:Ja,override:[sa,pa(t),ra((async t=>{if(de.default.isEqual(t,o)){let e=await a;if(null!=e)return e}return o=t,a=e(t),await a})),ia],defaultKeymap:!1,maxRenderedOptions:512,optionClass:e=>e.type??""}),Qo(n),Nt.keymap.of(Vo),Nt.keymap.of(Ho)]};de=r("9Ta4i"),Nt=r("hiQgq"),lo=r("1gqBQ"),de=r("9Ta4i"),i=r("cNaMA");const ga=e=>null==e?[null]:Object.entries(e).flat(),ha=({nbpkg:e,package_name:t,available_versions:n,is_disable_pkg:o})=>{let a="error",r="error",l=i.html`error`,s=!1;const c=(null==e?void 0:e.installed_versions[t])??null,d=(null==e?void 0:e.waiting_for_permission)??!1,u=!d&&(((null==e?void 0:e.busy_packages)??[]).includes(t)||!((null==e?void 0:e.instantiated)??1));if(o){const e=t;a="disable_pkg",r=`${e} disables Pluto's built-in package manager.`,l=i.html`${e} disables Pluto's built-in package manager.`}else null!=c||de.default.isEqual(n,["stdlib"])?null==c||"stdlib"===c?(a="installed",r=`${t} is part of Julia's pre-installed 'standard library'.`,l=i.html`${t} is part of Julia's pre-installed standard library.`):d?(a="will_be_installed",r=`${t} (v${de.default.last(n)}) will be installed when you run this notebook.`,l=i.html`${t}v${de.default.last(n)}
+ will be installed when you run this notebook.`):u?(a="busy",r=`${t} (v${c}) is installing...`,l=i.html`${t}v${c}
+ is installing...`):(a="installed",r=`${t} (v${c}) is installed in the notebook.`,l=i.html`${t}v${c}
+ is installed in the notebook.`,m=n,s=!("stdlib"===(p=c)||!de.default.isArray(m))&&de.default.last(m)!==p):null!=n&&de.default.isArray(n)&&(0===n.length?(a="not_found",r=`The package "${t}" could not be found in the registry. Did you make a typo?`,l=i.html`The package "${t}" could not be found in the registry.
+ Did you make a typo?`):(a="will_be_installed",r=`${t} (v${de.default.last(n)}) will be installed in the notebook when you run this cell.`,l=i.html`${t}v${de.default.last(n)}
+ will be installed in the notebook when you run this cell.`));var p,m;return{status:a,hint:l,hint_raw:r,available_versions:n,chosen_version:c,busy:u,offer_update:s}},fa=({package_name:e,pluto_actions:t,notebook_id:n,nbpkg:o})=>{const[a,r]=i.useState(null);i.useEffect((()=>{(t.get_avaible_versions({package_name:e,notebook_id:n})??Promise.resolve([])).then((e=>{r(e)}))}),[e]);const{status:l,hint_raw:s}=ha({nbpkg:o,package_name:e,is_disable_pkg:!1,available_versions:a});return i.html`
+
+
+
+ `},_a=({package_name:e})=>{const{hint_raw:t}=ha({nbpkg:null,package_name:e,is_disable_pkg:!0,available_versions:null});return i.html`
+
+
+
+ `};i=r("cNaMA"),i=r("cNaMA"),Nt=r("hiQgq");class ba extends Nt.WidgetType{constructor(e){super(),this.element=e}eq(e){return!1}toDOM(){let e=document.createElement("span");return i.render(this.element,e),e}updateDOM(e){return i.render(this.element,e),!0}}const va=["Pkg.activate","Pkg.API.activate","Pkg.develop","Pkg.API.develop","Pkg.add","Pkg.API.add","quickactivate","@quickactivate"];function ya(e,{pluto_actions:t,notebook_id:n,nbpkg:o}){let a=new Set,r=e.visibleRanges.flatMap((({from:r,to:l})=>{let s=function({doc:e,tree:t,from:n,to:o}){let a=0,r=[];return function({tree:e,enter:t,leave:n,from:o=0,to:a=e.length}){let r=e.cursor();for(;;){let e=!1;if(r.from<=a&&r.to>=o&&(r.type.isAnonymous||!1!==t(r))){if(r.firstChild())continue;r.type.isAnonymous||(e=!0)}for(;e&&n&&n(r),e=r.type.isAnonymous,!r.nextSibling();){if(!r.parent())return;e=!0}}}({tree:t,from:n,to:o,enter:t=>{if("QuoteExpression"!==t.name&&"QuoteStatement"!==t.name||a++,"InterpolationExpression"===t.name&&a--,0!==a)return;if("CallExpression"===t.name||"MacroExpression"===t.name){let n=t.node.firstChild,o=e.sliceString(n.from,n.to);return void(va.includes(o)&&r.push({type:"package_disabler",name:o,from:t.to,to:t.to}))}let n=fn((e=>an`import A, ${e}`)),o=e=>{let t=null;return(t=n(ln`${pn.as("package")}.${pn.any}`).match(e))?o(t.package):(t=n(ln`.${pn.maybe(pn.any)}`).match(e))?null:(t=n(ln`${pn.Identifier}`).match(e))?e:void console.warn("Unknown nested import specifier: "+e.toString())},i=null;if((i=sn(ln`import ${pn.as("specifier")}: ${pn.many()}`).match(t))??(i=sn(ln`import ${pn.as("specifier")}, ${pn.many("specifiers")}`).match(t))??(i=sn(ln`using ${pn.as("specifier")}: ${pn.many()}`).match(t))??(i=sn(ln`using ${pn.as("specifier")}, ${pn.many("specifiers")}`).match(t))){let{specifier:a,specifiers:l=[]}=i;a&&(l=[{node:a},...l]);for(let{node:t}of l){t=gn(t);let a=null;if(a=n(ln`${pn.as("package")} as ${pn.maybe(pn.any)}`).match(t)){let t=o(a.package);t&&r.push({type:"package",name:e.sliceString(t.from,t.to),from:t.to,to:t.to})}else if(a=n(ln`${pn.as("package")}.${pn.any}`).match(t)){let t=o(a.package);t&&r.push({type:"package",name:e.sliceString(t.from,t.to),from:t.to,to:t.to})}else if(a=n(ln`.${pn.as("scoped")}`).match(t));else if(a=n(ln`${pn.as("package")}`).match(t)){let t=o(a.package);t&&r.push({type:"package",name:e.sliceString(t.from,t.to),from:t.to,to:t.to})}else console.warn("Unknown import specifier: "+t.toString())}if(i=null,i=sn(ln`using ${pn.as("specifier")}, ${pn.many("specifiers")}`).match(t)){let{specifier:t}=i;t&&("\n"!==e.sliceString(t.to,t.to+1)&&""!==e.sliceString(t.to,t.to+1)||r.push({type:"implicit_using",name:e.sliceString(t.from,t.to),from:t.to,to:t.to}))}return!1}if("ImportStatement"===t.name)throw new Error("What")},leave:e=>{"QuoteExpression"!==e.name&&"QuoteStatement"!==e.name||a--,"InterpolationExpression"===e.name&&a++}}),r}({doc:e.state.doc,tree:Nt.syntaxTree(e.state),from:r,to:l});return s.map((e=>{if("package"===e.type){let{name:r}=e;if("Base"!==r&&"Core"!==r&&!a.has(r)){return a.add(r),Nt.Decoration.widget({widget:new ba(i.html`
+ <${fa}
+ key=${r}
+ package_name=${r}
+ pluto_actions=${t}
+ notebook_id=${n}
+ nbpkg=${o}
+ />
+ `),side:1}).range(e.to)}}else{if("package_disabler"===e.type){return Nt.Decoration.widget({widget:new ba(i.html` <${_a} package_name=${e.name} /> `),side:1}).range(e.to)}if("implicit_using"===e.type&&"HypertextLiteral"===e.name){return Nt.Decoration.widget({widget:new ba(i.html`
+
+ : @htl, @htl_str
+
+ `),side:1}).range(e.to)}}}))})).filter((e=>null!=e));return Nt.Decoration.set(r,!0)}const wa=Nt.Facet.define({combine:e=>e[0],compare:de.default.isEqual}),ka=({pluto_actions:e,notebook_id_ref:t})=>Nt.ViewPlugin.fromClass(class{update_decos(n){const o=ya(n,{pluto_actions:e,notebook_id:t.current,nbpkg:n.state.facet(wa)});this.decorations=o}constructor(e){this.update_decos(e)}update(e){(e.docChanged||e.viewportChanged||e.state.facet(wa)!==e.startState.facet(wa))&&this.update_decos(e.view)}},{decorations:e=>e.decorations});de=r("9Ta4i"),Nt=r("hiQgq"),i=r("cNaMA");const Ea=e=>{var t;return(null===(t=/^\t*/.exec(e))||void 0===t?void 0:t[0])??""},$a=e=>{let t=[];for(let n of de.default.range(0,e.doc.lines)){let o=e.doc.line(n+1);const a=Ea(o.text).length;if(0===a)continue;const r=Math.min(a,12),l=r*e.tabSize,s=Nt.Decoration.line({attributes:{style:`--indented: ${l}ch;`,class:"awesome-wrapping-plugin-the-line"}});if(t.push(s.range(o.from,o.from)),r>0&&t.push(Nt.Decoration.mark({class:"awesome-wrapping-plugin-the-tabs"}).range(o.from,o.from+r)),a>r)for(let e of de.default.range(r,a))t.push(Nt.Decoration.replace({widget:new ba(i.html`⇥ `),block:!1}).range(o.from+e,o.from+e+1))}return Nt.Decoration.set(t)},xa=Nt.StateField.define({create:e=>$a(e),update:(e,t)=>t.docChanged?$a(t.state):e,provide:e=>Nt.EditorView.decorations.from(e)});Nt=r("hiQgq");let Sa=Nt.EditorView.domEventHandlers({keydown:(e,t)=>{let n=t.state.selection.main;if(!n.empty)return!1;if(!e.repeat)return!1;if("Backspace"===e.key&&0===t.state.doc.length)return!0;if("Delete"===e.key&&0===t.state.doc.length)return!0;let o="active"===Nt.autocomplete.completionStatus(t.state);return"ArrowUp"!==e.key||o?"ArrowDown"!==e.key||o?"ArrowLeft"===e.key&&e.repeat?!!t.moveByChar(n,!1).eq(n):"ArrowRight"===e.key?!!t.moveByChar(n,!0).eq(n):void 0:!!t.moveVertically(t.state.selection.main,!0).eq(n):!!t.moveVertically(t.state.selection.main,!1).eq(n)}}),Na=({focus_on_neighbor:e})=>(({focus_on_neighbor:e})=>Nt.keymap.of([{key:"PageUp",run:()=>(e({cell_delta:-1,line:0,character:0}),!0)},{key:"PageDown",run:()=>(e({cell_delta:1,line:0,character:0}),!0)},{key:"ArrowLeft",run:t=>{let n=t.state.selection.main;return!!n.empty&&!!t.moveByChar(n,!1).eq(n)&&(e({cell_delta:-1,line:1/0,character:1/0}),!0)}},{key:"ArrowUp",run:t=>{let n=t.state.selection.main;return!!n.empty&&!!t.moveVertically(n,!1).eq(n)&&(e({cell_delta:-1,line:1/0,character:1/0}),!0)}},{key:"ArrowRight",run:t=>{let n=t.state.selection.main;return!!n.empty&&!!t.moveByChar(n,!0).eq(n)&&(e({cell_delta:1,line:0,character:0}),!0)}},{key:"ArrowDown",run:t=>{let n=t.state.selection.main;return!!n.empty&&!!t.moveVertically(n,!0).eq(n)&&(e({cell_delta:1,line:0,character:0}),!0)}}]))({focus_on_neighbor:e});Nt=r("hiQgq");let Ca=({pluto_actions:e,cell_id:t})=>Nt.EditorView.domEventHandlers({paste:(n,o)=>{if(!o.hasFocus)return console.log("CodeMirror, why are you registring this paste? You aren't focused!"),!0;n.stopPropagation();const a=n.clipboardData.getData("text/plain"),r=be(a);return null!=r&&(0===o.state.selection.main.from&&o.state.selection.main.to===o.state.doc.length?(e.add_deserialized_cells(a,t,r),e.confirm_delete_multiple("This Should Never Be Visible",[t]),!0):(o.state.selection.main.to===o.state.doc.length||0===o.state.selection.main.from)&&(e.add_deserialized_cells(a,t,r),!0))}});Nt=r("hiQgq"),Nt=r("hiQgq"),Nt=r("hiQgq");function Aa(e){var t,n,o;let a=e.parent.firstChild,r=e.parent.lastChild;if(!("end"===r.name))return null;let i=null===(t=e.parent.getChild("CatchClause"))||void 0===t?void 0:t.firstChild,l=null===(n=e.parent.getChild("TryElseClause"))||void 0===n?void 0:n.firstChild,s=null===(o=e.parent.getChild("FinallyClause"))||void 0===o?void 0:o.firstChild;return[{from:a.from,to:a.to},i&&{from:i.from,to:i.to},l&&{from:l.from,to:l.to},s&&{from:s.from,to:s.to},{from:r.from,to:r.to}].filter((e=>null!=e))}const Ma=(Nt=r("hiQgq")).EditorView.baseTheme({".cm-matchingBracket":{backgroundColor:"#328c8252"},".cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Oa=Nt.Facet.define({combine:e=>Nt.combineConfig(e,{afterCursor:!0,brackets:"()[]{}",maxScanDistance:1e4})}),Ta=Nt.Decoration.mark({class:"cm-matchingBracket"}),Ra=(Nt.Decoration.mark({class:"cm-nonmatchingBracket"}),[Nt.StateField.define({create:()=>Nt.Decoration.none,update(e,t){if(!t.docChanged&&!t.selection)return e;let n=[],o=t.state.facet(Oa);for(let e of t.state.selection.ranges){if(!e.empty)continue;let a=Da(t.state,e.head,-1,o)||e.head>0&&Da(t.state,e.head-1,1,o)||o.afterCursor&&(Da(t.state,e.head,1,o)||e.headNt.EditorView.decorations.from(e)}),Ma]);function La(e={}){return[Oa.of(e),Ra]}function Da(e,t,n,o={}){let a=o.maxScanDistance||1e4,r=o.brackets||"()[]{}",i=Nt.syntaxTree(e),l=i.resolveInner(t,n),s=function(e){var t,n;if("end"===e.name&&(e="IfStatement"===e.parent.name?null===(t=e.parent)||void 0===t||null===(n=t.firstChild)||void 0===n?void 0:n.firstChild:e.parent.firstChild),null==e)return[];if("mutable"===e.name||"struct"===e.name){"struct"===e.name&&(e=e.parent.firstChild);let t=e.parent.getChild("struct"),n=e.parent.lastChild;return"end"===n.name&&t?[{from:e.from,to:t.to},{from:n.from,to:n.to}]:null}if("struct"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("quote"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("begin"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("do"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("for"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("let"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("macro"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("function"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("while"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}if("type"===e.name&&(e=e.parent.firstChild),"abstract"===e.name||"primitive"===e.name){let t=e.parent.lastChild,n="end"===t.name,o=e.parent.getChild("type");return n&&o?[{from:e.from,to:o.to},{from:t.from,to:t.to}]:null}if("if"===e.name||"else"===e.name||"elseif"===e.name){"if"===e.name&&(e=e.parent);let t=!1;"else"===e.name&&(e=e.parent,t=!0),"elseif"===e.name&&(e=e.parent.parent);let n=e.parent.firstChild,o=e.parent.lastChild;if("end"!==o.name)return null;if(t&&"try"===n.name)return Aa(e);let a=[];a.push({from:n.from,to:n.to});for(let t of e.parent.getChildren("ElseifClause")){let e=t.firstChild;a.push({from:e.from,to:e.to})}for(let t of e.parent.getChildren("ElseClause")){let e=t.firstChild;a.push({from:e.from,to:e.to})}return a.push({from:o.from,to:o.to}),a}if("try"===e.name||"catch"===e.name||"finally"===e.name||"else"===e.name)return"catch"===e.name&&(e=e.parent),"finally"===e.name&&(e=e.parent),"else"===e.name&&(e=e.parent),"end"===e.parent.lastChild.name?Aa(e):null;if("module"===e.name||"baremodule"===e.name){let t=e.parent.lastChild;return"end"===t.name?[{from:e.from,to:e.to},{from:t.from,to:t.to}]:null}return null}(l);return s||function(e,t,n,o,a,r,i){let l=n<0?e.sliceDoc(t-1,t):e.sliceDoc(t,t+1),s=i.indexOf(l);if(s<0||s%2==0!=n>0)return null;let c={from:n<0?t-1:t,to:n>0?t+1:t},d=e.doc.iterRange(t,n>0?e.doc.length:0),u=0;for(let e=0;!d.next().done&&e<=r;){let r=d.value;n<0&&(e+=r.length);let l=t+e*n;for(let e=n>0?0:r.length-1,t=n>0?r.length:-1;e!=t;e+=n){let t=i.indexOf(r[e]);if(!(t<0||o.resolve(l+e,1).type!=a))if(t%2==0==n>0)u++;else{if(1==u)return t>>1==s>>1?[c,{from:l+e,to:l+e+1}]:null;u--}}n>0&&(e+=r.length)}return d.done?[c]:null}(e,t,n,i,l.type,a,r)}ye=r("aN0pg");const Ia=(Nt=r("hiQgq")).Decoration.line({attributes:{class:"cm-highlighted-line"}}),Pa=Nt.Decoration.mark({attributes:{class:"cm-highlighted-range"}});const ja=Nt.Facet.define({combine:e=>e[0],compare:(e,t)=>e===t}),Ba=Nt.Facet.define({combine:e=>e[0],compare:(e,t)=>e===t}),Ua=()=>Nt.ViewPlugin.fromClass(class{updateDecos(e){this.decorations=function(e){let t=e.state.facet(ja);if(null==t||null==t||t<0||t>e.state.doc.lines)return Nt.Decoration.set([]);let n=e.state.doc.line(t);return Nt.Decoration.set([Ia.range(n.from,n.from)])}(e)}constructor(e){this.decorations=Nt.Decoration.set([]),this.updateDecos(e)}update(e){(e.docChanged||e.state.facet(ja)!==e.startState.facet(ja))&&this.updateDecos(e.view)}},{decorations:e=>e.decorations}),Fa=()=>Nt.ViewPlugin.fromClass(class{updateDecos(e){this.decorations=function(e){let t=e.state.facet(Ba);if(null==t)return Nt.Decoration.set([]);let{from:n,to:o}=t;return n<0||n==o?Nt.Decoration.set([]):Nt.Decoration.set([Pa.range(n,o)])}(e)}constructor(e){this.decorations=Nt.Decoration.set([]),this.updateDecos(e)}update(e){(e.docChanged||e.state.facet(Ba)!==e.startState.facet(Ba))&&this.updateDecos(e.view)}},{decorations:e=>e.decorations});Nt=r("hiQgq");function za(e,t){return({state:n,dispatch:o})=>{if(n.readOnly)return!1;let a=e(t,n.selection.ranges,n);return!!a&&(o(n.update(a)),!0)}}const qa=za(Za,0),Ha=(za(Za,1),za(Za,2),za(Ka,0)),Wa=(za(Ka,1),za(Ka,2),[{key:"Mod-/",run:e=>{let t=Ga(e.state);return t.line?qa(e):!!t.block&&Ha(e)}},{key:"Alt-A",run:Ha}]);function Ga(e,t=e.selection.main.head){let n=e.languageDataAt("commentTokens",t);return n.length?n[0]:{}}function Ka(e,t,n){let o=t.map((e=>Ga(n,e.from).block));if(!o.every((e=>e)))return null;let a=t.map(((e,t)=>function(e,{open:t,close:n},o,a){let r,i,l=e.sliceDoc(o-50,o),s=e.sliceDoc(a,a+50),c=/\s*$/.exec(l)[0].length,d=/^\s*/.exec(s)[0].length,u=l.length-c;if(l.slice(u-t.length,u)==t&&s.slice(d,d+n.length)==n)return{open:{pos:o-c,margin:c&&1},close:{pos:a+d,margin:d&&1}};a-o<=100?r=i=e.sliceDoc(o,a):(r=e.sliceDoc(o,o+50),i=e.sliceDoc(a-50,a));let p=/^\s*/.exec(r)[0].length,m=/\s*$/.exec(i)[0].length,g=i.length-m-n.length;return r.slice(p,p+t.length)==t&&i.slice(g,g+n.length)==n?{open:{pos:o+p+t.length,margin:/\s/.test(r.charAt(p+t.length))?1:0},close:{pos:a-m-n.length,margin:/\s/.test(i.charAt(g-1))?1:0}}:null}(n,o[t],e.from,e.to)));if(2!=e&&!a.every((e=>e))){let e=0;return n.changeByRange((t=>{let{open:n,close:r}=o[e++];if(a[e])return{range:t};let i=n.length+1;return{changes:[{from:t.from,insert:n+" "},{from:t.to,insert:" "+r}],range:Nt.EditorSelection.range(t.anchor+i,t.head+i)}}))}if(1!=e&&a.some((e=>e))){let e=[];for(let t,n=0;na&&(e==r||r>l.from)){a=l.from;let e=i??Ga(n,t).line;if(!e)continue;let r=/^\s*/.exec(l.text)[0].length,c=r==l.length,d=l.text.slice(r,r+e.length)==e?r:-1;re.comment<0&&(!e.empty||e.single)))){let e=[];for(let{line:t,token:n,indent:a,empty:r,single:i}of o)!i&&r||e.push({from:t.from+a,insert:n+" "});let t=n.changes(e);return{changes:t,selection:n.selection.map(t,1)}}if(1!=e&&o.some((e=>e.comment>=0))){let e=[];for(let{line:t,comment:n,token:a}of o)if(n>=0){let o=t.from+n,r=o+a.length;" "==t.text[r-t.from]&&r++,e.push({from:o,to:r})}return{changes:e}}return null}Nt=r("hiQgq");let Va={key:"Mod-d",run:({state:e,dispatch:t})=>{if(e.selection.main.empty){var n,o;let a=["Identifier","FieldName"],r=Nt.syntaxTree(e).cursorAt(e.selection.main.from,-1),i=Nt.syntaxTree(e).cursorAt(e.selection.main.from,1);for(let e of a){let n=r.name===e?r:i.name===e?i:null;if(n)return t({selection:{anchor:n.from,head:n.to}}),!0}let l=e.doc.lineAt(e.selection.main.from),s=e.selection.main.from-l.from,c=l.text.slice(0,s),d=l.text.slice(s),u=(null===(n=c.match(/(\w+)$/))||void 0===n?void 0:n[0])??"",p=(null===(o=d.match(/^(\w+)/))||void 0===o?void 0:o[0])??"";t({selection:{anchor:e.selection.main.from-u.length,head:e.selection.main.from+p.length}})}else Nt.selectNextOccurrence({state:e,dispatch:t});return!1},shift:({state:e,dispatch:t})=>{if(1===e.selection.ranges.length)return!1;let n=e.selection.ranges.at(e.selection.mainIndex-1),o=e.selection.ranges.filter((e=>e!==n)),a=o.indexOf(e.selection.main),r=(i=o,l=e.selection.mainIndex-1,i.slice(l,l+1)[0]);var i,l;return t({selection:Nt.EditorSelection.create(o,a),effects:null==r?[]:Nt.EditorView.scrollIntoView(r.from)}),!0},preventDefault:!0};ue=r("4zMEb");var Qa=r("aTIpG");Po=r("hrGZZ"),Nt=r("hiQgq");r("kjWx8");const Xa="true"===window.localStorage.getItem("ENABLE_CM_MIXED_PARSER"),Ya="true"===window.localStorage.getItem("ENABLE_CM_SPELLCHECK"),Ja="true"===(window.localStorage.getItem("ENABLE_CM_AUTOCOMPLETE_ON_TYPE")??(/Mac/.test(navigator.platform)?"true":"false"));Xa&&console.log("YOU ENABLED THE CODEMIRROR MIXED LANGUAGE PARSER\nThanks! Awesome!\nPlease let us know if you find any bugs...\nIf enough people do this, we can make it the default parser.\n"),window.PLUTO_TOGGLE_CM_MIXED_PARSER=(e=!Xa)=>{window.localStorage.setItem("ENABLE_CM_MIXED_PARSER",String(e)),window.location.reload()},window.PLUTO_TOGGLE_CM_SPELLCHECK=(e=!Ya)=>{window.localStorage.setItem("ENABLE_CM_SPELLCHECK",String(e)),window.location.reload()},window.PLUTO_TOGGLE_CM_AUTOCOMPLETE_ON_TYPE=(e=!Ja)=>{window.localStorage.setItem("ENABLE_CM_AUTOCOMPLETE_ON_TYPE",String(e)),window.location.reload()};const er=Nt.HighlightStyle.define([{tag:Nt.tags.propertyName,color:"var(--cm-property-color)"},{tag:Nt.tags.unit,color:"var(--cm-tag-color)"},{tag:Nt.tags.literal,color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.macroName,color:"var(--cm-macro-color)",fontWeight:700},{tag:Nt.tags.special(Nt.tags.brace),color:"var(--cm-macro-color)",fontWeight:700},{tag:Nt.tags.standard(Nt.tags.variableName),color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.bool,color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.keyword,color:"var(--cm-keyword-color)"},{tag:Nt.tags.comment,color:"var(--cm-comment-color)",fontStyle:"italic"},{tag:Nt.tags.atom,color:"var(--cm-atom-color)"},{tag:Nt.tags.number,color:"var(--cm-number-color)"},{tag:Nt.tags.keyword,color:"var(--cm-keyword-color)"},{tag:Nt.tags.string,color:"var(--cm-string-color)"},{tag:Nt.tags.variableName,color:"var(--cm-var-color)",fontWeight:700},{tag:Nt.tags.typeName,color:"var(--cm-type-color)",fontStyle:"italic"},{tag:Nt.tags.typeOperator,color:"var(--cm-type-color)",fontStyle:"italic"},{tag:Nt.tags.bracket,color:"var(--cm-bracket-color)"},{tag:Nt.tags.brace,color:"var(--cm-bracket-color)"},{tag:Nt.tags.tagName,color:"var(--cm-tag-color)"},{tag:Nt.tags.link,color:"var(--cm-link-color)"},{tag:Nt.tags.invalid,color:"var(--cm-error-color)",background:"var(--cm-error-bg-color)"}],{all:{color:"var(--cm-editor-text-color)"},scope:Nt.julia_andrey().language}),tr=Nt.HighlightStyle.define([{tag:Nt.tags.propertyName,color:"var(--cm-property-color)"},{tag:Nt.tags.unit,color:"var(--cm-tag-color)"},{tag:Nt.tags.literal,color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.macroName,color:"var(--cm-macro-color)",fontWeight:700},{tag:Nt.tags.standard(Nt.tags.variableName),color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.bool,color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.keyword,color:"var(--cm-keyword-color)"},{tag:Nt.tags.atom,color:"var(--cm-atom-color)"},{tag:Nt.tags.number,color:"var(--cm-number-color)"},{tag:Nt.tags.keyword,color:"var(--cm-keyword-color)"},{tag:Nt.tags.string,color:"var(--cm-string-color)"},{tag:Nt.tags.variableName,color:"var(--cm-var-color)",fontWeight:700},{tag:Nt.tags.typeName,color:"var(--cm-type-color)",fontStyle:"italic"},{tag:Nt.tags.typeOperator,color:"var(--cm-type-color)",fontStyle:"italic"},{tag:Nt.tags.bracket,color:"var(--cm-bracket-color)"},{tag:Nt.tags.brace,color:"var(--cm-bracket-color)"},{tag:Nt.tags.tagName,color:"var(--cm-tag-color)"},{tag:Nt.tags.link,color:"var(--cm-link-color)"},{tag:Nt.tags.invalid,color:"var(--cm-error-color)",background:"var(--cm-error-bg-color)"},{tag:Nt.tags.comment,color:"var(--cm-comment-color)",fontStyle:"italic",filter:"none"}],{scope:Nt.javascriptLanguage,all:{color:"var(--cm-editor-text-color)",filter:"contrast(0.5)"}}),nr=Nt.HighlightStyle.define([{tag:Nt.tags.propertyName,color:"var(--cm-property-color)"},{tag:Nt.tags.unit,color:"var(--cm-tag-color)"},{tag:Nt.tags.literal,color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.macroName,color:"var(--cm-macro-color)",fontWeight:700},{tag:Nt.tags.standard(Nt.tags.variableName),color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.bool,color:"var(--cm-builtin-color)",fontWeight:700},{tag:Nt.tags.keyword,color:"var(--cm-keyword-color)"},{tag:Nt.tags.comment,color:"var(--cm-comment-color)",fontStyle:"italic"},{tag:Nt.tags.atom,color:"var(--cm-atom-color)"},{tag:Nt.tags.number,color:"var(--cm-number-color)"},{tag:Nt.tags.keyword,color:"var(--cm-keyword-color)"},{tag:Nt.tags.string,color:"var(--cm-string-color)"},{tag:Nt.tags.variableName,color:"var(--cm-var-color)",fontWeight:700},{tag:Nt.tags.typeName,color:"var(--cm-type-color)",fontStyle:"italic"},{tag:Nt.tags.typeOperator,color:"var(--cm-type-color)",fontStyle:"italic"},{tag:Nt.tags.bracket,color:"var(--cm-bracket-color)"},{tag:Nt.tags.brace,color:"var(--cm-bracket-color)"},{tag:Nt.tags.tagName,color:"var(--cm-tag-color)"},{tag:Nt.tags.link,color:"var(--cm-link-color)"},{tag:Nt.tags.invalid,color:"var(--cm-error-color)",background:"var(--cm-error-bg-color)"}],{scope:Nt.pythonLanguage,all:{color:"var(--cm-editor-text-color)",filter:"contrast(0.5)"}}),or=Nt.HighlightStyle.define([{tag:Nt.tags.propertyName,color:"var(--cm-css-accent-color)",fontWeight:700},{tag:Nt.tags.variableName,color:"var(--cm-css-accent-color)",fontWeight:700},{tag:Nt.tags.definitionOperator,color:"var(--cm-css-color)"},{tag:Nt.tags.keyword,color:"var(--cm-css-color)"},{tag:Nt.tags.modifier,color:"var(--cm-css-accent-color)"},{tag:Nt.tags.punctuation,opacity:.5},{tag:Nt.tags.literal,color:"var(--cm-css-color)"},{tag:Nt.tags.tagName,color:"var(--cm-css-color)",fontWeight:700},{tag:Nt.tags.className,color:"var(--cm-css-why-doesnt-codemirror-highlight-all-the-text-aaa)"},{tag:Nt.tags.constant(Nt.tags.className),color:"var(--cm-css-why-doesnt-codemirror-highlight-all-the-text-aaa)"},{tag:Nt.tags.comment,color:"var(--cm-comment-color)",fontStyle:"italic"}],{scope:Nt.cssLanguage,all:{color:"var(--cm-css-color)"}}),ar=Nt.HighlightStyle.define([{tag:Nt.tags.tagName,color:"var(--cm-html-accent-color)",fontWeight:600},{tag:Nt.tags.attributeName,color:"var(--cm-html-accent-color)",fontWeight:600},{tag:Nt.tags.attributeValue,color:"var(--cm-html-accent-color)"},{tag:Nt.tags.angleBracket,color:"var(--cm-html-accent-color)",fontWeight:600,opacity:.7},{tag:Nt.tags.content,color:"var(--cm-html-color)",fontWeight:400},{tag:Nt.tags.documentMeta,color:"var(--cm-html-accent-color)"},{tag:Nt.tags.comment,color:"var(--cm-comment-color)",fontStyle:"italic"}],{scope:Nt.htmlLanguage,all:{color:"var(--cm-html-color)"}}),rr=Nt.HighlightStyle.define([{tag:Nt.tags.content,color:"var(--cm-md-color)"},{tag:Nt.tags.quote,color:"var(--cm-md-color)"},{tag:Nt.tags.link,textDecoration:"underline"},{tag:Nt.tags.url,color:"var(--cm-md-color)",textDecoration:"none"},{tag:Nt.tags.emphasis,fontStyle:"italic"},{tag:Nt.tags.strong,fontWeight:"bolder"},{tag:Nt.tags.heading,color:"var(--cm-md-color)",fontWeight:700},{tag:Nt.tags.comment,color:"var(--cm-comment-color)",fontStyle:"italic"},{tag:Nt.tags.processingInstruction,color:"var(--cm-md-accent-color) !important",opacity:"0.5"},{tag:Nt.tags.monospace,color:"var(--cm-md-accent-color)"}],{scope:Nt.markdownLanguage,all:{color:"var(--cm-md-color)"}}),ir=e=>e.state.doc.toString(),lr=(e,t)=>e.dispatch({changes:{from:0,to:e.state.doc.length,insert:t}}),sr=(e,t,n,o)=>e.dispatch({changes:{from:n,to:o,insert:t}});let cr=(e,t)=>{let n=i.useRef(new Nt.Compartment),o=i.useRef(n.current.of(t));return i.useLayoutEffect((()=>{var o,a;null===(o=e.current)||void 0===o||null===(a=o.dispatch)||void 0===a||a.call(o,{effects:n.current.reconfigure(t)})}),[t]),o.current},dr=(e,{line:t,ch:n})=>{let o=e.line(de.default.clamp(t+1,1,e.lines)),a=de.default.clamp(n,0,o.length);return o.from+a};const ur=({local_code:e,remote_code:t,disable_input:n,focus_after_creation:o,cm_forced_focus:a,set_cm_forced_focus:r,show_input:l,skip_static_fake:s=!1,on_submit:c,on_delete:d,on_add_after:u,on_change:p,on_update_doc_query:m,on_focus_neighbor:g,on_line_heights:h,nbpkg:f,cell_id:_,notebook_id:b,any_logs:v,show_logs:y,set_show_logs:w,set_cell_disabled:k,cm_highlighted_line:E,cm_highlighted_range:$,metadata:x,global_definition_locations:S,cm_diagnostics:N})=>{let C=i.useContext(we);const{disabled:A,skip_as_script:M}=x;let[O,T]=i.useState(null);if(O){const e=O;throw T(null),e}const R=i.useRef(b);R.current=b;const L=i.useRef(null),D=i.useRef(null),I=i.useRef(null);let P=cr(L,wa.of(f)),j=cr(L,Gn.of(S)),B=cr(L,ja.of(E)),U=cr(L,Ba.of($)),F=cr(L,Nt.EditorState.readOnly.of(n)),z=cr(L,i.useMemo((()=>Nt.EditorView.updateListener.of((e=>{e.docChanged&&p(e.state.doc.toString())}))),[p]));const[q,H]=i.useState(!s),W=i.useRef(!1);W.current||=navigator.userAgent.includes("Firefox")||o||null!=a||s;const G=!W.current&&q;return i.useLayoutEffect((()=>{if(!G)return;let e,t=D.current;if(null==t)return;const n=()=>{H(!1),e.disconnect(),window.removeEventListener("beforeprint",n)};return e=new IntersectionObserver((e=>{e.some((e=>e.isIntersecting))&&n()})),e.observe(t),window.addEventListener("beforeprint",n),()=>{e.disconnect(),window.removeEventListener("beforeprint",n)}}),[]),i.useLayoutEffect((()=>{if(G)return;if(null==D.current)return;const t=e=>(Nt.autocomplete.closeCompletion(e),(async e=>{await e()})((async()=>{await u();e.state.doc.toString()!==I.current&&c()})),!0);let n=Nt.autocomplete.completionKeymap.find((e=>"Enter"===e.key));const a=()=>{const e=L.current,t=ir(e),n=t.trim(),o=t.length-t.trimStart().length;if(console.table({value:t,trimmed:n,offset:o}),n.startsWith('md"')&&n.endsWith('"')){let t,a;if(n.startsWith('md"""')&&n.endsWith('"""')?(t=5,a=n.length-3):(t=3,a=n.length-1),t>=a||""==n.substring(t,a).trim())lr(e,"");else{for(;/\s/.test(n[t]);)++t;for(;/\s/.test(n[a-1]);)--a;sr(e,"",a+o,e.state.doc.length),sr(e,"",0,t+o)}}else{let t='md"""\n',n='\n"""',o=e.state.selection.main;e.dispatch({changes:[{from:0,to:0,insert:t},{from:e.state.doc.length,to:e.state.doc.length,insert:n}],selection:0===o.from?{anchor:o.from+t.length,head:o.to+t.length}:void 0})}return!0},i=e=>!e.state.facet(Nt.EditorState.readOnly)&&(0===e.state.doc.length&&(g(_,1),d(),!0)),l=e=>!e.state.facet(Nt.EditorState.readOnly)&&(0===e.state.doc.length&&(g(_,-1,1/0,1/0),d(),!0)),s=(e,t)=>{if(e.state.facet(Nt.EditorState.readOnly))return!1;const n=e.state.selection.main;return 0===n.anchor&&n.head===e.state.doc.length||1===e.state.doc.lines?(C.move_remote_cells([_],C.get_notebook().cell_order.indexOf(_)+(-1===t?-1:2)),requestIdleCallback((()=>{e.dispatch({selection:{anchor:0,head:e.state.doc.length},scrollIntoView:!0}),e.focus()})),!0):1===t?Nt.moveLineDown(e):Nt.moveLineUp(e)},p=(e,t)=>(r(!0),C.fold_remote_cells([_],t),!0),f=[{key:"Shift-Enter",run:e=>(Nt.autocomplete.closeCompletion(e),c(),!0)},{key:"Ctrl-Enter",mac:"Cmd-Enter",run:t},{key:"Ctrl-Enter",run:t},{key:"Tab",run:e=>{var t;if(e.state.readOnly)return!1;if(null==n||null===(t=n.run)||void 0===t?void 0:t.call(n,e))return!0;let o=e.state.selection.main;return o.empty?(e.dispatch({changes:{from:o.from,to:o.to,insert:"\t"},selection:Nt.EditorSelection.cursor(o.from+1)}),!0):Nt.indentMore(e)},shift:Nt.indentLess},{key:"Ctrl-m",mac:"Cmd-m",run:a},{key:"Ctrl-m",run:a},{key:"Ctrl-M",run:a},{key:"Delete",run:i},{key:"Ctrl-Delete",run:i},{key:"Backspace",run:l},{key:"Ctrl-Backspace",run:l},{key:"Alt-ArrowUp",run:e=>s(e,-1)},{key:"Alt-ArrowDown",run:e=>s(e,1)},{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:e=>p(0,!0)},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:e=>p(0,!1)},Va];let b=!1;const v=Nt.EditorView.updateListener.of((e=>{if(e.view.hasFocus&&(e.docChanged||e.selectionSet)){let t=e.state;try{let e=qn(t,b);null!=e&&m(e)}finally{}}})),y=window.matchMedia("(prefers-color-scheme: dark)").matches,w=L.current=new Nt.EditorView({state:Nt.EditorState.create({doc:e,extensions:[Nt.EditorView.theme({},{dark:y}),P,B,U,j,F,Ua(),Fa(),Sa,ka({pluto_actions:C,notebook_id_ref:R}),jn,Nt.syntaxHighlighting(er),Nt.syntaxHighlighting(ar),Nt.syntaxHighlighting(rr),Nt.syntaxHighlighting(tr),Nt.syntaxHighlighting(nr),Nt.syntaxHighlighting(or),Nt.lineNumbers(),Nt.highlightSpecialChars(),Nt.history(),Nt.drawSelection(),Nt.EditorState.allowMultipleSelections.of(!0),Nt.EditorView.clickAddsSelectionRange.of((e=>e.altKey&&!e.shiftKey)),Nt.indentOnInput(),Nt.EditorState.languageData.of(((e,t,n)=>[{closeBrackets:{brackets:["(","[","{"]}}])),Nt.closeBrackets(),Nt.rectangularSelection({eventFilter:e=>e.altKey&&e.shiftKey&&0==e.button}),Nt.highlightSelectionMatches({minSelectionLength:2}),La(),v,Qa.tab_help_plugin,Nt.EditorView.domEventHandlers({blur:(e,t)=>{document.activeElement===t.contentDOM||(setTimeout((()=>{t.dispatch({selection:{anchor:t.state.selection.main.head},scrollIntoView:!1}),t.contentDOM.blur()}),0),r(null))}}),Ca({pluto_actions:C,cell_id:_}),Nt.EditorView.updateListener.of((e=>{e.docChanged&&e.state.doc.length>0&&"?"===e.state.sliceDoc(0,1)&&jo("docs")})),Nt.EditorState.tabSize.of(4),Nt.indentUnit.of("\t"),...Xa?[no(),Nt.markdown({defaultCodeLanguage:no()}),Nt.html(),Nt.javascript(),Nt.python(),Xn]:[Nt.julia_andrey()],Kn,ma({request_autocomplete:async({text:e})=>{let t=await ue.timeout_promise(C.send("complete",{query:e},{notebook_id:R.current}),5e3).catch(console.warn);if(!t)return null;let{message:n}=t;return{start:St.utf8index_to_ut16index(e,n.start),stop:St.utf8index_to_ut16index(e,n.stop),results:n.results}},request_special_symbols:()=>C.send("complete_symbols").then((({message:e})=>e)),on_update_doc_query:m}),Nt.keymap.of(f),Nt.keymap.of(Wa),Na({focus_on_neighbor:({cell_delta:e,line:t,character:n})=>g(_,e,t,n)}),Nt.keymap.of([...Nt.closeBracketsKeymap,...Nt.defaultKeymap,...Nt.historyKeymap,...Nt.foldKeymap]),Nt.placeholder("Enter cell code..."),Nt.EditorView.contentAttributes.of({spellcheck:String(Ya)}),Nt.EditorView.lineWrapping,xa,Nt.EditorView.updateListener.of((e=>{e.docChanged&&e.view.dispatch(Nt.setDiagnostics(e.state,[]))})),z,Nt.EditorView.exceptionSink.of((e=>{T(e),console.error("EditorView exception!",e)}))]}),parent:D.current});w.dom.CodeMirror={getValue:()=>ir(w),setValue:e=>lr(w,e)},o&&setTimeout((()=>{let e=L.current;null!=e&&(e.dom.scrollIntoView({behavior:"smooth",block:"nearest"}),e.dispatch({selection:{anchor:e.state.doc.length,head:e.state.doc.length},effects:[Qa.LastFocusWasForcedEffect.of(!0)]}),e.focus())}));const k=D.current.querySelector("div.cm-content");if(k){const e=new ResizeObserver((()=>{const e=k.children,t=de.default.map(e,(e=>e.offsetTop)),n=[...t.slice(1).map(((e,n)=>e-t[n])),15];h(n)}));return e.observe(k),()=>{e.unobserve(k)}}}),[G]),i.useEffect((()=>{if(null==L.current)return;const e=L.current,t=N;e.dispatch(Nt.setDiagnostics(e.state,t))}),[N]),i.useEffect((()=>{if(null==L.current)return;const e=ir(L.current)??"";null==I.current&&""===t&&""!==e||(I.current=t,e!==t&&lr(L.current,t))}),[t]),i.useEffect((()=>{const e=L.current;if(null!=e)if(null==a)e.dispatch({selection:{anchor:e.state.selection.main.head,head:e.state.selection.main.head}});else if(!0===a);else{let n={anchor:dr(e.state.doc,a[0]),head:dr(e.state.doc,a[1])};if(null===(t=a[2])||void 0===t?void 0:t.definition_of){var t;let o=e.state.field(jn),r=null==o?void 0:o.definitions.get(null===(t=a[2])||void 0===t?void 0:t.definition_of);r&&(n={anchor:r.from,head:r.to})}e.dom.scrollIntoView({behavior:"smooth",block:"nearest"}),e.focus(),e.dispatch({scrollIntoView:!0,selection:n,effects:[Nt.EditorView.scrollIntoView(Nt.EditorSelection.range(n.anchor,n.head),{yMargin:80}),Qa.LastFocusWasForcedEffect.of(!0)]})}}),[a]),i.html`
+
+ ${G&&l?i.html`<${hr} value=${t} />`:null}
+ <${mr}
+ on_delete=${d}
+ cell_id=${_}
+ run_cell=${c}
+ skip_as_script=${M}
+ running_disabled=${A}
+ any_logs=${v}
+ show_logs=${y}
+ set_show_logs=${w}
+ set_cell_disabled=${k}
+ />
+ ${pr}
+
+ `},pr=i.html`
{d.current&&clearTimeout(d.current)}}>
+ <${gr} tag="delete" contents="Delete cell" title="Delete cell" onClick=${e} setOpen=${_} />
+
+ <${gr}
+ title=${a?"Enable and run the cell":"Disable this cell, and all cells that depend on it"}
+ tag=${a?"enable_cell":"disable_cell"}
+ contents=${a?i.html`Enable cell`:i.html`Disable cell`}
+ onClick=${async e=>{const t=!a;await c(t)}}
+ setOpen=${_}
+ />
+ ${r?i.html`<${gr}
+ title=${l?"Show cell logs":"Hide cell logs"}
+ tag=${l?"hide_logs":"show_logs"}
+ contents=${l?"Hide logs":"Show logs"}
+ onClick=${()=>s(!l)}
+ setOpen=${_}
+ />`:null}
+ ${(()=>{var e;let n=u.get_notebook(),o=null==n||null===(e=n.cell_results)||void 0===e?void 0:e[t];return!!o&&!o.errored&&!o.queued&&"text/plain"===o.output.mime&&o.output.body})()?i.html`<${gr}
+ tag="copy_output"
+ contents="Copy output"
+ title="Copy the output of this cell to the clipboard."
+ onClick=${()=>{var e,n;let o=u.get_notebook(),a=(null==o||null===(e=o.cell_results)||void 0===e||null===(n=e[t])||void 0===n?void 0:n.output.body)??"";a&&navigator.clipboard.writeText(a).catch((e=>{alert("Error copying cell output")}))}}
+ setOpen=${_}
+ />`:null}
+
+ <${gr}
+ title=${o?"This cell is currently stored in the notebook file as a Julia comment. Click here to disable.":"Store this code in the notebook file as a Julia comment. This way, it will not run when the notebook runs as a script outside of Pluto."}
+ tag=${o?"run_as_script":"skip_as_script"}
+ contents=${o?i.html`Enable in file`:i.html`Disable in file`}
+ onClick=${async e=>{const n=!o;e.preventDefault(),await u.update_notebook((e=>{e.cell_inputs[t].metadata.skip_as_script=n}))}}
+ setOpen=${_}
+ />
+
`},show_stacktrace:()=>!1},{pattern:/LoadError: cannot assign a value to variable workspace#\d+\..+ from module workspace#\d+/,display:()=>i.html`
Tried to reevaluate an include call, this is not supported. You might need to restart this notebook from the main menu.
+
+ For a workaround, use the alternative version of include described here:
+ GH issue 115
+
+
In the future, include will be deprecated, and this will be the default.
`},{pattern:/MethodError: no method matching .*\nClosest candidates are:/,display:e=>e.split("\n").map((e=>i.html`
${e}
`))},{pattern:/Cyclic references among (.*)\./,display:e=>e.split("\n").map((e=>{const t=e.match(/Cyclic references among (.*)\./);if(t){let e=t[1].split(/, | and /).map((e=>i.html`${e}`));return i.html`
`},show_stacktrace:()=>{const e=Cr(a.get_notebook(),n);return 0===Object.keys(e).length}},{pattern:/^ArgumentError: Package (.*) not found in current path/,display:e=>{var t,n,o;const r=e.match(/^ArgumentError: Package (.*) not found in current path/),l=((null==r?void 0:r[1])??"").replaceAll("`",""),s=null===(t=a.get_notebook())||void 0===t||null===(n=t.nbpkg)||void 0===n||null===(o=n.terminal_outputs)||void 0===o?void 0:o[l];return i.html`
The package ${l}.jl could not load because it failed to initialize.
+
That's not nice! Things you could try:
+
+
Restart the notebook.
+
Try a different Julia version.
+
Contact the developers of ${l}.jl about this error.
+
+
You might find useful information in the package installation log:
The statefile failed to download. Original error message:
+
${t.toString()}
+
Launch parameters:
+
${JSON.stringify(e,null,2)}
+
+ `)}))}),[d,o,t]),i.useEffect((()=>{Xc(e.disable_ui)}),[e.disable_ui]);const p=e.preamble_html?i.html`<${Fl} body=${e.preamble_html} className=${"preamble"} sanitize_html=${ed} />`:null;return null!=s?s:d?i.html`<${Hc} initial_notebook_state=${l.current} launch_params=${e} preamble_element=${p} />`:i.html`
+ ${p}
+ <${Kc} progress=${a} />
+ `};class rd extends HTMLElement{constructor(){super()}connectedCallback(){var e;const t=Object.fromEntries(Object.entries(Yc).map((([e,t])=>[e,Jc(this,e)??t])));console.log("Launch parameters: ",t),null===(e=document.querySelector(".delete-me-when-live"))||void 0===e||e.remove(),i.render(i.html`<${ad} launch_params=${t} />`,this)}}customElements.define("pluto-editor",rd);
\ No newline at end of file
diff --git a/frontend-dist/editor.52bd66ba.css b/frontend-dist/editor.52bd66ba.css
new file mode 100644
index 0000000000..f1d61cc1f9
--- /dev/null
+++ b/frontend-dist/editor.52bd66ba.css
@@ -0,0 +1 @@
+main{cursor:auto;margin-top:20px}#helpbox-wrapper,body header#pluto-nav,footer,pluto-cell>button,pluto-input>button,pluto-runarea,pluto-shoulder,preamble>button{display:none!important}@media print{.edit_or_run,.floating_back_button,.loading-bar,.MJX_HoverRegion,.MJX_LiveRegion,.MJX_ToolTip,.outline-frame,.outline-frame-actions-container,.pluto-frontmatter,nav#undo_delete,pkg-status-mark{display:none!important}main{padding-bottom:0}pluto-input .cm-editor{border-left:1px solid var(--normal-cell-color);border-radius:4px!important}pluto-cell{break-inside:avoid}pluto-cell.code_folded:has(p){break-inside:auto}pluto-output>div>div.markdown>hr,pluto-output>div>div>hr{break-after:page;height:0;margin:0;visibility:hidden}pluto-output h1{break-before:page}pluto-cell:first-of-type pluto-output h1{break-before:avoid}pluto-output :is(.admonition,.pluto-docs-binding,blockquote) h1{break-before:avoid}pluto-output :is(h1,h2,h3,h4){break-after:avoid}}@page{widows:2}
\ No newline at end of file
diff --git a/frontend-dist/editor.6386bd9d.js b/frontend-dist/editor.6386bd9d.js
new file mode 100644
index 0000000000..dd344f6c83
--- /dev/null
+++ b/frontend-dist/editor.6386bd9d.js
@@ -0,0 +1,8 @@
+/*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v4.2.11 - 2020-06-02
+ * Desc: Include this file in any page being loaded into an iframe
+ * to force the iframe to resize to the content size.
+ * Requires: iframeResizer.min.js on host page.
+ * Copyright: (c) 2020 David J. Bradshaw - dave@bradshaw.net
+ * License: MIT
+ */
+!function(e){if("undefined"!=typeof window){var t=!0,n=10,o="",i=0,r="",a=null,u="",c=!1,s={resize:1,click:1},d=128,l=!0,f=1,m="bodyOffset",h=m,g=!0,p="",v={},y=32,b=null,w=!1,T="[iFrameSizer]",E=T.length,O="",S={max:1,min:1,bodyScroll:1,documentElementScroll:1},M="child",I=!0,N=window.parent,A="*",C=0,z=!1,k=null,R=16,x=1,L="scroll",F=L,P=window,D=function(){re("onMessage function not defined")},j=function(){},q=function(){},H={height:function(){return re("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return re("Custom width calculation function not defined"),document.body.scrollWidth}},W={},B=!1;try{var J=Object.create({},{passive:{get:function(){B=!0}}});window.addEventListener("test",ee,J),window.removeEventListener("test",ee,J)}catch(e){}var U,V,K,Q,X,Y,G=Date.now||function(){return(new Date).getTime()},Z={bodyOffset:function(){return document.body.offsetHeight+pe("marginTop")+pe("marginBottom")},offset:function(){return Z.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return H.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,ye(Z))},min:function(){return Math.min.apply(null,ye(Z))},grow:function(){return Z.max()},lowestElement:function(){return Math.max(Z.bodyOffset()||Z.documentElementOffset(),ve("bottom",we()))},taggedElement:function(){return be("bottom","data-iframe-height")}},$={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return H.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max($.bodyScroll(),$.documentElementScroll())},max:function(){return Math.max.apply(null,ye($))},min:function(){return Math.min.apply(null,ye($))},rightMostElement:function(){return ve("right",we())},taggedElement:function(){return be("right","data-iframe-width")}},_=(U=Te,X=null,Y=0,function(){var e=G(),t=R-(e-(Y=Y||e));return V=this,K=arguments,t<=0||Rpluto-tree-prefix:before{background-image:url(caret-down-outline.4253a2fe.svg);background-size:100%;bottom:-2px;content:"";cursor:pointer;display:inline-block;filter:var(--image-filters);height:1em;opacity:.5;position:relative;width:1em}pluto-tree.collapsed pluto-tree>pluto-tree-prefix:before{display:none}pluto-tree.collapsed>pluto-tree-prefix:before{background-image:url(caret-forward-outline.348a84b6.svg)}pluto-tree p-r>p-v{color:var(--pluto-output-color);display:inline-flex}pluto-tree.collapsed pluto-tree-items.Array>p-r>p-k,pluto-tree.collapsed pluto-tree-items.Set>p-r>p-k,pluto-tree.collapsed pluto-tree-items.struct>p-r>p-k,pluto-tree.collapsed pluto-tree-items.Tuple>p-r>p-k{display:none}pluto-tree>pluto-tree-prefix>.long{display:block}pluto-tree.collapsed>pluto-tree-prefix>.long,pluto-tree>pluto-tree-prefix>.short{display:none}pluto-tree.collapsed>pluto-tree-prefix>.short{display:block}pluto-tree p-r{margin-left:3em}pluto-tree.collapsed p-r{margin-left:.5em}pluto-tree.collapsed p-r:first-child{margin-left:0}pluto-tree pluto-tree-items.Array>p-r>p-k,pluto-tree pluto-tree-items.Set>p-r>p-k,pluto-tree pluto-tree-items.Tuple>p-r>p-k{margin-right:1em;opacity:.5;user-select:none}pluto-tree.Array>pluto-tree-prefix:after{content:"["}pluto-tree pluto-tree-items.Array:after{content:"]"}pluto-tree.Set>pluto-tree-prefix:after{content:"(["}pluto-tree pluto-tree-items.Set:after{content:"])"}pluto-tree.Dict>pluto-tree-prefix:after,pluto-tree.NamedTuple>pluto-tree-prefix:after,pluto-tree.struct>pluto-tree-prefix:after,pluto-tree.Tuple>pluto-tree-prefix:after{content:"("}pluto-tree pluto-tree-items.Dict:after,pluto-tree pluto-tree-items.NamedTuple:after,pluto-tree pluto-tree-items.struct:after,pluto-tree pluto-tree-items.Tuple:after{content:")"}pluto-tree pluto-tree-items.Array>p-r>p-k:after,pluto-tree pluto-tree-items.Set>p-r>p-k:after,pluto-tree pluto-tree-items.Tuple>p-r>p-k:after{content:":"}pluto-tree-pair>p-r>p-k:after,pluto-tree pluto-tree-items.Dict>p-r>p-k:after{content:" => "}pluto-tree pluto-tree-items.NamedTuple>p-r>p-k:after,pluto-tree pluto-tree-items.struct>p-r>p-k:after{content:" = "}pluto-tree.collapsed p-r:after{content:","}pluto-tree.collapsed p-r:last-child:after{content:""}pluto-tree-more{cursor:pointer;display:inline-block;padding:.6em 0;white-space:nowrap;width:100%}pluto-tree-more:before{background-image:url(ellipsis-vertical.a30e7430.svg);background-size:100%;bottom:-.1em;content:"";display:inline-block;filter:var(--image-filters);height:1em;margin-left:.2em;margin-right:.5em;opacity:.5;position:relative;width:1em}pluto-tree-more.loading:before{animation:loadspin 3s ease-in-out infinite;background-image:url(sync-outline.9a1bd27b.svg)}@keyframes loadspin{0%{transform:rotate(0deg)}25%{transform:rotate(180deg)}50%{transform:rotate(180deg)}75%{transform:rotate(1turn)}to{transform:rotate(1turn)}}pluto-tree.collapsed pluto-tree-more{margin:0}pluto-tree.collapsed pluto-tree-more:before{background-image:url(ellipsis-horizontal.c9a6cc29.svg)}pluto-tree.collapsed img{max-height:4rem;max-width:4rem}pluto-tree img{max-height:8rem;max-width:12rem}pluto-tree p-r pre{white-space:pre;word-break:normal}jlerror{background-color:var(--code-section-bg-color);border:3px solid var(--pkg-terminal-border-color);border-radius:.6em;display:block;font-family:var(--julia-mono-font-stack);font-size:.75rem;margin:1em 0;overflow-wrap:break-word;padding:1em}jlerror>header{background:var(--white);border-left:3px solid var(--jlerror-header-color);border-radius:3px;color:var(--jlerror-header-color);padding:.7rem}jlerror>header>p{margin-block-end:.2em;white-space:pre-wrap}jlerror>header>p:first-child{font-weight:700}jlerror .stacktrace-header{font-family:var(--system-ui-font-stack)}jlerror .stacktrace-header>secret-h1{font-size:1.9rem;font-weight:700}jlerror>section{border-block-start:3px dashed var(--pkg-terminal-border-color);margin-block-start:1rem;padding-block-start:1rem}jlerror>section>ol{line-height:1.6}jlerror>section>ol>li.from_this_notebook{--bg:var(--jl-info-acccolor);background:var(--bg);border-radius:.6em;outline:3px solid var(--bg);padding:.4em .2em}jlerror>section .classical-frame>mark{background:var(--jlerror-mark-bg-color);border-radius:6px;color:var(--jlerror-mark-color);font-family:var(--julia-mono-font-stack);font-variant-ligatures:none}jlerror>section .classical-frame>em>a[href]{background:var(--jlerror-a-bg-color);border-left:3px solid var(--jlerror-a-border-left-color);border-radius:4px;padding:1px 7px;text-decoration:none}jlerror>section .classical-frame>em>a[href].remote-url{filter:hue-rotate(160deg)}jlerror>section li.from_this_notebook:not(.from_this_cell) .classical-frame>em>a[href]{filter:hue-rotate(50deg)}jlerror>section .classical-frame>span{opacity:.4;padding:0 .2em}jlerror li::marker{background:red;border:3px solid red;color:var(--pluto-logs-key-color);font-weight:900}jlerror li a.frame-line-preview{--br:0.6em;--crop:-0.5em;border:3px solid var(--cm-clickable-underline);border-radius:var(--br);display:block;text-decoration:none}jlerror li .frame-line-preview pre:not(.asdfdsaf){background-color:var(--code-background);border-radius:var(--br);display:block;overflow:hidden;padding:0;position:relative}jlerror li:not(.from_this_cell) .frame-line-preview pre:after{bottom:0;content:"cell preview";display:block;font-weight:900;opacity:.6;position:absolute;right:1ch}jlerror li .frame-line-preview pre>code{padding:0}jlerror li .frame-line-preview pre>code:not(:only-child).frame-line{background:var(--cm-highlighted)}jlerror li .frame-line-preview pre>code:not(.frame-line){opacity:.7}jlerror li .frame-line-preview pre>code:before{color:var(--cm-line-numbers-color);content:var(--before-content);display:inline-block;margin-right:.7em;text-align:right;width:2ch}jlerror li .frame-line-preview pre>code:first-of-type:not(.frame-line){margin-top:var(--crop)}jlerror li .frame-line-preview pre>code:last-of-type:not(.frame-line){margin-bottom:var(--crop)}table.pluto-table{table-layout:fixed}table.pluto-table td{max-width:300px;overflow:auto}@supports (-moz-appearance:none){table.pluto-table td{max-width:unset;overflow:visible}table.pluto-table td>div{max-width:300px;overflow:auto}}table.pluto-table .schema-types{color:var(--pluto-schema-types-color);font-family:var(--julia-mono-font-stack);font-size:.75rem;opacity:0}table.pluto-table .schema-types th{background-color:var(--main-bg-color);border-bottom:1px solid var(--pluto-schema-types-border-color);height:2rem}table.pluto-table thead:hover .schema-types{opacity:1}table.pluto-table .schema-names th{transform:translateY(.5em);transition:transform .1s ease-in-out}table.pluto-table .schema-names th:first-child,table.pluto-table .schema-types th:first-child{left:-10px;z-index:2}table.pluto-table .schema-names th,table.pluto-table .schema-types th:first-child{background-color:var(--main-bg-color);height:2rem;position:sticky;top:calc(.25rem - var(--pluto-cell-spacing));z-index:1}table.pluto-table thead:hover .schema-names th{transform:translate(0)}table.pluto-table tbody th:first-child{background-color:var(--main-bg-color);left:-10px;position:sticky}table.pluto-table .pluto-tree-more-td{overflow:unset;text-align:left}table.pluto-table .pluto-tree-more-td pluto-tree-more{left:0;max-width:650px;overflow:unset;position:sticky;top:2rem}table.pluto-table tr.empty div{align-items:center;display:flex;flex-flow:column nowrap;font-size:1.5rem;justify-content:center;width:100%}table.pluto-table tr.empty small{font-size:.5rem}pluto-tree.collapsed p-v>pre{max-height:2em;overflow-y:hidden}
\ No newline at end of file
diff --git a/frontend-dist/editor.8a3292da.js b/frontend-dist/editor.8a3292da.js
new file mode 100644
index 0000000000..09d3c34c94
--- /dev/null
+++ b/frontend-dist/editor.8a3292da.js
@@ -0,0 +1 @@
+function ismodern(){try{return Boolean(String.prototype.replaceAll)}catch(e){return!1}}window.addEventListener("DOMContentLoaded",(function(){ismodern()||(document.body.innerHTML="
You need a shiny new browser to use Pluto!
The latest versions of Firefox and Chrome will work best.
")}));
\ No newline at end of file
diff --git a/frontend-dist/editor.90ede145.js b/frontend-dist/editor.90ede145.js
new file mode 100644
index 0000000000..c922511721
--- /dev/null
+++ b/frontend-dist/editor.90ede145.js
@@ -0,0 +1,7 @@
+/*! iFrame Resizer (iframeSizer.min.js ) - v4.2.11 - 2020-06-02
+ * Desc: Force cross domain iframes to size to content.
+ * Requires: iframeResizer.contentWindow.min.js to be loaded into the target frame.
+ * Copyright: (c) 2020 David J. Bradshaw - dave@bradshaw.net
+ * License: MIT
+ */
+!function(e){if("undefined"!=typeof window){var n,i=0,t=!1,o=!1,r=7,a="[iFrameSizer]",s=a.length,d=null,c=window.requestAnimationFrame,u={max:1,scroll:1,bodyScroll:1,documentElementScroll:1},f={},l=null,m={autoResize:!0,bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!1,enablePublicMethods:!0,heightCalculationMethod:"bodyOffset",id:"iFrameResizer",interval:32,log:!1,maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:"parent",scrolling:!1,sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:"scroll",onClose:function(){return!0},onClosed:function(){},onInit:function(){},onMessage:function(){I("onMessage function not defined")},onResized:function(){},onScroll:function(){return!0}},g={};window.jQuery&&((n=window.jQuery).fn?n.fn.iFrameResize||(n.fn.iFrameResize=function(e){return this.filter("iframe").each((function(n,i){H(i,e)})).end()}):v("","Unable to bind to jQuery, it is not fully loaded.")),"function"==typeof define&&define.amd?define([],B):"object"==typeof module&&"object"==typeof module.exports&&(module.exports=B()),window.iFrameResize=window.iFrameResize||B()}function h(){return window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver}function w(e,n,i){e.addEventListener(n,i,!1)}function p(e,n,i){e.removeEventListener(n,i,!1)}function b(e){return f[e]?f[e].log:t}function y(e,n){x("log",e,n,b(e))}function v(e,n){x("info",e,n,b(e))}function I(e,n){x("warn",e,n,!0)}function x(e,n,i,t){!0===t&&"object"==typeof window.console&&console[e](function(e){return a+"["+function(e){var n="Host page: "+e;return window.top!==window.self&&(n=window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+": "+e:"Nested host page: "+e),n}(e)+"]"}(n),i)}function F(e){function n(){i("Height"),i("Width"),C((function(){W(B),R(L),m("onResized",B)}),B,"init")}function i(e){var n=Number(f[L]["max"+e]),i=Number(f[L]["min"+e]),t=e.toLowerCase(),o=Number(B[t]);y(L,"Checking "+t+" is in range "+i+"-"+n),of[g]["max"+e])throw new Error("Value for min"+e+" can not be greater than max"+e)}g in f&&"iFrameResizer"in n?I(g,"Ignored iFrame, already setup."):(l=(l=o)||{},f[g]={firstRun:!0,iframe:n,remoteHost:n.src&&n.src.split("/").slice(0,3).join("/")},function(e){if("object"!=typeof e)throw new TypeError("Options is not an object")}(l),Object.keys(l).forEach((function(e){var n=e.split("Callback");if(2===n.length){var i="on"+n[0].charAt(0).toUpperCase()+n[0].slice(1);this[i]=this[e],delete this[e],I(g,"Deprecated: '"+e+"' has been renamed '"+i+"'. The old method will be removed in the next major version.")}}),l),function(e){for(var n in m)Object.prototype.hasOwnProperty.call(m,n)&&(f[g][n]=Object.prototype.hasOwnProperty.call(e,n)?e[n]:m[n])}(l),f[g]&&(f[g].targetOrigin=!0===f[g].checkOrigin?function(e){return""===e||null!==e.match(/^(about:blank|javascript:|file:\/\/)/)?"*":e}(f[g].remoteHost):"*"),function(){switch(y(g,"IFrame scrolling "+(f[g]&&f[g].scrolling?"enabled":"disabled")+" for "+g),n.style.overflow=!1===(f[g]&&f[g].scrolling)?"hidden":"auto",f[g]&&f[g].scrolling){case"omit":break;case!0:n.scrolling="yes";break;case!1:n.scrolling="no";break;default:n.scrolling=f[g]?f[g].scrolling:"no"}}(),b("Height"),b("Width"),p("maxHeight"),p("minHeight"),p("maxWidth"),p("minWidth"),"number"!=typeof(f[g]&&f[g].bodyMargin)&&"0"!==(f[g]&&f[g].bodyMargin)||(f[g].bodyMarginV1=f[g].bodyMargin,f[g].bodyMargin=f[g].bodyMargin+"px"),s=S(g),(c=h())&&(d=c,n.parentNode&&new d((function(e){e.forEach((function(e){Array.prototype.slice.call(e.removedNodes).forEach((function(e){e===n&&z(n)}))}))})).observe(n.parentNode,{childList:!0})),w(n,"load",(function(){N("iFrame.onload",s,n,e,!0),function(){var e=f[g]&&f[g].firstRun,i=f[g]&&f[g].heightCalculationMethod in u;!e&&i&&E({iframe:n,height:0,width:0,type:"init"})}()})),N("init",s,n,e,!0),f[g]&&(f[g].iframe.iFrameResizer={close:z.bind(null,f[g].iframe),removeListeners:k.bind(null,f[g].iframe),resize:N.bind(null,"Window resize","resize",f[g].iframe),moveToAnchor:function(e){N("Move to anchor","moveToAnchor:"+e,f[g].iframe,g)},sendMessage:function(e){N("Send Message","message:"+(e=JSON.stringify(e)),f[g].iframe,g)}}))}function j(e,n){null===l&&(l=setTimeout((function(){l=null,e()}),n))}function P(){"hidden"!==document.visibilityState&&(y("document","Trigger event: Visiblity change"),j((function(){A("Tab Visable","resize")}),16))}function A(e,n){Object.keys(f).forEach((function(i){!function(e){return f[e]&&"parent"===f[e].resizeFrom&&f[e].autoResize&&!f[e].firstRun}(i)||N(e,n,f[i].iframe,i)}))}function B(){function n(e,n){n&&(function(){if(!n.tagName)throw new TypeError("Object is not a valid DOM element");if("IFRAME"!==n.tagName.toUpperCase())throw new TypeError("Expected