diff --git a/static/assets/app.js b/static/assets/app.js index 48187c615..49ab24226 100644 --- a/static/assets/app.js +++ b/static/assets/app.js @@ -394,7 +394,7 @@ ${r.message}`)))}function Ine(){return import("./mermaid.core-SWT5URIY.js" } `,document.body.appendChild(this._styleElement),this.update(t)}update(e){let t=[{range:e,options:{className:this._className}}];this._decorations=this._editor.deltaDecorations(this._decorations,t)}dispose(){this._editor.deltaDecorations(this._decorations,[]),this._styleElement.remove()}};function sU(i,e){let t=e;for(;!i.endsWith(t);)t=t.slice(0,-1);return t.length}var _f=class{constructor(e,t){this._editor=e,this._statusDecoration=new Gx(e,t.line,t.status),t.status==="failed"&&(this._detailsWidget=new s2(e,t))}update(e){this._statusDecoration.update(e.status),e.status==="failed"&&(this._detailsWidget&&this._detailsWidget.dispose(),this._detailsWidget=new s2(this._editor,e))}dispose(){this._statusDecoration.dispose(),this._detailsWidget&&this._detailsWidget.dispose()}},Gx=class{constructor(e,t,n){this._editor=e,this._lineNumber=t,this._decorations=[],this.update(n)}update(e){let t=[{range:new vt.Range(this._lineNumber,1,this._lineNumber,1),options:{isWholeLine:!0,linesDecorationsClassName:`doctest-status-decoration-${e}`}}];this._decorations=this._editor.deltaDecorations(this._decorations,t)}dispose(){this._editor.deltaDecorations(this._decorations,[])}},s2=class{constructor(e,t){this._editor=e;let{line:n,end_line:r,details:o,column:s}=t,a=o.join(` `),l=o.length,c=this._editor.getOption(vt.editor.EditorOption.fontSize),d=this._editor.getOption(vt.editor.EditorOption.lineHeight),h=document.createElement("div");h.innerHTML=a,h.classList.add("doctest-details-widget","editor-theme-aware-ansi"),h.style.fontSize=`${c}px`,this._overlayWidget={getId:()=>`livebook.doctest.overlay.${n}`,getDomNode:()=>h,getPosition:()=>null},this._editor.addOverlayWidget(this._overlayWidget),this._editor.changeViewZones(u=>{this._viewZone=u.addZone({afterLineNumber:r,heightInPx:l*d+12,domNode:document.createElement("div"),onDomNodeTop:m=>{h.style.top=`${m}px`;let p=this._editor.getDomNode().querySelector(".margin-view-overlays").offsetWidth;h.style.paddingLeft=`calc(${p}px + ${s}ch)`},onComputedHeight:m=>{h.style.height=`${m}px`}})})}dispose(){this._editor.removeOverlayWidget(this._overlayWidget),this._editor.changeViewZones(e=>{e.removeZone(this._viewZone)})}};var $x=class{constructor(e,t,n,r,o,s,a,l,c,d,h){this.hook=e,this.container=t,this.cellId=n,this.source=o,this.language=a,this.intellisense=l,this.readOnly=c,this._onMount=[],this._onChange=[],this._onBlur=[],this._onCursorSelectionChange=[],this._remoteUserByClientId={},this._doctestByLine={},this._initializeWidgets=()=>{this.setCodeMarkers(d),h.forEach(m=>{this.updateDoctest(m)})};let u=new ff(e,n,r);this.editorClient=new mf(u,s),this.editorClient.onDelta(m=>{this.source=m.applyToString(this.source),this._onChange.forEach(p=>p(this.source))})}isMounted(){return!!this.editor}mount(){if(this.isMounted())throw new Error("The editor is already mounted");this._mountEditor(),this.intellisense&&this._setupIntellisense(),this.editorClient.setEditorAdapter(new pf(this.editor)),this.editor.onDidFocusEditorWidget(()=>{this.editor.updateOptions({matchBrackets:"always"})}),this.editor.onDidBlurEditorWidget(()=>{this.editor.updateOptions({matchBrackets:"never"}),this._onBlur.forEach(e=>e())}),this.editor.onDidChangeCursorSelection(e=>{this._onCursorSelectionChange.forEach(t=>t(e.selection))}),this._onMount.forEach(e=>e())}_ensureMounted(){this.isMounted()||this.mount()}getSource(){return this.source}onMount(e){this._onMount.push(e)}onChange(e){this._onChange.push(e)}onCursorSelectionChange(e){this._onCursorSelectionChange.push(e)}onBlur(e){this._onBlur.push(e)}focus(){this._ensureMounted(),this.editor.focus()}blur(){this._ensureMounted(),this.editor.hasTextFocus()&&document.activeElement.blur()}insert(e){this._ensureMounted();let t=this.editor.getSelection();this.editor.getModel().pushEditOperations([],[{forceMoveMarkers:!0,range:t,text:e}])}dispose(){if(this.isMounted()){this.editor.dispose();let e=this.editor.getModel();e&&e.dispose()}}updateUserSelection(e,t){this._ensureMounted(),this._remoteUserByClientId[e.id]?this._remoteUserByClientId[e.id].update(t):this._remoteUserByClientId[e.id]=new gf(this.editor,t,e.hex_color,e.name)}removeUserSelection(e){this._ensureMounted(),this._remoteUserByClientId[e.id]&&(this._remoteUserByClientId[e.id].dispose(),delete this._remoteUserByClientId[e.id])}updateDoctest(e){this._ensureMounted(),this._doctestByLine[e.line]?this._doctestByLine[e.line].update(e):this._doctestByLine[e.line]=new _f(this.editor,e)}clearDoctests(){this._ensureMounted(),Object.values(this._doctestByLine).forEach(e=>e.dispose()),this._doctestByLine={}}setCodeMarkers(e){this._ensureMounted();let t="livebook.code-marker",n=e.map(r=>{let o=this.editor.getModel().getLineContent(r.line),[,s,a]=o.match(/^(\s*).*?(\s*)$/);return{startLineNumber:r.line,startColumn:s.length+1,endLineNumber:r.line,endColumn:o.length+1-a.length,message:r.description,severity:{error:vt.MarkerSeverity.Error,warning:vt.MarkerSeverity.Warning}[r.severity]}});vt.editor.setModelMarkers(this.editor.getModel(),t,n)}_mountEditor(){let e=nr.get();this.editor=vt.editor.create(this.container,{language:this.language,value:this.source,readOnly:this.readOnly,scrollbar:{vertical:"hidden",alwaysConsumeMouseWheel:!1},minimap:{enabled:!1},overviewRulerLanes:0,scrollBeyondLastLine:!1,guides:{indentation:!1},occurrencesHighlight:!1,renderLineHighlight:"none",theme:e.editor_theme,fontFamily:"JetBrains Mono, Droid Sans Mono, monospace",fontSize:e.editor_font_size,tabIndex:-1,tabSize:2,autoIndent:!0,formatOnType:!0,formatOnPaste:!0,quickSuggestions:this.intellisense&&e.editor_auto_completion,tabCompletion:"on",suggestSelection:"first",wordBasedSuggestions:!this.intellisense,parameterHints:this.intellisense&&e.editor_auto_signature,wordWrap:this.language==="markdown"&&e.editor_markdown_word_wrap?"on":"off"}),this.editor.addAction({contextMenuGroupId:"word-wrapping",id:"enable-word-wrapping",label:"Enable word wrapping",precondition:"config.editor.wordWrap == off",keybindings:[vt.KeyMod.Alt|vt.KeyCode.KeyZ],run:r=>r.updateOptions({wordWrap:"on"})}),this.editor.addAction({contextMenuGroupId:"word-wrapping",id:"disable-word-wrapping",label:"Disable word wrapping",precondition:"config.editor.wordWrap == on",keybindings:[vt.KeyMod.Alt|vt.KeyCode.KeyZ],run:r=>r.updateOptions({wordWrap:"off"})}),new ResizeObserver(r=>{r.forEach(o=>{this.container.offsetHeight>0&&this.editor.layout()})}).observe(this.container),this.editor.onDidContentSizeChange(()=>{let r=this.editor.getContentHeight();this.container.style.height=`${r}px`});let n=this.editor.getContribution("editor.controller.quickInput").widget.domNode;n.remove(),this.editor._modelData.view._contentWidgets.overflowingContentWidgetsDomNode.domNode.appendChild(n),this._initializeWidgets()}_setupIntellisense(){let e=nr.get();this.handlerByRef={},this.editor.getModel().__getCompletionItems__=(n,r)=>{let s=n.getLineContent(r.lineNumber).slice(0,r.column-1);return this._asyncIntellisenseRequest("completion",{hint:s,editor_auto_completion:e.editor_auto_completion}).then(a=>({suggestions:qne(a.items,e).map(c=>{let d=sU(s,c.insertText),h=new vt.Range(r.lineNumber,r.column-d,r.lineNumber,r.column);return Qe(me({},c),{range:h})})})).catch(()=>null)},this.editor.getModel().__getHover__=(n,r)=>{this.hoverContentProcessed=!1,this.hoverContentEl||(this.hoverContentEl=this.container.querySelector(".monaco-hover-content"),this.hoverContentEl?new MutationObserver(a=>{this.hoverContentProcessed||(oU(this.hoverContentEl,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1}],throwOnError:!1}),this.hoverContentProcessed=!0)}).observe(this.hoverContentEl,{childList:!0}):console.warn("Could not find an element matching .monaco-hover-content"));let o=n.getLineContent(r.lineNumber),s=r.column;return this._asyncIntellisenseRequest("details",{line:o,column:s}).then(a=>{let l=a.contents.map(d=>({value:d,isTrusted:!0})),c=new vt.Range(r.lineNumber,a.range.from,r.lineNumber,a.range.to);return{contents:l,range:c}}).catch(()=>null)};let t={codeUntilLastStop:null,response:null};this.editor.getModel().__getSignatureHelp__=(n,r)=>{let o=n.getLinesContent(),s=r.lineNumber-1,a=o.slice(0,s),l=o[s].slice(0,r.column-1),c=[...a,l].join(` -`),d=c.replace(/[^(),\s]*?$/,"").replace(/([(),])\s*$/,"$1");return d===t.codeUntilLastStop?{value:aU(t.response),dispose:()=>{}}:this._asyncIntellisenseRequest("signature",{hint:c}).then(h=>(t.response=h,t.codeUntilLastStop=d,{value:aU(h),dispose:()=>{}})).catch(()=>null)},this.editor.getModel().__getDocumentFormattingEdits__=n=>{let r=n.getValue();return this._asyncIntellisenseRequest("format",{code:r}).then(o=>(this.setCodeMarkers(o.code_markers),o.code?[{range:n.getFullModelRange(),text:o.code}]:[])).catch(()=>null)},this.hook.handleEvent("intellisense_response",({ref:n,response:r})=>{let o=this.handlerByRef[n];o&&(o(r),delete this.handlerByRef[n])})}_asyncIntellisenseRequest(e,t){return new Promise((n,r)=>{this.hook.pushEvent("intellisense_request",me({cell_id:this.cellId,type:e},t),({ref:o})=>{o?this.handlerByRef[o]=s=>{s?n(s):r(null)}:r(null)})})}};function qne(i,e){return i.map(t=>Gne(t,e)).map((t,n)=>Qe(me({},t),{sortText:Yne(n,i.length)}))}function Gne(i,e){return{label:i.label,kind:$ne(i.kind),detail:i.detail,documentation:i.documentation&&{value:i.documentation,isTrusted:!0},insertText:i.insert_text,insertTextRules:vt.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:e.editor_auto_signature?{title:"Trigger Parameter Hint",id:"editor.action.triggerParameterHints"}:null}}function $ne(i){switch(i){case"function":return vt.languages.CompletionItemKind.Function;case"module":return vt.languages.CompletionItemKind.Module;case"struct":return vt.languages.CompletionItemKind.Struct;case"interface":return vt.languages.CompletionItemKind.Interface;case"type":return vt.languages.CompletionItemKind.Class;case"variable":return vt.languages.CompletionItemKind.Variable;case"field":return vt.languages.CompletionItemKind.Field;case"keyword":return vt.languages.CompletionItemKind.Keyword;default:return null}}function Yne(i,e){return String(i).padStart(e,"0")}function aU(i){return{activeSignature:0,activeParameter:i.active_argument,signatures:i.signature_items.map(e=>({label:e.signature,parameters:e.arguments.map(t=>({label:t})),documentation:null}))}}var lU=$x;var Xne={mounted(){this.props=this.getProps(),this.handleEvent(`cell_editor_init:${this.props.cellId}:${this.props.tag}`,({source:i,revision:e,doctest_reports:t,code_markers:n})=>{let r=this.el.querySelector("[data-el-editor-container]"),o=document.createElement("div");r.appendChild(o),this.liveEditor=new lU(this,o,this.props.cellId,this.props.tag,i,e,this.props.language,this.props.intellisense,this.props.readOnly,n,t),this.liveEditor.onMount(()=>{let s=r.querySelector("[data-el-skeleton]");s&&s.remove()}),this.el.dispatchEvent(new CustomEvent("lb:cell:editor_created",{detail:{tag:this.props.tag,liveEditor:this.liveEditor},bubbles:!0}))})},disconnected(){this.el.removeAttribute("id")},destroyed(){this.liveEditor&&(this.el.dispatchEvent(new CustomEvent("lb:cell:editor_removed",{detail:{tag:this.props.tag},bubbles:!0})),this.liveEditor.dispose())},getProps(){return{cellId:qe(this.el,"data-cell-id"),tag:qe(this.el,"data-tag"),language:qe(this.el,"data-language"),intellisense:qe(this.el,"data-intellisense",ba),readOnly:qe(this.el,"data-read-only",ba)}}},cU=Xne;var Yx="data-js-dragging",Qne={mounted(){this.el.addEventListener("dragenter",i=>{this.el.setAttribute(Yx,"")}),this.el.addEventListener("dragleave",i=>{this.el.contains(i.relatedTarget)||this.el.removeAttribute(Yx)}),this.el.addEventListener("drop",i=>{this.el.removeAttribute(Yx)})}},dU=Qne;var Jne={mounted(){let i=nr.get(),e=this.el.querySelector('[name="editor_auto_completion"][value="true"]'),t=this.el.querySelector('[name="editor_auto_signature"][value="true"]'),n=this.el.querySelector('[name="editor_font_size"][value="true"]'),r=this.el.querySelector('[name="editor_light_theme"][value="true"]'),o=this.el.querySelector('[name="editor_markdown_word_wrap"][value="true"]');e.checked=i.editor_auto_completion,t.checked=i.editor_auto_signature,n.checked=i.editor_font_size===hf.large,r.checked=i.editor_theme===R1.light,o.checked=i.editor_markdown_word_wrap,e.addEventListener("change",s=>{nr.update({editor_auto_completion:s.target.checked})}),t.addEventListener("change",s=>{nr.update({editor_auto_signature:s.target.checked})}),n.addEventListener("change",s=>{nr.update({editor_font_size:s.target.checked?hf.large:hf.normal})}),r.addEventListener("change",s=>{nr.update({editor_theme:s.target.checked?R1.light:R1.default})}),o.addEventListener("change",s=>{nr.update({editor_markdown_word_wrap:s.target.checked})})}},hU=Jne;var OE=(i,e,t)=>{if(!e.has(i))throw TypeError("Cannot "+t)},pl=(i,e,t)=>(OE(i,e,"read from private field"),t?t.call(i):e.get(i)),ml=(i,e,t)=>{if(e.has(i))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(i):e.set(i,t)},iE=(i,e,t,n)=>(OE(i,e,"write to private field"),n?n.call(i,t):e.set(i,t),t),Jo=(i,e,t)=>(OE(i,e,"access private method"),t),Zne="14.0";function ere(i,e,t){let n=`https://cdn.jsdelivr.net/npm/emojibase-data@${e}/${i}`;return typeof t=="function"?n=t(i,e):typeof t=="string"&&(n=`${t}/${i}`),n}async function PE(i,e={}){let u=e,{local:t=!1,version:n="latest",cdnUrl:r}=u,o=Zo(u,["local","version","cdnUrl"]),s=ere(i,n,r),a=t?localStorage:sessionStorage,l=`emojibase/${n}/${i}`,c=a.getItem(l);if(c)return Promise.resolve(JSON.parse(c));let d=await fetch(s,me({credentials:"omit",mode:"cors",redirect:"error"},o));if(!d.ok)throw new Error("Failed to load Emojibase dataset.");let h=await d.json();try{a.setItem(l,JSON.stringify(h))}catch(m){}return h}var tre={discord:"joypixels",slack:"iamcal"};async function uU(i,e,t){var n;return PE(`${i}/shortcodes/${(n=tre[e])!==null&&n!==void 0?n:e}.json`,t)}function Sf(i,e){if(e.length===0)return i;let t=new Set(i.shortcodes);return e.forEach(n=>{let r=n[i.hexcode];Array.isArray(r)?r.forEach(o=>t.add(o)):r&&t.add(r)}),i.shortcodes=[...t],i.skins&&i.skins.forEach(n=>{Sf(n,e)}),i}function ire(i,e=[]){let t=[];return i.forEach(n=>{if(n.skins){let r=n,{skins:o}=r,s=Zo(r,["skins"]);t.push(Sf(s,e)),o.forEach(a=>{let l=me({},a);s.tags&&(l.tags=[...s.tags]),t.push(Sf(l,e))})}else t.push(Sf(n,e))}),t}function nre(i,e){return e.length===0||i.forEach(t=>{Sf(t,e)}),i}async function SU(i,e={}){let l=e,{compact:t=!1,flat:n=!1,shortcodes:r=[]}=l,o=Zo(l,["compact","flat","shortcodes"]),s=await PE(`${i}/${t?"compact":"data"}.json`,o),a=[];return r.length>0&&(a=await Promise.all(r.map(c=>{let d;if(c.includes("/")){let[h,u]=c.split("/");d=uU(h,u,o)}else d=uU(i,c,o);return d.catch(()=>({}))}))),n?ire(s,a):nre(s,a)}async function CU(i,e){return PE(`${i}/messages.json`,e)}function Xx(i,e){let t=i.target.closest("[data-emoji]");if(t){let n=e.find(r=>r.emoji===t.dataset.emoji);if(n)return n}return null}function wU(i){var e;let t=(e=window.matchMedia)==null?void 0:e.call(window,"(prefers-reduced-motion: reduce)");return i.animate&&!(t!=null&&t.matches)}function mU(i,e){return i.toLowerCase().includes(e.toLowerCase())}function rre(i,e){let t=null;return()=>{t||(t=window.setTimeout(()=>{i(),t=null},e))}}function ore(i,e){let t=null;return(...n)=>{t&&window.clearTimeout(t),t=window.setTimeout(()=>{i(...n),t=null},e)}}function fh(i,e,t,n){if(wU(n)&&i.animate)return i.animate(e,t).finished;let r=t.direction==="normal"?1:0,o=Object.entries(e).reduce((s,[a,l])=>Qe(me({},s),{[a]:l[r]}),{});return Object.assign(i.style,o),Promise.resolve()}function nE(i){var e;let t=document.createElement("template");return t.innerHTML=i,(e=t.content)==null?void 0:e.firstElementChild}async function sre(i){let e=new TextEncoder().encode(i),t=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}function wn(...i){return i.reduce((e,t)=>Qe(me({},e),{[t]:FE(t)}),{})}function FE(i){return`picmo__${i}`}function d2(i){for(;i.firstChild;)i.removeChild(i.firstChild);return i}function F1(i,...e){d2(i).append(...e)}function xU(i){try{return window[i].length,!0}catch(e){return!1}}function are(){return xU("sessionStorage")}function lre(){return xU("localStorage")}function EU(){let i={};return{getItem:e=>i[e],setItem:(e,t)=>i[e]=t,length:Object.keys(i).length,clear:()=>i={},key:e=>Object.keys(i)[e],removeItem:e=>delete i[e]}}function wf(i){var e;return{emoji:i.emoji,label:i.label,tags:i.tags,skins:(e=i.skins)==null?void 0:e.map(t=>wf(t)),order:i.order,custom:!1,hexcode:i.hexcode,version:i.version}}function _2(i,e,t){var n;return t&&!t.some(r=>r.order===i.group)?!1:mU(i.label,e)||((n=i.tags)==null?void 0:n.some(r=>mU(r,e)))}var v2=class{constructor(e="en"){this.locale=e}},cre=[(i,e)=>(i.hexcode==="1F91D"&&e<14&&(i.skins=[]),i),(i,e)=>(i.skins&&(i.skins=i.skins.filter(t=>!t.version||t.version<=e)),i)];function dre(i,e){return cre.some(t=>t(i,e)===null)?null:i}function b2(i,e){return i.filter(t=>dre(t,e)!==null)}var Qx={};function TU(i){return Qx[i]||(Qx[i]=new rE(i)),Qx[i]}TU.deleteDatabase=i=>{};var rE=class extends v2{open(){return Promise.resolve()}delete(){return Promise.resolve()}close(){}isPopulated(){return Promise.resolve(!1)}getEmojiCount(){return Promise.resolve(this.emojis.length)}getEtags(){return Promise.resolve({foo:"bar"})}getHash(){return Promise.resolve("")}populate(e){return this.categories=e.groups,this.emojis=e.emojis,Promise.resolve()}getCategories(e){var t;let n=this.categories.filter(r=>r.key!=="component");if(e.showRecents&&n.unshift({key:"recents",order:-1}),(t=e.custom)!=null&&t.length&&n.push({key:"custom",order:10}),e.categories){let r=e.categories;n=n.filter(o=>r.includes(o.key)),n.sort((o,s)=>r.indexOf(o.key)-r.indexOf(s.key))}else n.sort((r,o)=>r.order-o.order);return Promise.resolve(n)}getEmojis(e,t){let n=this.emojis.filter(r=>r.group===e.order).filter(r=>r.version<=t).sort((r,o)=>r.order!=null&&o.order!=null?r.order-o.order:0).map(wf);return Promise.resolve(b2(n,t))}searchEmojis(e,t,n,r){let o=this.emojis.filter(l=>_2(l,e,r)&&l.version<=n).map(wf),s=t.filter(l=>_2(l,e,r)),a=[...b2(o,n),...s];return Promise.resolve(a)}setMeta(e){this.meta=e}};!are()&&typeof window<"u"&&(console.warn("[picmo] sessionStorage not available, falling back to simple in-memory storage"),Object.defineProperty(window,"sessionStorage",{value:EU()}));function hre(i,e){let t=`https://cdn.jsdelivr.net/npm/emojibase-data@${i}/${e}`;return{emojisUrl:`${t}/data.json`,messagesUrl:`${t}/messages.json`}}async function pU(i){try{return(await fetch(i,{method:"HEAD"})).headers.get("etag")}catch(e){return null}}function ure(i){let{emojisUrl:e,messagesUrl:t}=hre("latest",i);try{return Promise.all([pU(e),pU(t)])}catch(n){return Promise.all([null,null])}}async function mre(i,e,t){let n;try{n=await i.getEtags()}catch(s){n={}}let{storedEmojisEtag:r,storedMessagesEtag:o}=n;if(t!==o||e!==r){let[s,a]=await Promise.all([CU(i.locale),SU(i.locale)]);await i.populate({groups:s.groups,emojis:a,emojisEtag:e,messagesEtag:t})}}async function pre(i,e){let t=await i.getHash();return e!==t}async function IU(i,e,t){let n=t||e(i);try{await n.open()}catch(r){console.warn("[picmo] IndexedDB not available, falling back to InMemoryStoreFactory"),n=TU(i)}return n}async function fre(i,e,t){let n=await IU(i,e,t),[r,o]=await ure(i);if(await n.isPopulated())r&&o&&await mre(n,r,o);else{let[s,a]=await Promise.all([CU(i),SU(i)]);await n.populate({groups:s.groups,emojis:a,emojisEtag:r,messagesEtag:o})}return n}async function gre(i,e,t,n,r){let o=await IU(i,e,r),s=await sre(n);return(!await o.isPopulated()||await pre(o,s))&&await o.populate({groups:t.groups,emojis:n,hash:s}),o}async function kU(i,e,t,n,r){return t&&n?gre(i,e,t,n,r):fre(i,e,r)}var xf=class{constructor(){this.handleKeyDown=this.handleKeyDown.bind(this)}activate(e){this.rootElement=e,this.rootElement.addEventListener("keydown",this.handleKeyDown)}deactivate(){var e;(e=this.rootElement)==null||e.removeEventListener("keydown",this.handleKeyDown)}get focusableElements(){return this.rootElement.querySelectorAll('input, [tabindex="0"]')}get lastFocusableElement(){return this.focusableElements[this.focusableElements.length-1]}get firstFocusableElement(){return this.focusableElements[0]}checkFocus(e,t,n){e.target===t&&(n.focus(),e.preventDefault())}handleKeyDown(e){e.key==="Tab"&&this.checkFocus(e,e.shiftKey?this.firstFocusableElement:this.lastFocusableElement,e.shiftKey?this.lastFocusableElement:this.firstFocusableElement)}},{light:_re,dark:cYe,auto:dYe}=wn("light","dark","auto"),Ye=class{constructor({template:e,classes:t,parent:n}){this.isDestroyed=!1,this.appEvents={},this.uiEvents=[],this.uiElements={},this.ui={},this.template=e,this.classes=t,this.parent=n,this.keyBindingHandler=this.keyBindingHandler.bind(this)}initialize(){this.bindAppEvents()}setCustomEmojis(e){this.customEmojis=e}setEvents(e){this.events=e}setPickerId(e){this.pickerId=e}emit(e,...t){this.events.emit(e,...t)}setI18n(e){this.i18n=e}setRenderer(e){this.renderer=e}setEmojiData(e){this.emojiDataPromise=e,e.then(t=>{this.emojiData=t})}updateEmojiData(e){this.emojiData=e,this.emojiDataPromise=Promise.resolve(e)}setOptions(e){this.options=e}renderSync(e={}){return this.el=this.template.renderSync(me({classes:this.classes,i18n:this.i18n,pickerId:this.pickerId},e)),this.postRender(),this.el}async render(e={}){return await this.emojiDataPromise,this.el=await this.template.renderAsync(me({classes:this.classes,i18n:this.i18n,pickerId:this.pickerId},e)),this.postRender(),this.el}postRender(){this.bindUIElements(),this.bindKeyBindings(),this.bindUIEvents(),this.scheduleShowAnimation()}bindAppEvents(){Object.keys(this.appEvents).forEach(e=>{this.events.on(e,this.appEvents[e],this)}),this.events.on("data:ready",this.updateEmojiData,this)}unbindAppEvents(){Object.keys(this.appEvents).forEach(e=>{this.events.off(e,this.appEvents[e])}),this.events.off("data:ready",this.updateEmojiData)}keyBindingHandler(e){let t=this.keyBindings[e.key];t&&t.call(this,e)}bindKeyBindings(){this.keyBindings&&this.el.addEventListener("keydown",this.keyBindingHandler)}unbindKeyBindings(){this.keyBindings&&this.el.removeEventListener("keydown",this.keyBindingHandler)}bindUIElements(){this.ui=Object.keys(this.uiElements).reduce((e,t)=>Qe(me({},e),{[t]:this.el.querySelector(this.uiElements[t])}),{})}bindUIEvents(){this.uiEvents.forEach(e=>{e.handler=e.handler.bind(this),(e.target?this.ui[e.target]:this.el).addEventListener(e.event,e.handler,e.options)})}unbindUIEvents(){this.uiEvents.forEach(e=>{(e.target?this.ui[e.target]:this.el).removeEventListener(e.event,e.handler)})}destroy(){this.unbindAppEvents(),this.unbindUIEvents(),this.unbindKeyBindings(),this.el.remove(),this.isDestroyed=!0}scheduleShowAnimation(){if(this.parent){let e=new MutationObserver(t=>{let[n]=t;n.type==="childList"&&n.addedNodes[0]===this.el&&(wU(this.options)&&this.animateShow&&this.animateShow(),e.disconnect)});e.observe(this.parent,{childList:!0})}}static childEvent(e,t,n,r={}){return{target:e,event:t,handler:n,options:r}}static uiEvent(e,t,n={}){return{event:e,handler:t,options:n}}static byClass(e){return`.${e}`}},vre='',bre='',yre='',Sre='',Cre='',wre='',xre='',Ere='',Tre=` +`),d=c.replace(/[^(),\s]*?$/,"").replace(/([(),])\s*$/,"$1");return d===t.codeUntilLastStop?{value:aU(t.response),dispose:()=>{}}:this._asyncIntellisenseRequest("signature",{hint:c}).then(h=>(t.response=h,t.codeUntilLastStop=d,{value:aU(h),dispose:()=>{}})).catch(()=>null)},this.editor.getModel().__getDocumentFormattingEdits__=n=>{let r=n.getValue();return this._asyncIntellisenseRequest("format",{code:r}).then(o=>(this.setCodeMarkers(o.code_markers),o.code?[{range:n.getFullModelRange(),text:o.code}]:[])).catch(()=>null)},this.hook.handleEvent("intellisense_response",({ref:n,response:r})=>{let o=this.handlerByRef[n];o&&(o(r),delete this.handlerByRef[n])})}_asyncIntellisenseRequest(e,t){return new Promise((n,r)=>{this.hook.pushEvent("intellisense_request",me({cell_id:this.cellId,type:e},t),({ref:o})=>{o?this.handlerByRef[o]=s=>{s?n(s):r(null)}:r(null)})})}};function qne(i,e){return i.map(t=>Gne(t,e)).map((t,n)=>Qe(me({},t),{sortText:Yne(n,i.length)}))}function Gne(i,e){return{label:i.label,kind:$ne(i.kind),detail:i.detail,documentation:i.documentation&&{value:i.documentation,isTrusted:!0},insertText:i.insert_text,insertTextRules:vt.languages.CompletionItemInsertTextRule.InsertAsSnippet,command:e.editor_auto_signature?{title:"Trigger Parameter Hint",id:"editor.action.triggerParameterHints"}:null}}function $ne(i){switch(i){case"function":return vt.languages.CompletionItemKind.Function;case"module":return vt.languages.CompletionItemKind.Module;case"struct":return vt.languages.CompletionItemKind.Struct;case"interface":return vt.languages.CompletionItemKind.Interface;case"type":return vt.languages.CompletionItemKind.Class;case"variable":return vt.languages.CompletionItemKind.Variable;case"field":return vt.languages.CompletionItemKind.Field;case"keyword":return vt.languages.CompletionItemKind.Keyword;default:return null}}function Yne(i,e){return String(i).padStart(e,"0")}function aU(i){return{activeSignature:0,activeParameter:i.active_argument,signatures:i.signature_items.map(e=>({label:e.signature,parameters:e.arguments.map(t=>({label:t})),documentation:null}))}}var lU=$x;var Xne={mounted(){this.props=this.getProps(),this.handleEvent(`cell_editor_init:${this.props.cellId}:${this.props.tag}`,({source:i,revision:e,doctest_reports:t,code_markers:n})=>{let r=this.el.querySelector("[data-el-editor-container]"),o=document.createElement("div");r.appendChild(o),this.liveEditor=new lU(this,o,this.props.cellId,this.props.tag,i,e,this.props.language,this.props.intellisense,this.props.readOnly,n,t),this.liveEditor.onMount(()=>{let s=r.querySelector("[data-el-skeleton]");s&&s.remove()}),this.el.dispatchEvent(new CustomEvent("lb:cell:editor_created",{detail:{tag:this.props.tag,liveEditor:this.liveEditor},bubbles:!0}))})},disconnected(){this.el.removeAttribute("id")},destroyed(){this.liveEditor&&(this.el.dispatchEvent(new CustomEvent("lb:cell:editor_removed",{detail:{tag:this.props.tag},bubbles:!0})),this.liveEditor.dispose())},getProps(){return{cellId:qe(this.el,"data-cell-id"),tag:qe(this.el,"data-tag"),language:qe(this.el,"data-language"),intellisense:qe(this.el,"data-intellisense",ba),readOnly:qe(this.el,"data-read-only",ba)}}},cU=Xne;var Yx="data-js-dragging",Qne={mounted(){this.el.addEventListener("dragenter",i=>{this.el.setAttribute(Yx,"")}),this.el.addEventListener("dragleave",i=>{this.el.contains(i.relatedTarget)||this.el.removeAttribute(Yx)}),this.el.addEventListener("drop",i=>{this.el.removeAttribute(Yx)})}},dU=Qne;var Jne={mounted(){let i=nr.get(),e=this.el.querySelector('[name="editor_auto_completion"][value="true"]'),t=this.el.querySelector('[name="editor_auto_signature"][value="true"]'),n=this.el.querySelector('[name="editor_font_size"][value="true"]'),r=this.el.querySelector('[name="editor_light_theme"][value="true"]'),o=this.el.querySelector('[name="editor_markdown_word_wrap"][value="true"]');e.checked=i.editor_auto_completion,t.checked=i.editor_auto_signature,n.checked=i.editor_font_size===hf.large,r.checked=i.editor_theme===R1.light,o.checked=i.editor_markdown_word_wrap,e.addEventListener("change",s=>{nr.update({editor_auto_completion:s.target.checked})}),t.addEventListener("change",s=>{nr.update({editor_auto_signature:s.target.checked})}),n.addEventListener("change",s=>{nr.update({editor_font_size:s.target.checked?hf.large:hf.normal})}),r.addEventListener("change",s=>{nr.update({editor_theme:s.target.checked?R1.light:R1.default})}),o.addEventListener("change",s=>{nr.update({editor_markdown_word_wrap:s.target.checked})})}},hU=Jne;var OE=(i,e,t)=>{if(!e.has(i))throw TypeError("Cannot "+t)},pl=(i,e,t)=>(OE(i,e,"read from private field"),t?t.call(i):e.get(i)),ml=(i,e,t)=>{if(e.has(i))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(i):e.set(i,t)},iE=(i,e,t,n)=>(OE(i,e,"write to private field"),n?n.call(i,t):e.set(i,t),t),Jo=(i,e,t)=>(OE(i,e,"access private method"),t),Zne="14.0";function ere(i,e,t){let n=`https://cdn.jsdelivr.net/npm/emojibase-data@${e}/${i}`;return typeof t=="function"?n=t(i,e):typeof t=="string"&&(n=`${t}/${i}`),n}async function PE(i,e={}){let u=e,{local:t=!1,version:n="latest",cdnUrl:r}=u,o=Zo(u,["local","version","cdnUrl"]),s=ere(i,n,r),a=t?localStorage:sessionStorage,l=`emojibase/${n}/${i}`,c=a.getItem(l);if(c)return Promise.resolve(JSON.parse(c));let d=await fetch(s,me({credentials:"omit",mode:"cors",redirect:"error"},o));if(!d.ok)throw new Error("Failed to load Emojibase dataset.");let h=await d.json();try{a.setItem(l,JSON.stringify(h))}catch(m){}return h}var tre={discord:"joypixels",slack:"iamcal"};async function uU(i,e,t){var n;return PE(`${i}/shortcodes/${(n=tre[e])!==null&&n!==void 0?n:e}.json`,t)}function Sf(i,e){if(e.length===0)return i;let t=new Set(i.shortcodes);return e.forEach(n=>{let r=n[i.hexcode];Array.isArray(r)?r.forEach(o=>t.add(o)):r&&t.add(r)}),i.shortcodes=[...t],i.skins&&i.skins.forEach(n=>{Sf(n,e)}),i}function ire(i,e=[]){let t=[];return i.forEach(n=>{if(n.skins){let r=n,{skins:o}=r,s=Zo(r,["skins"]);t.push(Sf(s,e)),o.forEach(a=>{let l=me({},a);s.tags&&(l.tags=[...s.tags]),t.push(Sf(l,e))})}else t.push(Sf(n,e))}),t}function nre(i,e){return e.length===0||i.forEach(t=>{Sf(t,e)}),i}async function SU(i,e={}){let l=e,{compact:t=!1,flat:n=!1,shortcodes:r=[]}=l,o=Zo(l,["compact","flat","shortcodes"]),s=await PE(`${i}/${t?"compact":"data"}.json`,o),a=[];return r.length>0&&(a=await Promise.all(r.map(c=>{let d;if(c.includes("/")){let[h,u]=c.split("/");d=uU(h,u,o)}else d=uU(i,c,o);return d.catch(()=>({}))}))),n?ire(s,a):nre(s,a)}async function CU(i,e){return PE(`${i}/messages.json`,e)}function Xx(i,e){let t=i.target.closest("[data-emoji]");if(t){let n=e.find(r=>r.emoji===t.dataset.emoji);if(n)return n}return null}function wU(i){var e;let t=(e=window.matchMedia)==null?void 0:e.call(window,"(prefers-reduced-motion: reduce)");return i.animate&&!(t!=null&&t.matches)}function mU(i,e){return i.toLowerCase().includes(e.toLowerCase())}function rre(i,e){let t=null;return()=>{t||(t=window.setTimeout(()=>{i(),t=null},e))}}function ore(i,e){let t=null;return(...n)=>{t&&window.clearTimeout(t),t=window.setTimeout(()=>{i(...n),t=null},e)}}function fh(i,e,t,n){if(wU(n)&&i.animate)return i.animate(e,t).finished;let r=t.direction==="normal"?1:0,o=Object.entries(e).reduce((s,[a,l])=>Qe(me({},s),{[a]:l[r]}),{});return Object.assign(i.style,o),Promise.resolve()}function nE(i){var e;let t=document.createElement("template");return t.innerHTML=i,(e=t.content)==null?void 0:e.firstElementChild}async function sre(i){let e=new TextEncoder().encode(i),t=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}function wn(...i){return i.reduce((e,t)=>Qe(me({},e),{[t]:FE(t)}),{})}function FE(i){return`picmo__${i}`}function d2(i){for(;i.firstChild;)i.removeChild(i.firstChild);return i}function F1(i,...e){d2(i).append(...e)}function xU(i){try{return window[i].length,!0}catch(e){return!1}}function are(){return xU("sessionStorage")}function lre(){return xU("localStorage")}function EU(){let i={};return{getItem:e=>i[e],setItem:(e,t)=>i[e]=t,length:Object.keys(i).length,clear:()=>i={},key:e=>Object.keys(i)[e],removeItem:e=>delete i[e]}}function wf(i){var e;return{emoji:i.emoji,label:i.label,tags:i.tags,skins:(e=i.skins)==null?void 0:e.map(t=>wf(t)),order:i.order,custom:!1,hexcode:i.hexcode,version:i.version}}function _2(i,e,t){var n;return t&&!t.some(r=>r.order===i.group)?!1:mU(i.label,e)||((n=i.tags)==null?void 0:n.some(r=>mU(r,e)))}var v2=class{constructor(e="en"){this.locale=e}},cre=[(i,e)=>(i.hexcode==="1F91D"&&e<14&&(i.skins=[]),i),(i,e)=>(i.skins&&(i.skins=i.skins.filter(t=>!t.version||t.version<=e)),i)];function dre(i,e){return cre.some(t=>t(i,e)===null)?null:i}function b2(i,e){return i.filter(t=>dre(t,e)!==null)}var Qx={};function TU(i){return Qx[i]||(Qx[i]=new rE(i)),Qx[i]}TU.deleteDatabase=i=>{};var rE=class extends v2{open(){return Promise.resolve()}delete(){return Promise.resolve()}close(){}isPopulated(){return Promise.resolve(!1)}getEmojiCount(){return Promise.resolve(this.emojis.length)}getEtags(){return Promise.resolve({foo:"bar"})}getHash(){return Promise.resolve("")}populate(e){return this.categories=e.groups,this.emojis=e.emojis,Promise.resolve()}getCategories(e){var t;let n=this.categories.filter(r=>r.key!=="component");if(e.showRecents&&n.unshift({key:"recents",order:-1}),(t=e.custom)!=null&&t.length&&n.push({key:"custom",order:10}),e.categories){let r=e.categories;n=n.filter(o=>r.includes(o.key)),n.sort((o,s)=>r.indexOf(o.key)-r.indexOf(s.key))}else n.sort((r,o)=>r.order-o.order);return Promise.resolve(n)}getEmojis(e,t){let n=this.emojis.filter(r=>r.group===e.order).filter(r=>r.version<=t).sort((r,o)=>r.order!=null&&o.order!=null?r.order-o.order:0).map(wf);return Promise.resolve(b2(n,t))}searchEmojis(e,t,n,r){let o=this.emojis.filter(l=>_2(l,e,r)&&l.version<=n).map(wf),s=t.filter(l=>_2(l,e,r)),a=[...b2(o,n),...s];return Promise.resolve(a)}setMeta(e){this.meta=e}};!are()&&typeof window<"u"&&(console.warn("[picmo] sessionStorage not available, falling back to simple in-memory storage"),Object.defineProperty(window,"sessionStorage",{value:EU()}));function hre(i,e){let t=`https://cdn.jsdelivr.net/npm/emojibase-data@${i}/${e}`;return{emojisUrl:`${t}/data.json`,messagesUrl:`${t}/messages.json`}}async function pU(i){try{return(await fetch(i,{method:"HEAD"})).headers.get("etag")}catch(e){return null}}function ure(i){let{emojisUrl:e,messagesUrl:t}=hre("latest",i);try{return Promise.all([pU(e),pU(t)])}catch(n){return Promise.all([null,null])}}async function mre(i,e,t){let n;try{n=await i.getEtags()}catch(s){n={}}let{storedEmojisEtag:r,storedMessagesEtag:o}=n;if(t!==o||e!==r){let[s,a]=await Promise.all([CU(i.locale),SU(i.locale)]);await i.populate({groups:s.groups,emojis:a,emojisEtag:e,messagesEtag:t})}}async function pre(i,e){let t=await i.getHash();return e!==t}async function IU(i,e,t){let n=t||e(i);try{await n.open()}catch(r){console.warn("[picmo] IndexedDB not available, falling back to InMemoryStoreFactory"),n=TU(i)}return n}async function fre(i,e,t){let n=await IU(i,e,t),[r,o]=await ure(i);if(await n.isPopulated())r&&o&&await mre(n,r,o);else{let[s,a]=await Promise.all([CU(i),SU(i)]);await n.populate({groups:s.groups,emojis:a,emojisEtag:r,messagesEtag:o})}return n}async function gre(i,e,t,n,r){let o=await IU(i,e,r),s=await sre(n);return(!await o.isPopulated()||await pre(o,s))&&await o.populate({groups:t.groups,emojis:n,hash:s}),o}async function kU(i,e,t,n,r){return t&&n?gre(i,e,t,n,r):fre(i,e,r)}var xf=class{constructor(){this.handleKeyDown=this.handleKeyDown.bind(this)}activate(e){this.rootElement=e,this.rootElement.addEventListener("keydown",this.handleKeyDown)}deactivate(){var e;(e=this.rootElement)==null||e.removeEventListener("keydown",this.handleKeyDown)}get focusableElements(){return this.rootElement.querySelectorAll('input, [tabindex="0"]')}get lastFocusableElement(){return this.focusableElements[this.focusableElements.length-1]}get firstFocusableElement(){return this.focusableElements[0]}checkFocus(e,t,n){e.target===t&&(n.focus(),e.preventDefault())}handleKeyDown(e){e.key==="Tab"&&this.checkFocus(e,e.shiftKey?this.firstFocusableElement:this.lastFocusableElement,e.shiftKey?this.lastFocusableElement:this.firstFocusableElement)}},{light:_re,dark:lYe,auto:cYe}=wn("light","dark","auto"),Ye=class{constructor({template:e,classes:t,parent:n}){this.isDestroyed=!1,this.appEvents={},this.uiEvents=[],this.uiElements={},this.ui={},this.template=e,this.classes=t,this.parent=n,this.keyBindingHandler=this.keyBindingHandler.bind(this)}initialize(){this.bindAppEvents()}setCustomEmojis(e){this.customEmojis=e}setEvents(e){this.events=e}setPickerId(e){this.pickerId=e}emit(e,...t){this.events.emit(e,...t)}setI18n(e){this.i18n=e}setRenderer(e){this.renderer=e}setEmojiData(e){this.emojiDataPromise=e,e.then(t=>{this.emojiData=t})}updateEmojiData(e){this.emojiData=e,this.emojiDataPromise=Promise.resolve(e)}setOptions(e){this.options=e}renderSync(e={}){return this.el=this.template.renderSync(me({classes:this.classes,i18n:this.i18n,pickerId:this.pickerId},e)),this.postRender(),this.el}async render(e={}){return await this.emojiDataPromise,this.el=await this.template.renderAsync(me({classes:this.classes,i18n:this.i18n,pickerId:this.pickerId},e)),this.postRender(),this.el}postRender(){this.bindUIElements(),this.bindKeyBindings(),this.bindUIEvents(),this.scheduleShowAnimation()}bindAppEvents(){Object.keys(this.appEvents).forEach(e=>{this.events.on(e,this.appEvents[e],this)}),this.events.on("data:ready",this.updateEmojiData,this)}unbindAppEvents(){Object.keys(this.appEvents).forEach(e=>{this.events.off(e,this.appEvents[e])}),this.events.off("data:ready",this.updateEmojiData)}keyBindingHandler(e){let t=this.keyBindings[e.key];t&&t.call(this,e)}bindKeyBindings(){this.keyBindings&&this.el.addEventListener("keydown",this.keyBindingHandler)}unbindKeyBindings(){this.keyBindings&&this.el.removeEventListener("keydown",this.keyBindingHandler)}bindUIElements(){this.ui=Object.keys(this.uiElements).reduce((e,t)=>Qe(me({},e),{[t]:this.el.querySelector(this.uiElements[t])}),{})}bindUIEvents(){this.uiEvents.forEach(e=>{e.handler=e.handler.bind(this),(e.target?this.ui[e.target]:this.el).addEventListener(e.event,e.handler,e.options)})}unbindUIEvents(){this.uiEvents.forEach(e=>{(e.target?this.ui[e.target]:this.el).removeEventListener(e.event,e.handler)})}destroy(){this.unbindAppEvents(),this.unbindUIEvents(),this.unbindKeyBindings(),this.el.remove(),this.isDestroyed=!0}scheduleShowAnimation(){if(this.parent){let e=new MutationObserver(t=>{let[n]=t;n.type==="childList"&&n.addedNodes[0]===this.el&&(wU(this.options)&&this.animateShow&&this.animateShow(),e.disconnect)});e.observe(this.parent,{childList:!0})}}static childEvent(e,t,n,r={}){return{target:e,event:t,handler:n,options:r}}static uiEvent(e,t,n={}){return{event:e,handler:t,options:n}}static byClass(e){return`.${e}`}},vre='',bre='',yre='',Sre='',Cre='',wre='',xre='',Ere='',Tre=`