diff --git a/assets/compose-25Dzs_uX.js b/assets/compose-25Dzs_uX.js new file mode 100644 index 0000000..851d424 --- /dev/null +++ b/assets/compose-25Dzs_uX.js @@ -0,0 +1,2 @@ +import{h as w,I as p,U as S,y as i,c as e,C as f,Y as h}from"./useTitle-Mh8hVeGN.js";window.opener&&(console=window.opener.console);function m(){var s,a;const[t,d]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:l}=window.__COMPOSE__||{};return p(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),i(()=>{S()},[]),i(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(f,{editStatus:n,replyToStatus:o,draftStatus:l,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:u=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,u(),d("closed")}catch{}}})}h(e(m,{}),document.getElementById("app-standalone")); +//# sourceMappingURL=compose-25Dzs_uX.js.map diff --git a/assets/compose-25Dzs_uX.js.map b/assets/compose-25Dzs_uX.js.map new file mode 100644 index 0000000..2bd4ed5 --- /dev/null +++ b/assets/compose-25Dzs_uX.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compose-25Dzs_uX.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport { initStates } from './utils/states';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n initStates();\n }, []);\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
\n

You may close this page now.

\n

\n {\n window.close();\n }}\n >\n Close window\n \n

\n
\n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","initStates","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"qFAWIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GA0BzE,OAvBEH,EAAAA,EACI,wBACAC,EACA,kBACEA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SAAQ,GAEhE,SACN,EAEAC,EAAU,IAAM,CACHC,GACb,EAAG,CAAE,CAAA,EAELD,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOe,aACJ,CAAC,CACbhB,OAAOiB,MAAM,CACf,CAAA,EACC,CAACb,CAAO,CAAC,EAERA,IAAY,SAEZc,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbtB,OAAOiB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITlB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAc,UAAU,OAAA,OACVC,WAAkBvB,OAEV,UAAAwB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGtB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNuB,EAAAP,EAAAlB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-IeRiPb7Z.js b/assets/compose-IeRiPb7Z.js new file mode 100644 index 0000000..d819431 --- /dev/null +++ b/assets/compose-IeRiPb7Z.js @@ -0,0 +1,26 @@ +var Lt=s=>{throw TypeError(s)};var rt=(s,e,n)=>e.has(s)||Lt("Cannot "+n);var B=(s,e,n)=>(rt(s,e,"read from private field"),n?n.call(s):e.get(s)),re=(s,e,n)=>e.has(s)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(s):e.set(s,n),de=(s,e,n,a)=>(rt(s,e,"write to private field"),a?a.call(s,n):e.set(s,n),n),G=(s,e,n)=>(rt(s,e,"access private method"),n);import{F as on,B as rn,_ as ln,a as _e,a8 as cn,w as zt,u as un,i as Ht,b as dn,I as K,y as St,h as Nt,a9 as hn,M as Ve,s as ke,a4 as pn,a0 as mn,n as gn,O as fn,X as Qe,c as vn,d as At,l as bn,x as yn}from"./fuse-4Bvpr1kU.js";import{s as le,a as bt,h as H,A as W,f as xn,al as Ut,d as Le,y as ee,m as wn,am as kn,T as Re,c as t,k as Ce,b as En,L as et,j as Fn,D as Cn,u as Ln,q as It,x as Wt}from"./useTitle-Mh8hVeGN.js";import{e as zn}from"./tinyld-light-PxOyhYWY.js";import"./index-CeOZgm-k.js";class Sn{constructor(e,n,{tabInsertsSuggestions:a,defaultFirstOption:r}={}){this.input=e,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=r??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=m=>An(m,this),this.compositionEventHandler=m=>Mn(m,this),this.inputHandler=this.clearSelection.bind(this),e.setAttribute("role","combobox"),e.setAttribute("aria-controls",n.id),e.setAttribute("aria-expanded","false"),e.setAttribute("aria-autocomplete","list"),e.setAttribute("aria-haspopup","listbox")}destroy(){this.clearSelection(),this.stop(),this.input.removeAttribute("role"),this.input.removeAttribute("aria-controls"),this.input.removeAttribute("aria-expanded"),this.input.removeAttribute("aria-autocomplete"),this.input.removeAttribute("aria-haspopup")}start(){this.input.setAttribute("aria-expanded","true"),this.input.addEventListener("compositionstart",this.compositionEventHandler),this.input.addEventListener("compositionend",this.compositionEventHandler),this.input.addEventListener("input",this.inputHandler),this.input.addEventListener("keydown",this.keyboardEventHandler),this.list.addEventListener("click",Mt),this.indicateDefaultOption()}stop(){this.clearSelection(),this.input.setAttribute("aria-expanded","false"),this.input.removeEventListener("compositionstart",this.compositionEventHandler),this.input.removeEventListener("compositionend",this.compositionEventHandler),this.input.removeEventListener("input",this.inputHandler),this.input.removeEventListener("keydown",this.keyboardEventHandler),this.list.removeEventListener("click",Mt)}indicateDefaultOption(){var e;this.defaultFirstOption&&((e=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(lt)[0])===null||e===void 0||e.setAttribute("data-combobox-option-default","true"))}navigate(e=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(lt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(lt),r=a.indexOf(n);if(r===a.length-1&&e===1||r===0&&e===-1){this.clearSelection(),this.input.focus();return}let m=e===1?0:a.length-1;if(n&&r>=0){const v=r+e;v>=0&&v0||s.offsetHeight>0)}function Mn(s,e){e.isComposing=s.type==="compositionstart",document.getElementById(e.input.getAttribute("aria-controls")||"")&&e.clearSelection()}function $n(s,e){Tn(s,e)||(s.scrollTop=e.offsetTop)}function Tn(s,e){const n=s.scrollTop,a=n+s.clientHeight,r=e.offsetTop,m=r+e.clientHeight;return r>=n&&m<=a}const Bn=/\s|\(|\[/;function _n(s,e,n,{multiWord:a,lookBackIndex:r,lastMatchPosition:m}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let u=s.lastIndexOf(e,n-1);if(u===-1||u=u+e.length+1||s.lastIndexOf(` +`,n-1)>u||s.lastIndexOf(".",n-1)>u)return}else if(s.lastIndexOf(" ",n-1)>u)return;const v=s[u-1];return v&&!Bn.test(v)?void 0:{text:s.substring(u+e.length,n),position:u+e.length}}class Rn extends HTMLElement{}class Dn extends Event{constructor(){super("update")}}const ct=new WeakMap;var De,je,Ee,fe,Y,Te,ze,Se,pt,Ae,Ge,Ye,Ze,Pe,Fe;const xt=class xt extends Rn{constructor(n){super();re(this,Y);re(this,De,new MutationObserver(()=>G(this,Y,Ye).call(this)));re(this,je,new ResizeObserver(()=>G(this,Y,Ge).call(this)));re(this,Ee);re(this,fe);re(this,ze,0);re(this,Se,0);re(this,Ae,!1);re(this,Pe,()=>G(this,Y,Ze).call(this));re(this,Fe,n=>{G(this,Y,Te).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&G(this,Y,Ge).call(this)})});de(this,Ee,new WeakRef(n)),de(this,fe,document.createElement("div")),B(this,fe).style.position="absolute",B(this,fe).style.pointerEvents="none",n.after(B(this,fe)),B(this,fe).appendChild(this)}static for(n){const a=ct.get(n)??new xt(n);return ct.set(n,a),a}forceUpdate(){G(this,Y,Ye).call(this),G(this,Y,Ze).call(this)}connectedCallback(){const n=B(this,Ee).deref();if(!n)return this.remove();this.style.pointerEvents="none",this.style.userSelect="none",this.style.overflow="hidden",this.style.display="block",this.style.visibility="hidden",n instanceof HTMLTextAreaElement?(this.style.whiteSpace="pre-wrap",this.style.wordWrap="break-word"):(this.style.whiteSpace="nowrap",this.style.display="table-cell",this.style.verticalAlign="middle"),this.setAttribute("aria-hidden","true"),G(this,Y,Ye).call(this),G(this,Y,Ze).call(this),B(this,De).observe(n,{attributeFilter:["style","dir"]}),B(this,je).observe(n),document.addEventListener("scroll",B(this,Fe),{capture:!0}),window.addEventListener("resize",B(this,Fe),{capture:!0}),n.addEventListener("input",B(this,Pe),{capture:!0})}disconnectedCallback(){B(this,fe).remove(),B(this,De).disconnect(),B(this,je).disconnect(),document.removeEventListener("scroll",B(this,Fe),{capture:!0}),window.removeEventListener("resize",B(this,Fe),{capture:!0});const n=B(this,Ee).deref();n&&(n.removeEventListener("input",B(this,Pe),{capture:!0}),ct.delete(n))}};De=new WeakMap,je=new WeakMap,Ee=new WeakMap,fe=new WeakMap,Y=new WeakSet,Te=function(n){const a=B(this,Ee).deref();return a?n(a):this.remove()},ze=new WeakMap,Se=new WeakMap,pt=function(){G(this,Y,Te).call(this,n=>{const a=window.getComputedStyle(n);this.style.height=a.height,this.style.width=a.width,n.clientHeight!==this.clientHeight&&(this.style.height=`calc(${a.height} + ${n.clientHeight-this.clientHeight}px)`),n.clientWidth!==this.clientWidth&&(this.style.width=`calc(${a.width} + ${n.clientWidth-this.clientWidth}px)`);const r=n.getBoundingClientRect(),m=this.getBoundingClientRect();de(this,ze,B(this,ze)+r.left-m.left),de(this,Se,B(this,Se)+r.top-m.top),this.style.transform=`translate(${B(this,ze)}px, ${B(this,Se)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new Dn)})},Ae=new WeakMap,Ge=function(){B(this,Ae)||(de(this,Ae,!0),requestAnimationFrame(()=>{G(this,Y,pt).call(this),de(this,Ae,!1)}))},Ye=function(){G(this,Y,Te).call(this,n=>{const a=window.getComputedStyle(n);for(const r of jn)this.style[r]=a[r];G(this,Y,Ge).call(this)})},Ze=function(){G(this,Y,Te).call(this,n=>{this.textContent=n.value,G(this,Y,pt).call(this)})},Pe=new WeakMap,Fe=new WeakMap;let Je=xt;const jn=["direction","writingMode","unicodeBidi","textOrientation","boxSizing","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"];try{customElements.define("input-style-clone",Je)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var pe,Ie,Me,ce,gt,qt,ft,Be;const Xe=class Xe{constructor(e,n=0,a=n){re(this,ce);re(this,pe);re(this,Ie);re(this,Me);de(this,pe,e),de(this,Ie,n),de(this,Me,a)}static fromSelection(e){const{selectionStart:n,selectionEnd:a}=e;return new Xe(e,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return B(this,pe)}get endContainer(){return B(this,pe)}get startContainer(){return B(this,pe)}get startOffset(){return B(this,Ie)}get endOffset(){return B(this,Me)}setStartOffset(e){de(this,Ie,G(this,ce,ft).call(this,e))}setEndOffset(e){de(this,Me,G(this,ce,ft).call(this,e))}collapse(e=!1){e?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return G(this,ce,Be).call(this).cloneContents()}cloneRange(){return new Xe(B(this,pe),this.startOffset,this.endOffset)}getBoundingClientRect(){return G(this,ce,Be).call(this).getBoundingClientRect()}getClientRects(){return G(this,ce,Be).call(this).getClientRects()}toString(){return G(this,ce,Be).call(this).toString()}getStyleClone(){return B(this,ce,gt)}};pe=new WeakMap,Ie=new WeakMap,Me=new WeakMap,ce=new WeakSet,gt=function(){return Je.for(B(this,pe))},qt=function(){return B(this,ce,gt)},ft=function(e){return Math.max(0,Math.min(e,B(this,pe).value.length))},Be=function(){const e=document.createRange(),n=B(this,ce,qt).childNodes[0];return n&&(e.setStart(n,this.startOffset),e.setEnd(n,this.endOffset)),e};let mt=Xe;const qe=new WeakMap;class Pn{constructor(e,n){this.expander=e,this.input=n,this.combobox=null,this.menu=null,this.match=null,this.justPasted=!1,this.lookBackIndex=0,this.oninput=this.onInput.bind(this),this.onpaste=this.onPaste.bind(this),this.onkeydown=this.onKeydown.bind(this),this.oncommit=this.onCommit.bind(this),this.onmousedown=this.onMousedown.bind(this),this.onblur=this.onBlur.bind(this),this.interactingWithList=!1,n.addEventListener("paste",this.onpaste),n.addEventListener("input",this.oninput),n.addEventListener("keydown",this.onkeydown),n.addEventListener("blur",this.onblur)}destroy(){this.input.removeEventListener("paste",this.onpaste),this.input.removeEventListener("input",this.oninput),this.input.removeEventListener("keydown",this.onkeydown),this.input.removeEventListener("blur",this.onblur)}dismissMenu(){this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex)}activate(e,n){var a,r;this.input!==document.activeElement&&this.input!==((r=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||r===void 0?void 0:r.activeElement)||(this.deactivate(),this.menu=n,n.id||(n.id=`text-expander-${Math.floor(Math.random()*1e5).toString()}`),this.expander.append(n),this.combobox=new Sn(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,e.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(e,n){const a=new mt(this.input,n).getBoundingClientRect(),r={left:a.left,top:a.top+a.height},m=e.getBoundingClientRect(),u={left:r.left-m.left,top:r.top-m.top};if(u.left!==0||u.top!==0){const v=getComputedStyle(e);e.style.left=v.left?`calc(${v.left} + ${u.left}px)`:`${u.left}px`,e.style.top=v.top?`calc(${v.top} + ${u.top}px)`:`${u.top}px`}}deactivate(){const e=this.menu;return!e||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,e.removeEventListener("combobox-commit",this.oncommit),e.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,e.remove(),!0)}onCommit({target:e}){var n;const a=e;if(!(a instanceof HTMLElement)||!this.combobox)return;const r=this.match;if(!r)return;const m=this.input.value.substring(0,r.position-r.key.length),u=this.input.value.substring(r.position+r.text.length),v={item:a,key:r.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:v}))||!v.value)return;let R=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";v.continue&&(R="");const C=`${v.value}${R}`;this.input.value=m+C+u;const k=m.length+C.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=k,this.input.selectionEnd=k,v.continue||(this.lookBackIndex=k,this.match=null),this.expander.dispatchEvent(new CustomEvent("text-expander-committed",{cancelable:!1,detail:{input:this.input}}))}onBlur(){if(this.interactingWithList){this.interactingWithList=!1;return}this.deactivate()}onPaste(){this.justPasted=!0}async onInput(){if(this.justPasted){this.justPasted=!1;return}const e=this.findMatch();if(e){this.match=e;const n=await this.notifyProviders(e);if(!this.match)return;n?this.activate(e,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const e=this.input.selectionEnd||0,n=this.input.value;e<=this.lookBackIndex&&(this.lookBackIndex=e-1);for(const{key:a,multiWord:r}of this.expander.keys){const m=_n(n,a,e,{multiWord:r,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(m)return{text:m.text,key:a,position:m.position}}}async notifyProviders(e){const n=[],a=v=>n.push(v);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:e.text,key:e.key}}))?(await Promise.all(n)).filter(v=>v.matched).map(v=>v.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(e){e.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,e.stopImmediatePropagation(),e.preventDefault()))}}class Tt extends HTMLElement{get keys(){const e=this.getAttribute("keys"),n=e?e.split(" "):[],a=this.getAttribute("multiword"),r=a?a.split(" "):[],m=r.length===0&&this.hasAttribute("multiword");return n.map(u=>({key:u,multiWord:m||r.includes(u)}))}connectedCallback(){const e=this.querySelector('input[type="text"], textarea');if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement))return;const n=new Pn(this,e);qe.set(this,n)}disconnectedCallback(){const e=qe.get(this);e&&(e.destroy(),qe.delete(this))}dismiss(){const e=qe.get(this);e&&e.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Tt,window.customElements.define("text-expander",Tt));function On({onlyFirst:s=!1}={}){const e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,s?void 0:"g")}const Hn=On();function Nn(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(Hn,"")}const Un=new Intl.Segmenter;function Bt(s,{countAnsiEscapeCodes:e=!1}={}){if(s===""||(e||(s=Nn(s)),s===""))return 0;let n=0;for(const a of Un.segment(s))n++;return n}const Wn="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.0'%20viewBox='0%200%20641%20223'%3e%3cpath%20fill='%23aaa'%20d='M86%20214c-9-1-17-4-24-8l-6-3-5-5-5-4-4-6-4-6-3-8-2-8v-27l2-9%203-9%204-6%204-6%205-5%205-5%207-3%206-4%207-2%207-2%2012-1h12l7%201%208%202%207%204%207%203%205%205%205%204-10%2010-10%209-4-3-10-5-5-1H88l-5%202-6%203-3%204-4%204-2%205-2%206v6l-1%207%201%207%202%207%203%205%202%204%204%203%204%203%205%202%206%202h9l10-1%205-2%206-3v-16H91v-27h59v54l-1%203-2%203-5%204-4%204-5%203-5%202-8%202-8%202-10%201H92l-6-1zm266-62V91h34v46h44V91h34v121h-34v-46h-44v46h-34v-61zm-182-1V90h34v121h-34v-60zm59-1V90h35l36%201%205%202c3%200%208%202%2010%204l5%202%204%205%205%204%203%207%203%207%201%2013v13l-4%206-3%207-4%204-5%205-5%202-5%203-6%202-5%201-18%201h-18v32h-34v-61zm67-2%203-2%202-4%202-5v-5l-2-4-2-4-3-2-3-3h-30v31h30l3-2zm226%2039v-24l-8-12-18-28a1751%201751%200%200%200-20-31v-2h39l7%2012%2012%2021%206%209%2013-21%2013-21h38v2l-41%2061-7%2010v48h-34v-24zM109%2066l-4-1-5-5-5-4-1-5-3-9v-5l1-5c2-7%203-10%208-15l4-4%207-2%207-2h7l6%201%205%202%205%202%203%204%204%203%202%206%202%205v13l-2%205-2%206-4%204-3%203-5%202-4%202-9%201h-9l-5-2zm22-11%204-2%203-4%202-5V34l-2-4-2-4-3-2-4-3-5-1h-6l-4%202-5%202-2%204-3%205-1%203v4l1%205%202%205%202%202%205%203%204%202h10l4-2zM37%2039V11h33l3%201%203%202%204%203%203%203%201%205%201%204v5l-1%204-3%204-3%205-4%201-3%202-11%201H49v16H37V39zm31%200%203-2%201-2%201-2v-4l-1-3-3-2-2-2H49v18h15l4-1zm107%2025a512%20512%200%200%200-19-53h14l4%2014%206%2019%201%204%201-1%207-19%205-17h9l6%2019%207%2018v-1l2-6%205-17%204-13h14v1l-4%2012-16%2041v2h-5l-5-1-6-15-6-15-1%201-3%207-6%2015-2%208h-11l-1-3zm74-25V11h42v11h-29v2l-1%205v4h29v11h-28v11h2l15%201h13v11h-43V39zm55%200V11h33l5%203%205%202%202%204%202%205v10l-2%203-1%204-5%203-5%203%205%205%208%2010%203%204h-14l-7-9-8-10h-9v19h-12V39zm33-3%202-3v-6l-3-3-2-3h-18v16h1v1h17l2-2zm26%203V11h42v11h-29l-1%206v5h29v11h-28v5l-1%205%201%201v1h30v11h-43V39zm54%200V11h17l18%201%204%202%205%203%202%204%203%204%202%206%201%206v5c-1%206-3%2012-6%2015l-3%204-5%203-5%202-17%201h-16V39zm33%2014%205-5%202-3v-6l-1-6-1-3-1-3-4-3-3-2h-5l-6-1-3%201h-3v34h9l8-1%203-2zm50-14V11h34l5%202%204%202%202%203%202%203v9l-2%202-3%204-1%201%203%203%203%204%201%203%201%204-1%204-1%204-3%203-3%203-5%201-5%201h-31V39zm34%2015%202-1v-6l-2-2-2-2h-20v13h20l2-2zm-3-22%204-2v-6l-2-1-2-2h-19v12h16l4-1zm42%2024V45l-6-9-11-17-5-8h15l4%208%207%2011%202%203%207-11%207-11h14l-11%2016-11%2017v23h-12V56z'/%3e%3c/svg%3e",yt=[["aa","Afar","Afaraf"],["ab","Abkhaz","аҧсуа бызшәа"],["ae","Avestan","avesta"],["af","Afrikaans","Afrikaans"],["ak","Akan","Akan"],["am","Amharic","አማርኛ"],["an","Aragonese","aragonés"],["ar","Arabic","اللغة العربية"],["as","Assamese","অসমীয়া"],["av","Avaric","авар мацӀ"],["ay","Aymara","aymar aru"],["az","Azerbaijani","azərbaycan dili"],["ba","Bashkir","башҡорт теле"],["be","Belarusian","беларуская мова"],["bg","Bulgarian","български език"],["bh","Bihari","भोजपुरी"],["bi","Bislama","Bislama"],["bm","Bambara","bamanankan"],["bn","Bengali","বাংলা"],["bo","Tibetan","བོད་ཡིག"],["br","Breton","brezhoneg"],["bs","Bosnian","bosanski jezik"],["ca","Catalan","Català"],["ce","Chechen","нохчийн мотт"],["ch","Chamorro","Chamoru"],["co","Corsican","corsu"],["cr","Cree","ᓀᐦᐃᔭᐍᐏᐣ"],["cs","Czech","čeština"],["cu","Old Church Slavonic","ѩзыкъ словѣньскъ"],["cv","Chuvash","чӑваш чӗлхи"],["cy","Welsh","Cymraeg"],["da","Danish","dansk"],["de","German","Deutsch"],["dv","Divehi","Dhivehi"],["dz","Dzongkha","རྫོང་ཁ"],["ee","Ewe","Eʋegbe"],["el","Greek","Ελληνικά"],["en","English","English"],["eo","Esperanto","Esperanto"],["es","Spanish","Español"],["et","Estonian","eesti"],["eu","Basque","euskara"],["fa","Persian","فارسی"],["ff","Fula","Fulfulde"],["fi","Finnish","suomi"],["fj","Fijian","Vakaviti"],["fo","Faroese","føroyskt"],["fr","French","Français"],["fy","Western Frisian","Frysk"],["ga","Irish","Gaeilge"],["gd","Scottish Gaelic","Gàidhlig"],["gl","Galician","galego"],["gu","Gujarati","ગુજરાતી"],["gv","Manx","Gaelg"],["ha","Hausa","هَوُسَ"],["he","Hebrew","עברית"],["hi","Hindi","हिन्दी"],["ho","Hiri Motu","Hiri Motu"],["hr","Croatian","Hrvatski"],["ht","Haitian","Kreyòl ayisyen"],["hu","Hungarian","magyar"],["hy","Armenian","Հայերեն"],["hz","Herero","Otjiherero"],["ia","Interlingua","Interlingua"],["id","Indonesian","Bahasa Indonesia"],["ie","Interlingue","Interlingue"],["ig","Igbo","Asụsụ Igbo"],["ii","Nuosu","ꆈꌠ꒿ Nuosuhxop"],["ik","Inupiaq","Iñupiaq"],["io","Ido","Ido"],["is","Icelandic","Íslenska"],["it","Italian","Italiano"],["iu","Inuktitut","ᐃᓄᒃᑎᑐᑦ"],["ja","Japanese","日本語"],["jv","Javanese","basa Jawa"],["ka","Georgian","ქართული"],["kg","Kongo","Kikongo"],["ki","Kikuyu","Gĩkũyũ"],["kj","Kwanyama","Kuanyama"],["kk","Kazakh","қазақ тілі"],["kl","Kalaallisut","kalaallisut"],["km","Khmer","ខេមរភាសា"],["kn","Kannada","ಕನ್ನಡ"],["ko","Korean","한국어"],["kr","Kanuri","Kanuri"],["ks","Kashmiri","कश्मीरी"],["ku","Kurmanji (Kurdish)","Kurmancî"],["kv","Komi","коми кыв"],["kw","Cornish","Kernewek"],["ky","Kyrgyz","Кыргызча"],["la","Latin","latine"],["lb","Luxembourgish","Lëtzebuergesch"],["lg","Ganda","Luganda"],["li","Limburgish","Limburgs"],["ln","Lingala","Lingála"],["lo","Lao","ລາວ"],["lt","Lithuanian","lietuvių kalba"],["lu","Luba-Katanga","Tshiluba"],["lv","Latvian","latviešu valoda"],["mg","Malagasy","fiteny malagasy"],["mh","Marshallese","Kajin M̧ajeļ"],["mi","Māori","te reo Māori"],["mk","Macedonian","македонски јазик"],["ml","Malayalam","മലയാളം"],["mn","Mongolian","Монгол хэл"],["mr","Marathi","मराठी"],["ms","Malay","Bahasa Melayu"],["mt","Maltese","Malti"],["my","Burmese","ဗမာစာ"],["na","Nauru","Ekakairũ Naoero"],["nb","Norwegian Bokmål","Norsk bokmål"],["nd","Northern Ndebele","isiNdebele"],["ne","Nepali","नेपाली"],["ng","Ndonga","Owambo"],["nl","Dutch","Nederlands"],["nn","Norwegian Nynorsk","Norsk Nynorsk"],["no","Norwegian","Norsk"],["nr","Southern Ndebele","isiNdebele"],["nv","Navajo","Diné bizaad"],["ny","Chichewa","chiCheŵa"],["oc","Occitan","occitan"],["oj","Ojibwe","ᐊᓂᔑᓈᐯᒧᐎᓐ"],["om","Oromo","Afaan Oromoo"],["or","Oriya","ଓଡ଼ିଆ"],["os","Ossetian","ирон æвзаг"],["pa","Panjabi","ਪੰਜਾਬੀ"],["pi","Pāli","पाऴि"],["pl","Polish","Polski"],["ps","Pashto","پښتو"],["pt","Portuguese","Português"],["qu","Quechua","Runa Simi"],["rm","Romansh","rumantsch grischun"],["rn","Kirundi","Ikirundi"],["ro","Romanian","Română"],["ru","Russian","Русский"],["rw","Kinyarwanda","Ikinyarwanda"],["sa","Sanskrit","संस्कृतम्"],["sc","Sardinian","sardu"],["sd","Sindhi","सिन्धी"],["se","Northern Sami","Davvisámegiella"],["sg","Sango","yângâ tî sängö"],["si","Sinhala","සිංහල"],["sk","Slovak","slovenčina"],["sl","Slovenian","slovenščina"],["sn","Shona","chiShona"],["so","Somali","Soomaaliga"],["sq","Albanian","Shqip"],["sr","Serbian","српски језик"],["ss","Swati","SiSwati"],["st","Southern Sotho","Sesotho"],["su","Sundanese","Basa Sunda"],["sv","Swedish","Svenska"],["sw","Swahili","Kiswahili"],["ta","Tamil","தமிழ்"],["te","Telugu","తెలుగు"],["tg","Tajik","тоҷикӣ"],["th","Thai","ไทย"],["ti","Tigrinya","ትግርኛ"],["tk","Turkmen","Türkmen"],["tl","Tagalog","Wikang Tagalog"],["tn","Tswana","Setswana"],["to","Tonga","faka Tonga"],["tr","Turkish","Türkçe"],["ts","Tsonga","Xitsonga"],["tt","Tatar","татар теле"],["tw","Twi","Twi"],["ty","Tahitian","Reo Tahiti"],["ug","Uyghur","ئۇيغۇرچە‎"],["uk","Ukrainian","Українська"],["ur","Urdu","اردو"],["uz","Uzbek","Ўзбек"],["ve","Venda","Tshivenḓa"],["vi","Vietnamese","Tiếng Việt"],["vo","Volapük","Volapük"],["wa","Walloon","walon"],["wo","Wolof","Wollof"],["xh","Xhosa","isiXhosa"],["yi","Yiddish","ייִדיש"],["yo","Yoruba","Yorùbá"],["za","Zhuang","Saɯ cueŋƅ"],["zh","Chinese","中文"],["zu","Zulu","isiZulu"],["zh-CN","Chinese (China)","简体中文"],["zh-HK","Chinese (Hong Kong)","繁體中文(香港)"],["zh-TW","Chinese (Taiwan)","繁體中文(臺灣)"],["zh-YUE","Cantonese","廣東話"],["ast","Asturian","Asturianu"],["chr","Cherokee","ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ"],["ckb","Sorani (Kurdish)","سۆرانی"],["cnr","Montenegrin","crnogorski"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],qn="(((?:[^A-Za-z0-9@@$##\\uFFFE\\uFEFF\\uFFFF]|[\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069]|^))((https?:\\/\\/)((?:(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:[_-]|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)*(?:(?:[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/](?:-|[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/])*)?[^/\\!'#%&'\\(\\)*\\+,\\\\\\-\\.\\/:;<=>\\?@\\[\\]\\^_{|}~\\$//\\x09-\\x0D\\x20\\x85\\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000//\\uFFFE\\uFEFF\\uFFFF//\\u202A-\\u202E\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069/]\\.)(?:(?:(?:삼성|닷컴|닷넷|香格里拉|餐厅|食品|飞利浦|電訊盈科|集团|通販|购物|谷歌|诺基亚|联通|网络|网站|网店|网址|组织机构|移动|珠宝|点看|游戏|淡马锡|机构|書籍|时尚|新闻|政府|政务|招聘|手表|手机|我爱你|慈善|微博|广东|工行|家電|娱乐|天主教|大拿|大众汽车|在线|嘉里大酒店|嘉里|商标|商店|商城|公益|公司|八卦|健康|信息|佛山|企业|中文网|中信|世界|ポイント|ファッション|セール|ストア|コム|グーグル|クラウド|みんな|คอม|संगठन|नेट|कॉम|همراه|موقع|موبايلي|كوم|كاثوليك|عرب|شبكة|بيتك|بازار|العليان|ارامكو|اتصالات|ابوظبي|קום|сайт|рус|орг|онлайн|москва|ком|католик|дети|zuerich|zone|zippo|zip|zero|zara|zappos|yun|youtube|you|yokohama|yoga|yodobashi|yandex|yamaxun|yahoo|yachts|xyz|xxx|xperia|xin|xihuan|xfinity|xerox|xbox|wtf|wtc|wow|world|works|work|woodside|wolterskluwer|wme|winners|wine|windows|win|williamhill|wiki|wien|whoswho|weir|weibo|wedding|wed|website|weber|webcam|weatherchannel|weather|watches|watch|warman|wanggou|wang|walter|walmart|wales|vuelos|voyage|voto|voting|vote|volvo|volkswagen|vodka|vlaanderen|vivo|viva|vistaprint|vista|vision|visa|virgin|vip|vin|villas|viking|vig|video|viajes|vet|versicherung|vermögensberatung|vermögensberater|verisign|ventures|vegas|vanguard|vana|vacations|ups|uol|uno|university|unicom|uconnect|ubs|ubank|tvs|tushu|tunes|tui|tube|trv|trust|travelersinsurance|travelers|travelchannel|travel|training|trading|trade|toys|toyota|town|tours|total|toshiba|toray|top|tools|tokyo|today|tmall|tkmaxx|tjx|tjmaxx|tirol|tires|tips|tiffany|tienda|tickets|tiaa|theatre|theater|thd|teva|tennis|temasek|telefonica|telecity|tel|technology|tech|team|tdk|tci|taxi|tax|tattoo|tatar|tatamotors|target|taobao|talk|taipei|tab|systems|symantec|sydney|swiss|swiftcover|swatch|suzuki|surgery|surf|support|supply|supplies|sucks|style|study|studio|stream|store|storage|stockholm|stcgroup|stc|statoil|statefarm|statebank|starhub|star|staples|stada|srt|srl|spreadbetting|spot|sport|spiegel|space|soy|sony|song|solutions|solar|sohu|software|softbank|social|soccer|sncf|smile|smart|sling|skype|sky|skin|ski|site|singles|sina|silk|shriram|showtime|show|shouji|shopping|shop|shoes|shiksha|shia|shell|shaw|sharp|shangrila|sfr|sexy|sex|sew|seven|ses|services|sener|select|seek|security|secure|seat|search|scot|scor|scjohnson|science|schwarz|schule|school|scholarships|schmidt|schaeffler|scb|sca|sbs|sbi|saxo|save|sas|sarl|sapo|sap|sanofi|sandvikcoromant|sandvik|samsung|samsclub|salon|sale|sakura|safety|safe|saarland|ryukyu|rwe|run|ruhr|rugby|rsvp|room|rogers|rodeo|rocks|rocher|rmit|rip|rio|ril|rightathome|ricoh|richardli|rich|rexroth|reviews|review|restaurant|rest|republican|report|repair|rentals|rent|ren|reliance|reit|reisen|reise|rehab|redumbrella|redstone|red|recipes|realty|realtor|realestate|read|raid|radio|racing|qvc|quest|quebec|qpon|pwc|pub|prudential|pru|protection|property|properties|promo|progressive|prof|productions|prod|pro|prime|press|praxi|pramerica|post|porn|politie|poker|pohl|pnc|plus|plumbing|playstation|play|place|pizza|pioneer|pink|ping|pin|pid|pictures|pictet|pics|piaget|physio|photos|photography|photo|phone|philips|phd|pharmacy|pfizer|pet|pccw|pay|passagens|party|parts|partners|pars|paris|panerai|panasonic|pamperedchef|page|ovh|ott|otsuka|osaka|origins|orientexpress|organic|org|orange|oracle|open|ooo|onyourside|online|onl|ong|one|omega|ollo|oldnavy|olayangroup|olayan|okinawa|office|off|observer|obi|nyc|ntt|nrw|nra|nowtv|nowruz|now|norton|northwesternmutual|nokia|nissay|nissan|ninja|nikon|nike|nico|nhk|ngo|nfl|nexus|nextdirect|next|news|newholland|new|neustar|network|netflix|netbank|net|nec|nba|navy|natura|nationwide|name|nagoya|nadex|nab|mutuelle|mutual|museum|mtr|mtpc|mtn|msd|movistar|movie|mov|motorcycles|moto|moscow|mortgage|mormon|mopar|montblanc|monster|money|monash|mom|moi|moe|moda|mobily|mobile|mobi|mma|mls|mlb|mitsubishi|mit|mint|mini|mil|microsoft|miami|metlife|merckmsd|meo|menu|men|memorial|meme|melbourne|meet|media|med|mckinsey|mcdonalds|mcd|mba|mattel|maserati|marshalls|marriott|markets|marketing|market|map|mango|management|man|makeup|maison|maif|madrid|macys|luxury|luxe|lupin|lundbeck|ltda|ltd|lplfinancial|lpl|love|lotto|lotte|london|lol|loft|locus|locker|loans|loan|llp|llc|lixil|living|live|lipsy|link|linde|lincoln|limo|limited|lilly|like|lighting|lifestyle|lifeinsurance|life|lidl|liaison|lgbt|lexus|lego|legal|lefrak|leclerc|lease|lds|lawyer|law|latrobe|latino|lat|lasalle|lanxess|landrover|land|lancome|lancia|lancaster|lamer|lamborghini|ladbrokes|lacaixa|kyoto|kuokgroup|kred|krd|kpn|kpmg|kosher|komatsu|koeln|kiwi|kitchen|kindle|kinder|kim|kia|kfh|kerryproperties|kerrylogistics|kerryhotels|kddi|kaufen|juniper|juegos|jprs|jpmorgan|joy|jot|joburg|jobs|jnj|jmp|jll|jlc|jio|jewelry|jetzt|jeep|jcp|jcb|java|jaguar|iwc|iveco|itv|itau|istanbul|ist|ismaili|iselect|irish|ipiranga|investments|intuit|international|intel|int|insure|insurance|institute|ink|ing|info|infiniti|industries|inc|immobilien|immo|imdb|imamat|ikano|iinet|ifm|ieee|icu|ice|icbc|ibm|hyundai|hyatt|hughes|htc|hsbc|how|house|hotmail|hotels|hoteles|hot|hosting|host|hospital|horse|honeywell|honda|homesense|homes|homegoods|homedepot|holiday|holdings|hockey|hkt|hiv|hitachi|hisamitsu|hiphop|hgtv|hermes|here|helsinki|help|healthcare|health|hdfcbank|hdfc|hbo|haus|hangout|hamburg|hair|guru|guitars|guide|guge|gucci|guardian|group|grocery|gripe|green|gratis|graphics|grainger|gov|got|gop|google|goog|goodyear|goodhands|goo|golf|goldpoint|gold|godaddy|gmx|gmo|gmbh|gmail|globo|global|gle|glass|glade|giving|gives|gifts|gift|ggee|george|genting|gent|gea|gdn|gbiz|gay|garden|gap|games|game|gallup|gallo|gallery|gal|fyi|futbol|furniture|fund|fun|fujixerox|fujitsu|ftr|frontier|frontdoor|frogans|frl|fresenius|free|fox|foundation|forum|forsale|forex|ford|football|foodnetwork|food|foo|fly|flsmidth|flowers|florist|flir|flights|flickr|fitness|fit|fishing|fish|firmdale|firestone|fire|financial|finance|final|film|fido|fidelity|fiat|ferrero|ferrari|feedback|fedex|fast|fashion|farmers|farm|fans|fan|family|faith|fairwinds|fail|fage|extraspace|express|exposed|expert|exchange|everbank|events|eus|eurovision|etisalat|esurance|estate|esq|erni|ericsson|equipment|epson|epost|enterprises|engineering|engineer|energy|emerck|email|education|edu|edeka|eco|eat|earth|dvr|dvag|durban|dupont|duns|dunlop|duck|dubai|dtv|drive|download|dot|doosan|domains|doha|dog|dodge|doctor|docs|dnp|diy|dish|discover|discount|directory|direct|digital|diet|diamonds|dhl|dev|design|desi|dentist|dental|democrat|delta|deloitte|dell|delivery|degree|deals|dealer|deal|dds|dclk|day|datsun|dating|date|data|dance|dad|dabur|cyou|cymru|cuisinella|csc|cruises|cruise|crs|crown|cricket|creditunion|creditcard|credit|cpa|courses|coupons|coupon|country|corsica|coop|cool|cookingchannel|cooking|contractors|contact|consulting|construction|condos|comsec|computer|compare|company|community|commbank|comcast|com|cologne|college|coffee|codes|coach|clubmed|club|cloud|clothing|clinique|clinic|click|cleaning|claims|cityeats|city|citic|citi|citadel|cisco|circle|cipriani|church|chrysler|chrome|christmas|chloe|chintai|cheap|chat|chase|charity|channel|chanel|cfd|cfa|cern|ceo|center|ceb|cbs|cbre|cbn|cba|catholic|catering|cat|casino|cash|caseih|case|casa|cartier|cars|careers|career|care|cards|caravan|car|capitalone|capital|capetown|canon|cancerresearch|camp|camera|cam|calvinklein|call|cal|cafe|cab|bzh|buzz|buy|business|builders|build|bugatti|budapest|brussels|brother|broker|broadway|bridgestone|bradesco|box|boutique|bot|boston|bostik|bosch|boots|booking|book|boo|bond|bom|bofa|boehringer|boats|bnpparibas|bnl|bmw|bms|blue|bloomberg|blog|blockbuster|blanco|blackfriday|black|biz|bio|bingo|bing|bike|bid|bible|bharti|bet|bestbuy|best|berlin|bentley|beer|beauty|beats|bcn|bcg|bbva|bbt|bbc|bayern|bauhaus|basketball|baseball|bargains|barefoot|barclays|barclaycard|barcelona|bar|bank|band|bananarepublic|banamex|baidu|baby|azure|axa|aws|avianca|autos|auto|author|auspost|audio|audible|audi|auction|attorney|athleta|associates|asia|asda|arte|art|arpa|army|archi|aramco|arab|aquarelle|apple|app|apartments|aol|anz|anquan|android|analytics|amsterdam|amica|amfam|amex|americanfamily|americanexpress|alstom|alsace|ally|allstate|allfinanz|alipay|alibaba|alfaromeo|akdn|airtel|airforce|airbus|aigo|aig|agency|agakhan|africa|afl|afamilycompany|aetna|aero|aeg|adult|ads|adac|actor|active|aco|accountants|accountant|accenture|academy|abudhabi|abogado|able|abc|abbvie|abbott|abb|abarth|aarp|aaa|onion)(?=[^0-9a-zA-Z@+-]|$))|(?:(?:한국|香港|澳門|新加坡|台灣|台湾|中國|中国|გე|ລາວ|ไทย|ලංකා|ഭാരതം|ಭಾರತ|భారత్|சிங்கப்பூர்|இலங்கை|இந்தியா|ଭାରତ|ભારત|ਭਾਰਤ|ভাৰত|ভারত|বাংলা|भारोत|भारतम्|भारत|ڀارت|پاکستان|موريتانيا|مليسيا|مصر|قطر|فلسطين|عمان|عراق|سورية|سودان|تونس|بھارت|بارت|ایران|امارات|المغرب|السعودية|الجزائر|البحرين|الاردن|հայ|қаз|укр|срб|рф|мон|мкд|ею|бел|бг|ευ|ελ|zw|zm|za|yt|ye|ws|wf|vu|vn|vi|vg|ve|vc|va|uz|uy|us|um|uk|ug|ua|tz|tw|tv|tt|tr|tp|to|tn|tm|tl|tk|tj|th|tg|tf|td|tc|sz|sy|sx|sv|su|st|ss|sr|so|sn|sm|sl|sk|sj|si|sh|sg|se|sd|sc|sb|sa|rw|ru|rs|ro|re|qa|py|pw|pt|ps|pr|pn|pm|pl|pk|ph|pg|pf|pe|pa|om|nz|nu|nr|np|no|nl|ni|ng|nf|ne|nc|na|mz|my|mx|mw|mv|mu|mt|ms|mr|mq|mp|mo|mn|mm|ml|mk|mh|mg|mf|me|md|mc|ma|ly|lv|lu|lt|ls|lr|lk|li|lc|lb|la|kz|ky|kw|kr|kp|kn|km|ki|kh|kg|ke|jp|jo|jm|je|it|is|ir|iq|io|in|im|il|ie|id|hu|ht|hr|hn|hm|hk|gy|gw|gu|gt|gs|gr|gq|gp|gn|gm|gl|gi|gh|gg|gf|ge|gd|gb|ga|fr|fo|fm|fk|fj|fi|eu|et|es|er|eh|eg|ee|ec|dz|do|dm|dk|dj|de|cz|cy|cx|cw|cv|cu|cr|co|cn|cm|cl|ck|ci|ch|cg|cf|cd|cc|ca|bz|by|bw|bv|bt|bs|br|bq|bo|bn|bm|bl|bj|bi|bh|bg|bf|be|bd|bb|ba|az|ax|aw|au|at|as|ar|aq|ao|an|am|al|ai|ag|af|ae|ad|ac)(?=[^0-9a-zA-Z@+-]|$))|(?:xn--[\\-0-9a-z]+))))(?::([0-9]+))?(\\/(?:(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*)*[\\+\\-a-z\\u0400-\\u04FF0-9=_#\\/\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]|(?:\\((?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+|(?:[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*\\([a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\)[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]*))\\)))|(?:@[a-z\\u0400-\\u04FF0-9!\\*';:=\\+,\\.\\$\\/%#\\[\\]\\-\\u2013_~@\\|&\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF\\u0100-\\u024F\\u0253\\u0254\\u0256\\u0257\\u0259\\u025B\\u0263\\u0268\\u026F\\u0272\\u0289\\u028B\\u02BB\\u0300-\\u036F\\u1E00-\\u1EFF]+\\/))*)?(\\?[a-z0-9!?\\*'@\\(\\);:&=\\+\\$\\/%#\\[\\]\\-_\\.,~|]*[a-z0-9\\-_&=#\\/])?))",Kn="gi",_t={source:qn,flags:Kn};var Vn={BASE_URL:"./",DEV:!1,MODE:"production",PHANPY_CLIENT_NAME:"Phanpy",PHANPY_LINGVA_INSTANCES:"lingva.phanpy.social lingva.lunar.icu lingva.garudalinux.org translate.plausibility.cloud",PHANPY_PRIVACY_POLICY_URL:"https://github.com/cheeaun/phanpy/blob/main/PRIVACY.MD",PHANPY_WEBSITE:"https://phanpy.social",PROD:!0,SSR:!1,VITE_APP_ENV:"production"};const{PHANPY_IMG_ALT_API_URL:ut,PHANPY_GIPHY_API_KEY:Gn}=Vn,Yn=yt.reduce((s,e)=>{const[n,a,r]=e;return s[n]={common:a,native:r},s},{}),Kt={"5 minutes":5*60,"30 minutes":30*60,"1 hour":60*60,"6 hours":6*60*60,"12 hours":12*60*60,"1 day":24*60*60,"3 days":3*24*60*60,"7 days":7*24*60*60},Zn=Object.values(Kt),Rt=24*60*60,Dt=s=>{if(!s)return Rt;const e=(new Date(s).getTime()-Date.now())/1e3;return Zn.find(n=>n>=e)||Rt},ye=document.createElement("ul");ye.role="listbox";ye.className="text-expander-menu";const Jn=16,Xn=new IntersectionObserver(s=>{s.forEach(e=>{if(e.isIntersecting){const{left:n,width:a}=e.boundingClientRect,{innerWidth:r}=window;if(n+a>r){const m=on()?"right":"left";ye.style[m]=r-a-Jn+"px"}}})});Xn.observe(ye);const we=rn([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],yt.map(s=>s[0]),"en"),Vt=new RegExp(_t.source,_t.flags),Qn=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,ei="$2xxxxxxxxxxxxxxxxxxxxxxx";function ti(s){return s.replace(Vt,ei).replace(Qn,"$1@$3")}const ni=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,ii=new RegExp(`(^|[^=\\/\\w])(@${ni.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),si=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),ai="[a-zA-Z0-9_]{2,}",oi=new RegExp(`(^|[^=\\/\\w])(:${ai}:)(?=[^A-Za-z0-9_:]|$)`,"g"),ri=new Intl.Segmenter;function dt(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function li(s,{maxCharacters:e=1/0}){const{composerCharacterCount:n}=le;if(n>e){let a="",r="";const m=ri.segment(s);for(const{segment:u,index:v}of m)v"),dt(a)+r}return dt(s).replace(Vt,'$2$3').replace(ii,'$1$2').replace(si,'$1$2').replace(oi,'$1$2')}const ci=new Intl.RelativeTimeFormat,vt=100;function Ci({onClose:s,replyToStatus:e,editStatus:n,draftStatus:a,standalone:r,hasOpener:m}){var Ct;const{masto:u,instance:v}=bt(),[g,R]=H("default"),C=W((a==null?void 0:a.uid)||ln()),k=xn(),z=k.info,Z=Ut(),{statuses:{maxCharacters:D,maxMediaAttachments:I,charactersReservedPerUrl:se}={},mediaAttachments:{supportedMimeTypes:J=[],imageSizeLimit:c,imageMatrixLimit:h,videoSizeLimit:p,videoMatrixLimit:f,videoFrameRateLimit:E}={},polls:{maxOptions:y,maxCharactersPerOption:T,maxExpiration:q,minExpiration:ue}={}}=Z||{},S=W(),X=W(),[V,U]=H("public"),[j,te]=H(!1),[O,ie]=H(Le.session.get("currentLanguage")||we),ae=W(O),[M,A]=H([]),[$,L]=H(null),N=Le.account.get("preferences")||{},Q=()=>{S.current&&S.current.dispatchEvent(new Event("input"))},oe=()=>{setTimeout(()=>{var o,l,b;S.current&&((l=(o=a==null?void 0:a.status)==null?void 0:o.startsWith)!=null&&l.call(o,` +`)&&(S.current.selectionStart=0,S.current.selectionEnd=0),(b=S.current)==null||b.focus())},300)};ee(()=>{if(e){const{spoilerText:o,visibility:l,language:b,sensitive:d}=e;o&&X.current&&(X.current.value=o);const x=[...new Set([e.account.acct,...e.mentions.map(w=>w.acct)])].filter(w=>w!==z.acct);x.length>0&&(S.current.value=`${x.map(w=>`@${w}`).join(" ")} `,Q()),oe(),U(l==="public"&&N["posting:default:visibility"]?N["posting:default:visibility"]:l),ie(b||N.postingDefaultLanguage||we),te(d&&!!o)}else if(n){const{visibility:o,language:l,sensitive:b,poll:d,mediaAttachments:_}=n,x=!!(d!=null&&d.options)&&{...d,options:d.options.map(w=>(w==null?void 0:w.title)||w),expiresIn:(d==null?void 0:d.expiresIn)||Dt(d.expiresAt)};R("loading"),(async()=>{try{const w=await u.v1.statuses.$select(n.id).source.fetch(),{text:F,spoilerText:P}=w;S.current.value=F,S.current.dataset.source=F,Q(),oe(),X.current.value=P,U(o),ie(l||presf.postingDefaultLanguage||we),te(b),x&&L(x),A(_),R("default")}catch(w){alert((w==null?void 0:w.reason)||w),R("error")}})()}else oe(),N["posting:default:visibility"]&&U(N["posting:default:visibility"]),N["posting:default:language"]&&ie(N["posting:default:language"]),N["posting:default:sensitive"]&&te(N["posting:default:sensitive"]);if(a){const{status:o,spoilerText:l,visibility:b,language:d,sensitive:_,poll:x,mediaAttachments:w}=a,F=!!(x!=null&&x.options)&&{...x,options:x.options.map(P=>(P==null?void 0:P.title)||P),expiresIn:(x==null?void 0:x.expiresIn)||Dt(x.expiresAt)};S.current.value=o,Q(),oe(),l&&(X.current.value=l),b&&U(b),ie(d||N.postingDefaultLanguage||we),_!==null&&te(_),F&&L(F),w&&A(w)}},[a,n,e]);const he=W(),ve="You have unsaved changes. Discard this post?",xe=()=>{const{value:o,dataset:l}=S.current;if(g==="loading")return!1;const b=(o||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),d=M.length>0;if(!b&&!d||M.length>0&&M.every(P=>P.id))return!0;const x=(e==null?void 0:e.account.id)===z.id,w=e&&o.trim()===`@${e.account.acct}`;return!!(!x&&w||o===(l==null?void 0:l.source))},Oe=()=>xe()?!0:confirm(ve);ee(()=>{const o=l=>{xe()||(l.preventDefault(),l.returnValue=ve)};return window.addEventListener("beforeunload",o,{capture:!0}),()=>window.removeEventListener("beforeunload",o,{capture:!0})},[]);const Zt=()=>{const{value:o}=S.current,{value:l}=X.current;return Bt(ti(o))+Bt(l)},tt=()=>{const o=Zt();le.composerCharacterCount=o};ee(tt,[]);const wt=window.CloseWatcher,nt=W(!1);_e("esc",()=>{nt.current=!0},{enabled:!wt,enableOnFormTags:!0}),_e("esc",()=>{!r&&nt.current&&Oe()&&s(),nt.current=!1},{enabled:!wt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:o=>{const l=document.querySelectorAll("#modal-container > *"),b=!!l,d=l.length===1&&l[0].querySelector("#compose-container");return b&&!d}}),cn(()=>{!r&&Oe()&&s()},[r,Oe,s]);const kt=W({}),Et=()=>`${wn()}#${C.current}`,it=()=>{if(n||le.composerState.minimized)return;const o=Et(),l={key:o,replyTo:e?{id:e.id,account:{id:e.account.id,username:e.account.username,acct:e.account.acct}}:null,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};!kn(l,kt.current)&&!xe()&&(zt.drafts.set(o,{...l,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(b=>{}),kt.current=structuredClone(l))};un(it,5e3),ee(()=>(it(),()=>{zt.drafts.del(Et())}),[]),ee(()=>{const o=b=>{const{items:d}=b.clipboardData||b.dataTransfer,_=[];for(let x=0;x0&&M.length>=I){alert(`You can only attach up to ${I} files.`);return}if(_.length>0){b.preventDefault(),b.stopPropagation();const x=I-M.length,w=_.slice(0,x);if(w.length<=0){alert(`You can only attach up to ${I} files.`);return}const F=w.map(P=>({file:P,type:P.type,size:P.size,url:URL.createObjectURL(P),id:null,description:null}));A([...M,...F])}};window.addEventListener("paste",o);const l=b=>{b.dataTransfer.items.length>0&&(b.preventDefault(),b.stopPropagation())};return window.addEventListener("dragover",l),window.addEventListener("drop",o),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",l),window.removeEventListener("drop",o)}},[M]);const[He,st]=H(!1),[Ne,Ue]=H(!1),[Jt,at]=H(!1),[me,Xt]=H(null),[Qt,en]=Re(()=>{const o=[],l=[],{contentTranslationHideLanguages:b=[]}=le.settings;return yt.forEach(d=>{const[_]=d;_===O||_===ae.current||_===we||b.includes(_)||me!=null&&me.length&&me.includes(_)?o.push(d):l.push(d)}),o.sort(([d,_],[x,w])=>d===O?-1:x===O?1:_.localeCompare(w)),l.sort(([d,_],[x,w])=>_.localeCompare(w)),[o,l]},[O,me]),Ft=Re(()=>!!(e!=null&&e.createdAt)&&Math.floor((Date.now()-new Date(e.createdAt))/(1e3*60*60*24*30)),[e]),tn=()=>{it(),le.composerState.minimized=!0};return t("div",{id:"compose-container-outer",children:[t("div",{id:"compose-container",class:r?"standalone":"",children:[t("div",{class:"compose-top",children:[(z==null?void 0:z.avatarStatic)&&t(Ht,{account:z,accountInstance:k.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),r?m&&t("button",{type:"button",class:"light pop-button",disabled:g==="loading",onClick:()=>{var o;if(!window.opener){alert("Looks like you closed the parent window.");return}if(window.opener.__STATES__.showCompose){if((o=window.opener.__STATES__.composerState)!=null&&o.publishing){alert("Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later.");return}if(!confirm("Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?"))return}s({fn:()=>{const l={editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}};window.opener.__COMPOSE__=l,window.opener.__STATES__.showCompose?(window.opener.__STATES__.showCompose=!1,setTimeout(()=>{window.opener.__STATES__.showCompose=!0},10)):window.opener.__STATES__.showCompose=!0,window.opener.__STATES__.composerState.minimized&&(window.opener.__STATES__.composerState.minimized=!1)}})},children:t(K,{icon:"popin",alt:"Pop in"})}):t("span",{class:"compose-controls",children:[t("button",{type:"button",class:"plain4 pop-button",disabled:g==="loading",onClick:()=>{dn({editStatus:n,replyToStatus:e,draftStatus:{uid:C.current,status:S.current.value,spoilerText:X.current.value,visibility:V,language:O,sensitive:j,poll:$,mediaAttachments:M}})&&s()},children:t(K,{icon:"popout",alt:"Pop out"})}),t("button",{type:"button",class:"plain4 min-button",onClick:tn,children:t(K,{icon:"minimize",alt:"Minimize"})})," ",t("button",{type:"button",class:"light close-button",disabled:g==="loading",onClick:()=>{Oe()&&s()},children:t(K,{icon:"x"})})]})]}),!!e&&t("div",{class:"status-preview",children:[t(St,{status:e,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend reply-to",children:["Replying to @",e.account.acct||e.account.username,"’s post",Ft>=3&&t(Ce,{children:[" ","(",t("strong",{children:ci.format(-Ft,"month")}),")"]})]})]}),!!n&&t("div",{class:"status-preview",children:[t(St,{status:n,size:"s",previewMode:!0}),t("div",{class:"status-preview-legend",children:"Editing source post"})]}),t("form",{ref:he,class:`form-visibility-${V}`,style:{pointerEvents:g==="loading"?"none":"auto",opacity:g==="loading"?.5:1},onKeyDown:o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&he.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:o=>{o.preventDefault();const l=new FormData(o.target),b=Object.fromEntries(l.entries());let{status:d,visibility:_,sensitive:x,spoilerText:w}=b;if(x=x==="on",$){if($.options.length<2){alert("Poll must have at least 2 options");return}if($.options.some(F=>F==="")){alert("Some poll choices are empty");return}}M.length>0&&M.some(P=>{var ne,$e;return!(($e=(ne=P.description)==null?void 0:ne.trim)!=null&&$e.call(ne))})&&!confirm("Some media have no descriptions. Continue?")||(w=x&&w||void 0,d=d===""?void 0:d,le.composerState.publishing=!0,R("loading"),(async()=>{try{if(M.length>0){const ne=M.map(ge=>{const{file:We,description:nn,id:sn}=ge;if(sn)return ge;{const an=Ot({file:We,description:nn});return u.v2.media.create(an).then(ot=>(ot.id&&(ge.id=ot.id),ot))}}),$e=await Promise.allSettled(ne);if($e.some(ge=>{var We;return ge.status==="rejected"||!((We=ge.value)!=null&&We.id)})){le.composerState.publishing=!1,le.composerState.publishingError=!0,R("error"),$e.forEach(ge=>{ge.status==="rejected"&&alert(ge.reason||`Attachment #${i} failed`)});return}}let F={status:d,spoiler_text:w,language:O,sensitive:x,poll:$,media_ids:M.map(ne=>ne.id)};n&&Nt("@mastodon/edit-media-attributes")?F.media_attributes=M.map(ne=>({id:ne.id,description:ne.description})):n||(F.visibility=_,F.in_reply_to_id=(e==null?void 0:e.id)||void 0),F=Ot(F);let P;if(n)P=await u.v1.statuses.$select(n.id).update(F),En(P,v,{skipThreading:!0});else try{P=await u.v1.statuses.create(F,{requestInit:{headers:{"Idempotency-Key":C.current}}})}catch{P=await u.v1.statuses.create(F)}le.composerState.minimized=!1,le.composerState.publishing=!1,R("default"),s({type:n?"edit":e?"reply":"post",newStatus:P,instance:v})}catch(F){le.composerState.publishing=!1,le.composerState.publishingError=!0,alert((F==null?void 0:F.reason)||F),R("error")}})())},children:[t("div",{class:"toolbar stretch",children:[t("input",{ref:X,type:"text",name:"spoilerText",placeholder:"Content warning",disabled:g==="loading",class:"spoiler-text-field",lang:O,spellCheck:"true",dir:"auto",style:{opacity:j?1:0,pointerEvents:j?"auto":"none"},onInput:()=>{tt()}}),t("label",{class:`toolbar-button ${j?"highlight":""}`,title:"Content warning or sensitive media",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{var b,d;const l=o.target.checked;te(l),l?(b=X.current)==null||b.focus():(d=S.current)==null||d.focus()}}),t(K,{icon:`eye-${j?"close":"open"}`})]})," ",t("label",{class:`toolbar-button ${V!=="public"&&!j?"show-field":""} ${V!=="public"?"highlight":""}`,title:`Visibility: ${V}`,children:[t(K,{icon:hn[V],alt:V}),t("select",{name:"visibility",value:V,onChange:o=>{U(o.target.value)},disabled:g==="loading"||!!n,dir:"auto",children:[t("option",{value:"public",children:["Public ",t(K,{icon:"earth"})]}),t("option",{value:"unlisted",children:"Unlisted"}),t("option",{value:"private",children:"Followers only"}),t("option",{value:"direct",children:"Private mention"})]})]})," "]}),t(hi,{ref:S,placeholder:e?"Post your reply":n?"Edit your post":"What are you doing?",required:(M==null?void 0:M.length)===0,disabled:g==="loading",lang:O,onInput:()=>{tt()},maxCharacters:D,performSearch:o=>{const{type:l,q:b,limit:d}=o;return l==="accounts"?u.v1.accounts.search.list({q:b,limit:d,resolve:!1}):u.v2.search.fetch(o)},onTrigger:o=>{(o==null?void 0:o.name)==="custom-emojis"?Ue({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="mention"?st({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="auto-detect-language"&&(o!=null&&o.languages)&&Xt(o.languages)}}),(M==null?void 0:M.length)>0&&t("div",{class:"media-attachments",children:[M.map((o,l)=>{const{id:b,file:d}=o,_=(d==null?void 0:d.size)+(d==null?void 0:d.type)+(d==null?void 0:d.name);return t(mi,{attachment:o,disabled:g==="loading",lang:O,onDescriptionChange:x=>{A(w=>{const F=[...w];return F[l].description=x,F})},onRemove:()=>{A(x=>x.filter((w,F)=>F!==l))}},b||_||l)}),t("label",{class:"media-sensitive",children:[t("input",{name:"sensitive",type:"checkbox",checked:j,disabled:g==="loading",onChange:o=>{const l=o.target.checked;te(l)}})," ",t("span",{children:"Mark media as sensitive"})," ",t(K,{icon:`eye-${j?"close":"open"}`})]})]}),!!$&&t(gi,{lang:O,maxOptions:y,maxExpiration:q,minExpiration:ue,maxCharactersPerOption:T,poll:$,disabled:g==="loading",onInput:o=>{if(o){const l={...o};L(l)}else L(null)}}),t("div",{class:"toolbar wrap",style:{justifyContent:"flex-end"},children:[t("span",{children:[t("label",{class:"toolbar-button",children:[t("input",{type:"file",accept:J.join(","),multiple:M.length=I||!!$,onChange:o=>{const l=o.target.files;if(!l)return;const b=Array.from(l).map(d=>({file:d,type:d.type,size:d.size,url:URL.createObjectURL(d),id:null,description:null}));M.length+b.length>I?alert(`You can only attach up to ${I} files.`):A(d=>d.concat(b)),o.target.value=""}}),t(K,{icon:"attachment"})]}),y==null||y>1&&t(Ce,{children:t("button",{type:"button",class:"toolbar-button",disabled:g==="loading"||!!$||!!M.length,onClick:()=>{L({options:["",""],expiresIn:24*60*60,multiple:!1})},children:t(K,{icon:"poll",alt:"Add poll"})})}),t("button",{type:"button",class:"toolbar-button",disabled:g==="loading",onClick:()=>{Ue(!0)},children:t(K,{icon:"emoji2"})}),!!le.settings.composerGIFPicker&&t("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:g==="loading"||M.length>=I||!!$,onClick:()=>{at(!0)},children:t("span",{children:"GIF"})})]}),t("div",{class:"spacer"}),g==="loading"?t(et,{abrupt:!0}):t(pi,{maxCharacters:D,hidden:g==="loading"}),t("label",{class:`toolbar-button ${O!==ae.current||me!=null&&me.length&&!me.includes(O)?"highlight":""}`,children:[t("span",{class:"icon-text",children:(Ct=Yn[O])==null?void 0:Ct.native}),t("select",{name:"language",value:O,onChange:o=>{const{value:l}=o.target;ie(l||we),Le.session.set("currentLanguage",l||we)},disabled:g==="loading",dir:"auto",children:[Qt.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o)),t("hr",{}),en.map(([o,l,b])=>t("option",{value:o,children:[l," (",b,")"]},o))]})]})," ",t("button",{type:"submit",class:"large",disabled:g==="loading",children:e?"Reply":n?"Update":"Post"})]})]})]}),He&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&st(!1)},children:t(fi,{masto:u,instance:v,onClose:()=>{st(!1)},defaultSearchTerm:He==null?void 0:He.defaultSearchTerm,onSelect:o=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+"@"+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+1+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Ne&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&Ue(!1)},children:t(vi,{masto:u,instance:v,onClose:()=>{Ue(!1)},defaultSearchTerm:Ne==null?void 0:Ne.defaultSearchTerm,onSelect:o=>{const l=S.current;if(!l)return;const{selectionStart:b,selectionEnd:d}=l,_=l.value,x=_.slice(0,b),w=x?/[\s\t\n\r]$/.test(x)?"":" ":"",F=_.slice(d),P=/^[\s\t\n\r]/.test(F)?"":" ",ne=x+w+o+P+F;l.value=ne,l.selectionStart=l.selectionEnd=d+o.length+P.length,l.focus(),l.dispatchEvent(new Event("input"))}})}),Jt&&t(Ve,{onClick:o=>{o.target===o.currentTarget&&at(!1)},children:t(yi,{onClose:()=>at(!1),onSelect:({url:o,type:l,alt_text:b})=>{if(M.length>=I){alert(`You can only attach up to ${I} files.`);return}(async()=>{var _,x;let d;try{d=ke({text:"Downloading GIF…",duration:-1});const w=await fetch(o,{referrerPolicy:"no-referrer"}).then(ne=>ne.blob()),F=new File([w],l==="video/mp4"?"video.mp4":"image.gif",{type:l}),P=[...M,{file:F,type:l,size:F.size,id:null,description:b||""}];A(P),(_=d==null?void 0:d.hideToast)==null||_.call(d)}catch{(x=d==null?void 0:d.hideToast)==null||x.call(d),ke("Failed to download GIF")}})()}})})]})}function jt(s){if(!s)return;const{value:e,offsetHeight:n,scrollHeight:a,clientHeight:r}=s;if(nm.visibleInPicker),r=new pn(a,{keys:["shortcode"],findAllMatches:!0});return[a,r]}const Gt=Fn(ui,{matchesArg:(s,e)=>s.instance===e.instance,maxAge:30*60*1e3}),di=s=>{const e=zn(s);return e!=null&&e.length?e.slice(0,2).map(n=>n.lang):null},hi=Cn((s,e)=>{var J;const{masto:n,instance:a}=bt(),[r,m]=H(((J=e.current)==null?void 0:J.value)||""),{maxCharacters:u,performSearch:v=()=>{},onTrigger:g=()=>{},...R}=s,C=W();ee(()=>{Gt(a,n).then(c=>{const[h,p]=c;C.current=p}).catch(c=>{})},[]);const k=W(),z=W("");ee(()=>{let c,h,p;return k.current&&(c=f=>{var ue;const{key:E,provide:y,text:T}=f.detail;if(z.current=T,T===""){y(Promise.resolve({matched:!1}));return}if(E===":"){const S=(ue=C.current)==null?void 0:ue.search(T,{limit:5});let X="";S.forEach(({item:V})=>{const{shortcode:U,url:j}=V;X+=` +
  • + + ${be(U)} +
  • `}),X+=`
  • More…
  • `,ye.innerHTML=X,y(Promise.resolve({matched:S.length>0,fragment:ye}));return}const q={"@":"accounts","#":"hashtags"}[E];y(new Promise(S=>{v({type:q,q:T,limit:5}).then(V=>{if(T!==z.current)return;const U=V[q]||V;let j="";U.forEach(te=>{var Q;const{name:O,avatarStatic:ie,displayName:ae,username:M,acct:A,emojis:$,history:L}=te,N=mn(ae,$);if(A)j+=` +
  • + + + + + ${N||M} +
    @${be(A)} +
    +
  • + `;else{const oe=(Q=L==null?void 0:L.reduce)==null?void 0:Q.call(L,(he,ve)=>he+ +ve.uses,0);j+=` +
  • + #${be(O)} + ${oe?`${gn(oe)}`:""} +
  • + `}}),q==="accounts"&&(j+=`
  • More…
  • `),ye.innerHTML=j,S({matched:U.length>0,fragment:ye})})}))},k.current.addEventListener("text-expander-change",c),h=f=>{const{key:E,item:y}=f.detail,{value:T,more:q}=y.dataset;E===":"?(f.detail.value=T?`:${T}:`:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"custom-emojis",defaultSearchTerm:q})},300))):E==="@"?(f.detail.value=T?`@${T} `:"​",q&&(f.detail.continue=!0,setTimeout(()=>{g==null||g({name:"mention",defaultSearchTerm:q})},300))):f.detail.value=`${E}${T}`},k.current.addEventListener("text-expander-value",h),p=f=>{const{input:E}=f.detail;if(m(E.value),e.current){const y=new Event("input",{bubbles:!0});e.current.dispatchEvent(y)}},k.current.addEventListener("text-expander-committed",p)),()=>{k.current&&(k.current.removeEventListener("text-expander-change",c),k.current.removeEventListener("text-expander-value",h),k.current.removeEventListener("text-expander-committed",p))}},[]),ee(()=>{const c=e.current;if(!c)return;new ResizeObserver(()=>{if(k.current){const{height:p}=c.getBoundingClientRect();k.current.style.height=p+"px"}}).observe(c)},[]);const Z=W(0),D=W(),I=fn(c=>{var f;if(!D.current)return;if(Z.current>3){D.current.innerHTML="",D.current=null,(f=I==null?void 0:I.cancel)==null||f.call(I);return}let h,p;Z.current<=3&&(h=Date.now()),D.current.innerHTML=li(c,{maxCharacters:u})+` +`,Z.current<=3&&(p=Date.now()),h&&p&&p-h>50&&Z.current++},500),se=Qe(()=>{var f,E;const c=(f=D.current)==null?void 0:f.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(y=>{y.remove()});const h=(E=c.innerText)==null?void 0:E.trim();if(!h)return;const p=di(h);p!=null&&p.length&&(g==null||g({name:"auto-detect-language",languages:p}))},2e3);return t("text-expander",{ref:k,keys:"@ # :",class:"compose-field-container",children:[t("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...R,ref:e,name:"status",value:r,onKeyDown:c=>{const{key:h,target:p}=c;if(h==="Enter"&&!(c.ctrlKey||c.metaKey))try{const{value:f,selectionStart:E}=p,T=f.slice(0,E).split(` +`).slice(-1)[0];if(T&&/^\s*(-|\d+\.)\s/.test(T)){const[q,ue,S,X,V]=T.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(V){c.preventDefault();const[U]=S.match(/\d+/)||[],j=U?`${+U+1}.`:"-",te=` +${ue}${j}${X}`;p.setRangeText(te,E,E);const O=E+te.length;p.setSelectionRange(O,O)}else{const U=E-T.length;p.setRangeText("",U,E)}jt(p),p.dispatchEvent(new Event("input"))}}catch{}D.current&&(D.current.scrollTop=p.scrollTop)},onInput:c=>{var f;const{target:h}=c,p=h.value.replace(/\u200b/g,"");m(p),jt(h),(f=s.onInput)==null||f.call(s,c),I(p),se()},style:{width:"100%",height:"4em"},onScroll:c=>{if(D.current){const{scrollTop:h}=c.target;D.current.scrollTop=h}}}),t("div",{ref:D,class:"compose-highlight","aria-hidden":"true"})]})});function pi({maxCharacters:s=500,hidden:e}){const a=Ln(le).composerCharacterCount,r=s-a;return e?t("span",{class:"char-counter",hidden:!0}):t("span",{class:"char-counter",title:`${r}/${s}`,style:{"--percentage":a/s*100},children:[t("meter",{class:`${r<=-10?"explode":r<=0?"danger":r<=20?"warning":""}`,value:a,max:s}),t("span",{class:"counter",children:r})]})}function Ke(s){const e=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];let n=0;for(;s>=1024;)s/=1024,n++;return`${s.toFixed(0).toLocaleString()} ${e[n]}`}function Pt(s,e,n,a){const r=Math.sqrt(e/s),m=Math.floor(n*r),u=Math.floor(a*r);return{newWidth:m,newHeight:u}}function mi({attachment:s,disabled:e,lang:n,onDescriptionChange:a=()=>{},onRemove:r=()=>{}}){const[m,u]=H("default"),v=Nt("@mastodon/edit-media-attributes"),{type:g,id:R,file:C}=s,k=Re(()=>C?URL.createObjectURL(C):s.url,[C,s.url]),z=!!(C!=null&&C.size),Z=z?Ut():{},{mediaAttachments:{imageSizeLimit:D,imageMatrixLimit:I,videoSizeLimit:se,videoMatrixLimit:J,videoFrameRateLimit:c}={}}=Z||{},[h,p]=H(()=>z?g.startsWith("image")&&D&&C.size>D?{type:"imageSizeLimit",details:{imageSize:C.size,imageSizeLimit:D}}:g.startsWith("video")&&se&&C.size>se?{type:"videoSizeLimit",details:{videoSize:C.size,videoSizeLimit:se}}:null:null),[f,E]=H({});ee(()=>{!z||!I||(f==null?void 0:f.matrix)>I&&p({type:"imageMatrixLimit",details:{imageMatrix:f==null?void 0:f.matrix,imageMatrixLimit:I,width:f==null?void 0:f.width,height:f==null?void 0:f.height}})},[f,I,z]);const[y,T]=H({});ee(()=>{!z||!J||(y==null?void 0:y.matrix)>J&&p({type:"videoMatrixLimit",details:{videoMatrix:y==null?void 0:y.matrix,videoMatrixLimit:J,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,J,z]);const[q,ue]=H(s.description),[S,X]=g.split("/"),V=Qe(a,250);ee(()=>{V(q)},[q,V]);const[U,j]=H(!1),te=W(null);ee(()=>{let A;return U&&te.current&&(A=setTimeout(()=>{te.current.focus()},100)),()=>{clearTimeout(A)}},[U]);const O=t(Ce,{children:R&&!v?t("div",{class:"media-desc",children:[t("span",{class:"tag",children:"Uploaded"}),t("p",{title:q,children:s.description||t("i",{children:"No description"})})]}):t("textarea",{ref:te,value:q||"",lang:n,placeholder:{image:"Image description",video:"Video description",audio:"Audio description"}[S],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:e||m==="loading",class:m==="loading"?"loading":"",maxlength:"1500",onInput:A=>{const{value:$}=A.target;ue($)}})}),ie=W(null);ee(()=>()=>{var A,$;($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)},[]);const ae=W(null),M=A=>{const{type:$,details:L}=A;switch($){case"imageSizeLimit":{const{imageSize:N,imageSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"imageMatrixLimit":{const{imageMatrix:N,imageMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoSizeLimit":{const{videoSize:N,videoSizeLimit:Q}=L;return`File size too large. Uploading might encounter issues. Try reduce the file size from ${Ke(N)} to ${Ke(Q)} or lower.`}case"videoMatrixLimit":{const{videoMatrix:N,videoMatrixLimit:Q,width:oe,height:he}=L,{newWidth:ve,newHeight:xe}=Pt(N,Q,oe,he);return`Dimension too large. Uploading might encounter issues. Try reduce dimension from ${oe.toLocaleString()}×${he.toLocaleString()}px to ${ve.toLocaleString()}×${xe.toLocaleString()}px.`}case"videoFrameRateLimit":return"Frame rate too high. Uploading might encounter issues."}};return t(Ce,{children:[t("div",{class:"media-attachment",children:[t("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:S==="image"?t("img",{src:k,alt:"",onLoad:A=>{if(!z)return;const{naturalWidth:$,naturalHeight:L}=A.target;E({matrix:$*L,width:$,height:L})}}):S==="video"||S==="gifv"?t("video",{src:k+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:A=>{if(!z)return;const{videoWidth:$,videoHeight:L}=A.target;$&&L&&T({matrix:$*L,width:$,height:L})}}):S==="audio"?t("audio",{src:k,controls:!0}):null}),O,t("div",{class:"media-aside",children:[t("button",{type:"button",class:"plain close-button",disabled:e,onClick:r,children:t(K,{icon:"x"})}),!!h&&t("button",{type:"button",class:"media-error",title:M(h),onClick:()=>{ae.current&&ae.current.hideToast(),ae.current=ke({text:M(h),duration:1e4})},children:t(K,{icon:"alert"})})]})]}),U&&t(Ve,{onClose:()=>{j(!1)},children:t("div",{id:"media-sheet",class:"sheet sheet-max",children:[t("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:t(K,{icon:"x"})}),t("header",{children:t("h2",{children:{image:"Edit image description",video:"Edit video description",audio:"Edit audio description"}[S]})}),t("main",{tabIndex:"-1",children:[t("div",{class:"media-preview",children:S==="image"?t("img",{src:k,alt:""}):S==="video"||S==="gifv"?t("video",{src:k,playsinline:!0,controls:!0}):S==="audio"?t("audio",{src:k,controls:!0}):null}),t("div",{class:"media-form",children:[O,t("footer",{children:[S==="image"&&/^(png|jpe?g|gif|webp)$/i.test(X)&&!!le.settings.mediaAltGenerator&&!!ut&&t(vn,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:t("button",{type:"button",title:"More",class:"plain",children:t(K,{icon:"more",size:"l",alt:"More"})}),children:[t(At,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var A,$;try{const L=new FormData;L.append("image",C);const N=await fetch(ut,{method:"POST",body:L}).then(Q=>Q.json());if(N.error)throw new Error(N.error);ue(N.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)}}()},children:[t(K,{icon:"sparkles2"}),n&&n!=="en"?t("small",{children:["Generate description…",t("br",{}),"(English)"]}):t("span",{children:"Generate description…"})]}),!!n&&n!=="en"&&t(At,{disabled:m==="loading",onClick:()=>{u("loading"),ie.current=ke({text:"Generating description. Please wait...",duration:-1}),async function(){var A,$;try{const L=new FormData;L.append("image",C);const N=`?lang=${n}`,Q=await fetch(ut+N,{method:"POST",body:L}).then(oe=>oe.json());if(Q.error)throw new Error(Q.error);ue(Q.description)}catch(L){ke(`Failed to generate description${L!=null&&L.message?`: ${L.message}`:""}`)}finally{u("default"),($=(A=ie.current)==null?void 0:A.hideToast)==null||$.call(A)}}()},children:[t(K,{icon:"sparkles2"}),t("small",{children:["Generate description…",t("br",{}),"(",bn(n),")"," ",t("span",{class:"more-insignificant",children:"— experimental"})]})]})]}),t("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:m==="loading",children:"Done"})]})]})]})]})})]})}function gi({lang:s,poll:e,disabled:n,onInput:a=()=>{},maxOptions:r,maxExpiration:m,minExpiration:u,maxCharactersPerOption:v}){const{options:g,expiresIn:R,multiple:C}=e;return t("div",{class:`poll ${C?"multiple":""}`,children:[t("div",{class:"poll-choices",children:g.map((k,z)=>t("div",{class:"poll-choice",children:[t("input",{required:!0,type:"text",value:k,disabled:n,maxlength:v,placeholder:`Choice ${z+1}`,lang:s,spellCheck:"true",dir:"auto",onInput:Z=>{const{value:D}=Z.target;g[z]=D,a(e)}}),t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length<=1,onClick:()=>{g.splice(z,1),a(e)},children:t(K,{icon:"x",size:"s"})})]},z))}),t("div",{class:"poll-toolbar",children:[t("button",{type:"button",class:"plain2 poll-button",disabled:n||g.length>=r,onClick:()=>{g.push(""),a(e)},children:"+"})," ",t("label",{class:"multiple-choices",children:[t("input",{type:"checkbox",checked:C,disabled:n,onChange:k=>{const{checked:z}=k.target;e.multiple=z,a(e)}})," ","Multiple choices"]}),t("label",{class:"expires-in",children:["Duration"," ",t("select",{value:R,disabled:n,onChange:k=>{const{value:z}=k.target;e.expiresIn=z,a(e)},children:Object.entries(Kt).filter(([k,z])=>z>=u&&z<=m).map(([k,z])=>t("option",{value:z,children:k},z))})]})]}),t("div",{class:"poll-toolbar",children:t("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:"Remove poll"})})]})}function be(s){return s.replace(/[&<>"']/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function Ot(s){for(let e in s)(s[e]===null||s[e]===void 0)&&delete s[e];return s}function fi({onClose:s=()=>{},onSelect:e=()=>{},defaultSearchTerm:n}){const{masto:a}=bt(),[r,m]=H("default"),[u,v]=H([]),[g,R]=H({}),[C,k]=H(0),z=async c=>{if(!(c!=null&&c.length))return;const h=await yn(c,g);h&&R({...g,...h})},Z=c=>{c&&(m("loading"),(async()=>{try{const h=await a.v1.accounts.search.list({q:c,limit:40,resolve:!1});v(h),z(h),m("default")}catch{m("error")}})())},D=Qe(Z,1e3);ee(()=>{Z()},[Z]);const I=W();ee(()=>{I.current&&(I.current.focus(),I.current.value&&(I.current.selectionStart=I.current.value.length,I.current.selectionEnd=I.current.value.length))},[]),ee(()=>{n&&Z(n)},[n]);const se=c=>{const h=c.acct;e(h),s()};_e("enter",()=>{const c=u[C];c&&se(c)},{preventDefault:!0,enableOnFormTags:["input"]});const J=W();return _e("down",()=>{C{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),_e("up",()=>{C>0?k(C-1):k(u.length-1),setTimeout(()=>{const c=J.current.querySelector(".selected");c&&c.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),t("div",{id:"mention-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{onSubmit:c=>{var h;c.preventDefault(),(h=D.flush)==null||h.call(D)},children:t("input",{ref:I,required:!0,type:"search",class:"block",placeholder:"Search accounts",onInput:c=>{const{value:h}=c.target;D(h)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),t("main",{children:(u==null?void 0:u.length)>0?t("ul",{ref:J,class:`accounts-list ${r==="loading"?"loading":""}`,children:u.map((c,h)=>{const p=g[c.id];return t("li",{class:h===C?"selected":"",children:[t(Ht,{avatarSize:"xxl",account:c,relationship:p,showStats:!0,showActivity:!0}),t("button",{type:"button",class:"plain2",onClick:()=>{se(c)},children:t(K,{icon:"plus",size:"xl"})})]},c.id)})}):r==="loading"?t("div",{class:"ui-state",children:t(et,{abrupt:!0})}):r==="error"?t("div",{class:"ui-state",children:t("p",{children:"Error loading accounts"})}):null})]})}function vi({masto:s,instance:e,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:r}){const[m,u]=H("default"),v=W([]),[g,R]=H([]),C=Re(()=>Le.account.get("recentlyUsedCustomEmojis")||[]),k=W();ee(()=>{u("loading"),(async()=>{try{const[h,p]=await Gt(e,s);k.current=p,R(h),u("default")}catch{u("error")}})()},[]);const z=Re(()=>{const h={"--recent--":C.filter(f=>g.find(E=>E.shortcode===f.shortcode))},p=[];return g.forEach(f=>{var E,y;if((y=(E=v.current)==null?void 0:E.push)==null||y.call(E,f),!f.category){p.push(f);return}h[f.category]||(h[f.category]=[]),h[f.category].push(f)}),p.length&&(h["--others--"]=p),h},[g]),Z=W(),[D,I]=H(null),se=It(h=>{var f,E,y;const{value:p}=h.target;if(p){const T=(f=k.current)==null?void 0:f.search(p,{limit:vt});I(T.map(q=>q.item)),(y=(E=Z.current)==null?void 0:E.scrollTo)==null||y.call(E,0,0)}else I(null)},[g]);ee(()=>{r&&(g!=null&&g.length)&&se({target:{value:r}})},[r,se,g]);const J=It(h=>{a==null||a(h),n==null||n(),queueMicrotask(()=>{let p=Le.account.get("recentlyUsedCustomEmojis")||[];const f=p.findIndex(E=>E.shortcode===h.shortcode);f!==-1?(p.splice(f,1),p.unshift(h)):(p.unshift(h),p=p.filter(E=>{var y,T;return(T=(y=v.current)==null?void 0:y.find)==null?void 0:T.call(y,q=>q.shortcode===E.shortcode)}),p=p.slice(0,10)),Le.account.set("recentlyUsedCustomEmojis",p)})},[a]),c=W();return ee(()=>{c.current&&(c.current.focus(),c.current.value&&(c.current.selectionStart=c.current.value.length,c.current.selectionEnd=c.current.value.length))},[]),t("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&t("button",{type:"button",class:"sheet-close",onClick:n,children:t(K,{icon:"x"})}),t("header",{children:[t("div",{children:[t("b",{children:"Custom emojis"})," ",m==="loading"?t(et,{}):t("small",{class:"insignificant",children:[" • ",e]})]}),t("form",{onSubmit:h=>{h.preventDefault();const p=D[0];p&&J(`:${p.shortcode}:`)},children:t("input",{ref:c,type:"search",placeholder:"Search emoji",onInput:se,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:r||""})})]}),t("main",{ref:Z,children:D!==null?t("ul",{class:"custom-emojis-matches custom-emojis-list",children:D.map(h=>t("li",{class:"custom-emojis-match",children:t(Yt,{emoji:h,onClick:()=>{J(`:${h.shortcode}:`)},showCode:!0})},h.shortcode))}):t("div",{class:"custom-emojis-list",children:[m==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading custom emojis"})}),m==="default"&&Object.entries(z).map(([h,p])=>!!(p!=null&&p.length)&&t(Ce,{children:[t("div",{class:"section-header",children:{"--recent--":"Recently used","--others--":"Others"}[h]||h}),t(bi,{emojis:p,onSelect:J})]}))]})})]})}const bi=Wt(({emojis:s,onSelect:e})=>{const[n,a]=H(vt),r=s.length>n;return t("section",{children:[s.slice(0,n).map(m=>t(Yt,{emoji:m,onClick:()=>{e(`:${m.shortcode}:`)}},m.shortcode)),r&&t("button",{type:"button",class:"plain small",onClick:()=>a(n+vt),children:[(s.length-n).toLocaleString()," more…"]})]})}),Yt=Wt(({emoji:s,onClick:e,showCode:n})=>{const a=r=>{const u=r.currentTarget.closest("main");if(u){const v=u.getBoundingClientRect(),g=r.currentTarget.getBoundingClientRect(),R=r.currentTarget.classList;g.leftv.right-88?(R.add("edge-right"),R.remove("edge-left")):R.remove("edge-left","edge-right")}};return t("button",{type:"button",className:"plain4",onClick:e,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[t("picture",{children:[!!s.staticUrl&&t("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),t("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&t(Ce,{children:[" ",t("code",{children:s.shortcode})]})]})}),ht=20;function yi({onClose:s=()=>{},onSelect:e=()=>{}}){var z,Z,D,I,se,J;const[n,a]=H("default"),[r,m]=H([]),u=W(null),v=W(null),g=W(0),R=W(null);function C({offset:c}){var h,p,f;(h=v.current)!=null&&h.value&&(a("loading"),(f=(p=R.current)==null?void 0:p.scrollTo)==null||f.call(p,{top:0,left:0,behavior:"smooth"}),(async()=>{var E;try{const y={api_key:Gn,q:v.current.value,rating:"g",limit:ht,bundle:"messaging_non_clips",offset:c},T=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(y),{referrerPolicy:"no-referrer"}).then(q=>q.json());g.current=((E=T.pagination)==null?void 0:E.offset)||0,m(T),a("results")}catch{a("error")}})())}ee(()=>{var c;(c=v.current)==null||c.focus()},[]);const k=Qe(()=>{C({offset:0})},1e3);return t("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&t("button",{type:"button",class:"sheet-close",onClick:s,children:t(K,{icon:"x"})}),t("header",{children:t("form",{ref:u,onSubmit:c=>{c.preventDefault(),C({offset:0})},children:[t("input",{ref:v,type:"search",name:"q",placeholder:"Search GIFs",required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:k}),t("input",{type:"image",class:"powered-button",src:Wn,width:"86",height:"30"})]})}),t("main",{ref:R,class:n==="loading"?"loading":"",children:[n==="default"&&t("div",{class:"ui-state",children:t("p",{class:"insignificant",children:"Type to search GIFs"})}),n==="loading"&&!((z=r==null?void 0:r.data)!=null&&z.length)&&t("div",{class:"ui-state",children:t(et,{abrupt:!0})}),((Z=r==null?void 0:r.data)==null?void 0:Z.length)>0?t(Ce,{children:[t("ul",{children:r.data.map(c=>{const{id:h,images:p,title:f,alt_text:E}=c,{fixed_height_small:y,fixed_height_downsampled:T,fixed_height:q,original:ue}=p,S=y!=null&&y.url?y:T!=null&&T.url?T:q;let{url:X,webp:V,width:U,height:j}=S;+j>100&&(U=U/j*100,j=100);const te=URL.parse(X),O=te.origin+te.pathname;let ie;if(V){const ae=URL.parse(V);ie=ae.origin+ae.pathname}return t("li",{children:t("button",{type:"button",onClick:()=>{const{mp4:ae,url:M}=ue,A=ae||M,$=URL.parse(A),L=$.origin+$.pathname;s(),e({url:L,type:ae?"video/mp4":"image/gif",alt_text:E||f})},children:t("figure",{style:{"--figure-width":U+"px"},children:[t("picture",{children:[ie&&t("source",{srcset:ie,type:"image/webp"}),t("img",{src:O,width:U,height:j,loading:"lazy",decoding:"async",alt:E,referrerpolicy:"no-referrer",onLoad:ae=>{ae.target.style.backgroundColor="transparent"}})]}),t("figcaption",{children:E||f})]})})},h)})}),t("p",{class:"pagination",children:[((D=r.pagination)==null?void 0:D.offset)>0&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)-ht})},children:[t(K,{icon:"chevron-left"}),t("span",{children:"Previous"})]}),t("span",{}),((I=r.pagination)==null?void 0:I.offset)+((se=r.pagination)==null?void 0:se.count)<((J=r.pagination)==null?void 0:J.total_count)&&t("button",{type:"button",class:"light small",disabled:n==="loading",onClick:()=>{var c;C({offset:((c=r.pagination)==null?void 0:c.offset)+ht})},children:[t("span",{children:"Next"})," ",t(K,{icon:"chevron-right"})]})]})]}):n==="results"&&t("div",{class:"ui-state",children:t("p",{children:"No results"})}),n==="error"&&t("div",{class:"ui-state",children:t("p",{children:"Error loading GIFs"})})]})]})}export{Ci as default}; +//# sourceMappingURL=compose-IeRiPb7Z.js.map diff --git a/assets/compose-IeRiPb7Z.js.map b/assets/compose-IeRiPb7Z.js.map new file mode 100644 index 0000000..1cd1acd --- /dev/null +++ b/assets/compose-IeRiPb7Z.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compose-IeRiPb7Z.js","sources":["../../node_modules/@github/combobox-nav/dist/index.js","../../node_modules/@github/text-expander-element/dist/index.js","../../node_modules/ansi-regex/index.js","../../node_modules/strip-ansi/index.js","../../node_modules/string-length/index.js","../../src/assets/powered-by-giphy.svg","../../src/components/compose.jsx"],"sourcesContent":["export default class Combobox {\n constructor(input, list, { tabInsertsSuggestions, defaultFirstOption } = {}) {\n this.input = input;\n this.list = list;\n this.tabInsertsSuggestions = tabInsertsSuggestions !== null && tabInsertsSuggestions !== void 0 ? tabInsertsSuggestions : true;\n this.defaultFirstOption = defaultFirstOption !== null && defaultFirstOption !== void 0 ? defaultFirstOption : false;\n this.isComposing = false;\n if (!list.id) {\n list.id = `combobox-${Math.random().toString().slice(2, 6)}`;\n }\n this.ctrlBindings = !!navigator.userAgent.match(/Macintosh/);\n this.keyboardEventHandler = event => keyboardBindings(event, this);\n this.compositionEventHandler = event => trackComposition(event, this);\n this.inputHandler = this.clearSelection.bind(this);\n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-controls', list.id);\n input.setAttribute('aria-expanded', 'false');\n input.setAttribute('aria-autocomplete', 'list');\n input.setAttribute('aria-haspopup', 'listbox');\n }\n destroy() {\n this.clearSelection();\n this.stop();\n this.input.removeAttribute('role');\n this.input.removeAttribute('aria-controls');\n this.input.removeAttribute('aria-expanded');\n this.input.removeAttribute('aria-autocomplete');\n this.input.removeAttribute('aria-haspopup');\n }\n start() {\n this.input.setAttribute('aria-expanded', 'true');\n this.input.addEventListener('compositionstart', this.compositionEventHandler);\n this.input.addEventListener('compositionend', this.compositionEventHandler);\n this.input.addEventListener('input', this.inputHandler);\n this.input.addEventListener('keydown', this.keyboardEventHandler);\n this.list.addEventListener('click', commitWithElement);\n this.indicateDefaultOption();\n }\n stop() {\n this.clearSelection();\n this.input.setAttribute('aria-expanded', 'false');\n this.input.removeEventListener('compositionstart', this.compositionEventHandler);\n this.input.removeEventListener('compositionend', this.compositionEventHandler);\n this.input.removeEventListener('input', this.inputHandler);\n this.input.removeEventListener('keydown', this.keyboardEventHandler);\n this.list.removeEventListener('click', commitWithElement);\n }\n indicateDefaultOption() {\n var _a;\n if (this.defaultFirstOption) {\n (_a = Array.from(this.list.querySelectorAll('[role=\"option\"]:not([aria-disabled=\"true\"])'))\n .filter(visible)[0]) === null || _a === void 0 ? void 0 : _a.setAttribute('data-combobox-option-default', 'true');\n }\n }\n navigate(indexDiff = 1) {\n const focusEl = Array.from(this.list.querySelectorAll('[aria-selected=\"true\"]')).filter(visible)[0];\n const els = Array.from(this.list.querySelectorAll('[role=\"option\"]')).filter(visible);\n const focusIndex = els.indexOf(focusEl);\n if ((focusIndex === els.length - 1 && indexDiff === 1) || (focusIndex === 0 && indexDiff === -1)) {\n this.clearSelection();\n this.input.focus();\n return;\n }\n let indexOfItem = indexDiff === 1 ? 0 : els.length - 1;\n if (focusEl && focusIndex >= 0) {\n const newIndex = focusIndex + indexDiff;\n if (newIndex >= 0 && newIndex < els.length)\n indexOfItem = newIndex;\n }\n const target = els[indexOfItem];\n if (!target)\n return;\n for (const el of els) {\n el.removeAttribute('data-combobox-option-default');\n if (target === el) {\n this.input.setAttribute('aria-activedescendant', target.id);\n target.setAttribute('aria-selected', 'true');\n scrollTo(this.list, target);\n }\n else {\n el.removeAttribute('aria-selected');\n }\n }\n }\n clearSelection() {\n this.input.removeAttribute('aria-activedescendant');\n for (const el of this.list.querySelectorAll('[aria-selected=\"true\"]')) {\n el.removeAttribute('aria-selected');\n }\n this.indicateDefaultOption();\n }\n}\nfunction keyboardBindings(event, combobox) {\n if (event.shiftKey || event.metaKey || event.altKey)\n return;\n if (!combobox.ctrlBindings && event.ctrlKey)\n return;\n if (combobox.isComposing)\n return;\n switch (event.key) {\n case 'Enter':\n if (commit(combobox.input, combobox.list)) {\n event.preventDefault();\n }\n break;\n case 'Tab':\n if (combobox.tabInsertsSuggestions && commit(combobox.input, combobox.list)) {\n event.preventDefault();\n }\n break;\n case 'Escape':\n combobox.clearSelection();\n break;\n case 'ArrowDown':\n combobox.navigate(1);\n event.preventDefault();\n break;\n case 'ArrowUp':\n combobox.navigate(-1);\n event.preventDefault();\n break;\n case 'n':\n if (combobox.ctrlBindings && event.ctrlKey) {\n combobox.navigate(1);\n event.preventDefault();\n }\n break;\n case 'p':\n if (combobox.ctrlBindings && event.ctrlKey) {\n combobox.navigate(-1);\n event.preventDefault();\n }\n break;\n default:\n if (event.ctrlKey)\n break;\n combobox.clearSelection();\n }\n}\nfunction commitWithElement(event) {\n if (!(event.target instanceof Element))\n return;\n const target = event.target.closest('[role=\"option\"]');\n if (!target)\n return;\n if (target.getAttribute('aria-disabled') === 'true')\n return;\n fireCommitEvent(target);\n}\nfunction commit(input, list) {\n const target = list.querySelector('[aria-selected=\"true\"], [data-combobox-option-default=\"true\"]');\n if (!target)\n return false;\n if (target.getAttribute('aria-disabled') === 'true')\n return true;\n target.click();\n return true;\n}\nfunction fireCommitEvent(target) {\n target.dispatchEvent(new CustomEvent('combobox-commit', { bubbles: true }));\n}\nfunction visible(el) {\n return (!el.hidden &&\n !(el instanceof HTMLInputElement && el.type === 'hidden') &&\n (el.offsetWidth > 0 || el.offsetHeight > 0));\n}\nfunction trackComposition(event, combobox) {\n combobox.isComposing = event.type === 'compositionstart';\n const list = document.getElementById(combobox.input.getAttribute('aria-controls') || '');\n if (!list)\n return;\n combobox.clearSelection();\n}\nfunction scrollTo(container, target) {\n if (!inViewport(container, target)) {\n container.scrollTop = target.offsetTop;\n }\n}\nfunction inViewport(container, element) {\n const scrollTop = container.scrollTop;\n const containerBottom = scrollTop + container.clientHeight;\n const top = element.offsetTop;\n const bottom = top + element.clientHeight;\n return top >= scrollTop && bottom <= containerBottom;\n}\n","import Combobox from '@github/combobox-nav';\n\nconst boundary = /\\s|\\(|\\[/;\nfunction query(text, key, cursor, { multiWord, lookBackIndex, lastMatchPosition } = {\n multiWord: false,\n lookBackIndex: 0,\n lastMatchPosition: null\n}) {\n let keyIndex = text.lastIndexOf(key, cursor - 1);\n if (keyIndex === -1)\n return;\n if (keyIndex < lookBackIndex)\n return;\n if (multiWord) {\n if (lastMatchPosition != null) {\n if (lastMatchPosition === keyIndex)\n return;\n keyIndex = lastMatchPosition - key.length;\n }\n const charAfterKey = text[keyIndex + 1];\n if (charAfterKey === ' ' && cursor >= keyIndex + key.length + 1)\n return;\n const newLineIndex = text.lastIndexOf('\\n', cursor - 1);\n if (newLineIndex > keyIndex)\n return;\n const dotIndex = text.lastIndexOf('.', cursor - 1);\n if (dotIndex > keyIndex)\n return;\n }\n else {\n const spaceIndex = text.lastIndexOf(' ', cursor - 1);\n if (spaceIndex > keyIndex)\n return;\n }\n const pre = text[keyIndex - 1];\n if (pre && !boundary.test(pre))\n return;\n const queryString = text.substring(keyIndex + key.length, cursor);\n return {\n text: queryString,\n position: keyIndex + key.length\n };\n}\n\n/**\n * A custom element is implemented as a class which extends HTMLElement (in the\n * case of autonomous elements) or the interface you want to customize (in the\n * case of customized built-in elements).\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\nclass CustomHTMLElement extends HTMLElement {\n}\n\nclass InputStyleCloneUpdateEvent extends Event {\n constructor() {\n super(\"update\");\n }\n}\nconst CloneRegistry = new WeakMap();\n/**\n * Create an element that exactly matches an input pixel-for-pixel and automatically stays in sync with it. This\n * is a non-interactive overlay on to the input and can be used to affect the visual appearance of the input\n * without modifying its behavior. The clone element is hidden by default.\n *\n * This lower level API powers the `InputRange` but provides more advanced functionality including event updates.\n *\n * Emits `update` events whenever anything is recalculated: when the layout changes, when the user scrolls, when the\n * input is updated, etc. This event may be emitted more than once per change.\n *\n * @note There may be cases in which the clone cannot observe changes to the input and fails to automatically update.\n * For example, if the `value` property on the input is written to directly, no `input` event is emitted by the input\n * and the clone does not automatically update. In these cases, `forceUpdate` can be used to manually trigger an update.\n */\n// PRIOR ART: This approach was adapted from the following MIT-licensed sources:\n// - primer/react (Copyright (c) 2018 GitHub, Inc.): https://github.com/primer/react/blob/a0db832302702b869aa22b0c4049ad9305ef631f/src/drafts/utils/character-coordinates.ts\n// - component/textarea-caret-position (Copyright (c) 2015 Jonathan Ong me@jongleberry.com): https://github.com/component/textarea-caret-position/blob/b5db7a7e47dd149c2a66276183c69234e4dabe30/index.js\n// - koddsson/textarea-caret-position (Copyright (c) 2015 Jonathan Ong me@jongleberry.com): https://github.com/koddsson/textarea-caret-position/blob/eba40ec8488eed4d77815f109af22e1d9c0751d3/index.js\nclass InputStyleCloneElement extends CustomHTMLElement {\n #styleObserver = new MutationObserver(() => this.#updateStyles());\n #resizeObserver = new ResizeObserver(() => this.#requestUpdateLayout());\n // This class is unique in that it will prevent itself from getting garbage collected because of the subscribed\n // observers (if never detached). Because of this, we want to avoid preventing the existence of this class from also\n // preventing the garbage collection of the associated input. This also allows us to automatically detach if the\n // input gets collected.\n #inputRef;\n #container;\n /**\n * Get the clone for an input, reusing an existing one if available. This avoids creating unecessary clones, which\n * have a performance cost due to their high-frequency event-based updates. Because these elements are shared, they\n * should be mutated with caution.\n *\n * Upon initial creation the clone element will automatically be inserted into the DOM and begin observing the\n * linked input. Only one clone per input can ever exist at a time.\n * @param input The target input to clone.\n */\n static for(input) {\n const clone = CloneRegistry.get(input) ?? new InputStyleCloneElement(input);\n CloneRegistry.set(input, clone);\n return clone;\n }\n /**\n * Avoid constructing directly: Use `InputStyleCloneElement.for` instead.\n * @private\n */\n constructor(input) {\n super();\n this.#inputRef = new WeakRef(input);\n // We want position:absolute so it doesn't take space in the layout, but that doesn't work with display:table-cell\n // used in the HTMLInputElement approach. So we need a wrapper.\n this.#container = document.createElement(\"div\");\n this.#container.style.position = \"absolute\";\n this.#container.style.pointerEvents = \"none\";\n input.after(this.#container);\n this.#container.appendChild(this);\n }\n /**\n * Force a recalculation. Will emit an `update` event. This is typically not needed unless the input has changed in\n * an unobservable way, eg by directly writing to the `value` property.\n */\n forceUpdate() {\n this.#updateStyles();\n this.#updateText();\n }\n /** @private */\n connectedCallback() {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n this.style.pointerEvents = \"none\";\n this.style.userSelect = \"none\";\n this.style.overflow = \"hidden\";\n this.style.display = \"block\";\n // Important not to use display:none which would not render the content at all\n this.style.visibility = \"hidden\";\n if (input instanceof HTMLTextAreaElement) {\n this.style.whiteSpace = \"pre-wrap\";\n this.style.wordWrap = \"break-word\";\n }\n else {\n this.style.whiteSpace = \"nowrap\";\n // text in single-line inputs is vertically centered\n this.style.display = \"table-cell\";\n this.style.verticalAlign = \"middle\";\n }\n this.setAttribute(\"aria-hidden\", \"true\");\n this.#updateStyles();\n this.#updateText();\n this.#styleObserver.observe(input, {\n attributeFilter: [\n \"style\",\n \"dir\", // users can right-click in some browsers to change the text direction dynamically\n ],\n });\n this.#resizeObserver.observe(input);\n document.addEventListener(\"scroll\", this.#onDocumentScrollOrResize, { capture: true });\n window.addEventListener(\"resize\", this.#onDocumentScrollOrResize, { capture: true });\n // capture so this happens first, so other things can respond to `input` events after this data updates\n input.addEventListener(\"input\", this.#onInput, { capture: true });\n }\n /** @private */\n disconnectedCallback() {\n this.#container.remove();\n this.#styleObserver.disconnect();\n this.#resizeObserver.disconnect();\n document.removeEventListener(\"scroll\", this.#onDocumentScrollOrResize, { capture: true });\n window.removeEventListener(\"resize\", this.#onDocumentScrollOrResize, { capture: true });\n const input = this.#inputRef.deref();\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\n /** Perform `fn` using the `input` if it is still available. If not, clean up the clone instead. */\n #usingInput(fn) {\n const input = this.#inputRef.deref();\n if (!input)\n return this.remove();\n return fn(input);\n }\n /** Current relative x-adjustment in pixels, executed via CSS transform. */\n #xOffset = 0;\n /** Current relative y-adjustment in pixels, executed via CSS transform. */\n #yOffset = 0;\n /**\n * Update only geometric properties without recalculating styles. Typically call `#requestUpdateLayout` instead to\n * only update once per animation frame.\n */\n #updateLayout() {\n // This runs often, so keep it as fast as possible! Avoid all unecessary updates.\n this.#usingInput((input) => {\n const inputStyle = window.getComputedStyle(input);\n this.style.height = inputStyle.height;\n this.style.width = inputStyle.width;\n // Immediately re-adjust for browser inconsistencies in scrollbar handling, if necessary\n if (input.clientHeight !== this.clientHeight)\n this.style.height = `calc(${inputStyle.height} + ${input.clientHeight - this.clientHeight}px)`;\n if (input.clientWidth !== this.clientWidth)\n this.style.width = `calc(${inputStyle.width} + ${input.clientWidth - this.clientWidth}px)`;\n // Position on top of the input\n const inputRect = input.getBoundingClientRect();\n const cloneRect = this.getBoundingClientRect();\n this.#xOffset = this.#xOffset + inputRect.left - cloneRect.left;\n this.#yOffset = this.#yOffset + inputRect.top - cloneRect.top;\n this.style.transform = `translate(${this.#xOffset}px, ${this.#yOffset}px)`;\n this.scrollTop = input.scrollTop;\n this.scrollLeft = input.scrollLeft;\n this.dispatchEvent(new InputStyleCloneUpdateEvent());\n });\n }\n #isLayoutUpdating = false;\n /** Request a layout update. Will only happen once per animation frame, to avoid unecessary updates. */\n #requestUpdateLayout() {\n if (this.#isLayoutUpdating)\n return;\n this.#isLayoutUpdating = true;\n requestAnimationFrame(() => {\n this.#updateLayout();\n this.#isLayoutUpdating = false;\n });\n }\n /** Update the styles of the clone based on the styles of the input, then request a layout update. */\n #updateStyles() {\n this.#usingInput((input) => {\n const inputStyle = window.getComputedStyle(input);\n for (const prop of propertiesToCopy)\n this.style[prop] = inputStyle[prop];\n this.#requestUpdateLayout();\n });\n }\n /**\n * Update the text content of the clone based on the text content of the input. Triggers a layout update in case the\n * text update caused scrolling.\n */\n #updateText() {\n this.#usingInput((input) => {\n this.textContent = input.value;\n // This is often unecessary on a pure text update, but text updates could potentially cause layout updates like\n // scrolling or resizing. And we run the update on _every frame_ when scrolling, so this isn't that expensive.\n // We don't requestUpdateLayout here because this one should happen synchronously, so that clients can react\n // within their own `input` event handlers.\n this.#updateLayout();\n });\n }\n #onInput = () => this.#updateText();\n #onDocumentScrollOrResize = (event) => {\n this.#usingInput((input) => {\n if (event.target === document ||\n event.target === window ||\n (event.target instanceof Node && event.target.contains(input)))\n this.#requestUpdateLayout();\n });\n };\n}\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst propertiesToCopy = [\n // RTL / vertical writing modes support:\n \"direction\",\n \"writingMode\",\n \"unicodeBidi\",\n \"textOrientation\",\n \"boxSizing\",\n \"borderTopWidth\",\n \"borderRightWidth\",\n \"borderBottomWidth\",\n \"borderLeftWidth\",\n \"borderStyle\",\n \"paddingTop\",\n \"paddingRight\",\n \"paddingBottom\",\n \"paddingLeft\",\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n \"fontStyle\",\n \"fontVariant\",\n \"fontWeight\",\n \"fontStretch\",\n \"fontSize\",\n \"fontSizeAdjust\",\n \"lineHeight\",\n \"fontFamily\",\n \"textAlign\",\n \"textTransform\",\n \"textIndent\",\n \"textDecoration\",\n \"letterSpacing\",\n \"wordSpacing\",\n \"tabSize\",\n \"MozTabSize\",\n];\n// Inspired by https://github.com/github/catalyst/blob/dc284dcf4f82329a9cac5c867462a8fa529b6c40/src/register.ts\ntry {\n customElements.define(\"input-style-clone\", InputStyleCloneElement);\n}\ncatch (e) {\n // Throws DOMException with NotSupportedError if already defined\n if (!(e instanceof DOMException && e.name === \"NotSupportedError\"))\n throw e;\n}\n\nclass InputRange {\n #inputElement;\n #startOffset;\n #endOffset;\n /**\n * Construct a new `InputRange`.\n * @param element The target input element that contains the content for the range.\n * @param startOffset The inclusive 0-based start index for the range. Will be adjusted to fit in the input contents.\n * @param endOffset The exclusive 0-based end index for the range. Will be adjusted to fit in the input contents.\n */\n constructor(element, startOffset = 0, endOffset = startOffset) {\n this.#inputElement = element;\n this.#startOffset = startOffset;\n this.#endOffset = endOffset;\n }\n /**\n * Create a new range from the current user selection. If the input is not focused, the range will just be the start\n * of the input (offsets `0` to `0`).\n *\n * This can be used to get the caret coordinates: if the resulting range is `collapsed`, the location of the\n * `getBoundingClientRect` will be the location of the caret caret (note, however, that the width will be `0` in\n * this case).\n */\n static fromSelection(input) {\n const { selectionStart, selectionEnd } = input;\n return new InputRange(input, selectionStart ?? undefined, selectionEnd ?? undefined);\n }\n /** Returns true if the start is equal to the end of this range. */\n get collapsed() {\n return this.startOffset === this.endOffset;\n }\n /** Always returns the containing input element. */\n get commonAncestorContainer() {\n return this.#inputElement;\n }\n /** Always returns the containing input element. */\n get endContainer() {\n return this.#inputElement;\n }\n /** Always returns the containing input element. */\n get startContainer() {\n return this.#inputElement;\n }\n get startOffset() {\n return this.#startOffset;\n }\n get endOffset() {\n return this.#endOffset;\n }\n /** Update the inclusive start offset. Will be adjusted to fit within the content size. */\n setStartOffset(offset) {\n this.#startOffset = this.#clampOffset(offset);\n }\n /** Update the exclusive end offset. Will be adjusted to fit within the content size. */\n setEndOffset(offset) {\n this.#endOffset = this.#clampOffset(offset);\n }\n /**\n * Collapse this range to one side.\n * @param toStart If `true`, will collapse to the start side. Otherwise, will collapse to the end.\n */\n collapse(toStart = false) {\n if (toStart)\n this.setEndOffset(this.startOffset);\n else\n this.setStartOffset(this.endOffset);\n }\n /** Returns a `DocumentFragment` containing a new `Text` node containing the content in the range. */\n cloneContents() {\n return this.#createCloneRange().cloneContents();\n }\n /** Create a copy of this range. */\n cloneRange() {\n return new InputRange(this.#inputElement, this.startOffset, this.endOffset);\n }\n /**\n * Obtain one rect that contains the entire contents of the range. If the range spans multiple lines, this box will\n * contain all pieces of the range but may also contain some space outside the range.\n * @see https://iansan5653.github.io/dom-input-range/demos/playground/\n */\n getBoundingClientRect() {\n return this.#createCloneRange().getBoundingClientRect();\n }\n /**\n * Obtain the rects that contain contents of this range. If the range spans multiple lines, there will be multiple\n * bounding boxes. These boxes can be used, for example, to draw a highlight over the range.\n * @see https://iansan5653.github.io/dom-input-range/demos/playground/\n */\n getClientRects() {\n return this.#createCloneRange().getClientRects();\n }\n /** Get the contents of the range as a string. */\n toString() {\n return this.#createCloneRange().toString();\n }\n /**\n * Get the underlying `InputStyleClone` instance powering these calculations. This can be used to listen for\n * updates to trigger layout recalculation.\n */\n getStyleClone() {\n return this.#styleClone;\n }\n // --- private ---\n get #styleClone() {\n return InputStyleCloneElement.for(this.#inputElement);\n }\n get #cloneElement() {\n return this.#styleClone;\n }\n #clampOffset(offset) {\n return Math.max(0, Math.min(offset, this.#inputElement.value.length));\n }\n #createCloneRange() {\n // It's tempting to create a single Range and reuse it across the lifetime of the class. However, this wouldn't be\n // accurate because the contents of the input can change and the contents of the range would become stale. So we\n // must create a new range every time we need it.\n const range = document.createRange();\n const textNode = this.#cloneElement.childNodes[0];\n if (textNode) {\n range.setStart(textNode, this.startOffset);\n range.setEnd(textNode, this.endOffset);\n }\n return range;\n }\n}\n\nconst states = new WeakMap();\nclass TextExpander {\n constructor(expander, input) {\n this.expander = expander;\n this.input = input;\n this.combobox = null;\n this.menu = null;\n this.match = null;\n this.justPasted = false;\n this.lookBackIndex = 0;\n this.oninput = this.onInput.bind(this);\n this.onpaste = this.onPaste.bind(this);\n this.onkeydown = this.onKeydown.bind(this);\n this.oncommit = this.onCommit.bind(this);\n this.onmousedown = this.onMousedown.bind(this);\n this.onblur = this.onBlur.bind(this);\n this.interactingWithList = false;\n input.addEventListener('paste', this.onpaste);\n input.addEventListener('input', this.oninput);\n input.addEventListener('keydown', this.onkeydown);\n input.addEventListener('blur', this.onblur);\n }\n destroy() {\n this.input.removeEventListener('paste', this.onpaste);\n this.input.removeEventListener('input', this.oninput);\n this.input.removeEventListener('keydown', this.onkeydown);\n this.input.removeEventListener('blur', this.onblur);\n }\n dismissMenu() {\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n }\n }\n activate(match, menu) {\n var _a, _b;\n if (this.input !== document.activeElement && this.input !== ((_b = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.activeElement)) {\n return;\n }\n this.deactivate();\n this.menu = menu;\n if (!menu.id)\n menu.id = `text-expander-${Math.floor(Math.random() * 100000).toString()}`;\n this.expander.append(menu);\n this.combobox = new Combobox(this.input, menu);\n this.expander.dispatchEvent(new Event('text-expander-activate'));\n this.positionMenu(menu, match.position);\n this.combobox.start();\n menu.addEventListener('combobox-commit', this.oncommit);\n menu.addEventListener('mousedown', this.onmousedown);\n this.combobox.navigate(1);\n }\n positionMenu(menu, position) {\n const caretRect = new InputRange(this.input, position).getBoundingClientRect();\n const targetPosition = { left: caretRect.left, top: caretRect.top + caretRect.height };\n const currentPosition = menu.getBoundingClientRect();\n const delta = {\n left: targetPosition.left - currentPosition.left,\n top: targetPosition.top - currentPosition.top\n };\n if (delta.left !== 0 || delta.top !== 0) {\n const currentStyle = getComputedStyle(menu);\n menu.style.left = currentStyle.left ? `calc(${currentStyle.left} + ${delta.left}px)` : `${delta.left}px`;\n menu.style.top = currentStyle.top ? `calc(${currentStyle.top} + ${delta.top}px)` : `${delta.top}px`;\n }\n }\n deactivate() {\n const menu = this.menu;\n if (!menu || !this.combobox)\n return false;\n this.expander.dispatchEvent(new Event('text-expander-deactivate'));\n this.menu = null;\n menu.removeEventListener('combobox-commit', this.oncommit);\n menu.removeEventListener('mousedown', this.onmousedown);\n this.combobox.destroy();\n this.combobox = null;\n menu.remove();\n return true;\n }\n onCommit({ target }) {\n var _a;\n const item = target;\n if (!(item instanceof HTMLElement))\n return;\n if (!this.combobox)\n return;\n const match = this.match;\n if (!match)\n return;\n const beginning = this.input.value.substring(0, match.position - match.key.length);\n const remaining = this.input.value.substring(match.position + match.text.length);\n const detail = { item, key: match.key, value: null, continue: false };\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-value', { cancelable: true, detail }));\n if (canceled)\n return;\n if (!detail.value)\n return;\n let suffix = (_a = this.expander.getAttribute('suffix')) !== null && _a !== void 0 ? _a : ' ';\n if (detail.continue) {\n suffix = '';\n }\n const value = `${detail.value}${suffix}`;\n this.input.value = beginning + value + remaining;\n const cursor = beginning.length + value.length;\n this.deactivate();\n this.input.focus({\n preventScroll: true\n });\n this.input.selectionStart = cursor;\n this.input.selectionEnd = cursor;\n if (!detail.continue) {\n this.lookBackIndex = cursor;\n this.match = null;\n }\n this.expander.dispatchEvent(new CustomEvent('text-expander-committed', { cancelable: false, detail: { input: this.input } }));\n }\n onBlur() {\n if (this.interactingWithList) {\n this.interactingWithList = false;\n return;\n }\n this.deactivate();\n }\n onPaste() {\n this.justPasted = true;\n }\n async onInput() {\n if (this.justPasted) {\n this.justPasted = false;\n return;\n }\n const match = this.findMatch();\n if (match) {\n this.match = match;\n const menu = await this.notifyProviders(match);\n if (!this.match)\n return;\n if (menu) {\n this.activate(match, menu);\n }\n else {\n this.deactivate();\n }\n }\n else {\n this.match = null;\n this.deactivate();\n }\n }\n findMatch() {\n const cursor = this.input.selectionEnd || 0;\n const text = this.input.value;\n if (cursor <= this.lookBackIndex) {\n this.lookBackIndex = cursor - 1;\n }\n for (const { key, multiWord } of this.expander.keys) {\n const found = query(text, key, cursor, {\n multiWord,\n lookBackIndex: this.lookBackIndex,\n lastMatchPosition: this.match ? this.match.position : null\n });\n if (found) {\n return { text: found.text, key, position: found.position };\n }\n }\n }\n async notifyProviders(match) {\n const providers = [];\n const provide = (result) => providers.push(result);\n const canceled = !this.expander.dispatchEvent(new CustomEvent('text-expander-change', { cancelable: true, detail: { provide, text: match.text, key: match.key } }));\n if (canceled)\n return;\n const all = await Promise.all(providers);\n const fragments = all.filter(x => x.matched).map(x => x.fragment);\n return fragments[0];\n }\n onMousedown() {\n this.interactingWithList = true;\n }\n onKeydown(event) {\n if (event.key === 'Escape') {\n this.match = null;\n if (this.deactivate()) {\n this.lookBackIndex = this.input.selectionEnd || this.lookBackIndex;\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n }\n }\n}\nclass TextExpanderElement extends HTMLElement {\n get keys() {\n const keysAttr = this.getAttribute('keys');\n const keys = keysAttr ? keysAttr.split(' ') : [];\n const multiWordAttr = this.getAttribute('multiword');\n const multiWord = multiWordAttr ? multiWordAttr.split(' ') : [];\n const globalMultiWord = multiWord.length === 0 && this.hasAttribute('multiword');\n return keys.map(key => ({ key, multiWord: globalMultiWord || multiWord.includes(key) }));\n }\n connectedCallback() {\n const input = this.querySelector('input[type=\"text\"], textarea');\n if (!(input instanceof HTMLInputElement || input instanceof HTMLTextAreaElement))\n return;\n const state = new TextExpander(this, input);\n states.set(this, state);\n }\n disconnectedCallback() {\n const state = states.get(this);\n if (!state)\n return;\n state.destroy();\n states.delete(this);\n }\n dismiss() {\n const state = states.get(this);\n if (!state)\n return;\n state.dismissMenu();\n }\n}\n\nif (!window.customElements.get('text-expander')) {\n window.TextExpanderElement = TextExpanderElement;\n window.customElements.define('text-expander', TextExpanderElement);\n}\n\nexport default TextExpanderElement;\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\tconst pattern = [\n\t '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","import stripAnsi from 'strip-ansi';\n\nconst segmenter = new Intl.Segmenter();\n\nexport default function stringLength(string, {countAnsiEscapeCodes = false} = {}) {\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string === '') {\n\t\treturn 0;\n\t}\n\n\tlet length = 0;\n\n\tfor (const _ of segmenter.segment(string)) { // eslint-disable-line no-unused-vars\n\t\tlength++;\n\t}\n\n\treturn length;\n}\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20version='1.0'%20viewBox='0%200%20641%20223'%3e%3cpath%20fill='%23aaa'%20d='M86%20214c-9-1-17-4-24-8l-6-3-5-5-5-4-4-6-4-6-3-8-2-8v-27l2-9%203-9%204-6%204-6%205-5%205-5%207-3%206-4%207-2%207-2%2012-1h12l7%201%208%202%207%204%207%203%205%205%205%204-10%2010-10%209-4-3-10-5-5-1H88l-5%202-6%203-3%204-4%204-2%205-2%206v6l-1%207%201%207%202%207%203%205%202%204%204%203%204%203%205%202%206%202h9l10-1%205-2%206-3v-16H91v-27h59v54l-1%203-2%203-5%204-4%204-5%203-5%202-8%202-8%202-10%201H92l-6-1zm266-62V91h34v46h44V91h34v121h-34v-46h-44v46h-34v-61zm-182-1V90h34v121h-34v-60zm59-1V90h35l36%201%205%202c3%200%208%202%2010%204l5%202%204%205%205%204%203%207%203%207%201%2013v13l-4%206-3%207-4%204-5%205-5%202-5%203-6%202-5%201-18%201h-18v32h-34v-61zm67-2%203-2%202-4%202-5v-5l-2-4-2-4-3-2-3-3h-30v31h30l3-2zm226%2039v-24l-8-12-18-28a1751%201751%200%200%200-20-31v-2h39l7%2012%2012%2021%206%209%2013-21%2013-21h38v2l-41%2061-7%2010v48h-34v-24zM109%2066l-4-1-5-5-5-4-1-5-3-9v-5l1-5c2-7%203-10%208-15l4-4%207-2%207-2h7l6%201%205%202%205%202%203%204%204%203%202%206%202%205v13l-2%205-2%206-4%204-3%203-5%202-4%202-9%201h-9l-5-2zm22-11%204-2%203-4%202-5V34l-2-4-2-4-3-2-4-3-5-1h-6l-4%202-5%202-2%204-3%205-1%203v4l1%205%202%205%202%202%205%203%204%202h10l4-2zM37%2039V11h33l3%201%203%202%204%203%203%203%201%205%201%204v5l-1%204-3%204-3%205-4%201-3%202-11%201H49v16H37V39zm31%200%203-2%201-2%201-2v-4l-1-3-3-2-2-2H49v18h15l4-1zm107%2025a512%20512%200%200%200-19-53h14l4%2014%206%2019%201%204%201-1%207-19%205-17h9l6%2019%207%2018v-1l2-6%205-17%204-13h14v1l-4%2012-16%2041v2h-5l-5-1-6-15-6-15-1%201-3%207-6%2015-2%208h-11l-1-3zm74-25V11h42v11h-29v2l-1%205v4h29v11h-28v11h2l15%201h13v11h-43V39zm55%200V11h33l5%203%205%202%202%204%202%205v10l-2%203-1%204-5%203-5%203%205%205%208%2010%203%204h-14l-7-9-8-10h-9v19h-12V39zm33-3%202-3v-6l-3-3-2-3h-18v16h1v1h17l2-2zm26%203V11h42v11h-29l-1%206v5h29v11h-28v5l-1%205%201%201v1h30v11h-43V39zm54%200V11h17l18%201%204%202%205%203%202%204%203%204%202%206%201%206v5c-1%206-3%2012-6%2015l-3%204-5%203-5%202-17%201h-16V39zm33%2014%205-5%202-3v-6l-1-6-1-3-1-3-4-3-3-2h-5l-6-1-3%201h-3v34h9l8-1%203-2zm50-14V11h34l5%202%204%202%202%203%202%203v9l-2%202-3%204-1%201%203%203%203%204%201%203%201%204-1%204-1%204-3%203-3%203-5%201-5%201h-31V39zm34%2015%202-1v-6l-2-2-2-2h-20v13h20l2-2zm-3-22%204-2v-6l-2-1-2-2h-19v12h16l4-1zm42%2024V45l-6-9-11-17-5-8h15l4%208%207%2011%202%203%207-11%207-11h14l-11%2016-11%2017v23h-12V56z'/%3e%3c/svg%3e\"","import './compose.css';\nimport '@github/text-expander-element';\n\nimport { MenuItem } from '@szhsin/react-menu';\nimport { deepEqual } from 'fast-equals';\nimport Fuse from 'fuse.js';\nimport { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport stringLength from 'string-length';\nimport { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport { useSnapshot } from 'valtio';\n\nimport poweredByGiphyURL from '../assets/powered-by-giphy.svg';\n\nimport Menu2 from '../components/menu2';\nimport supportedLanguages from '../data/status-supported-languages';\nimport urlRegex from '../data/url-regex';\nimport { api } from '../utils/api';\nimport db from '../utils/db';\nimport emojifyText from '../utils/emojify-text';\nimport isRTL from '../utils/is-rtl';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport { fetchRelationships } from '../utils/relationships';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport store from '../utils/store';\nimport {\n getCurrentAccount,\n getCurrentAccountNS,\n getCurrentInstance,\n getCurrentInstanceConfiguration,\n} from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport useCloseWatcher from '../utils/useCloseWatcher';\nimport useInterval from '../utils/useInterval';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport AccountBlock from './account-block';\n// import Avatar from './avatar';\nimport Icon from './icon';\nimport Loader from './loader';\nimport Modal from './modal';\nimport Status from './status';\n\nconst {\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n PHANPY_GIPHY_API_KEY: GIPHY_API_KEY,\n} = import.meta.env;\n\nconst supportedLanguagesMap = supportedLanguages.reduce((acc, l) => {\n const [code, common, native] = l;\n acc[code] = {\n common,\n native,\n };\n return acc;\n}, {});\n\n/* NOTES:\n - Max character limit includes BOTH status text and Content Warning text\n*/\n\nconst expiryOptions = {\n '5 minutes': 5 * 60,\n '30 minutes': 30 * 60,\n '1 hour': 60 * 60,\n '6 hours': 6 * 60 * 60,\n '12 hours': 12 * 60 * 60,\n '1 day': 24 * 60 * 60,\n '3 days': 3 * 24 * 60 * 60,\n '7 days': 7 * 24 * 60 * 60,\n};\nconst expirySeconds = Object.values(expiryOptions);\nconst oneDay = 24 * 60 * 60;\n\nconst expiresInFromExpiresAt = (expiresAt) => {\n if (!expiresAt) return oneDay;\n const delta = (new Date(expiresAt).getTime() - Date.now()) / 1000;\n return expirySeconds.find((s) => s >= delta) || oneDay;\n};\n\nconst menu = document.createElement('ul');\nmenu.role = 'listbox';\nmenu.className = 'text-expander-menu';\n\n// Set IntersectionObserver on menu, reposition it because text-expander doesn't handle it\nconst windowMargin = 16;\nconst observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const { left, width } = entry.boundingClientRect;\n const { innerWidth } = window;\n if (left + width > innerWidth) {\n const insetInlineStart = isRTL() ? 'right' : 'left';\n menu.style[insetInlineStart] = innerWidth - width - windowMargin + 'px';\n }\n }\n });\n});\nobserver.observe(menu);\n\nconst DEFAULT_LANG = localeMatch(\n [new Intl.DateTimeFormat().resolvedOptions().locale, ...navigator.languages],\n supportedLanguages.map((l) => l[0]),\n 'en',\n);\n\n// https://github.com/mastodon/mastodon/blob/c4a429ed47e85a6bbf0d470a41cc2f64cf120c19/app/javascript/mastodon/features/compose/util/counter.js\nconst urlRegexObj = new RegExp(urlRegex.source, urlRegex.flags);\nconst usernameRegex = /(^|[^\\/\\w])@(([a-z0-9_]+)@[a-z0-9\\.\\-]+[a-z0-9]+)/gi;\nconst urlPlaceholder = '$2xxxxxxxxxxxxxxxxxxxxxxx';\nfunction countableText(inputText) {\n return inputText\n .replace(urlRegexObj, urlPlaceholder)\n .replace(usernameRegex, '$1@$3');\n}\n\n// https://github.com/mastodon/mastodon/blob/c03bd2a238741a012aa4b98dc4902d6cf948ab63/app/models/account.rb#L69\nconst USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i;\nconst MENTION_RE = new RegExp(\n `(^|[^=\\\\/\\\\w])(@${USERNAME_RE.source}(?:@[\\\\p{L}\\\\w.-]+[\\\\w]+)?)`,\n 'uig',\n);\n\n// AI-generated, all other regexes are too complicated\nconst HASHTAG_RE = new RegExp(\n `(^|[^=\\\\/\\\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\\\/\\\\w])`,\n 'ig',\n);\n\n// https://github.com/mastodon/mastodon/blob/23e32a4b3031d1da8b911e0145d61b4dd47c4f96/app/models/custom_emoji.rb#L31\nconst SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}';\nconst SCAN_RE = new RegExp(\n `(^|[^=\\\\/\\\\w])(:${SHORTCODE_RE_FRAGMENT}:)(?=[^A-Za-z0-9_:]|$)`,\n 'g',\n);\n\nconst segmenter = new Intl.Segmenter();\nfunction escapeHTML(text) {\n return text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\nfunction highlightText(text, { maxCharacters = Infinity }) {\n // Exceeded characters limit\n const { composerCharacterCount } = states;\n if (composerCharacterCount > maxCharacters) {\n // Highlight exceeded characters\n let withinLimitHTML = '',\n exceedLimitHTML = '';\n const htmlSegments = segmenter.segment(text);\n for (const { segment, index } of htmlSegments) {\n if (index < maxCharacters) {\n withinLimitHTML += segment;\n } else {\n exceedLimitHTML += segment;\n }\n }\n if (exceedLimitHTML) {\n exceedLimitHTML =\n '' +\n escapeHTML(exceedLimitHTML) +\n '';\n }\n return escapeHTML(withinLimitHTML) + exceedLimitHTML;\n }\n\n return escapeHTML(text)\n .replace(urlRegexObj, '$2$3') // URLs\n .replace(MENTION_RE, '$1$2') // Mentions\n .replace(HASHTAG_RE, '$1$2') // Hashtags\n .replace(\n SCAN_RE,\n '$1$2',\n ); // Emoji shortcodes\n}\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\n}) {\n console.warn('RENDER COMPOSER');\n const { masto, instance } = api();\n const [uiState, setUIState] = useState('default');\n const UID = useRef(draftStatus?.uid || uid());\n console.log('Compose UID', UID.current);\n\n const currentAccount = getCurrentAccount();\n const currentAccountInfo = currentAccount.info;\n\n const configuration = getCurrentInstanceConfiguration();\n console.log('⚙️ Configuration', configuration);\n\n const {\n statuses: {\n maxCharacters,\n maxMediaAttachments,\n charactersReservedPerUrl,\n } = {},\n mediaAttachments: {\n supportedMimeTypes = [],\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n polls: {\n maxOptions,\n maxCharactersPerOption,\n maxExpiration,\n minExpiration,\n } = {},\n } = configuration || {};\n\n const textareaRef = useRef();\n const spoilerTextRef = useRef();\n const [visibility, setVisibility] = useState('public');\n const [sensitive, setSensitive] = useState(false);\n const [language, setLanguage] = useState(\n store.session.get('currentLanguage') || DEFAULT_LANG,\n );\n const prevLanguage = useRef(language);\n const [mediaAttachments, setMediaAttachments] = useState([]);\n const [poll, setPoll] = useState(null);\n\n const prefs = store.account.get('preferences') || {};\n\n const oninputTextarea = () => {\n if (!textareaRef.current) return;\n textareaRef.current.dispatchEvent(new Event('input'));\n };\n const focusTextarea = () => {\n setTimeout(() => {\n if (!textareaRef.current) return;\n // status starts with newline, focus on first position\n if (draftStatus?.status?.startsWith?.('\\n')) {\n textareaRef.current.selectionStart = 0;\n textareaRef.current.selectionEnd = 0;\n }\n console.debug('FOCUS textarea');\n textareaRef.current?.focus();\n }, 300);\n };\n\n useEffect(() => {\n if (replyToStatus) {\n const { spoilerText, visibility, language, sensitive } = replyToStatus;\n if (spoilerText && spoilerTextRef.current) {\n spoilerTextRef.current.value = spoilerText;\n }\n const mentions = new Set([\n replyToStatus.account.acct,\n ...replyToStatus.mentions.map((m) => m.acct),\n ]);\n const allMentions = [...mentions].filter(\n (m) => m !== currentAccountInfo.acct,\n );\n if (allMentions.length > 0) {\n textareaRef.current.value = `${allMentions\n .map((m) => `@${m}`)\n .join(' ')} `;\n oninputTextarea();\n }\n focusTextarea();\n setVisibility(\n visibility === 'public' && prefs['posting:default:visibility']\n ? prefs['posting:default:visibility']\n : visibility,\n );\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive && !!spoilerText);\n } else if (editStatus) {\n const { visibility, language, sensitive, poll, mediaAttachments } =\n editStatus;\n const composablePoll = !!poll?.options && {\n ...poll,\n options: poll.options.map((o) => o?.title || o),\n expiresIn: poll?.expiresIn || expiresInFromExpiresAt(poll.expiresAt),\n };\n setUIState('loading');\n (async () => {\n try {\n const statusSource = await masto.v1.statuses\n .$select(editStatus.id)\n .source.fetch();\n console.log({ statusSource });\n const { text, spoilerText } = statusSource;\n textareaRef.current.value = text;\n textareaRef.current.dataset.source = text;\n oninputTextarea();\n focusTextarea();\n spoilerTextRef.current.value = spoilerText;\n setVisibility(visibility);\n setLanguage(language || presf.postingDefaultLanguage || DEFAULT_LANG);\n setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n setMediaAttachments(mediaAttachments);\n setUIState('default');\n } catch (e) {\n console.error(e);\n alert(e?.reason || e);\n setUIState('error');\n }\n })();\n } else {\n focusTextarea();\n console.log('Apply prefs', prefs);\n if (prefs['posting:default:visibility']) {\n setVisibility(prefs['posting:default:visibility']);\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language']);\n }\n if (prefs['posting:default:sensitive']) {\n setSensitive(prefs['posting:default:sensitive']);\n }\n }\n if (draftStatus) {\n const {\n status,\n spoilerText,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\n } = draftStatus;\n const composablePoll = !!poll?.options && {\n ...poll,\n options: poll.options.map((o) => o?.title || o),\n expiresIn: poll?.expiresIn || expiresInFromExpiresAt(poll.expiresAt),\n };\n textareaRef.current.value = status;\n oninputTextarea();\n focusTextarea();\n if (spoilerText) spoilerTextRef.current.value = spoilerText;\n if (visibility) setVisibility(visibility);\n setLanguage(language || prefs.postingDefaultLanguage || DEFAULT_LANG);\n if (sensitive !== null) setSensitive(sensitive);\n if (composablePoll) setPoll(composablePoll);\n if (mediaAttachments) setMediaAttachments(mediaAttachments);\n }\n }, [draftStatus, editStatus, replyToStatus]);\n\n const formRef = useRef();\n\n const beforeUnloadCopy = 'You have unsaved changes. Discard this post?';\n const canClose = () => {\n const { value, dataset } = textareaRef.current;\n\n // check if loading\n if (uiState === 'loading') {\n console.log('canClose', { uiState });\n return false;\n }\n\n // check for status and media attachments\n const hasValue = (value || '')\n .trim()\n .replace(/^\\p{White_Space}+|\\p{White_Space}+$/gu, '');\n const hasMediaAttachments = mediaAttachments.length > 0;\n if (!hasValue && !hasMediaAttachments) {\n console.log('canClose', { value, mediaAttachments });\n return true;\n }\n\n // check if all media attachments have IDs\n const hasIDMediaAttachments =\n mediaAttachments.length > 0 &&\n mediaAttachments.every((media) => media.id);\n if (hasIDMediaAttachments) {\n console.log('canClose', { hasIDMediaAttachments });\n return true;\n }\n\n // check if status contains only \"@acct\", if replying\n const isSelf = replyToStatus?.account.id === currentAccountInfo.id;\n const hasOnlyAcct =\n replyToStatus && value.trim() === `@${replyToStatus.account.acct}`;\n // TODO: check for mentions, or maybe just generic \"@username\", including multiple mentions like \"@username1@username2\"\n if (!isSelf && hasOnlyAcct) {\n console.log('canClose', { isSelf, hasOnlyAcct });\n return true;\n }\n\n // check if status is same with source\n const sameWithSource = value === dataset?.source;\n if (sameWithSource) {\n console.log('canClose', { sameWithSource });\n return true;\n }\n\n console.log('canClose', {\n value,\n hasMediaAttachments,\n hasIDMediaAttachments,\n poll,\n isSelf,\n hasOnlyAcct,\n sameWithSource,\n uiState,\n });\n\n return false;\n };\n\n const confirmClose = () => {\n if (!canClose()) {\n const yes = confirm(beforeUnloadCopy);\n return yes;\n }\n return true;\n };\n\n useEffect(() => {\n // Show warning if user tries to close window with unsaved changes\n const handleBeforeUnload = (e) => {\n if (!canClose()) {\n e.preventDefault();\n e.returnValue = beforeUnloadCopy;\n }\n };\n window.addEventListener('beforeunload', handleBeforeUnload, {\n capture: true,\n });\n return () =>\n window.removeEventListener('beforeunload', handleBeforeUnload, {\n capture: true,\n });\n }, []);\n\n const getCharCount = () => {\n const { value } = textareaRef.current;\n const { value: spoilerText } = spoilerTextRef.current;\n return stringLength(countableText(value)) + stringLength(spoilerText);\n };\n const updateCharCount = () => {\n const count = getCharCount();\n states.composerCharacterCount = count;\n };\n useEffect(updateCharCount, []);\n\n const supportsCloseWatcher = window.CloseWatcher;\n const escDownRef = useRef(false);\n useHotkeys(\n 'esc',\n () => {\n escDownRef.current = true;\n // This won't be true if this event is already handled and not propagated 🤞\n },\n {\n enabled: !supportsCloseWatcher,\n enableOnFormTags: true,\n },\n );\n useHotkeys(\n 'esc',\n () => {\n if (!standalone && escDownRef.current && confirmClose()) {\n onClose();\n }\n escDownRef.current = false;\n },\n {\n enabled: !supportsCloseWatcher,\n enableOnFormTags: true,\n // Use keyup because Esc keydown will close the confirm dialog on Safari\n keyup: true,\n ignoreEventWhen: (e) => {\n const modals = document.querySelectorAll('#modal-container > *');\n const hasModal = !!modals;\n const hasOnlyComposer =\n modals.length === 1 && modals[0].querySelector('#compose-container');\n return hasModal && !hasOnlyComposer;\n },\n },\n );\n useCloseWatcher(() => {\n if (!standalone && confirmClose()) {\n onClose();\n }\n }, [standalone, confirmClose, onClose]);\n\n const prevBackgroundDraft = useRef({});\n const draftKey = () => {\n const ns = getCurrentAccountNS();\n return `${ns}#${UID.current}`;\n };\n const saveUnsavedDraft = () => {\n // Not enabling this for editing status\n // I don't think this warrant a draft mode for a status that's already posted\n // Maybe it could be a big edit change but it should be rare\n if (editStatus) return;\n if (states.composerState.minimized) return;\n const key = draftKey();\n const backgroundDraft = {\n key,\n replyTo: replyToStatus\n ? {\n /* Smaller payload of replyToStatus. Reasons:\n - No point storing whole thing\n - Could have media attachments\n - Could be deleted/edited later\n */\n id: replyToStatus.id,\n account: {\n id: replyToStatus.account.id,\n username: replyToStatus.account.username,\n acct: replyToStatus.account.acct,\n },\n }\n : null,\n draftStatus: {\n uid: UID.current,\n status: textareaRef.current.value,\n spoilerText: spoilerTextRef.current.value,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\n },\n };\n if (\n !deepEqual(backgroundDraft, prevBackgroundDraft.current) &&\n !canClose()\n ) {\n console.debug('not equal', backgroundDraft, prevBackgroundDraft.current);\n db.drafts\n .set(key, {\n ...backgroundDraft,\n state: 'unsaved',\n updatedAt: Date.now(),\n })\n .then(() => {\n console.debug('DRAFT saved', key, backgroundDraft);\n })\n .catch((e) => {\n console.error('DRAFT failed', key, e);\n });\n prevBackgroundDraft.current = structuredClone(backgroundDraft);\n }\n };\n useInterval(saveUnsavedDraft, 5000); // background save every 5s\n useEffect(() => {\n saveUnsavedDraft();\n // If unmounted, means user discarded the draft\n // Also means pop-out 🙈, but it's okay because the pop-out will persist the ID and re-create the draft\n return () => {\n db.drafts.del(draftKey());\n };\n }, []);\n\n useEffect(() => {\n const handleItems = (e) => {\n const { items } = e.clipboardData || e.dataTransfer;\n const files = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file && supportedMimeTypes.includes(file.type)) {\n files.push(file);\n }\n }\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n console.log({ files });\n if (files.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n // Auto-cut-off files to avoid exceeding maxMediaAttachments\n const max = maxMediaAttachments - mediaAttachments.length;\n const allowedFiles = files.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(`You can only attach up to ${maxMediaAttachments} files.`);\n return;\n }\n const mediaFiles = allowedFiles.map((file) => ({\n file,\n type: file.type,\n size: file.size,\n url: URL.createObjectURL(file),\n id: null,\n description: null,\n }));\n setMediaAttachments([...mediaAttachments, ...mediaFiles]);\n }\n };\n window.addEventListener('paste', handleItems);\n const handleDragover = (e) => {\n // Prevent default if there's files\n if (e.dataTransfer.items.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n window.addEventListener('dragover', handleDragover);\n window.addEventListener('drop', handleItems);\n return () => {\n window.removeEventListener('paste', handleItems);\n window.removeEventListener('dragover', handleDragover);\n window.removeEventListener('drop', handleItems);\n };\n }, [mediaAttachments]);\n\n const [showMentionPicker, setShowMentionPicker] = useState(false);\n const [showEmoji2Picker, setShowEmoji2Picker] = useState(false);\n const [showGIFPicker, setShowGIFPicker] = useState(false);\n\n const [autoDetectedLanguages, setAutoDetectedLanguages] = useState(null);\n const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => {\n const topLanguages = [];\n const restLanguages = [];\n const { contentTranslationHideLanguages = [] } = states.settings;\n supportedLanguages.forEach((l) => {\n const [code] = l;\n if (\n code === language ||\n code === prevLanguage.current ||\n code === DEFAULT_LANG ||\n contentTranslationHideLanguages.includes(code) ||\n (autoDetectedLanguages?.length && autoDetectedLanguages.includes(code))\n ) {\n topLanguages.push(l);\n } else {\n restLanguages.push(l);\n }\n });\n topLanguages.sort(([codeA, commonA], [codeB, commonB]) => {\n if (codeA === language) return -1;\n if (codeB === language) return 1;\n return commonA.localeCompare(commonB);\n });\n restLanguages.sort(([codeA, commonA], [codeB, commonB]) =>\n commonA.localeCompare(commonB),\n );\n return [topLanguages, restLanguages];\n }, [language, autoDetectedLanguages]);\n\n const replyToStatusMonthsAgo = useMemo(\n () =>\n !!replyToStatus?.createdAt &&\n Math.floor(\n (Date.now() - new Date(replyToStatus.createdAt)) /\n (1000 * 60 * 60 * 24 * 30),\n ),\n [replyToStatus],\n );\n\n const onMinimize = () => {\n saveUnsavedDraft();\n states.composerState.minimized = true;\n };\n\n return (\n
    \n
    \n
    \n {currentAccountInfo?.avatarStatic && (\n // \n \n )}\n {!standalone ? (\n \n {\n // If there are non-ID media attachments (not yet uploaded), show confirmation dialog because they are not going to be passed to the new window\n // const containNonIDMediaAttachments =\n // mediaAttachments.length > 0 &&\n // mediaAttachments.some((media) => !media.id);\n // if (containNonIDMediaAttachments) {\n // const yes = confirm(\n // 'You have media attachments that are not yet uploaded. Opening a new window will discard them and you will need to re-attach them. Are you sure you want to continue?',\n // );\n // if (!yes) {\n // return;\n // }\n // }\n\n // const mediaAttachmentsWithIDs = mediaAttachments.filter(\n // (media) => media.id,\n // );\n\n const newWin = openCompose({\n editStatus,\n replyToStatus,\n draftStatus: {\n uid: UID.current,\n status: textareaRef.current.value,\n spoilerText: spoilerTextRef.current.value,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\n },\n });\n\n if (!newWin) {\n return;\n }\n\n onClose();\n }}\n >\n \n \n \n \n {' '}\n {\n if (confirmClose()) {\n onClose();\n }\n }}\n >\n \n \n \n ) : (\n hasOpener && (\n {\n // If there are non-ID media attachments (not yet uploaded), show confirmation dialog because they are not going to be passed to the new window\n // const containNonIDMediaAttachments =\n // mediaAttachments.length > 0 &&\n // mediaAttachments.some((media) => !media.id);\n // if (containNonIDMediaAttachments) {\n // const yes = confirm(\n // 'You have media attachments that are not yet uploaded. Opening a new window will discard them and you will need to re-attach them. Are you sure you want to continue?',\n // );\n // if (!yes) {\n // return;\n // }\n // }\n\n if (!window.opener) {\n alert('Looks like you closed the parent window.');\n return;\n }\n\n if (window.opener.__STATES__.showCompose) {\n if (window.opener.__STATES__.composerState?.publishing) {\n alert(\n 'Looks like you already have a compose field open in the parent window and currently publishing. Please wait for it to be done and try again later.',\n );\n return;\n }\n\n let confirmText =\n 'Looks like you already have a compose field open in the parent window. Popping in this window will discard the changes you made in the parent window. Continue?';\n const yes = confirm(confirmText);\n if (!yes) return;\n }\n\n // const mediaAttachmentsWithIDs = mediaAttachments.filter(\n // (media) => media.id,\n // );\n\n onClose({\n fn: () => {\n const passData = {\n editStatus,\n replyToStatus,\n draftStatus: {\n uid: UID.current,\n status: textareaRef.current.value,\n spoilerText: spoilerTextRef.current.value,\n visibility,\n language,\n sensitive,\n poll,\n mediaAttachments,\n },\n };\n window.opener.__COMPOSE__ = passData; // Pass it here instead of `showCompose` due to some weird proxy issue again\n if (window.opener.__STATES__.showCompose) {\n window.opener.__STATES__.showCompose = false;\n setTimeout(() => {\n window.opener.__STATES__.showCompose = true;\n }, 10);\n } else {\n window.opener.__STATES__.showCompose = true;\n }\n if (window.opener.__STATES__.composerState.minimized) {\n // Maximize it\n window.opener.__STATES__.composerState.minimized = false;\n }\n },\n });\n }}\n >\n \n \n )\n )}\n
    \n {!!replyToStatus && (\n
    \n \n
    \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n {replyToStatusMonthsAgo >= 3 && (\n <>\n {' '}\n (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    Editing source post
    \n
    \n )}\n {\n if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n formRef.current.dispatchEvent(\n new Event('submit', { cancelable: true }),\n );\n }\n }}\n onSubmit={(e) => {\n e.preventDefault();\n\n const formData = new FormData(e.target);\n const entries = Object.fromEntries(formData.entries());\n console.log('ENTRIES', entries);\n let { status, visibility, sensitive, spoilerText } = entries;\n\n // Pre-cleanup\n sensitive = sensitive === 'on'; // checkboxes return \"on\" if checked\n\n // Validation\n /* Let the backend validate this\n if (stringLength(status) > maxCharacters) {\n alert(`Status is too long! Max characters: ${maxCharacters}`);\n return;\n }\n if (\n sensitive &&\n stringLength(status) + stringLength(spoilerText) > maxCharacters\n ) {\n alert(\n `Status and content warning is too long! Max characters: ${maxCharacters}`,\n );\n return;\n }\n */\n if (poll) {\n if (poll.options.length < 2) {\n alert('Poll must have at least 2 options');\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert('Some poll choices are empty');\n return;\n }\n }\n // TODO: check for URLs and use `charactersReservedPerUrl` to calculate max characters\n\n if (mediaAttachments.length > 0) {\n // If there are media attachments, check if they have no descriptions\n const hasNoDescriptions = mediaAttachments.some(\n (media) => !media.description?.trim?.(),\n );\n if (hasNoDescriptions) {\n const yes = confirm(\n 'Some media have no descriptions. Continue?',\n );\n if (!yes) return;\n }\n }\n\n // Post-cleanup\n spoilerText = (sensitive && spoilerText) || undefined;\n status = status === '' ? undefined : status;\n\n // states.composerState.minimized = true;\n states.composerState.publishing = true;\n setUIState('loading');\n (async () => {\n try {\n console.log('MEDIA ATTACHMENTS', mediaAttachments);\n if (mediaAttachments.length > 0) {\n // Upload media attachments first\n const mediaPromises = mediaAttachments.map((attachment) => {\n const { file, description, id } = attachment;\n console.log('UPLOADING', attachment);\n if (id) {\n // If already uploaded\n return attachment;\n } else {\n const params = removeNullUndefined({\n file,\n description,\n });\n return masto.v2.media.create(params).then((res) => {\n if (res.id) {\n attachment.id = res.id;\n }\n return res;\n });\n }\n });\n const results = await Promise.allSettled(mediaPromises);\n\n // If any failed, return\n if (\n results.some((result) => {\n return result.status === 'rejected' || !result.value?.id;\n })\n ) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n setUIState('error');\n // Alert all the reasons\n results.forEach((result) => {\n if (result.status === 'rejected') {\n console.error(result);\n alert(result.reason || `Attachment #${i} failed`);\n }\n });\n return;\n }\n\n console.log({ results, mediaAttachments });\n }\n\n /* NOTE:\n Using snakecase here because masto.js's `isObject` returns false for `params`, ONLY happens when opening in pop-out window. This is maybe due to `window.masto` variable being passed from the parent window. The check that failed is `x.constructor === Object`, so maybe the `Object` in new window is different than parent window's?\n Code: https://github.com/neet/masto.js/blob/dd0d649067b6a2b6e60fbb0a96597c373a255b00/src/serializers/is-object.ts#L2\n\n // TODO: Note above is no longer true in Masto.js v6. Revisit this.\n */\n let params = {\n status,\n // spoilerText,\n spoiler_text: spoilerText,\n language,\n sensitive,\n poll,\n // mediaIds: mediaAttachments.map((attachment) => attachment.id),\n media_ids: mediaAttachments.map(\n (attachment) => attachment.id,\n ),\n };\n if (editStatus && supports('@mastodon/edit-media-attributes')) {\n params.media_attributes = mediaAttachments.map(\n (attachment) => {\n return {\n id: attachment.id,\n description: attachment.description,\n // focus\n // thumbnail\n };\n },\n );\n } else if (!editStatus) {\n params.visibility = visibility;\n // params.inReplyToId = replyToStatus?.id || undefined;\n params.in_reply_to_id = replyToStatus?.id || undefined;\n }\n params = removeNullUndefined(params);\n console.log('POST', params);\n\n let newStatus;\n if (editStatus) {\n newStatus = await masto.v1.statuses\n .$select(editStatus.id)\n .update(params);\n saveStatus(newStatus, instance, {\n skipThreading: true,\n });\n } else {\n try {\n newStatus = await masto.v1.statuses.create(params, {\n requestInit: {\n headers: {\n 'Idempotency-Key': UID.current,\n },\n },\n });\n } catch (_) {\n // If idempotency key fails, try again without it\n newStatus = await masto.v1.statuses.create(params);\n }\n }\n states.composerState.minimized = false;\n states.composerState.publishing = false;\n setUIState('default');\n\n // Close\n onClose({\n // type: post, reply, edit\n type: editStatus ? 'edit' : replyToStatus ? 'reply' : 'post',\n newStatus,\n instance,\n });\n } catch (e) {\n states.composerState.publishing = false;\n states.composerState.publishingError = true;\n console.error(e);\n alert(e?.reason || e);\n setUIState('error');\n }\n })();\n }}\n >\n
    \n {\n updateCharCount();\n }}\n />\n \n {\n const sensitive = e.target.checked;\n setSensitive(sensitive);\n if (sensitive) {\n spoilerTextRef.current?.focus();\n } else {\n textareaRef.current?.focus();\n }\n }}\n />\n \n {' '}\n \n \n {\n setVisibility(e.target.value);\n }}\n disabled={uiState === 'loading' || !!editStatus}\n dir=\"auto\"\n >\n \n \n \n \n \n {' '}\n
    \n {\n updateCharCount();\n }}\n maxCharacters={maxCharacters}\n performSearch={(params) => {\n const { type, q, limit } = params;\n if (type === 'accounts') {\n return masto.v1.accounts.search.list({\n q,\n limit,\n resolve: false,\n });\n }\n return masto.v2.search.fetch(params);\n }}\n onTrigger={(action) => {\n if (action?.name === 'custom-emojis') {\n setShowEmoji2Picker({\n defaultSearchTerm: action?.defaultSearchTerm || null,\n });\n } else if (action?.name === 'mention') {\n setShowMentionPicker({\n defaultSearchTerm: action?.defaultSearchTerm || null,\n });\n } else if (\n action?.name === 'auto-detect-language' &&\n action?.languages\n ) {\n setAutoDetectedLanguages(action.languages);\n }\n }}\n />\n {mediaAttachments?.length > 0 && (\n
    \n {mediaAttachments.map((attachment, i) => {\n const { id, file } = attachment;\n const fileID = file?.size + file?.type + file?.name;\n return (\n {\n setMediaAttachments((attachments) => {\n const newAttachments = [...attachments];\n newAttachments[i].description = value;\n return newAttachments;\n });\n }}\n onRemove={() => {\n setMediaAttachments((attachments) => {\n return attachments.filter((_, j) => j !== i);\n });\n }}\n />\n );\n })}\n \n
    \n )}\n {!!poll && (\n {\n if (poll) {\n const newPoll = { ...poll };\n setPoll(newPoll);\n } else {\n setPoll(null);\n }\n }}\n />\n )}\n \n \n \n {/* If maxOptions is not defined or defined and is greater than 1, show poll button */}\n {maxOptions == null ||\n (maxOptions > 1 && (\n <>\n {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n }}\n >\n \n \n \n ))}\n {/* {\n setShowMentionPicker(true);\n }}\n >\n \n */}\n {\n setShowEmoji2Picker(true);\n }}\n >\n \n \n {!!states.settings.composerGIFPicker && (\n = maxMediaAttachments ||\n !!poll\n }\n onClick={() => {\n setShowGIFPicker(true);\n }}\n >\n GIF\n \n )}\n \n
    \n {uiState === 'loading' ? (\n \n ) : (\n
    \n \n
    \n {showMentionPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowMentionPicker(false);\n }\n }}\n >\n {\n setShowMentionPicker(false);\n }}\n defaultSearchTerm={showMentionPicker?.defaultSearchTerm}\n onSelect={(socialAddress) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeMention = text.slice(0, selectionStart);\n const spaceBeforeMention = textBeforeMention\n ? /[\\s\\t\\n\\r]$/.test(textBeforeMention)\n ? ''\n : ' '\n : '';\n const textAfterMention = text.slice(selectionEnd);\n const spaceAfterMention = /^[\\s\\t\\n\\r]/.test(textAfterMention)\n ? ''\n : ' ';\n const newText =\n textBeforeMention +\n spaceBeforeMention +\n '@' +\n socialAddress +\n spaceAfterMention +\n textAfterMention;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd +\n 1 +\n socialAddress.length +\n spaceAfterMention.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showEmoji2Picker && (\n {\n if (e.target === e.currentTarget) {\n setShowEmoji2Picker(false);\n }\n }}\n >\n {\n setShowEmoji2Picker(false);\n }}\n defaultSearchTerm={showEmoji2Picker?.defaultSearchTerm}\n onSelect={(emojiShortcode) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n const { selectionStart, selectionEnd } = textarea;\n const text = textarea.value;\n const textBeforeEmoji = text.slice(0, selectionStart);\n const spaceBeforeEmoji = textBeforeEmoji\n ? /[\\s\\t\\n\\r]$/.test(textBeforeEmoji)\n ? ''\n : ' '\n : '';\n const textAfterEmoji = text.slice(selectionEnd);\n const spaceAfterEmoji = /^[\\s\\t\\n\\r]/.test(textAfterEmoji)\n ? ''\n : ' ';\n const newText =\n textBeforeEmoji +\n spaceBeforeEmoji +\n emojiShortcode +\n spaceAfterEmoji +\n textAfterEmoji;\n textarea.value = newText;\n textarea.selectionStart = textarea.selectionEnd =\n selectionEnd + emojiShortcode.length + spaceAfterEmoji.length;\n textarea.focus();\n textarea.dispatchEvent(new Event('input'));\n }}\n />\n \n )}\n {showGIFPicker && (\n {\n if (e.target === e.currentTarget) {\n setShowGIFPicker(false);\n }\n }}\n >\n setShowGIFPicker(false)}\n onSelect={({ url, type, alt_text }) => {\n console.log('GIF URL', url);\n if (mediaAttachments.length >= maxMediaAttachments) {\n alert(\n `You can only attach up to ${maxMediaAttachments} files.`,\n );\n return;\n }\n // Download the GIF and insert it as media attachment\n (async () => {\n let theToast;\n try {\n theToast = showToast({\n text: 'Downloading GIF…',\n duration: -1,\n });\n const blob = await fetch(url, {\n referrerPolicy: 'no-referrer',\n }).then((res) => res.blob());\n const file = new File(\n [blob],\n type === 'video/mp4' ? 'video.mp4' : 'image.gif',\n {\n type,\n },\n );\n const newMediaAttachments = [\n ...mediaAttachments,\n {\n file,\n type,\n size: file.size,\n id: null,\n description: alt_text || '',\n },\n ];\n setMediaAttachments(newMediaAttachments);\n theToast?.hideToast?.();\n } catch (err) {\n console.error(err);\n theToast?.hideToast?.();\n showToast('Failed to download GIF');\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction autoResizeTextarea(textarea) {\n if (!textarea) return;\n const { value, offsetHeight, scrollHeight, clientHeight } = textarea;\n if (offsetHeight < window.innerHeight) {\n // NOTE: This check is needed because the offsetHeight return 50000 (really large number) on first render\n // No idea why it does that, will re-investigate in far future\n const offset = offsetHeight - clientHeight;\n const height = value ? scrollHeight + offset + 'px' : null;\n textarea.style.height = height;\n }\n}\n\nasync function _getCustomEmojis(instance, masto) {\n const emojis = await masto.v1.customEmojis.list();\n const visibleEmojis = emojis.filter((e) => e.visibleInPicker);\n const searcher = new Fuse(visibleEmojis, {\n keys: ['shortcode'],\n findAllMatches: true,\n });\n return [visibleEmojis, searcher];\n}\nconst getCustomEmojis = pmem(_getCustomEmojis, {\n // Limit by time to reduce memory usage\n // Cached by instance\n matchesArg: (cacheKeyArg, keyArg) => cacheKeyArg.instance === keyArg.instance,\n maxAge: 30 * 60 * 1000, // 30 minutes\n});\n\nconst detectLangs = (text) => {\n const langs = detectAll(text);\n if (langs?.length) {\n // return max 2\n return langs.slice(0, 2).map((lang) => lang.lang);\n }\n return null;\n};\n\nconst Textarea = forwardRef((props, ref) => {\n const { masto, instance } = api();\n const [text, setText] = useState(ref.current?.value || '');\n const {\n maxCharacters,\n performSearch = () => {},\n onTrigger = () => {},\n ...textareaProps\n } = props;\n // const snapStates = useSnapshot(states);\n // const charCount = snapStates.composerCharacterCount;\n\n // const customEmojis = useRef();\n const searcherRef = useRef();\n useEffect(() => {\n getCustomEmojis(instance, masto)\n .then((r) => {\n const [emojis, searcher] = r;\n searcherRef.current = searcher;\n })\n .catch((e) => {\n console.error(e);\n });\n }, []);\n\n const textExpanderRef = useRef();\n const textExpanderTextRef = useRef('');\n useEffect(() => {\n let handleChange, handleValue, handleCommited;\n if (textExpanderRef.current) {\n handleChange = (e) => {\n // console.log('text-expander-change', e);\n const { key, provide, text } = e.detail;\n textExpanderTextRef.current = text;\n\n if (text === '') {\n provide(\n Promise.resolve({\n matched: false,\n }),\n );\n return;\n }\n\n if (key === ':') {\n // const emojis = customEmojis.current.filter((emoji) =>\n // emoji.shortcode.startsWith(text),\n // );\n // const emojis = filterShortcodes(customEmojis.current, text);\n const results = searcherRef.current?.search(text, {\n limit: 5,\n });\n let html = '';\n results.forEach(({ item: emoji }) => {\n const { shortcode, url } = emoji;\n html += `\n
  • \n \"\" \n ${encodeHTML(shortcode)}\n
  • `;\n });\n html += `
  • More…
  • `;\n // console.log({ emojis, html });\n menu.innerHTML = html;\n provide(\n Promise.resolve({\n matched: results.length > 0,\n fragment: menu,\n }),\n );\n return;\n }\n\n const type = {\n '@': 'accounts',\n '#': 'hashtags',\n }[key];\n provide(\n new Promise((resolve) => {\n const searchResults = performSearch({\n type,\n q: text,\n limit: 5,\n });\n searchResults.then((value) => {\n if (text !== textExpanderTextRef.current) {\n return;\n }\n console.log({ value, type, v: value[type] });\n const results = value[type] || value;\n console.log('RESULTS', value, results);\n let html = '';\n results.forEach((result) => {\n const {\n name,\n avatarStatic,\n displayName,\n username,\n acct,\n emojis,\n history,\n } = result;\n const displayNameWithEmoji = emojifyText(displayName, emojis);\n // const item = menuItem.cloneNode();\n if (acct) {\n html += `\n
  • \n \n \"\"\n \n \n ${displayNameWithEmoji || username}\n
    @${encodeHTML(\n acct,\n )}\n
    \n
  • \n `;\n } else {\n const total = history?.reduce?.(\n (acc, cur) => acc + +cur.uses,\n 0,\n );\n html += `\n
  • \n #${encodeHTML(name)}\n ${\n total\n ? `${shortenNumber(total)}`\n : ''\n }\n
  • \n `;\n }\n });\n if (type === 'accounts') {\n html += `
  • More…
  • `;\n }\n menu.innerHTML = html;\n console.log('MENU', results, menu);\n resolve({\n matched: results.length > 0,\n fragment: menu,\n });\n });\n }),\n );\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-change',\n handleChange,\n );\n\n handleValue = (e) => {\n const { key, item } = e.detail;\n const { value, more } = item.dataset;\n if (key === ':') {\n e.detail.value = value ? `:${value}:` : '​'; // zero-width space\n if (more) {\n // Prevent adding space after the above value\n e.detail.continue = true;\n\n setTimeout(() => {\n onTrigger?.({\n name: 'custom-emojis',\n defaultSearchTerm: more,\n });\n }, 300);\n }\n } else if (key === '@') {\n e.detail.value = value ? `@${value} ` : '​'; // zero-width space\n if (more) {\n e.detail.continue = true;\n setTimeout(() => {\n onTrigger?.({\n name: 'mention',\n defaultSearchTerm: more,\n });\n }, 300);\n }\n } else {\n e.detail.value = `${key}${value}`;\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-value',\n handleValue,\n );\n\n handleCommited = (e) => {\n const { input } = e.detail;\n setText(input.value);\n // fire input event\n if (ref.current) {\n const event = new Event('input', { bubbles: true });\n ref.current.dispatchEvent(event);\n }\n };\n\n textExpanderRef.current.addEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n\n return () => {\n if (textExpanderRef.current) {\n textExpanderRef.current.removeEventListener(\n 'text-expander-change',\n handleChange,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-value',\n handleValue,\n );\n textExpanderRef.current.removeEventListener(\n 'text-expander-committed',\n handleCommited,\n );\n }\n };\n }, []);\n\n useEffect(() => {\n // Resize observer for textarea\n const textarea = ref.current;\n if (!textarea) return;\n const resizeObserver = new ResizeObserver(() => {\n // Get height of textarea, set height to textExpander\n if (textExpanderRef.current) {\n const { height } = textarea.getBoundingClientRect();\n textExpanderRef.current.style.height = height + 'px';\n }\n });\n resizeObserver.observe(textarea);\n }, []);\n\n const slowHighlightPerf = useRef(0); // increment if slow\n const composeHighlightRef = useRef();\n const throttleHighlightText = useThrottledCallback((text) => {\n if (!composeHighlightRef.current) return;\n if (slowHighlightPerf.current > 3) {\n // After 3 times of lag, disable highlighting\n composeHighlightRef.current.innerHTML = '';\n composeHighlightRef.current = null; // Destroy the whole thing\n throttleHighlightText?.cancel?.();\n return;\n }\n let start;\n let end;\n if (slowHighlightPerf.current <= 3) start = Date.now();\n composeHighlightRef.current.innerHTML =\n highlightText(text, {\n maxCharacters,\n }) + '\\n';\n if (slowHighlightPerf.current <= 3) end = Date.now();\n console.debug('HIGHLIGHT PERF', { start, end, diff: end - start });\n if (start && end && end - start > 50) {\n // if slow, increment\n slowHighlightPerf.current++;\n }\n // Newline to prevent multiple line breaks at the end from being collapsed, no idea why\n }, 500);\n\n const debouncedAutoDetectLanguage = useDebouncedCallback(() => {\n // Make use of the highlightRef to get the DOM\n // Clone the dom\n const dom = composeHighlightRef.current?.cloneNode(true);\n if (!dom) return;\n // Remove mark\n dom.querySelectorAll('mark').forEach((mark) => {\n mark.remove();\n });\n const text = dom.innerText?.trim();\n if (!text) return;\n const langs = detectLangs(text);\n if (langs?.length) {\n onTrigger?.({\n name: 'auto-detect-language',\n languages: langs,\n });\n }\n }, 2000);\n\n return (\n \n {\n // Get line before cursor position after pressing 'Enter'\n const { key, target } = e;\n if (key === 'Enter' && !(e.ctrlKey || e.metaKey)) {\n try {\n const { value, selectionStart } = target;\n const textBeforeCursor = value.slice(0, selectionStart);\n const lastLine = textBeforeCursor.split('\\n').slice(-1)[0];\n if (lastLine) {\n // If line starts with \"- \" or \"12. \"\n if (/^\\s*(-|\\d+\\.)\\s/.test(lastLine)) {\n // insert \"- \" at cursor position\n const [_, preSpaces, bullet, postSpaces, anything] =\n lastLine.match(/^(\\s*)(-|\\d+\\.)(\\s+)(.+)?/) || [];\n if (anything) {\n e.preventDefault();\n const [number] = bullet.match(/\\d+/) || [];\n const newBullet = number ? `${+number + 1}.` : '-';\n const text = `\\n${preSpaces}${newBullet}${postSpaces}`;\n target.setRangeText(text, selectionStart, selectionStart);\n const pos = selectionStart + text.length;\n target.setSelectionRange(pos, pos);\n } else {\n // trim the line before the cursor, then insert new line\n const pos = selectionStart - lastLine.length;\n target.setRangeText('', pos, selectionStart);\n }\n autoResizeTextarea(target);\n target.dispatchEvent(new Event('input'));\n }\n }\n } catch (e) {\n // silent fail\n console.error(e);\n }\n }\n if (composeHighlightRef.current) {\n composeHighlightRef.current.scrollTop = target.scrollTop;\n }\n }}\n onInput={(e) => {\n const { target } = e;\n // Replace zero-width space\n const text = target.value.replace(/\\u200b/g, '');\n setText(text);\n autoResizeTextarea(target);\n props.onInput?.(e);\n throttleHighlightText(text);\n debouncedAutoDetectLanguage();\n }}\n style={{\n width: '100%',\n height: '4em',\n // '--text-weight': (1 + charCount / 140).toFixed(1) || 1,\n }}\n onScroll={(e) => {\n if (composeHighlightRef.current) {\n const { scrollTop } = e.target;\n composeHighlightRef.current.scrollTop = scrollTop;\n }\n }}\n />\n \n \n );\n});\n\nfunction CharCountMeter({ maxCharacters = 500, hidden }) {\n const snapStates = useSnapshot(states);\n const charCount = snapStates.composerCharacterCount;\n const leftChars = maxCharacters - charCount;\n if (hidden) {\n return \n );\n}\n\nfunction prettyBytes(bytes) {\n const units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let unitIndex = 0;\n while (bytes >= 1024) {\n bytes /= 1024;\n unitIndex++;\n }\n return `${bytes.toFixed(0).toLocaleString()} ${units[unitIndex]}`;\n}\n\nfunction scaleDimension(matrix, matrixLimit, width, height) {\n // matrix = number of pixels\n // matrixLimit = max number of pixels\n // Calculate new width and height, downsize to within the limit, preserve aspect ratio, no decimals\n const scalingFactor = Math.sqrt(matrixLimit / matrix);\n const newWidth = Math.floor(width * scalingFactor);\n const newHeight = Math.floor(height * scalingFactor);\n return { newWidth, newHeight };\n}\n\nfunction MediaAttachment({\n attachment,\n disabled,\n lang,\n onDescriptionChange = () => {},\n onRemove = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const supportsEdit = supports('@mastodon/edit-media-attributes');\n const { type, id, file } = attachment;\n const url = useMemo(\n () => (file ? URL.createObjectURL(file) : attachment.url),\n [file, attachment.url],\n );\n console.log({ attachment });\n\n const checkMaxError = !!file?.size;\n const configuration = checkMaxError ? getCurrentInstanceConfiguration() : {};\n const {\n mediaAttachments: {\n imageSizeLimit,\n imageMatrixLimit,\n videoSizeLimit,\n videoMatrixLimit,\n videoFrameRateLimit,\n } = {},\n } = configuration || {};\n\n const [maxError, setMaxError] = useState(() => {\n if (!checkMaxError) return null;\n if (\n type.startsWith('image') &&\n imageSizeLimit &&\n file.size > imageSizeLimit\n ) {\n return {\n type: 'imageSizeLimit',\n details: {\n imageSize: file.size,\n imageSizeLimit,\n },\n };\n } else if (\n type.startsWith('video') &&\n videoSizeLimit &&\n file.size > videoSizeLimit\n ) {\n return {\n type: 'videoSizeLimit',\n details: {\n videoSize: file.size,\n videoSizeLimit,\n },\n };\n }\n return null;\n });\n\n const [imageMatrix, setImageMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !imageMatrixLimit) return;\n if (imageMatrix?.matrix > imageMatrixLimit) {\n setMaxError({\n type: 'imageMatrixLimit',\n details: {\n imageMatrix: imageMatrix?.matrix,\n imageMatrixLimit,\n width: imageMatrix?.width,\n height: imageMatrix?.height,\n },\n });\n }\n }, [imageMatrix, imageMatrixLimit, checkMaxError]);\n\n const [videoMatrix, setVideoMatrix] = useState({});\n useEffect(() => {\n if (!checkMaxError || !videoMatrixLimit) return;\n if (videoMatrix?.matrix > videoMatrixLimit) {\n setMaxError({\n type: 'videoMatrixLimit',\n details: {\n videoMatrix: videoMatrix?.matrix,\n videoMatrixLimit,\n width: videoMatrix?.width,\n height: videoMatrix?.height,\n },\n });\n }\n }, [videoMatrix, videoMatrixLimit, checkMaxError]);\n\n const [description, setDescription] = useState(attachment.description);\n const [suffixType, subtype] = type.split('/');\n const debouncedOnDescriptionChange = useDebouncedCallback(\n onDescriptionChange,\n 250,\n );\n useEffect(() => {\n debouncedOnDescriptionChange(description);\n }, [description, debouncedOnDescriptionChange]);\n\n const [showModal, setShowModal] = useState(false);\n const textareaRef = useRef(null);\n useEffect(() => {\n let timer;\n if (showModal && textareaRef.current) {\n timer = setTimeout(() => {\n textareaRef.current.focus();\n }, 100);\n }\n return () => {\n clearTimeout(timer);\n };\n }, [showModal]);\n\n const descTextarea = (\n <>\n {!!id && !supportsEdit ? (\n
    \n Uploaded\n

    \n {attachment.description || No description}\n

    \n
    \n ) : (\n {\n const { value } = e.target;\n setDescription(value);\n // debouncedOnDescriptionChange(value);\n }}\n >\n )}\n \n );\n\n const toastRef = useRef(null);\n useEffect(() => {\n return () => {\n toastRef.current?.hideToast?.();\n };\n }, []);\n\n const maxErrorToast = useRef(null);\n\n const maxErrorText = (err) => {\n const { type, details } = err;\n switch (type) {\n case 'imageSizeLimit': {\n const { imageSize, imageSizeLimit } = details;\n return `File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n imageSize,\n )} to ${prettyBytes(imageSizeLimit)} or lower.`;\n }\n case 'imageMatrixLimit': {\n const { imageMatrix, imageMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n imageMatrix,\n imageMatrixLimit,\n width,\n height,\n );\n return `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoSizeLimit': {\n const { videoSize, videoSizeLimit } = details;\n return `File size too large. Uploading might encounter issues. Try reduce the file size from ${prettyBytes(\n videoSize,\n )} to ${prettyBytes(videoSizeLimit)} or lower.`;\n }\n case 'videoMatrixLimit': {\n const { videoMatrix, videoMatrixLimit, width, height } = details;\n const { newWidth, newHeight } = scaleDimension(\n videoMatrix,\n videoMatrixLimit,\n width,\n height,\n );\n return `Dimension too large. Uploading might encounter issues. Try reduce dimension from ${width.toLocaleString()}×${height.toLocaleString()}px to ${newWidth.toLocaleString()}×${newHeight.toLocaleString()}px.`;\n }\n case 'videoFrameRateLimit': {\n // Not possible to detect this on client-side for now\n return 'Frame rate too high. Uploading might encounter issues.';\n }\n }\n };\n\n return (\n <>\n
    \n {\n setShowModal(true);\n }}\n >\n {suffixType === 'image' ? (\n {\n if (!checkMaxError) return;\n const { naturalWidth, naturalHeight } = e.target;\n setImageMatrix({\n matrix: naturalWidth * naturalHeight,\n width: naturalWidth,\n height: naturalHeight,\n });\n }}\n />\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n {\n if (!checkMaxError) return;\n const { videoWidth, videoHeight } = e.target;\n if (videoWidth && videoHeight) {\n setVideoMatrix({\n matrix: videoWidth * videoHeight,\n width: videoWidth,\n height: videoHeight,\n });\n }\n }}\n />\n ) : suffixType === 'audio' ? (\n
    \n {descTextarea}\n
    \n \n \n \n {!!maxError && (\n {\n if (maxErrorToast.current) {\n maxErrorToast.current.hideToast();\n }\n maxErrorToast.current = showToast({\n text: maxErrorText(maxError),\n duration: 10_000,\n });\n }}\n >\n \n \n )}\n
    \n \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: 'Edit image description',\n video: 'Edit video description',\n audio: 'Edit audio description',\n }[suffixType]\n }\n

    \n
    \n
    \n
    \n {suffixType === 'image' ? (\n \"\"\n ) : suffixType === 'video' || suffixType === 'gifv' ? (\n
    \n
    \n {descTextarea}\n
    \n {suffixType === 'image' &&\n /^(png|jpe?g|gif|webp)$/i.test(subtype) &&\n !!states.settings.mediaAltGenerator &&\n !!IMG_ALT_API_URL && (\n \n \n \n }\n >\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const response = await fetch(IMG_ALT_API_URL, {\n method: 'POST',\n body,\n }).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `Failed to generate description${\n e?.message ? `: ${e.message}` : ''\n }`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n \n {lang && lang !== 'en' ? (\n \n Generate description…\n
    \n (English)\n
    \n ) : (\n Generate description…\n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: 'Generating description. Please wait...',\n duration: -1,\n });\n // POST with multipart\n (async function () {\n try {\n const body = new FormData();\n body.append('image', file);\n const params = `?lang=${lang}`;\n const response = await fetch(\n IMG_ALT_API_URL + params,\n {\n method: 'POST',\n body,\n },\n ).then((r) => r.json());\n if (response.error) {\n throw new Error(response.error);\n }\n setDescription(response.description);\n } catch (e) {\n console.error(e);\n showToast(\n `Failed to generate description${\n e?.message ? `: ${e.message}` : ''\n }`,\n );\n } finally {\n setUIState('default');\n toastRef.current?.hideToast?.();\n }\n })();\n }}\n >\n \n \n Generate description…\n
    ({localeCode2Text(lang)}){' '}\n \n — experimental\n \n
    \n \n )}\n \n )}\n {\n setShowModal(false);\n }}\n disabled={uiState === 'loading'}\n >\n Done\n \n
    \n
    \n
    \n
    \n \n )}\n \n );\n}\n\nfunction Poll({\n lang,\n poll,\n disabled,\n onInput = () => {},\n maxOptions,\n maxExpiration,\n minExpiration,\n maxCharactersPerOption,\n}) {\n const { options, expiresIn, multiple } = poll;\n\n return (\n
    \n
    \n {options.map((option, i) => (\n
    \n {\n const { value } = e.target;\n options[i] = value;\n onInput(poll);\n }}\n />\n {\n options.splice(i, 1);\n onInput(poll);\n }}\n >\n \n \n
    \n ))}\n
    \n
    \n = maxOptions}\n onClick={() => {\n options.push('');\n onInput(poll);\n }}\n >\n +\n {' '}\n \n \n
    \n
    \n {\n onInput(null);\n }}\n >\n Remove poll\n \n
    \n
    \n );\n}\n\nfunction filterShortcodes(emojis, searchTerm) {\n searchTerm = searchTerm.toLowerCase();\n\n // Return an array of shortcodes that start with or contain the search term, sorted by relevance and limited to the first 5\n return emojis\n .sort((a, b) => {\n let aLower = a.shortcode.toLowerCase();\n let bLower = b.shortcode.toLowerCase();\n\n let aStartsWith = aLower.startsWith(searchTerm);\n let bStartsWith = bLower.startsWith(searchTerm);\n let aContains = aLower.includes(searchTerm);\n let bContains = bLower.includes(searchTerm);\n let bothStartWith = aStartsWith && bStartsWith;\n let bothContain = aContains && bContains;\n\n return bothStartWith\n ? a.length - b.length\n : aStartsWith\n ? -1\n : bStartsWith\n ? 1\n : bothContain\n ? a.length - b.length\n : aContains\n ? -1\n : bContains\n ? 1\n : 0;\n })\n .slice(0, 5);\n}\n\nfunction encodeHTML(str) {\n return str.replace(/[&<>\"']/g, function (char) {\n return '&#' + char.charCodeAt(0) + ';';\n });\n}\n\nfunction removeNullUndefined(obj) {\n for (let key in obj) {\n if (obj[key] === null || obj[key] === undefined) {\n delete obj[key];\n }\n }\n return obj;\n}\n\nfunction MentionModal({\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const { masto } = api();\n const [uiState, setUIState] = useState('default');\n const [accounts, setAccounts] = useState([]);\n const [relationshipsMap, setRelationshipsMap] = useState({});\n\n const [selectedIndex, setSelectedIndex] = useState(0);\n\n const loadRelationships = async (accounts) => {\n if (!accounts?.length) return;\n const relationships = await fetchRelationships(accounts, relationshipsMap);\n if (relationships) {\n setRelationshipsMap({\n ...relationshipsMap,\n ...relationships,\n });\n }\n };\n\n const loadAccounts = (term) => {\n if (!term) return;\n setUIState('loading');\n (async () => {\n try {\n const accounts = await masto.v1.accounts.search.list({\n q: term,\n limit: 40,\n resolve: false,\n });\n setAccounts(accounts);\n loadRelationships(accounts);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n };\n\n const debouncedLoadAccounts = useDebouncedCallback(loadAccounts, 1000);\n\n useEffect(() => {\n loadAccounts();\n }, [loadAccounts]);\n\n const inputRef = useRef();\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n // Put cursor at the end\n if (inputRef.current.value) {\n inputRef.current.selectionStart = inputRef.current.value.length;\n inputRef.current.selectionEnd = inputRef.current.value.length;\n }\n }\n }, []);\n\n useEffect(() => {\n if (defaultSearchTerm) {\n loadAccounts(defaultSearchTerm);\n }\n }, [defaultSearchTerm]);\n\n const selectAccount = (account) => {\n const socialAddress = account.acct;\n onSelect(socialAddress);\n onClose();\n };\n\n useHotkeys(\n 'enter',\n () => {\n const selectedAccount = accounts[selectedIndex];\n if (selectedAccount) {\n selectAccount(selectedAccount);\n }\n },\n {\n preventDefault: true,\n enableOnFormTags: ['input'],\n },\n );\n\n const listRef = useRef();\n useHotkeys(\n 'down',\n () => {\n if (selectedIndex < accounts.length - 1) {\n setSelectedIndex(selectedIndex + 1);\n } else {\n setSelectedIndex(0);\n }\n setTimeout(() => {\n const selectedItem = listRef.current.querySelector('.selected');\n if (selectedItem) {\n selectedItem.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n }\n }, 1);\n },\n {\n preventDefault: true,\n enableOnFormTags: ['input'],\n },\n );\n\n useHotkeys(\n 'up',\n () => {\n if (selectedIndex > 0) {\n setSelectedIndex(selectedIndex - 1);\n } else {\n setSelectedIndex(accounts.length - 1);\n }\n setTimeout(() => {\n const selectedItem = listRef.current.querySelector('.selected');\n if (selectedItem) {\n selectedItem.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'center',\n });\n }\n }, 1);\n },\n {\n preventDefault: true,\n enableOnFormTags: ['input'],\n },\n );\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n debouncedLoadAccounts.flush?.();\n // const searchTerm = inputRef.current.value;\n // debouncedLoadAccounts(searchTerm);\n }}\n >\n {\n const { value } = e.target;\n debouncedLoadAccounts(value);\n }}\n autocomplete=\"off\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n spellCheck=\"false\"\n dir=\"auto\"\n defaultValue={defaultSearchTerm || ''}\n />\n \n
    \n
    \n {accounts?.length > 0 ? (\n \n {accounts.map((account, i) => {\n const relationship = relationshipsMap[account.id];\n return (\n \n \n {\n selectAccount(account);\n }}\n >\n \n \n \n );\n })}\n \n ) : uiState === 'loading' ? (\n
    \n \n
    \n ) : uiState === 'error' ? (\n
    \n

    Error loading accounts

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const [uiState, setUIState] = useState('default');\n const customEmojisList = useRef([]);\n const [customEmojis, setCustomEmojis] = useState([]);\n const recentlyUsedCustomEmojis = useMemo(\n () => store.account.get('recentlyUsedCustomEmojis') || [],\n );\n const searcherRef = useRef();\n useEffect(() => {\n setUIState('loading');\n (async () => {\n try {\n const [emojis, searcher] = await getCustomEmojis(instance, masto);\n console.log('emojis', emojis);\n searcherRef.current = searcher;\n setCustomEmojis(emojis);\n setUIState('default');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }, []);\n\n const customEmojisCatList = useMemo(() => {\n // Group emojis by category\n const emojisCat = {\n '--recent--': recentlyUsedCustomEmojis.filter((emoji) =>\n customEmojis.find((e) => e.shortcode === emoji.shortcode),\n ),\n };\n const othersCat = [];\n customEmojis.forEach((emoji) => {\n customEmojisList.current?.push?.(emoji);\n if (!emoji.category) {\n othersCat.push(emoji);\n return;\n }\n if (!emojisCat[emoji.category]) {\n emojisCat[emoji.category] = [];\n }\n emojisCat[emoji.category].push(emoji);\n });\n if (othersCat.length) {\n emojisCat['--others--'] = othersCat;\n }\n return emojisCat;\n }, [customEmojis]);\n\n const scrollableRef = useRef();\n const [matches, setMatches] = useState(null);\n const onFind = useCallback(\n (e) => {\n const { value } = e.target;\n if (value) {\n const results = searcherRef.current?.search(value, {\n limit: CUSTOM_EMOJIS_COUNT,\n });\n setMatches(results.map((r) => r.item));\n scrollableRef.current?.scrollTo?.(0, 0);\n } else {\n setMatches(null);\n }\n },\n [customEmojis],\n );\n useEffect(() => {\n if (defaultSearchTerm && customEmojis?.length) {\n onFind({ target: { value: defaultSearchTerm } });\n }\n }, [defaultSearchTerm, onFind, customEmojis]);\n\n const onSelectEmoji = useCallback(\n (emoji) => {\n onSelect?.(emoji);\n onClose?.();\n\n queueMicrotask(() => {\n let recentlyUsedCustomEmojis =\n store.account.get('recentlyUsedCustomEmojis') || [];\n const recentlyUsedEmojiIndex = recentlyUsedCustomEmojis.findIndex(\n (e) => e.shortcode === emoji.shortcode,\n );\n if (recentlyUsedEmojiIndex !== -1) {\n // Move emoji to index 0\n recentlyUsedCustomEmojis.splice(recentlyUsedEmojiIndex, 1);\n recentlyUsedCustomEmojis.unshift(emoji);\n } else {\n recentlyUsedCustomEmojis.unshift(emoji);\n // Remove unavailable ones\n recentlyUsedCustomEmojis = recentlyUsedCustomEmojis.filter((e) =>\n customEmojisList.current?.find?.(\n (emoji) => emoji.shortcode === e.shortcode,\n ),\n );\n // Limit to 10\n recentlyUsedCustomEmojis = recentlyUsedCustomEmojis.slice(0, 10);\n }\n\n // Store back\n store.account.set('recentlyUsedCustomEmojis', recentlyUsedCustomEmojis);\n });\n },\n [onSelect],\n );\n\n const inputRef = useRef();\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n // Put cursor at the end\n if (inputRef.current.value) {\n inputRef.current.selectionStart = inputRef.current.value.length;\n inputRef.current.selectionEnd = inputRef.current.value.length;\n }\n }\n }, []);\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n
    \n Custom emojis{' '}\n {uiState === 'loading' ? (\n \n ) : (\n • {instance}\n )}\n
    \n {\n e.preventDefault();\n const emoji = matches[0];\n if (emoji) {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }\n }}\n >\n \n \n
    \n
    \n {matches !== null ? (\n
      \n {matches.map((emoji) => (\n
    • \n {\n onSelectEmoji(`:${emoji.shortcode}:`);\n }}\n showCode\n />\n
    • \n ))}\n
    \n ) : (\n
    \n {uiState === 'error' && (\n
    \n

    Error loading custom emojis

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n <>\n
    \n {{\n '--recent--': 'Recently used',\n '--others--': 'Others',\n }[category] || category}\n
    \n \n \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const [max, setMax] = useState(CUSTOM_EMOJIS_COUNT);\n const showMore = emojis.length > max;\n return (\n
    \n {emojis.slice(0, max).map((emoji) => (\n {\n onSelect(`:${emoji.shortcode}:`);\n }}\n />\n ))}\n {showMore && (\n setMax(max + CUSTOM_EMOJIS_COUNT)}\n >\n {(emojis.length - max).toLocaleString()} more…\n \n )}\n
    \n );\n});\n\nconst CustomEmojiButton = memo(({ emoji, onClick, showCode }) => {\n const addEdges = (e) => {\n // Add edge-left or edge-right class based on self position relative to scrollable parent\n // If near left edge, add edge-left, if near right edge, add edge-right\n const buffer = 88;\n const parent = e.currentTarget.closest('main');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n const selfRect = e.currentTarget.getBoundingClientRect();\n const targetClassList = e.currentTarget.classList;\n if (selfRect.left < rect.left + buffer) {\n targetClassList.add('edge-left');\n targetClassList.remove('edge-right');\n } else if (selfRect.right > rect.right - buffer) {\n targetClassList.add('edge-right');\n targetClassList.remove('edge-left');\n } else {\n targetClassList.remove('edge-left', 'edge-right');\n }\n }\n };\n\n return (\n \n \n {!!emoji.staticUrl && (\n \n )}\n \n \n {showCode && (\n <>\n {' '}\n {emoji.shortcode}\n \n )}\n \n );\n});\n\nconst GIFS_PER_PAGE = 20;\nfunction GIFPickerModal({ onClose = () => {}, onSelect = () => {} }) {\n const [uiState, setUIState] = useState('default');\n const [results, setResults] = useState([]);\n const formRef = useRef(null);\n const qRef = useRef(null);\n const currentOffset = useRef(0);\n const scrollableRef = useRef(null);\n\n function fetchGIFs({ offset }) {\n console.log('fetchGIFs', { offset });\n if (!qRef.current?.value) return;\n setUIState('loading');\n scrollableRef.current?.scrollTo?.({\n top: 0,\n left: 0,\n behavior: 'smooth',\n });\n (async () => {\n try {\n const query = {\n api_key: GIPHY_API_KEY,\n q: qRef.current.value,\n rating: 'g',\n limit: GIFS_PER_PAGE,\n bundle: 'messaging_non_clips',\n offset,\n };\n const response = await fetch(\n 'https://api.giphy.com/v1/gifs/search?' + new URLSearchParams(query),\n {\n referrerPolicy: 'no-referrer',\n },\n ).then((r) => r.json());\n currentOffset.current = response.pagination?.offset || 0;\n setResults(response);\n setUIState('results');\n } catch (e) {\n setUIState('error');\n console.error(e);\n }\n })();\n }\n\n useEffect(() => {\n qRef.current?.focus();\n }, []);\n\n const debouncedOnInput = useDebouncedCallback(() => {\n fetchGIFs({ offset: 0 });\n }, 1000);\n\n return (\n
    \n {!!onClose && (\n \n )}\n
    \n {\n e.preventDefault();\n fetchGIFs({ offset: 0 });\n }}\n >\n \n \n \n
    \n
    \n {uiState === 'default' && (\n
    \n

    Type to search GIFs

    \n
    \n )}\n {uiState === 'loading' && !results?.data?.length && (\n
    \n \n
    \n )}\n {results?.data?.length > 0 ? (\n <>\n
      \n {results.data.map((gif) => {\n const { id, images, title, alt_text } = gif;\n const {\n fixed_height_small,\n fixed_height_downsampled,\n fixed_height,\n original,\n } = images;\n const theImage = fixed_height_small?.url\n ? fixed_height_small\n : fixed_height_downsampled?.url\n ? fixed_height_downsampled\n : fixed_height;\n let { url, webp, width, height } = theImage;\n if (+height > 100) {\n width = (width / height) * 100;\n height = 100;\n }\n const urlObj = URL.parse(url);\n const strippedURL = urlObj.origin + urlObj.pathname;\n let strippedWebP;\n if (webp) {\n const webpObj = URL.parse(webp);\n strippedWebP = webpObj.origin + webpObj.pathname;\n }\n return (\n
    • \n {\n const { mp4, url } = original;\n const theURL = mp4 || url;\n const urlObj = URL.parse(theURL);\n const strippedURL = urlObj.origin + urlObj.pathname;\n onClose();\n onSelect({\n url: strippedURL,\n type: mp4 ? 'video/mp4' : 'image/gif',\n alt_text: alt_text || title,\n });\n }}\n >\n \n \n {strippedWebP && (\n \n )}\n {\n e.target.style.backgroundColor = 'transparent';\n }}\n />\n \n
      {alt_text || title}
      \n \n \n
    • \n );\n })}\n
    \n

    \n {results.pagination?.offset > 0 && (\n {\n fetchGIFs({\n offset: results.pagination?.offset - GIFS_PER_PAGE,\n });\n }}\n >\n \n Previous\n \n )}\n \n {results.pagination?.offset + results.pagination?.count <\n results.pagination?.total_count && (\n {\n fetchGIFs({\n offset: results.pagination?.offset + GIFS_PER_PAGE,\n });\n }}\n >\n Next \n \n )}\n

    \n \n ) : (\n uiState === 'results' && (\n
    \n

    No results

    \n
    \n )\n )}\n {uiState === 'error' && (\n
    \n

    Error loading GIFs

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"names":["Combobox","input","list","tabInsertsSuggestions","defaultFirstOption","event","keyboardBindings","trackComposition","commitWithElement","_a","visible","indexDiff","focusEl","els","focusIndex","indexOfItem","newIndex","target","el","scrollTo","combobox","commit","fireCommitEvent","container","inViewport","element","scrollTop","containerBottom","top","bottom","boundary","query","text","key","cursor","multiWord","lookBackIndex","lastMatchPosition","keyIndex","pre","CustomHTMLElement","InputStyleCloneUpdateEvent","CloneRegistry","_InputStyleCloneElement","__privateAdd","_InputStyleCloneElement_instances","_styleObserver","__privateMethod","updateStyles_fn","_resizeObserver","requestUpdateLayout_fn","_inputRef","_container","_xOffset","_yOffset","_isLayoutUpdating","_onInput","updateText_fn","_onDocumentScrollOrResize","usingInput_fn","__privateSet","__privateGet","clone","fn","updateLayout_fn","inputStyle","inputRect","cloneRect","prop","propertiesToCopy","InputStyleCloneElement","e","_InputRange","startOffset","endOffset","_InputRange_instances","_inputElement","_startOffset","_endOffset","selectionStart","selectionEnd","offset","clampOffset_fn","toStart","createCloneRange_fn","styleClone_get","cloneElement_get","range","textNode","InputRange","states","TextExpander","expander","match","menu","_b","position","caretRect","targetPosition","currentPosition","delta","currentStyle","item","beginning","remaining","detail","suffix","value","found","providers","provide","result","x","TextExpanderElement","keysAttr","keys","multiWordAttr","globalMultiWord","state","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","segmenter","stringLength","countAnsiEscapeCodes","length","_","poweredByGiphyURL","PHANPY_IMG_ALT_API_URL","IMG_ALT_API_URL","PHANPY_GIPHY_API_KEY","GIPHY_API_KEY","import","supportedLanguagesMap","supportedLanguages","reduce","acc","l","code","common","native","expiryOptions","expirySeconds","Object","values","oneDay","expiresInFromExpiresAt","expiresAt","Date","getTime","now","find","s","document","createElement","role","className","windowMargin","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","left","width","boundingClientRect","innerWidth","window","insetInlineStart","isRTL","style","observe","DEFAULT_LANG","localeMatch","Intl","DateTimeFormat","resolvedOptions","locale","navigator","languages","map","urlRegexObj","RegExp","urlRegex","source","flags","usernameRegex","urlPlaceholder","countableText","inputText","replace","USERNAME_RE","MENTION_RE","HASHTAG_RE","SHORTCODE_RE_FRAGMENT","SCAN_RE","Segmenter","escapeHTML","highlightText","maxCharacters","Infinity","composerCharacterCount","withinLimitHTML","exceedLimitHTML","htmlSegments","segment","index","rtf","RelativeTimeFormat","CUSTOM_EMOJIS_COUNT","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","console","masto","instance","uiState","setUIState","useState","UID","uid","log","currentAccount","currentAccountInfo","maxMediaAttachments","charactersReservedPerUrl","imageMatrixLimit","supportedMimeTypes","imageSizeLimit","videoSizeLimit","videoMatrixLimit","videoFrameRateLimit","maxExpiration","maxOptions","maxCharactersPerOption","minExpiration","spoilerTextRef","useRef","textareaRef","store","prevLanguage","language","sensitive","setMediaAttachments","setLanguage","oninputTextarea","poll","account","focusTextarea","dispatchEvent","setTimeout","spoilerText","useEffect","visibility2","language2","sensitive2","visibility","current","m","allMentions","prefs","setSensitive","poll2","mediaAttachments","options","expiresIn","statusSource","dataset","mediaAttachments2","setVisibility","composablePoll","status","o","formRef","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","id","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","canClose","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","items","i2","file","files","drafts","allowedFiles","updatedAt","then","debug","error","mediaFiles","handleDragover","includes","showMentionPicker","setShowMentionPicker","showEmoji2Picker","setShowEmoji2Picker","showGIFPicker","autoDetectedLanguages","setAutoDetectedLanguages","topSupportedLanguages","restSupportedLanguages","useMemo","topLanguages","contentTranslationHideLanguages","max","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","_jsxs","dataTransfer","_jsx","children","passData","Icon","alert","settings","sort","class","avatarStatic","instanceURL","onClick","opener","composerState","Status","replyToStatusMonthsAgo","_Fragment","formData","previewMode","option","media","pointerEvents","opacity","mediaPromises","attachment","description","params2","removeNullUndefined","res","results","some","hasNoDescriptions","params","saveStatus","newStatus","allSettled","e2","media_attributes","in_reply_to_id","onInput","onChange","limit","focus","q","title","icon","action","disabled","MediaAttachment","attachments","newAttachments","required","fileID","performSearch","v1","search","resolve","v2","fetch","onTrigger","defaultSearchTerm","newPoll","setPoll","onDescriptionChange","i","accept","multiple","setShowGIFPicker","Array","Loader","CharCountMeter","Modal","MentionModal","socialAddress","textarea","abrupt","textBeforeMention","textAfterMention","newText","spaceBeforeMention","spaceAfterMention","set","CustomEmojisModal","emojiShortcode","textBeforeEmoji","spaceBeforeEmoji","spaceAfterEmoji","textAfterEmoji","GIFPickerModal","alt_text","showToast","blob","onSelect","theToast","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","searcher","getCustomEmojis","pmem","_getCustomEmojis","cacheKeyArg","keyArg","detectLangs","langs","lang","newMediaAttachments","setText","ref","props","searcherRef","r","emojis","textExpanderRef","textExpanderTextRef","text2","emoji","shortcode","encodeHTML","forwardRef","html","textareaProps","handleChange","total","history","cur","matched","handleValue","more","searchResults","v","name","displayName","handleCommited","shortenNumber","slowHighlightPerf","composeHighlightRef","start","end","debouncedAutoDetectLanguage","useDebouncedCallback","dom","mark","Event","resizeObserver","throttleHighlightText","bullet","postSpaces","anything","lastLine","innerHTML","number","preSpaces","newBullet","pos","innerText","autoResizeTextarea","dir","rows","cols","onKeyDown","hidden","charCount","leftChars","ctrlKey","setRangeText","setSelectionRange","prettyBytes","bytes","unitIndex","units","scaleDimension","newWidth","scalingFactor","newHeight","onRemove","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","snapStates","setImageMatrix","imageMatrix","setMaxError","matrix","Math","videoMatrix","setDescription","suffixType","subtype","debouncedOnDescriptionChange","timer","maxError","details","toastRef","maxErrorText","err","type2","imageSizeLimit2","imageSize","imageMatrixLimit2","showModal","videoSize","clearTimeout","videoSizeLimit2","descTextarea","videoMatrix2","videoMatrixLimit2","autoCapitalize","autoComplete","naturalWidth","naturalHeight","maxErrorToast","setVideoMatrix","videoWidth","videoHeight","setShowModal","tabIndex","src","onLoad","playsinline","onLoadedMetadata","Menu2","body","response","MenuItem","menuButton","localeCode2Text","append","Poll","checked","label","maxlength","placeholder","str","char","obj","accounts2","relationships","fetchRelationships","relationshipsMap","setRelationshipsMap","filter","setAccounts","loadRelationships","loadAccounts","inputRef","filterShortcodes","searchTerm","bLower","aStartsWith","bStartsWith","aContains","bothContain","bContains","selectedAccount","accounts","selectedIndex","selectAccount","listRef","setSelectedIndex","selectedItem","term","debouncedLoadAccounts","enableOnFormTags","AccountBlock","relationship","inline","customEmojis","setCustomEmojis","onSubmit","recentlyUsedCustomEmojis","autocorrect","customEmojisList","othersCat","emojisCat","useCallback","_c","scrollableRef","setMatches","onFind","onSelectEmoji","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","matches","CustomEmojiButton","queueMicrotask","splice","CustomEmojisList","setMax","showMore","memo","showCode","parent","rect","selfRect","targetClassList","addEdges","GIFS_PER_PAGE","setResults","qRef","closest","getBoundingClientRect","remove","staticUrl","loading","debouncedOnInput","currentOffset","gif","fixed_height_downsampled","original","pagination","fixed_height_small","fixed_height","theImage","urlObj","strippedWebP","webp","webpObj","url2","theURL","mp4","urlObj2","strippedURL2","strippedURL","images","fetchGIFs","parse"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]} \ No newline at end of file diff --git a/assets/fuse-4Bvpr1kU.js b/assets/fuse-4Bvpr1kU.js new file mode 100644 index 0000000..51f2513 --- /dev/null +++ b/assets/fuse-4Bvpr1kU.js @@ -0,0 +1,183 @@ +import{Z as ot,E as De,c as s,h as te,q as Ie,A as j,_ as pn,y as se,$ as bn,o as St,a0 as I,a1 as ma,a2 as Gn,a3 as ga,T as fe,D as kt,p as Di,a4 as va,a5 as Ri,F as Ni,k as U,x as it,K as st,i as ya,s as W,a6 as _a,a as Xn,n as ba,a7 as Fi,a8 as wa,a9 as zi,j as fo,L as Hi,g as ho,aa as Ta,ab as Pe,ac as Ea,ad as xa,ae as Dn,w as tt,u as wn,d as Zo,b as Ze,J as Vi,af as Ma,ag as Sa,ah as ka}from"./useTitle-Mh8hVeGN.js";import{e as Aa}from"./tinyld-light-PxOyhYWY.js";import{m as Ia}from"./index-CeOZgm-k.js";function Kr(){return Kr=Object.assign?Object.assign.bind():function(e){for(var t=1;t'),!0):t?e.some(function(n){return t.includes(n)})||e.includes("*"):!0}var Na=function(t,n,r){r===void 0&&(r=!1);var o=n.alt,i=n.meta,a=n.mod,u=n.shift,c=n.ctrl,l=n.keys,f=t.key,d=t.code,p=t.ctrlKey,m=t.metaKey,h=t.shiftKey,g=t.altKey,y=ht(d),T=f.toLowerCase();if(!(l!=null&&l.includes(y))&&!(l!=null&&l.includes(T))&&!["ctrl","control","unknown","meta","alt","shift","os"].includes(y))return!1;if(!r){if(o===!g&&T!=="alt"||u===!h&&T!=="shift")return!1;if(a){if(!m&&!p)return!1}else if(i===!m&&T!=="meta"&&T!=="os"||c===!p&&T!=="ctrl"&&T!=="control")return!1}return l&&l.length===1&&(l.includes(T)||l.includes(y))?!0:l?Ca(l):!l},Fa=ot(void 0),za=function(){return De(Fa)};function Ki(e,t){return e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(e).length===Object.keys(t).length&&Object.keys(e).reduce(function(n,r){return n&&Ki(e[r],t[r])},!0):e===t}var Ha=ot({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),Va=function(){return De(Ha)};function ja(e){var t=j(void 0);return Ki(t.current,e)||(t.current=e),t.current}var Yo=function(t){t.stopPropagation(),t.preventDefault(),t.stopImmediatePropagation()},Ba=typeof window<"u"?pn:se;function Nt(e,t,n,r){var o=j(null),i=j(!1),a=n instanceof Array?r instanceof Array?void 0:r:n,u=po(e)?e.join(a==null?void 0:a.splitKey):e,c=n instanceof Array?n:r instanceof Array?r:void 0,l=Ie(t,c??[]),f=j(l);c?f.current=l:f.current=t;var d=ja(a),p=Va(),m=p.enabledScopes,h=za();return Ba(function(){if(!((d==null?void 0:d.enabled)===!1||!Ra(m,d==null?void 0:d.scopes))){var g=function(w,b){var M;if(b===void 0&&(b=!1),!(Da(w)&&!Wi(w,d==null?void 0:d.enableOnFormTags))){if(o.current!==null){var A=o.current.getRootNode();if((A instanceof Document||A instanceof ShadowRoot)&&A.activeElement!==o.current&&!o.current.contains(A.activeElement)){Yo(w);return}}(M=w.target)!=null&&M.isContentEditable&&!(d!=null&&d.enableOnContentEditable)||xr(u,d==null?void 0:d.splitKey).forEach(function(O){var P,x=Mr(O,d==null?void 0:d.combinationKey);if(Na(w,x,d==null?void 0:d.ignoreModifiers)||(P=x.keys)!=null&&P.includes("*")){if(d!=null&&d.ignoreEventWhen!=null&&d.ignoreEventWhen(w)||b&&i.current)return;if(Pa(w,x,d==null?void 0:d.preventDefault),!Oa(w,x,d==null?void 0:d.enabled)){Yo(w);return}f.current(w,x),b||(i.current=!0)}})}},y=function(w){w.key!==void 0&&(Bi(ht(w.code)),((d==null?void 0:d.keydown)===void 0&&(d==null?void 0:d.keyup)!==!0||d!=null&&d.keydown)&&g(w))},T=function(w){w.key!==void 0&&(Ui(ht(w.code)),i.current=!1,d!=null&&d.keyup&&g(w,!0))},_=o.current||(a==null?void 0:a.document)||document;return _.addEventListener("keyup",T),_.addEventListener("keydown",y),h&&xr(u,d==null?void 0:d.splitKey).forEach(function(E){return h.addHotkey(Mr(E,d==null?void 0:d.combinationKey,d==null?void 0:d.description))}),function(){_.removeEventListener("keyup",T),_.removeEventListener("keydown",y),h&&xr(u,d==null?void 0:d.splitKey).forEach(function(E){return h.removeHotkey(Mr(E,d==null?void 0:d.combinationKey,d==null?void 0:d.description))})}}},[u,d,m]),o}var mo={exports:{}};/*! + * Toastify js 1.12.0 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */var mf=mo.exports;(function(e){(function(t,n){e.exports?e.exports=n():t.Toastify=n()})(bn,function(t){var n=function(a){return new n.lib.init(a)},r="1.12.0";n.defaults={oldestFirst:!0,text:"Toastify is awesome!",node:void 0,duration:3e3,selector:void 0,callback:function(){},destination:void 0,newWindow:!1,close:!1,gravity:"toastify-top",positionLeft:!1,position:"",backgroundColor:"",avatar:"",className:"",stopOnFocus:!0,onClick:function(){},offset:{x:0,y:0},escapeMarkup:!0,ariaLive:"polite",style:{background:""}},n.lib=n.prototype={toastify:r,constructor:n,init:function(a){return a||(a={}),this.options={},this.toastElement=null,this.options.text=a.text||n.defaults.text,this.options.node=a.node||n.defaults.node,this.options.duration=a.duration===0?0:a.duration||n.defaults.duration,this.options.selector=a.selector||n.defaults.selector,this.options.callback=a.callback||n.defaults.callback,this.options.destination=a.destination||n.defaults.destination,this.options.newWindow=a.newWindow||n.defaults.newWindow,this.options.close=a.close||n.defaults.close,this.options.gravity=a.gravity==="bottom"?"toastify-bottom":n.defaults.gravity,this.options.positionLeft=a.positionLeft||n.defaults.positionLeft,this.options.position=a.position||n.defaults.position,this.options.backgroundColor=a.backgroundColor||n.defaults.backgroundColor,this.options.avatar=a.avatar||n.defaults.avatar,this.options.className=a.className||n.defaults.className,this.options.stopOnFocus=a.stopOnFocus===void 0?n.defaults.stopOnFocus:a.stopOnFocus,this.options.onClick=a.onClick||n.defaults.onClick,this.options.offset=a.offset||n.defaults.offset,this.options.escapeMarkup=a.escapeMarkup!==void 0?a.escapeMarkup:n.defaults.escapeMarkup,this.options.ariaLive=a.ariaLive||n.defaults.ariaLive,this.options.style=a.style||n.defaults.style,a.backgroundColor&&(this.options.style.background=a.backgroundColor),this},buildToast:function(){if(!this.options)throw"Toastify is not initialized";var a=document.createElement("div");a.className="toastify on "+this.options.className,this.options.position?a.className+=" toastify-"+this.options.position:this.options.positionLeft===!0?(a.className+=" toastify-left",console.warn("Property `positionLeft` will be depreciated in further versions. Please use `position` instead.")):a.className+=" toastify-right",a.className+=" "+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: "backgroundColor" is being deprecated. Please use the "style.background" property.');for(var u in this.options.style)a.style[u]=this.options.style[u];if(this.options.ariaLive&&a.setAttribute("aria-live",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)a.appendChild(this.options.node);else if(this.options.escapeMarkup?a.innerText=this.options.text:a.innerHTML=this.options.text,this.options.avatar!==""){var c=document.createElement("img");c.src=this.options.avatar,c.className="toastify-avatar",this.options.position=="left"||this.options.positionLeft===!0?a.appendChild(c):a.insertAdjacentElement("afterbegin",c)}if(this.options.close===!0){var l=document.createElement("button");l.type="button",l.setAttribute("aria-label","Close"),l.className="toast-close",l.innerHTML="✖",l.addEventListener("click",(function(y){y.stopPropagation(),this.removeElement(this.toastElement),window.clearTimeout(this.toastElement.timeOutValue)}).bind(this));var f=window.innerWidth>0?window.innerWidth:screen.width;(this.options.position=="left"||this.options.positionLeft===!0)&&f>360?a.insertAdjacentElement("afterbegin",l):a.appendChild(l)}if(this.options.stopOnFocus&&this.options.duration>0){var d=this;a.addEventListener("mouseover",function(y){window.clearTimeout(a.timeOutValue)}),a.addEventListener("mouseleave",function(){a.timeOutValue=window.setTimeout(function(){d.removeElement(a)},d.options.duration)})}if(typeof this.options.destination<"u"&&a.addEventListener("click",(function(y){y.stopPropagation(),this.options.newWindow===!0?window.open(this.options.destination,"_blank"):window.location=this.options.destination}).bind(this)),typeof this.options.onClick=="function"&&typeof this.options.destination>"u"&&a.addEventListener("click",(function(y){y.stopPropagation(),this.options.onClick()}).bind(this)),typeof this.options.offset=="object"){var p=o("x",this.options),m=o("y",this.options),h=this.options.position=="left"?p:"-"+p,g=this.options.gravity=="toastify-top"?m:"-"+m;a.style.transform="translate("+h+","+g+")"}return a},showToast:function(){this.toastElement=this.buildToast();var a;if(typeof this.options.selector=="string"?a=document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||typeof ShadowRoot<"u"&&this.options.selector instanceof ShadowRoot?a=this.options.selector:a=document.body,!a)throw"Root element is not defined";var u=n.defaults.oldestFirst?a.firstChild:a.lastChild;return a.insertBefore(this.toastElement,u),n.reposition(),this.options.duration>0&&(this.toastElement.timeOutValue=window.setTimeout((function(){this.removeElement(this.toastElement)}).bind(this),this.options.duration)),this},hideToast:function(){this.toastElement.timeOutValue&&clearTimeout(this.toastElement.timeOutValue),this.removeElement(this.toastElement)},removeElement:function(a){a.className=a.className.replace(" on",""),window.setTimeout((function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),a.parentNode&&a.parentNode.removeChild(a),this.options.callback.call(a),n.reposition()}).bind(this),400)}},n.reposition=function(){for(var a={top:15,bottom:15},u={top:15,bottom:15},c={top:15,bottom:15},l=document.getElementsByClassName("toastify"),f,d=0;d0?window.innerWidth:screen.width;h<=360?(l[d].style[f]=c[f]+"px",c[f]+=p+m):i(l[d],"toastify-left")===!0?(l[d].style[f]=a[f]+"px",a[f]+=p+m):(l[d].style[f]=u[f]+"px",u[f]+=p+m)}return this};function o(a,u){return u.offset[a]?isNaN(u.offset[a])?u.offset[a]:u.offset[a]+"px":"0px"}function i(a,u){return!a||typeof u!="string"?!1:!!(a.className&&a.className.trim().split(/\s+/gi).indexOf(u)>-1)}return n.lib.init.prototype=n.lib,n})})(mo);var Ua=mo.exports;const Wa=St(Ua);window._showToast=$e;function $e(e){typeof e=="string"&&(e={text:e});const{onClick:t,delay:n,...r}=e,o=Wa({className:`${t||e.destination?"shiny-pill":""}`,gravity:"bottom",position:"center",...r,onClick:()=>{t==null||t(o)}});return n?setTimeout(()=>{o.showToast()},n):o.showToast(),o}function gf(e,t,n,r){const o=j(e);se(()=>{o.current=e},[e,n]),se(()=>{!r||t===null||t===!1||o.current()},[r]),se(()=>{if(t===null||t===!1)return;const a=setInterval(()=>o.current(),t);return()=>clearInterval(a)},[t])}function Ka(e){const t=URL.parse("/compose/",window.location),{width:n,height:r}=window.screen,o=Math.max(0,(n-600)/2),i=Math.max(0,(r-450)/2),a=Math.min(n,600),u=Math.min(r,450),c=(e==null?void 0:e.uid)||Math.random(),l=window.open(t,"compose"+c,`width=${a},height=${u},left=${o},top=${i}`);return l?l.__COMPOSE__=e:alert("Looks like your browser is blocking popups."),l}const Za=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);function Ya(){if(Za){const e=document.createElement("input");e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.opacity="0",document.body.appendChild(e),e.focus(),setTimeout(()=>{document.body.removeChild(e)},500)}}const Zi={x:()=>I(()=>import("./icons/close-line-YTE7hIJE.js"),[],import.meta.url),heart:()=>I(()=>import("./icons/heart-line-VwvWYh8h.js"),[],import.meta.url),bookmark:()=>I(()=>import("./icons/bookmark-line-D6jQ7QFs.js"),[],import.meta.url),"check-circle":()=>I(()=>import("./icons/check-circle-line-sE41WGxF.js"),[],import.meta.url),"x-circle":()=>I(()=>import("./icons/close-circle-line-qd3g541O.js"),[],import.meta.url),transfer:()=>I(()=>import("./icons/transfer-4-line-Q9QJoxz3.js"),[],import.meta.url),rocket:()=>I(()=>import("./icons/rocket-line-rZbVYYCZ.js"),[],import.meta.url),"arrow-left":{module:()=>I(()=>import("./icons/arrow-left-line-_YC6-XGG.js"),[],import.meta.url),rtl:!0},"arrow-right":{module:()=>I(()=>import("./icons/arrow-right-line-PypiEqpu.js"),[],import.meta.url),rtl:!0},"arrow-up":()=>I(()=>import("./icons/arrow-up-line-fcuKqhVE.js"),[],import.meta.url),"arrow-down":()=>I(()=>import("./icons/arrow-down-line-0TRJUP_K.js"),[],import.meta.url),earth:()=>I(()=>import("./icons/earth-line-t1Um8wpQ.js"),[],import.meta.url),lock:()=>I(()=>import("./icons/lock-line-0jNHqZpm.js"),[],import.meta.url),unlock:()=>I(()=>import("./icons/unlock-line-w3piJMVb.js"),[],import.meta.url),"eye-close":()=>I(()=>import("./icons/eye-close-line-lBiePPv9.js"),[],import.meta.url),"eye-open":()=>I(()=>import("./icons/eye-2-line-vz_Kw-rK.js"),[],import.meta.url),message:()=>I(()=>import("./icons/mail-line-5XLS6FEo.js"),[],import.meta.url),comment:{module:()=>I(()=>import("./icons/chat-3-line-F0xcdpXY.js"),[],import.meta.url),rtl:!0},comment2:{module:()=>I(()=>import("./icons/comment-2-line-xEXuT-Ip.js"),[],import.meta.url),rtl:!0},home:()=>I(()=>import("./icons/home-3-line-qJiZhXUH.js"),[],import.meta.url),notification:()=>I(()=>import("./icons/notification-line-olNPLtgS.js"),[],import.meta.url),follow:()=>I(()=>import("./icons/user-follow-line-k_GCWTtp.js"),[],import.meta.url),"follow-add":()=>I(()=>import("./icons/user-add-line-zzW9OULB.js"),[],import.meta.url),poll:[()=>I(()=>import("./icons/chart-bar-line-5r_DfN2w.js"),[],import.meta.url),"90deg"],pencil:()=>I(()=>import("./icons/pencil-line-bKXqElLR.js"),[],import.meta.url),quill:()=>I(()=>import("./icons/quill-pen-line-h_5-FsGz.js"),[],import.meta.url),at:()=>I(()=>import("./icons/at-line-9vJS_Hnl.js"),[],import.meta.url),attachment:()=>I(()=>import("./icons/attachment-line-C2PUa1Ke.js"),[],import.meta.url),upload:()=>I(()=>import("./icons/upload-3-line-Qsjvubiw.js"),[],import.meta.url),gear:()=>I(()=>import("./icons/settings-3-line-kt4MSpRv.js"),[],import.meta.url),more:()=>I(()=>import("./icons/more-3-line-wUD-Yhmj.js"),[],import.meta.url),more2:()=>I(()=>import("./icons/more-1-fill-je1-slyh.js"),[],import.meta.url),external:{module:()=>I(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rtl:!0},popout:{module:()=>I(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rtl:!0},popin:{module:()=>I(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rotate:"180deg",rtl:!0},plus:()=>I(()=>import("./icons/add-circle-line--O-MfyNy.js"),[],import.meta.url),"chevron-left":{module:()=>I(()=>import("./icons/left-line-Jck0yVmC.js"),[],import.meta.url),rtl:!0},"chevron-right":{module:()=>I(()=>import("./icons/right-line-7VBoqLdz.js"),[],import.meta.url),rtl:!0},"chevron-down":()=>I(()=>import("./icons/down-line-9PeS5YhF.js"),[],import.meta.url),reply:{module:()=>I(()=>import("./icons/share-forward-line-4jL-2Q4u.js"),[],import.meta.url),rotate:"180deg",flip:"horizontal",rtl:!0},thread:()=>I(()=>import("./icons/route-line-2YYy3958.js"),[],import.meta.url),group:{module:()=>I(()=>import("./icons/group-line-JvhJklhQ.js"),[],import.meta.url),rtl:!0},bot:()=>I(()=>import("./icons/android-2-line-uPwvVubH.js"),[],import.meta.url),menu:()=>I(()=>import("./icons/rows-4-line-SxGPYpTa.js"),[],import.meta.url),list:{module:()=>I(()=>import("./icons/list-check-line-qNqx9Mm4.js"),[],import.meta.url),rtl:!0},search:()=>I(()=>import("./icons/search-2-line-G39AynEw.js"),[],import.meta.url),hashtag:()=>I(()=>import("./icons/hashtag-line-SS3QMu1R.js"),[],import.meta.url),info:()=>I(()=>import("./icons/information-line-8SOch6cR.js"),[],import.meta.url),shortcut:()=>I(()=>import("./icons/lightning-line-JMYUlCZM.js"),[],import.meta.url),user:()=>I(()=>import("./icons/user-4-line-zT_bpOrS.js"),[],import.meta.url),following:()=>I(()=>import("./icons/walk-line-CF7a5s4t.js"),[],import.meta.url),pin:()=>I(()=>import("./icons/pin-line-ULyRQyWZ.js"),[],import.meta.url),unpin:[()=>I(()=>import("./icons/pin-line-ULyRQyWZ.js"),[],import.meta.url),"180deg"],bus:()=>I(()=>import("./icons/bus-2-line-XuQdDZ_w.js"),[],import.meta.url),link:()=>I(()=>import("./icons/link-2-line-BUqp1EwN.js"),[],import.meta.url),history:()=>I(()=>import("./icons/history-line-yoG7K8wL.js"),[],import.meta.url),share:()=>I(()=>import("./icons/share-2-line-PYo-zN94.js"),[],import.meta.url),sparkles:()=>I(()=>import("./icons/sparkles-line-wjZWGZ1a.js"),[],import.meta.url),sparkles2:()=>I(()=>import("./icons/sparkles-2-line-g2FqdZ0R.js"),[],import.meta.url),exit:{module:()=>I(()=>import("./icons/exit-line-l-1uUgI7.js"),[],import.meta.url),rtl:!0},translate:()=>I(()=>import("./icons/translate-line-HpDtlqS2.js"),[],import.meta.url),play:()=>I(()=>import("./icons/play-fill-Ey-zv2eL.js"),[],import.meta.url),trash:()=>I(()=>import("./icons/delete-2-line-pjUduCFs.js"),[],import.meta.url),mute:{module:()=>I(()=>import("./icons/volume-mute-line-WthBoXru.js"),[],import.meta.url),rtl:!0},unmute:{module:()=>I(()=>import("./icons/volume-line-PZujbN8h.js"),[],import.meta.url),rtl:!0},block:()=>I(()=>import("./icons/forbid-circle-line-3FxopGoP.js"),[],import.meta.url),unblock:[()=>I(()=>import("./icons/forbid-circle-line-3FxopGoP.js"),[],import.meta.url),"180deg"],flag:()=>I(()=>import("./icons/flag-1-line-xvcg7G7Q.js"),[],import.meta.url),time:()=>I(()=>import("./icons/time-line-ThP0kTRr.js"),[],import.meta.url),refresh:()=>I(()=>import("./icons/refresh-2-line-t42qqclb.js"),[],import.meta.url),emoji2:()=>I(()=>import("./icons/emoji-2-line--uNVc2IC.js"),[],import.meta.url),filter:()=>I(()=>import("./icons/filter-2-line-KyjbFYlO.js"),[],import.meta.url),filters:()=>I(()=>import("./icons/filter-line-1KEfnWDm.js"),[],import.meta.url),chart:()=>I(()=>import("./icons/chart-line-line-pHaLt6yC.js"),[],import.meta.url),react:()=>I(()=>import("./icons/react-line-YfZPqZem.js"),[],import.meta.url),layout4:{module:()=>I(()=>import("./icons/layout-4-line-FOdnyEcZ.js"),[],import.meta.url),rtl:!0},layout5:()=>I(()=>import("./icons/layout-5-line-9Kks7dle.js"),[],import.meta.url),announce:{module:()=>I(()=>import("./icons/announcement-line-MSlAmDH1.js"),[],import.meta.url),rtl:!0},alert:()=>I(()=>import("./icons/alert-line-zyc6hy8V.js"),[],import.meta.url),round:()=>I(()=>import("./icons/round-fill-a0rplSmV.js"),[],import.meta.url),"arrow-up-circle":()=>I(()=>import("./icons/arrow-up-circle-line-e3kZqEZN.js"),[],import.meta.url),"arrow-down-circle":()=>I(()=>import("./icons/arrow-down-circle-line-mpqFtRtO.js"),[],import.meta.url),clipboard:{module:()=>I(()=>import("./icons/clipboard-line-9F_Yeo71.js"),[],import.meta.url),rtl:!0},"account-edit":()=>I(()=>import("./icons/user-edit-line-9VnWCh0X.js"),[],import.meta.url),"account-warning":()=>I(()=>import("./icons/user-warning-line-gL3RGb1N.js"),[],import.meta.url),keyboard:()=>I(()=>import("./icons/keyboard-line-10AZQcVH.js"),[],import.meta.url),cloud:()=>I(()=>import("./icons/cloud-line-abe0HgFS.js"),[],import.meta.url),month:{module:()=>I(()=>import("./icons/calendar-month-line-VoXZVWAe.js"),[],import.meta.url),rtl:!0},media:()=>I(()=>import("./icons/photo-album-line--GdJqjfq.js"),[],import.meta.url),speak:()=>I(()=>import("./icons/radar-line-ndI8IhOG.js"),[],import.meta.url),building:()=>I(()=>import("./icons/building-5-line-ew7lu83B.js"),[],import.meta.url),history2:{module:()=>I(()=>import("./icons/history-2-line-3yIVzoWo.js"),[],import.meta.url),rtl:!0},document:()=>I(()=>import("./icons/document-line--D6ooZg1.js"),[],import.meta.url),"arrows-right":{module:()=>I(()=>import("./icons/arrows-right-line-HF4HILdT.js"),[],import.meta.url),rtl:!0},code:()=>I(()=>import("./icons/code-line-h4RWLaak.js"),[],import.meta.url),copy:()=>I(()=>import("./icons/copy-2-line-mPSDKieb.js"),[],import.meta.url),quote:{module:()=>I(()=>import("./icons/quote-left-line-NQzeELMO.js"),[],import.meta.url),rtl:!0},settings:()=>I(()=>import("./icons/settings-6-line-ZgCBilgF.js"),[],import.meta.url),"heart-break":()=>I(()=>import("./icons/heart-crack-line-P3DoKfTT.js"),[],import.meta.url),"user-x":()=>I(()=>import("./icons/user-x-line-zIdph-gu.js"),[],import.meta.url),minimize:()=>I(()=>import("./icons/arrows-down-line-ovOF9r0o.js"),[],import.meta.url)},qa={s:12,m:16,l:20,xl:24,xxl:32},qo={},Ga=ma(function({width:e,height:t,body:n,rotate:r,flip:o}){return s("svg",{viewBox:`0 0 ${e} ${t}`,dangerouslySetInnerHTML:{__html:n},style:{transform:`${r?`rotate(${r})`:""} ${o?"scaleX(-1)":""}`}})},{isShallowEqual:!0,maxSize:Object.keys(Zi).length,matchesArg:(e,t)=>e.icon===t.icon&&e.body===t.body});function H({icon:e,size:t="m",alt:n,title:r,class:o="",style:i={}}){if(!e)return null;const a=qa[t];let u=Zi[e];if(!u)return null;let c,l,f=!1;Array.isArray(u)?[u,c,l]=u:typeof u=="object"&&({rotate:c,flip:l,rtl:f}=u,u=u.module);const[d,p]=te(qo[e]),m=j(e);return se(()=>{d&&m.current===e||((async()=>{const h=await u();p(h.default),qo[e]=h.default})(),m.current=e)},[e]),s("span",{class:`icon ${o} ${f?"rtl-flip":""}`,title:r||n,style:{width:`${a}px`,height:`${a}px`,...i},"data-icon":e,children:d&&s(Ga,{icon:e,width:d.width,height:d.height,body:d.body,rotate:c,flip:l})})}function Xa(e,t=[]){!e||typeof e!="function"||se(()=>{const n=new CloseWatcher;return n.addEventListener("close",e),()=>{n.destroy()}},t)}const Ja=window.CloseWatcher?Xa:()=>{},Qa=document.getElementById("modal-container");function Zr({children:e,onClose:t,onClick:n,class:r,minimized:o}){if(!e)return null;const i=j();se(()=>{let l=setTimeout(()=>{var d;const f=(d=i.current)==null?void 0:d.querySelector('[tabindex="-1"]');f&&f.focus()},100);return()=>clearTimeout(l)},[]);const a=window.CloseWatcher,u=Nt("esc",()=>{setTimeout(()=>{t==null||t()},0)},{enabled:!a&&!!t,keydown:!1,keyup:!0},[t]);Ja(t,[t]),se(()=>{const l=document.querySelectorAll(".deck-container");if(o){const f=l[l.length-1];f&&f.tabIndex===-1&&f.focus()}else e?l.forEach(f=>{f.setAttribute("inert","")}):l.forEach(f=>{f.removeAttribute("inert")});return()=>{l.forEach(f=>{f.removeAttribute("inert")})}},[e,o]);const c=s("div",{ref:l=>{var f;i.current=l,u.current=((f=l==null?void 0:l.querySelector)==null?void 0:f.call(l,'[tabindex="-1"]'))||l},className:r,onClick:l=>{n==null||n(l),l.target===l.currentTarget&&(t==null||t(l))},tabIndex:o?0:"-1",inert:o,onFocus:l=>{var f,d;try{if(l.target===l.currentTarget){const p=(f=i.current)==null?void 0:f.querySelector('[tabindex="-1"]'),m=!!p&&((d=getComputedStyle(p))==null?void 0:d.pointerEvents)!=="none";p&&m&&p.focus()}}catch{}},children:e});return Gn(c,Qa)}var go={exports:{}},ec="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",tc=ec;var nc=tc;function Yi(){}function qi(){}qi.resetWarningCache=Yi;var rc=function(){function e(r,o,i,a,u,c){if(c!==nc){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:qi,resetWarningCache:Yi};return n.PropTypes=n,n};var vf=go.exports;if(0)var yf,_f;else go.exports=rc();var G=go.exports;const vo=e=>!!e&&e[0]==="o",Yr=ga||(e=>e());const mn=(e,t)=>e===!0||!!(e&&e[t]),Fe=(e,t)=>typeof e=="function"?e(t):e,oc="_szhsinMenu",ic=e=>e[oc];const Wt=(e,t)=>(t&&Object.keys(t).forEach(n=>{const r=e[n],o=t[n];typeof o=="function"&&r?e[n]=(...i)=>{o(...i),r(...i)}:e[n]=o}),e),sc=e=>{if(typeof e!="string")return{top:0,right:0,bottom:0,left:0};const t=e.trim().split(/\s+/,4).map(parseFloat),n=isNaN(t[0])?0:t[0],r=isNaN(t[1])?n:t[1];return{top:n,right:r,bottom:isNaN(t[2])?n:t[2],left:isNaN(t[3])?r:t[3]}},Sr=e=>{for(;e;){if(e=e.parentNode,!e||e===document.body||!e.parentNode)return;const{overflow:t,overflowX:n,overflowY:r}=getComputedStyle(e);if(/auto|scroll|overlay|hidden/.test(t+r+n))return e}};function ur(e,t){return{"aria-disabled":e||void 0,tabIndex:t?0:-1}}function Go(e,t){for(let n=0;n({[e?`${e}ClassName`:"className"]:G.oneOfType([G.string,G.func])}),cc={className:G.string,...ac("menu"),arrowProps:G.object,focusProps:G.object,menuStyle:G.object,arrow:G.bool,setDownOverflow:G.bool,gap:G.number,shift:G.number,align:G.oneOf(["start","center","end"]),direction:G.oneOf(["left","right","top","bottom"]),position:G.oneOf(["auto","anchor","initial"]),overflow:G.oneOf(["auto","visible","hidden"])},bf={...cc,containerProps:G.object,initialMounted:G.bool,unmountOnClose:G.bool,transition:G.oneOfType([G.bool,G.exact({open:G.bool,close:G.bool,item:G.bool})]),transitionTimeout:G.number,boundingBoxRef:G.object,boundingBoxPadding:G.string,reposition:G.oneOf(["auto","initial"]),repositionFlag:G.oneOfType([G.string,G.number]),viewScroll:G.oneOf(["auto","close","initial"]),submenuOpenDelay:G.number,submenuCloseDelay:G.number,portal:G.oneOfType([G.bool,G.exact({target:G.object,stablePosition:G.bool})]),theming:G.string,onItemClick:G.func},wf={instanceRef:G.oneOfType([G.object,G.func]),onMenuChange:G.func},Je=({block:e,element:t,modifiers:n,className:r})=>fe(()=>{const o=t?`${e}__${t}`:e;let i=o;n&&Object.keys(n).forEach(u=>{const c=n[u];c&&(i+=` ${o}--${c===!0?u:`${u}-${c}`}`)});let a=typeof r=="function"?r(n):r;return typeof a=="string"&&(a=a.trim(),a&&(i+=` ${a}`)),i},[e,t,n,r]),lc="szh-menu-container",Xe="szh-menu";const uc="arrow",yo="item",dc="divider",fc="header",hc="group",pc="submenu";const Gi=ot(),_o=ot({}),Jn=ot({}),bo=ot({}),mc=ot({}),dr=ot({}),Oe=Object.freeze({ENTER:"Enter",ESC:"Escape",SPACE:" ",HOME:"Home",END:"End",LEFT:"ArrowLeft",RIGHT:"ArrowRight",UP:"ArrowUp",DOWN:"ArrowDown"}),Me=Object.freeze({RESET:0,SET:1,UNSET:2,INCREASE:3,DECREASE:4,FIRST:5,LAST:6,SET_INDEX:7}),gn=Object.freeze({CLICK:"click",CANCEL:"cancel",BLUR:"blur",SCROLL:"scroll"}),zt=Object.freeze({FIRST:"first",LAST:"last"}),gc=Object.freeze({entering:"opening",entered:"open",exiting:"closing",exited:"closed"}),kr="absolute",wo="presentation",fr="menuitem",Xo={"aria-hidden":!0,role:fr};const vc=({className:e,containerRef:t,containerProps:n,children:r,isOpen:o,theming:i,transition:a,onClose:u})=>{const c=mn(a,"item");return s("div",{...Wt({onKeyDown:({key:d})=>{switch(d){case Oe.ESC:Fe(u,{key:d,reason:gn.CANCEL});break}},onBlur:d=>{o&&!d.currentTarget.contains(d.relatedTarget)&&Fe(u,{reason:gn.BLUR})}},n),className:Je({block:lc,modifiers:fe(()=>({theme:i,itemTransition:c}),[i,c]),className:e}),style:{position:"absolute",...n==null?void 0:n.style},ref:t,children:r})},yc=()=>{let e,t=0;return{toggle:n=>{n?t++:t--,t=Math.max(t,0)},on:(n,r,o)=>{t?e||(e=setTimeout(()=>{e=0,r()},n)):o==null||o()},off:()=>{e&&(clearTimeout(e),e=0)}}},_c=(e,t)=>{const[n,r]=te(),i=j({items:[],hoverIndex:-1,sorted:!1}).current,a=Ie((c,l)=>{const{items:f}=i;if(!c)i.items=[];else if(l)f.push(c);else{const d=f.indexOf(c);d>-1&&(f.splice(d,1),c.contains(document.activeElement)&&(t.current.focus(),r()))}i.hoverIndex=-1,i.sorted=!1},[i,t]),u=Ie((c,l,f)=>{const{items:d,hoverIndex:p}=i,m=()=>{if(i.sorted)return;const y=e.current.querySelectorAll(".szh-menu__item");d.sort((T,_)=>Go(y,T)-Go(y,_)),i.sorted=!0};let h=-1,g;switch(c){case Me.RESET:break;case Me.SET:g=l;break;case Me.UNSET:g=y=>y===l?void 0:y;break;case Me.FIRST:m(),h=0,g=d[h];break;case Me.LAST:m(),h=d.length-1,g=d[h];break;case Me.SET_INDEX:m(),h=f,g=d[h];break;case Me.INCREASE:m(),h=p,h<0&&(h=d.indexOf(l)),h++,h>=d.length&&(h=0),g=d[h];break;case Me.DECREASE:m(),h=p,h<0&&(h=d.indexOf(l)),h--,h<0&&(h=d.length-1),g=d[h];break;default:}g||(h=-1),r(g),i.hoverIndex=h},[e,i]);return{hoverItem:n,dispatch:u,updateItems:a}},Jo=(e,t)=>Math.round(e)===t?e:t,Xi=e=>{const t=e.getBoundingClientRect();return t.width=Jo(t.width,e.offsetWidth),t.height=Jo(t.height,e.offsetHeight),t},bc=(e,t,n,r)=>{const o=Xi(t.current),i=e.current.getBoundingClientRect(),a=n===window?{left:0,top:0,right:document.documentElement.clientWidth,bottom:window.innerHeight}:n.getBoundingClientRect(),u=sc(r),c=h=>h+i.left-a.left-u.left,l=h=>h+i.left+o.width-a.right+u.right,f=h=>h+i.top-a.top-u.top,d=h=>h+i.top+o.height-a.bottom+u.bottom;return{menuRect:o,containerRect:i,getLeftOverflow:c,getRightOverflow:l,getTopOverflow:f,getBottomOverflow:d,confineHorizontally:h=>{let g=c(h);if(g<0)h-=g;else{const y=l(h);y>0&&(h-=y,g=c(h),g<0&&(h-=g))}return h},confineVertically:h=>{let g=f(h);if(g<0)h-=g;else{const y=d(h);y>0&&(h-=y,g=f(h),g<0&&(h-=g))}return h}}},wc=({arrowRef:e,menuY:t,anchorRect:n,containerRect:r,menuRect:o})=>{let i=n.top-r.top-t+n.height/2;const a=e.current.offsetHeight*1.25;return i=Math.max(a,i),i=Math.min(i,o.height-a),i},Tc=({anchorRect:e,containerRect:t,menuRect:n,placeLeftorRightY:r,placeLeftX:o,placeRightX:i,getLeftOverflow:a,getRightOverflow:u,confineHorizontally:c,confineVertically:l,arrowRef:f,arrow:d,direction:p,position:m})=>{let h=p,g=r;m!=="initial"&&(g=l(g),m==="anchor"&&(g=Math.min(g,e.bottom-t.top),g=Math.max(g,e.top-t.top-n.height)));let y,T,_;return h==="left"?(y=o,m!=="initial"&&(T=a(y),T<0&&(_=u(i),(_<=0||-T>_)&&(y=i,h="right")))):(y=i,m!=="initial"&&(_=u(y),_>0&&(T=a(o),(T>=0||-T<_)&&(y=o,h="left")))),m==="auto"&&(y=c(y)),{arrowY:d?wc({menuY:g,arrowRef:f,anchorRect:e,containerRect:t,menuRect:n}):void 0,x:y,y:g,computedDirection:h}},Ec=({arrowRef:e,menuX:t,anchorRect:n,containerRect:r,menuRect:o})=>{let i=n.left-r.left-t+n.width/2;const a=e.current.offsetWidth*1.25;return i=Math.max(a,i),i=Math.min(i,o.width-a),i},xc=({anchorRect:e,containerRect:t,menuRect:n,placeToporBottomX:r,placeTopY:o,placeBottomY:i,getTopOverflow:a,getBottomOverflow:u,confineHorizontally:c,confineVertically:l,arrowRef:f,arrow:d,direction:p,position:m})=>{let h=p==="top"?"top":"bottom",g=r;m!=="initial"&&(g=c(g),m==="anchor"&&(g=Math.min(g,e.right-t.left),g=Math.max(g,e.left-t.left-n.width)));let y,T,_;return h==="top"?(y=o,m!=="initial"&&(T=a(y),T<0&&(_=u(i),(_<=0||-T>_)&&(y=i,h="bottom")))):(y=i,m!=="initial"&&(_=u(y),_>0&&(T=a(o),(T>=0||-T<_)&&(y=o,h="top")))),m==="auto"&&(y=l(y)),{arrowX:d?Ec({menuX:g,arrowRef:f,anchorRect:e,containerRect:t,menuRect:n}):void 0,x:g,y,computedDirection:h}},Mc=({arrow:e,align:t,direction:n,gap:r,shift:o,position:i,anchorRect:a,arrowRef:u,positionHelpers:c})=>{const{menuRect:l,containerRect:f}=c,d=n==="left"||n==="right";let p=d?r:o,m=d?o:r;if(e){const b=u.current;d?p+=b.offsetWidth:m+=b.offsetHeight}const h=a.left-f.left-l.width-p,g=a.right-f.left+p,y=a.top-f.top-l.height-m,T=a.bottom-f.top+m;let _,E;t==="end"?(_=a.right-f.left-l.width,E=a.bottom-f.top-l.height):t==="center"?(_=a.left-f.left-(l.width-a.width)/2,E=a.top-f.top-(l.height-a.height)/2):(_=a.left-f.left,E=a.top-f.top),_+=p,E+=m;const w={...c,anchorRect:a,placeLeftX:h,placeRightX:g,placeLeftorRightY:E,placeTopY:y,placeBottomY:T,placeToporBottomX:_,arrowRef:u,arrow:e,direction:n,position:i};switch(n){case"left":case"right":return Tc(w);case"top":case"bottom":default:return xc(w)}},Ht=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?pn:se;function Qo(e,t){typeof e=="function"?e(t):e.current=t}const Kt=(e,t)=>fe(()=>e?t?n=>{Qo(e,n),Qo(t,n)}:e:t,[e,t]),ei=-9999,Ji=({ariaLabel:e,menuClassName:t,menuStyle:n,arrow:r,arrowProps:o={},anchorPoint:i,anchorRef:a,containerRef:u,containerProps:c,focusProps:l,externalRef:f,parentScrollingRef:d,align:p="start",direction:m="bottom",position:h="auto",overflow:g="visible",setDownOverflow:y,repositionFlag:T,captureFocus:_=!0,state:E,endTransition:w,isDisabled:b,menuItemFocus:M,gap:A=0,shift:O=0,children:P,onClose:x,...S})=>{const[V,B]=te({x:ei,y:ei}),[D,$]=te({}),[k,R]=te(),[L,z]=te(m),[N]=te(yc),[C,K]=Di(re=>re+1,1),{transition:Z,boundingBoxRef:ne,boundingBoxPadding:le,rootMenuRef:Te,rootAnchorRef:he,scrollNodesRef:ve,reposition:ye,viewScroll:ie,submenuCloseDelay:de}=De(dr),{submenuCtx:q,reposSubmenu:oe=T}=De(Jn),Ee=j(null),ct=j(),Y=j(),ge=j(!1),{hoverItem:ee,dispatch:J,updateItems:pe}=_c(Ee,ct),ue=vo(E),ae=mn(Z,"open"),ze=mn(Z,"close"),Le=ve.current,Ve=re=>{switch(re.key){case Oe.HOME:J(Me.FIRST);break;case Oe.END:J(Me.LAST);break;case Oe.UP:J(Me.DECREASE,ee);break;case Oe.DOWN:J(Me.INCREASE,ee);break;case Oe.SPACE:re.target&&re.target.className.indexOf(Xe)!==-1&&re.preventDefault();return;default:return}re.preventDefault(),re.stopPropagation()},Se=()=>{E==="closing"&&R(),Fe(w)},Ae=re=>{re.stopPropagation(),N.on(de,()=>{J(Me.RESET),ct.current.focus()})},Re=re=>{re.target===re.currentTarget&&N.off()},_e=Ie(re=>{var be;const He=a?(be=a.current)==null?void 0:be.getBoundingClientRect():i?{left:i.x,right:i.x,top:i.y,bottom:i.y,width:0,height:0}:null;if(!He)return;Le.menu||(Le.menu=(ne?ne.current:Sr(Te.current))||window);const Ne=bc(u,Ee,Le.menu,le);let{arrowX:xe,arrowY:vt,x:En,y:je,computedDirection:xn}=Mc({arrow:r,align:p,direction:m,gap:A,shift:O,position:h,anchorRect:He,arrowRef:Y,positionHelpers:Ne});const{menuRect:Ke}=Ne,dt=Ke.height;if(!re&&g!=="visible"){const{getTopOverflow:pr,getBottomOverflow:mr}=Ne;let me,yt;const Gt=mr(je);if(Gt>0)me=dt-Gt,yt=Gt;else{const _t=pr(je);_t<0&&(me=dt+_t,yt=0-_t,me>=0&&(je-=_t))}me>=0&&R({height:me,overflowAmt:yt})}r&&$({x:xe,y:vt}),B({x:En,y:je}),z(xn)},[r,p,le,m,A,O,h,g,i,a,u,ne,Te,Le]);Ht(()=>{ue&&(_e(),ge.current&&K()),ge.current=ue},[ue,_e,oe]),Ht(()=>{k&&!y&&(Ee.current.scrollTop=0)},[k,y]),Ht(()=>pe,[pe]),se(()=>{let{menu:re}=Le;if(!ue||!re)return;if(re=re.addEventListener?re:window,!Le.anchors){Le.anchors=[];let xe=Sr(he&&he.current);for(;xe&&xe!==re;)Le.anchors.push(xe),xe=Sr(xe)}let be=ie;if(Le.anchors.length&&be==="initial"&&(be="auto"),be==="initial")return;const He=()=>{be==="auto"?Yr(()=>_e(!0)):Fe(x,{reason:gn.SCROLL})},Ne=Le.anchors.concat(ie!=="initial"?re:[]);return Ne.forEach(xe=>xe.addEventListener("scroll",He)),()=>Ne.forEach(xe=>xe.removeEventListener("scroll",He))},[he,Le,ue,x,ie,_e]);const Zt=!!k&&k.overflowAmt>0;se(()=>{if(Zt||!ue||!d)return;const re=()=>Yr(_e),be=d.current;return be.addEventListener("scroll",re),()=>be.removeEventListener("scroll",re)},[ue,Zt,d,_e]),se(()=>{if(!ue||typeof ResizeObserver!="function"||ye==="initial")return;const re=[],be=new ResizeObserver(xe=>xe.forEach(({target:vt})=>{re.indexOf(vt)<0?re.push(vt):va(()=>{_e(),K()})})),He={box:"border-box"};be.observe(Ee.current,He);const Ne=a==null?void 0:a.current;return Ne&&be.observe(Ne,He),()=>be.disconnect()},[ue,ye,a,_e]),se(()=>{if(!ue){J(Me.RESET),ze||R();return}const{position:re,alwaysUpdate:be}=M||{},He=()=>{re===zt.FIRST?J(Me.FIRST):re===zt.LAST?J(Me.LAST):re>=-1&&J(Me.SET_INDEX,void 0,re)};if(be)He();else if(_){const Ne=setTimeout(()=>{const xe=Ee.current;xe&&!xe.contains(document.activeElement)&&(ct.current.focus(),He())},ae?170:100);return()=>clearTimeout(Ne)}},[ue,ae,ze,_,M,J]);const It=fe(()=>({isParentOpen:ue,submenuCtx:N,dispatch:J,updateItems:pe}),[ue,N,J,pe]);let $t,Yt;k&&(y?Yt=k.overflowAmt:$t=k.height);const we=fe(()=>({reposSubmenu:C,submenuCtx:N,overflow:g,overflowAmt:Yt,parentMenuRef:Ee,parentDir:L}),[C,N,g,Yt,L]),qt=$t>=0?{maxHeight:$t,overflow:g}:void 0,lt=fe(()=>({state:E,align:p,dir:L}),[E,p,L]),Qe=fe(()=>({dir:L}),[L]),hr=Je({block:Xe,element:uc,modifiers:Qe,className:o.className}),ut=s("ul",{role:"menu","aria-label":e,...ur(b),...Wt({onPointerEnter:q==null?void 0:q.off,onPointerMove:Ae,onPointerLeave:Re,onKeyDown:Ve,onAnimationEnd:Se},S),ref:Kt(f,Ee),className:Je({block:Xe,modifiers:lt,className:t}),style:{...n,...qt,margin:0,display:E==="closed"?"none":void 0,position:kr,left:V.x,top:V.y},children:[s("li",{tabIndex:-1,style:{position:kr,left:0,top:0,display:"block",outline:"none"},ref:ct,...Xo,...l}),r&&s("li",{...Xo,...o,className:hr,style:{display:"block",position:kr,left:D.x,top:D.y,...o.style},ref:Y}),s(Jn.Provider,{value:we,children:s(_o.Provider,{value:It,children:s(Gi.Provider,{value:ee,children:Fe(P,lt)})})})]});return c?s(vc,{...c,isOpen:ue,children:ut}):ut},Qi=kt(function({"aria-label":t,className:n,containerProps:r,initialMounted:o,unmountOnClose:i,transition:a,transitionTimeout:u,boundingBoxRef:c,boundingBoxPadding:l,reposition:f="auto",submenuOpenDelay:d=300,submenuCloseDelay:p=150,viewScroll:m="initial",portal:h,theming:g,onItemClick:y,...T},_){const E=j(null),w=j({}),{anchorRef:b,state:M,onClose:A}=T,O=fe(()=>({initialMounted:o,unmountOnClose:i,transition:a,transitionTimeout:u,boundingBoxRef:c,boundingBoxPadding:l,rootMenuRef:E,rootAnchorRef:b,scrollNodesRef:w,reposition:f,viewScroll:m,submenuOpenDelay:d,submenuCloseDelay:p}),[o,i,a,u,b,c,l,f,m,d,p]),P=fe(()=>({handleClick(S,V){S.stopPropagation||Fe(y,S);let B=S.keepOpen;B===void 0&&(B=V&&S.key===Oe.SPACE),B||Fe(A,{value:S.value,key:S.key,reason:gn.CLICK})},handleClose(S){Fe(A,{key:S,reason:gn.CLICK})}}),[y,A]);if(!M)return null;const x=s(dr.Provider,{value:O,children:s(bo.Provider,{value:P,children:s(Ji,{...T,ariaLabel:t||"Menu",externalRef:_,containerRef:E,containerProps:{className:n,containerRef:E,containerProps:r,theming:g,transition:a,onClose:A}})})});return h===!0&&typeof document<"u"?Gn(x,document.body):h?h.target?Gn(x,h.target):h.stablePosition?null:x:x}),qr=0,Gr=1,Qn=2,er=3,tr=4,Sc=5,es=6,kc=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],ts=e=>({_s:e,status:kc[e],isEnter:etr}),Xr=e=>e?es:Sc,Ac=(e,t)=>{switch(e){case Gr:case qr:return Qn;case tr:case er:return Xr(t)}},Ic=e=>typeof e=="object"?[e.enter,e.exit]:[e,e],ti=(e,t,n,r,o)=>{clearTimeout(r.current);const i=ts(e);t(i),n.current=i,o&&o({current:i})},$c=({enter:e=!0,exit:t=!0,preEnter:n,preExit:r,timeout:o,initialEntered:i,mountOnEnter:a,unmountOnExit:u,onStateChange:c}={})=>{const[l,f]=te(()=>ts(i?Qn:Xr(a))),d=j(l),p=j(),[m,h]=Ic(o),g=Ie(()=>{const T=Ac(d.current._s,u);T&&ti(T,f,d,p,c)},[c,u]),y=Ie(T=>{const _=w=>{switch(ti(w,f,d,p,c),w){case Gr:m>=0&&(p.current=setTimeout(g,m));break;case tr:h>=0&&(p.current=setTimeout(g,h));break;case qr:case er:p.current=setTimeout(()=>_(w+1),0);break}},E=d.current.isEnter;typeof T!="boolean"&&(T=!E),T?!E&&_(e?n?qr:Gr:Qn):E&&_(t?r?er:tr:Xr(u))},[g,c,e,t,n,r,m,h,u]);return se(()=>()=>clearTimeout(p.current),[]),[l,y,g]};const Lc=({initialOpen:e,initialMounted:t,unmountOnClose:n,transition:r,transitionTimeout:o=500}={})=>{const[{status:i},a,u]=$c({initialEntered:e,mountOnEnter:!t,unmountOnExit:n,timeout:o,enter:mn(r,"open"),exit:mn(r,"close")});return[{state:gc[i],endTransition:u},a]},ns=e=>{const[t,n]=Lc(e),[r,o]=te(),i=(a,u)=>{o({position:a,alwaysUpdate:u}),n(!0)};return[{menuItemFocus:r,...t},n,i]},Cc=(e,t)=>{const[n]=te({});return{onMouseDown:()=>{n.v=e&&e!=="closed"},onClick:r=>n.v?n.v=!1:t(!0,r)}},rs=(e,t)=>{const n=j(t);se(()=>{n.current!==t&&Fe(e,{open:t}),n.current=t},[e,t])},Pc=kt(function({"aria-label":t,captureFocus:n,initialOpen:r,menuButton:o,instanceRef:i,onMenuChange:a,...u},c){const[l,f,d]=ns(u),{state:p}=l,m=vo(p),h=j(null),g=Cc(p,(b,M)=>d(M.detail?void 0:zt.FIRST)),y=Ie(b=>{f(!1),b.key&&h.current.focus()},[f]),T=b=>{switch(b.key){case Oe.UP:d(zt.LAST);break;case Oe.DOWN:d(zt.FIRST);break;default:return}b.preventDefault()},_=Fe(o,{open:m});if(!_||!_.type)throw new Error("Menu requires a menuButton prop.");const E={ref:Kt(_.ref,h),...Wt({onKeyDown:T,...g},_.props)};ic(_.type)==="MenuButton"&&(E.isOpen=m);const w=Ri(_,E);return rs(a,m),Ni(i,()=>({openMenu:d,closeMenu:()=>f(!1)})),s(U,{children:[w,s(Qi,{...u,...l,"aria-label":t||(typeof _.props.children=="string"?_.props.children:"Menu"),anchorRef:h,ref:c,onClose:y})]})}),To=(e,t)=>{const n=it(t),r=kt((o,i)=>{const a=j(null);return s(n,{...o,itemRef:a,externalRef:i,isHovering:De(Gi)===a.current})});return r.displayName=`WithHovering(${e})`,r},os=(e,t,n)=>{Ht(()=>{if(e)return;const r=t.current;return n(r,!0),()=>{n(r)}},[e,t,n])},Oc=To("SubMenu",function({"aria-label":t,className:n,disabled:r,direction:o,label:i,openTrigger:a,onMenuChange:u,isHovering:c,instanceRef:l,itemRef:f,captureFocus:d,repositionFlag:p,itemProps:m={},...h}){const g=De(dr),{rootMenuRef:y,submenuOpenDelay:T,submenuCloseDelay:_}=g,{parentMenuRef:E,parentDir:w,overflow:b}=De(Jn),{isParentOpen:M,submenuCtx:A,dispatch:O,updateItems:P}=De(_o),x=b!=="visible",[S,V,B]=ns(g),{state:D}=S,$=!!r,k=vo(D),R=j(null),[L]=te({v:0}),z=()=>{A.off(),L.v&&(clearTimeout(L.v),L.v=0)},N=(...oe)=>{z(),C(),!$&&B(...oe)},C=()=>!c&&!$&&O(Me.SET,f.current),K=oe=>{C(),a||(L.v=setTimeout(()=>Yr(N),Math.max(oe,0)))},Z=oe=>{$||(oe.stopPropagation(),!(L.v||k)&&A.on(_,()=>K(T-_),()=>K(T)))},ne=()=>{z(),k||O(Me.UNSET,f.current)},le=oe=>{if(c)switch(oe.key){case Oe.ENTER:oe.preventDefault();case Oe.SPACE:case Oe.RIGHT:a!=="none"&&N(zt.FIRST)}},Te=oe=>{let Ee=!1;switch(oe.key){case Oe.LEFT:k&&(f.current.focus(),V(!1),Ee=!0);break;case Oe.RIGHT:k||(Ee=!0);break}Ee&&(oe.preventDefault(),oe.stopPropagation())};os($,f,P),rs(u,k),se(()=>A.toggle(k),[A,k]),se(()=>()=>clearTimeout(L.v),[L]),se(()=>{c&&M?f.current.focus():V(!1)},[c,M,V,f]),Ni(l,()=>({openMenu:(...oe)=>{M&&N(...oe)},closeMenu:()=>{k&&(f.current.focus(),V(!1))}}));const he=fe(()=>({open:k,hover:c,disabled:$,submenu:!0}),[k,c,$]),{ref:ve,className:ye,...ie}=m,de=Wt({onPointerEnter:A.off,onPointerMove:Z,onPointerLeave:ne,onKeyDown:le,onClick:()=>a!=="none"&&N()},ie),q=()=>{const oe=s(Ji,{...h,...S,ariaLabel:t||(typeof i=="string"?i:"Submenu"),anchorRef:f,containerRef:x?y:R,direction:o||(w==="right"||w==="left"?w:"right"),parentScrollingRef:x&&E,isDisabled:$}),Ee=y.current;return x&&Ee?Gn(oe,Ee):oe};return s("li",{className:Je({block:Xe,element:pc,className:n}),style:{position:"relative"},role:wo,ref:R,onKeyDown:Te,children:[s("div",{role:fr,"aria-haspopup":!0,"aria-expanded":k,...ur($,c),...de,ref:Kt(ve,f),className:Je({block:Xe,element:yo,modifiers:he,className:ye}),children:fe(()=>Fe(i,he),[i,he])}),D&&q()]})}),is=(e,t,n,r)=>{const{submenuCloseDelay:o}=De(dr),{isParentOpen:i,submenuCtx:a,dispatch:u,updateItems:c}=De(_o),l=()=>{!n&&!r&&u(Me.SET,e.current)},f=()=>{!r&&u(Me.UNSET,e.current)},d=h=>{n&&!h.currentTarget.contains(h.relatedTarget)&&f()},p=h=>{r||(h.stopPropagation(),a.on(o,l,l))},m=(h,g)=>{a.off(),!g&&f()};return os(r,e,c),se(()=>{n&&i&&t.current&&t.current.focus()},[t,n,i]),{setHover:l,onBlur:d,onPointerMove:p,onPointerLeave:m}},ke=To("MenuItem",function({className:t,value:n,href:r,type:o,checked:i,disabled:a,children:u,onClick:c,isHovering:l,itemRef:f,externalRef:d,...p}){const m=!!a,{setHover:h,...g}=is(f,f,l,m),y=De(bo),T=De(mc),_=o==="radio",E=o==="checkbox",w=!!r&&!m&&!_&&!E,b=_?T.value===n:E?!!i:!1,M=S=>{if(m){S.stopPropagation(),S.preventDefault();return}const V={value:n,syntheticEvent:S};S.key!==void 0&&(V.key=S.key),E&&(V.checked=!b),_&&(V.name=T.name),Fe(c,V),_&&Fe(T.onRadioChange,V),y.handleClick(V,E||_)},A=S=>{if(l)switch(S.key){case Oe.ENTER:S.preventDefault();case Oe.SPACE:w?f.current.click():M(S)}},O=fe(()=>({type:o,disabled:m,hover:l,checked:b,anchor:w}),[o,m,l,b,w]),P=Wt({...g,onPointerDown:h,onKeyDown:A,onClick:M},p),x={role:_?"menuitemradio":E?"menuitemcheckbox":fr,"aria-checked":_||E?b:void 0,...ur(m,l),...P,ref:Kt(d,f),className:Je({block:Xe,element:yo,modifiers:O,className:t}),children:fe(()=>Fe(u,O),[u,O])};return w?s("li",{role:wo,children:s("a",{href:r,...x})}):s("li",{...x})}),Dc=To("FocusableItem",function({className:t,disabled:n,children:r,isHovering:o,itemRef:i,externalRef:a,...u}){const c=!!n,l=j(null),{setHover:f,onPointerLeave:d,...p}=is(i,l,o,c),{handleClose:m}=De(bo),h=fe(()=>({disabled:c,hover:o,focusable:!0}),[c,o]),g=fe(()=>Fe(r,{...h,ref:l,closeMenu:m}),[r,h,m]),y=Wt({...p,onPointerLeave:T=>d(T,!0),onFocus:f},u);return s("li",{role:fr,...ur(c),...y,ref:Kt(a,i),className:Je({block:Xe,element:yo,modifiers:h,className:t}),children:g})}),tn=it(kt(function({className:t,...n},r){return s("li",{role:"separator",...n,ref:r,className:Je({block:Xe,element:dc,className:t})})})),Tf=it(kt(function({className:t,...n},r){return s("li",{role:wo,...n,ref:r,className:Je({block:Xe,element:fc,className:t})})})),Ef=kt(function({className:t,style:n,takeOverflow:r,...o},i){const a=j(null),[u,c]=te(),{overflow:l,overflowAmt:f}=De(Jn);return Ht(()=>{let d;r&&f>=0&&(d=Xi(a.current).height-f,d<0&&(d=0)),c(d>=0?{maxHeight:d,overflow:l}:void 0)},[r,l,f]),Ht(()=>{u&&(a.current.scrollTop=0)},[u]),s("div",{...o,ref:Kt(i,a),className:Je({block:Xe,element:hc,className:t}),style:{...n,...u}})});const ni={s:16,m:20,l:24,xl:32,xxl:50,xxxl:64},nn={},sn=window.OffscreenCanvas?new OffscreenCanvas(1,1):document.createElement("canvas"),Kn=sn.getContext("2d",{willReadFrequently:!0});Kn.imageSmoothingEnabled=!1;function Rc({url:e,size:t,alt:n="",squircle:r,...o}){t=ni[t]||t||ni.m;const i=j(),a=/missing\.png$/.test(e);return s("span",{ref:i,class:`avatar ${r?"squircle":""} ${nn[e]?"has-alpha":""}`,style:{width:t,height:t},title:n,...o,children:!!e&&s("img",{src:e,width:t,height:t,alt:n,loading:"lazy",decoding:"async",crossOrigin:nn[e]===void 0&&!a?"anonymous":void 0,onError:u=>{u.target.crossOrigin&&(u.target.crossOrigin=null,u.target.src=e)},onLoad:u=>{i.current&&(i.current.dataset.loaded=!0),nn[e]===void 0&&(a||setTimeout(()=>{try{const{width:c,height:l}=u.target;sn.width!==c&&(sn.width=c),sn.height!==l&&(sn.height=l),Kn.drawImage(u.target,0,0);const f=Kn.getImageData(0,0,c,l),d=f.data.filter((p,m)=>m%4===3&&p<=128).length/(f.data.length/4)>.1;d&&i.current.classList.add("has-alpha"),nn[e]=d,Kn.clearRect(0,0,c,l)}catch{nn[e]=!1}},1))}})})}const nt=st(Rc),jt=kt((e,t)=>{var u;let n;try{n=ya()}catch{}let r=(location.hash||"").replace(/^#/,"").trim();r===""&&(r="/");const{to:o,...i}=e;if(r&&r!=="/"&&r.includes("?")){const c=URL.parse(r,location.origin);if((u=c==null?void 0:c.searchParams)!=null&&u.size){const l=Array.from(c.searchParams.entries()).map(([f,d])=>`${f}=${encodeURIComponent(d)}`).join("&");r=c.pathname+"?"+l}}const a=r===o||decodeURIComponent(r)===o;return s("a",{ref:t,href:`#${o}`,...i,class:`${e.class||""} ${a?"is-active":""}`,onClick:c=>{var l,f,d;(f=(l=c.currentTarget)==null?void 0:l.parentNode)!=null&&f.closest("a")&&c.stopPropagation(),n&&(W.prevLocation=n),(d=e.onClick)==null||d.call(e,c)}})});let Jr=!1;const Nc=new MutationObserver(e=>{e.forEach(t=>{if(t.type==="attributes"){const{value:n}=t.target;n==="rtl"?Jr=!0:Jr=!1}})});Nc.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]});function Qr(){return Jr}const Fc=document.documentElement,Rn=getComputedStyle(Fc),zc=8;let ss=[0,0,0,0];function as(){const e=Rn.getPropertyValue("--sai-top"),t=Rn.getPropertyValue("--sai-right"),n=Rn.getPropertyValue("--sai-bottom"),r=Rn.getPropertyValue("--sai-left");ss=[Math.max(0,parseInt(e,10)),Math.max(0,parseInt(t,10)),Math.max(0,parseInt(n,10)),Math.max(0,parseInt(r,10))]}requestAnimationFrame(as);function cs(e=[]){return ss.map((n,r)=>(n||zc)+(e[r]||0)).join(" ")}CSS.supports("top: env(safe-area-inset-top)")&&window.addEventListener("resize",as,{passive:!0});function Hc(){const[e,t]=te({width:null,height:null});return pn(()=>{const n=()=>{t({width:window.innerWidth,height:window.innerHeight})};return n(),window.addEventListener("resize",n,{passive:!0}),()=>{window.removeEventListener("resize",n)}},[]),e}function ls(e){const{containerProps:t,instanceRef:n,align:r}=e,o=Hc(),i=n!=null&&n.current?n:j(),a=Qr()?r==="end"?"start":r==="start"?"end":r:r;return s(Pc,{boundingBoxPadding:cs(),repositionFlag:`${o.width}x${o.height}`,unmountOnClose:!0,...e,align:a,instanceRef:i,containerProps:{onClick:u=>{var c,l,f;u.target===u.currentTarget&&((l=(c=i.current)==null?void 0:c.closeMenu)==null||l.call(c)),(f=t==null?void 0:t.onClick)==null||f.call(t,u)},...t}})}function Vc(e){const t=j();return s(Oc,{...e,instanceRef:t,itemProps:{onPointerMove:n=>{var r,o;n.pointerType==="touch"&&((o=(r=t.current)==null?void 0:r.openMenu)==null||o.call(r))},onPointerLeave:n=>{var r,o;n.pointerType==="touch"&&((o=(r=t.current)==null?void 0:r.openMenu)==null||o.call(r))}}})}function Ar({subMenu:e=!1,confirm:t=!0,confirmLabel:n,menuItemClassName:r,menuFooter:o,menuExtras:i,...a}){const{children:u,onClick:c,...l}=a;return t?s(e?Vc:ls,{openTrigger:"clickOnly",direction:"bottom",overflow:"auto",gap:-8,shift:8,menuClassName:"menu-emphasized",...l,menuButton:e?void 0:u,label:e?u:void 0,children:[s(ke,{className:r,onClick:c,children:n}),i,o]}):e?s(ke,{...a}):c?_a(u,{onClick:c}):u}function eo({staticUrl:e,alt:t,url:n}){return s("picture",{children:[e&&s("source",{srcset:e,media:"(prefers-reduced-motion: reduce)"}),s("img",{src:n,alt:t,class:"shortcode-emoji emoji",width:"16",height:"16",loading:"lazy",decoding:"async"},t||n)]})}function jc({text:e,emojis:t}){if(!e)return"";if(!(t!=null&&t.length)||e.indexOf(":")===-1)return e;const n=new RegExp(`:(${t.map(o=>o.shortcode).join("|")}):`,"g");return e.split(n).map(o=>{const i=t.find(a=>a.shortcode===o);if(i){const{url:a,staticUrl:u}=i;return s(eo,{staticUrl:u,alt:o,url:a})}return o})}const Bt=it(jc,(e,t)=>{var n,r;return e.text===t.text&&((n=e.emojis)==null?void 0:n.length)===((r=t.emojis)==null?void 0:r.length)}),Bc=new Intl.Collator("en",{sensitivity:"base"});function Uc({account:e,instance:t,showAvatar:n,showAcct:r,short:o,external:i,onClick:a}){const{acct:u,avatar:c,avatarStatic:l,id:f,url:d,displayName:p,emojis:m,bot:h,username:g}=e,[y,T,_]=u.match(/([^@]+)(@.+)/i)||[,u];t||(t=Xn().instance);const E=g.toLowerCase().trim(),w=(p||"").toLowerCase().trim(),b=w.replace(/(\:(\w|\+|\-)+\:)(?=|[\!\.\?]|$)/g,"").replace(/\s+/g,""),M=b.replace(/[^a-z0-9@\.]/gi,""),A=!o&&(E===w||E===b||E===M||Bc.compare(E,b)===0)||M===u.toLowerCase();return s("a",{class:`name-text ${r?"show-acct":""} ${o?"short":""}`,href:d,target:i?"_blank":null,title:p?`${p} (${_?"":"@"}${u})`:`${_?"":"@"}${u}`,onClick:O=>{if(!i&&!O.shiftKey){if(O.preventDefault(),O.stopPropagation(),a)return a(O);if(O.metaKey||O.ctrlKey||O.shiftKey||O.which===2){const P=`#/${t}/a/${f}`;window.open(P,"_blank");return}W.showAccount={account:e,instance:t}}},children:[n&&s(U,{children:[s(nt,{url:l||c,squircle:h})," "]}),p&&!o?s(U,{children:[s("b",{dir:"auto",children:s(Bt,{text:p,emojis:m})}),!r&&!A&&s(U,{children:[" ",s("i",{class:"bidi-isolate",children:["@",g]})]})]}):o?s("i",{children:g}):s("b",{children:g}),r&&s(U,{children:[s("br",{}),s("i",{class:"bidi-isolate",children:[_?"":"@",T,!!_&&s("span",{class:"ib",children:_})]})]})]})}const an=it(Uc,(e,t)=>{const{account:n}=e,{account:r}=t;return(n==null?void 0:n.acct)===(r==null?void 0:r.acct)});var nr={exports:{}},xf=nr.exports;(function(e,t){(function(n,r){e.exports=r()})(bn,function(){"use strict";var n=1e3,r=6e4,o=36e5,i="millisecond",a="second",u="minute",c="hour",l="day",f="week",d="month",p="quarter",m="year",h="date",g="Invalid Date",y=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,T=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,_={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(D){var $=["th","st","nd","rd"],k=D%100;return"["+D+($[(k-20)%10]||$[k]||$[0])+"]"}},E=function(D,$,k){var R=String(D);return!R||R.length>=$?D:""+Array($+1-R.length).join(k)+D},w={s:E,z:function(D){var $=-D.utcOffset(),k=Math.abs($),R=Math.floor(k/60),L=k%60;return($<=0?"+":"-")+E(R,2,"0")+":"+E(L,2,"0")},m:function D($,k){if($.date()1)return D(N[0])}else{var C=$.name;M[C]=$,L=C}return!R&&L&&(b=L),L||!R&&b},x=function(D,$){if(O(D))return D.clone();var k=typeof $=="object"?$:{};return k.date=D,k.args=arguments,new V(k)},S=w;S.l=P,S.i=O,S.w=function(D,$){return x(D,{locale:$.$L,utc:$.$u,x:$.$x,$offset:$.$offset})};var V=function(){function D(k){this.$L=P(k.locale,null,!0),this.parse(k),this.$x=this.$x||k.x||{},this[A]=!0}var $=D.prototype;return $.parse=function(k){this.$d=function(R){var L=R.date,z=R.utc;if(L===null)return new Date(NaN);if(S.u(L))return new Date;if(L instanceof Date)return new Date(L);if(typeof L=="string"&&!/Z$/i.test(L)){var N=L.match(y);if(N){var C=N[2]-1||0,K=(N[7]||"0").substring(0,3);return z?new Date(Date.UTC(N[1],C,N[3]||1,N[4]||0,N[5]||0,N[6]||0,K)):new Date(N[1],C,N[3]||1,N[4]||0,N[5]||0,N[6]||0,K)}}return new Date(L)}(k),this.init()},$.init=function(){var k=this.$d;this.$y=k.getFullYear(),this.$M=k.getMonth(),this.$D=k.getDate(),this.$W=k.getDay(),this.$H=k.getHours(),this.$m=k.getMinutes(),this.$s=k.getSeconds(),this.$ms=k.getMilliseconds()},$.$utils=function(){return S},$.isValid=function(){return this.$d.toString()!==g},$.isSame=function(k,R){var L=x(k);return this.startOf(R)<=L&&L<=this.endOf(R)},$.isAfter=function(k,R){return x(k)new c(l).valueOf()},c.prototype.isLessThan=function(l){return this.valueOf()-1)||(y=new a.a(h)[g]()),g==="days"||g==="years"){var T=u[m][g];return d.format(T)}return u[m][g].replace("%d",y)}(this)}}}])})})(rr,rr.exports);var Kc=rr.exports;const Zc=St(Kc);var or={exports:{}},Sf=or.exports;(function(e,t){(function(n,r){e.exports=r()})(bn,function(){"use strict";var n={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};return function(r,o,i){var a=o.prototype,u=a.format;i.en.formats=n,a.format=function(c){c===void 0&&(c="YYYY-MM-DDTHH:mm:ssZ");var l=this.$locale().formats,f=function(d,p){return d.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(m,h,g){var y=g&&g.toUpperCase();return h||p[g]||n[g]||p[y].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(T,_,E){return _||E.slice(1)})})}(c,l===void 0?{}:l);return u.call(this,f)}}})})(or,or.exports);var Yc=or.exports;const qc=St(Yc);var ir={exports:{}},kf=ir.exports;(function(e,t){(function(n,r){e.exports=r()})(bn,function(){"use strict";return function(n,r,o){n=n||{};var i=r.prototype,a={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function u(l,f,d,p){return i.fromToBase(l,f,d,p)}o.en.relativeTime=a,i.fromToBase=function(l,f,d,p,m){for(var h,g,y,T=d.$locale().relativeTime||a,_=n.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],E=_.length,w=0;w0,M<=b.r||!b.r){M<=1&&w>0&&(b=_[w-1]);var A=T[b.l];m&&(M=m(""+M)),g=typeof A=="string"?A.replace("%d",M):A(M,f,b.l,y);break}}if(f)return g;var O=y?T.future:T.past;return typeof O=="function"?O(g):O.replace("%s",g)},i.to=function(l,f){return u(l,f,this,!0)},i.from=function(l,f){return u(l,f,this)};var c=function(l){return l.$u?o.utc():o()};i.toNow=function(l){return this.to(c(this),l)},i.fromNow=function(l){return this.from(c(this),l)}}})})(ir,ir.exports);var Gc=ir.exports;const Xc=St(Gc);xt.extend(Zc);xt.extend(qc);xt.extend(Xc);const Jc=new Intl.DateTimeFormat;function Mt({datetime:e,format:t}){if(!e)return null;const[n,r]=Di(c=>c+1,0),o=fe(()=>xt(e),[e]),[i,a,u]=fe(()=>{if(!o.isValid())return[""+e,"",""];let c;if(t==="micro"){const l=xt();l.diff(o,"day")<=1||l.year()===o.year()?c=o.twitter():c=Jc.format(o.toDate())}return c||(c=o.fromNow()),[c,o.toISOString(),o.format("LLLL")]},[o,t,n]);return se(()=>{if(!o.isValid())return;let c,l;function f(){l=requestAnimationFrame(()=>{r(),d()})}function d(){o.diff(xt(),"minute",!0)<1?c=setTimeout(f,1e4):o.diff(xt(),"hour",!0)<1&&(c=setTimeout(f,6e4))}return d(),()=>{clearTimeout(c),cancelAnimationFrame(l)}},[]),s("time",{datetime:a,title:u,children:i})}const Qc=[{code:"af",name:"Afrikaans"},{code:"sq",name:"Albanian"},{code:"am",name:"Amharic"},{code:"ar",name:"Arabic"},{code:"hy",name:"Armenian"},{code:"as",name:"Assamese"},{code:"ay",name:"Aymara"},{code:"az",name:"Azerbaijani"},{code:"bm",name:"Bambara"},{code:"eu",name:"Basque"},{code:"be",name:"Belarusian"},{code:"bn",name:"Bengali"},{code:"bho",name:"Bhojpuri"},{code:"bs",name:"Bosnian"},{code:"bg",name:"Bulgarian"},{code:"ca",name:"Catalan"},{code:"ceb",name:"Cebuano"},{code:"ny",name:"Chichewa"},{code:"zh",name:"Chinese"},{code:"zh_HANT",name:"Chinese (Traditional)"},{code:"co",name:"Corsican"},{code:"hr",name:"Croatian"},{code:"cs",name:"Czech"},{code:"da",name:"Danish"},{code:"dv",name:"Dhivehi"},{code:"doi",name:"Dogri"},{code:"nl",name:"Dutch"},{code:"en",name:"English"},{code:"eo",name:"Esperanto"},{code:"et",name:"Estonian"},{code:"ee",name:"Ewe"},{code:"tl",name:"Filipino"},{code:"fi",name:"Finnish"},{code:"fr",name:"French"},{code:"fy",name:"Frisian"},{code:"gl",name:"Galician"},{code:"ka",name:"Georgian"},{code:"de",name:"German"},{code:"el",name:"Greek"},{code:"gn",name:"Guarani"},{code:"gu",name:"Gujarati"},{code:"ht",name:"Haitian Creole"},{code:"ha",name:"Hausa"},{code:"haw",name:"Hawaiian"},{code:"iw",name:"Hebrew"},{code:"hi",name:"Hindi"},{code:"hmn",name:"Hmong"},{code:"hu",name:"Hungarian"},{code:"is",name:"Icelandic"},{code:"ig",name:"Igbo"},{code:"ilo",name:"Ilocano"},{code:"id",name:"Indonesian"},{code:"ga",name:"Irish"},{code:"it",name:"Italian"},{code:"ja",name:"Japanese"},{code:"jw",name:"Javanese"},{code:"kn",name:"Kannada"},{code:"kk",name:"Kazakh"},{code:"km",name:"Khmer"},{code:"rw",name:"Kinyarwanda"},{code:"gom",name:"Konkani"},{code:"ko",name:"Korean"},{code:"kri",name:"Krio"},{code:"ku",name:"Kurdish (Kurmanji)"},{code:"ckb",name:"Kurdish (Sorani)"},{code:"ky",name:"Kyrgyz"},{code:"lo",name:"Lao"},{code:"la",name:"Latin"},{code:"lv",name:"Latvian"},{code:"ln",name:"Lingala"},{code:"lt",name:"Lithuanian"},{code:"lg",name:"Luganda"},{code:"lb",name:"Luxembourgish"},{code:"mk",name:"Macedonian"},{code:"mai",name:"Maithili"},{code:"mg",name:"Malagasy"},{code:"ms",name:"Malay"},{code:"ml",name:"Malayalam"},{code:"mt",name:"Maltese"},{code:"mi",name:"Maori"},{code:"mr",name:"Marathi"},{code:"mni-Mtei",name:"Meiteilon (Manipuri)"},{code:"lus",name:"Mizo"},{code:"mn",name:"Mongolian"},{code:"my",name:"Myanmar (Burmese)"},{code:"ne",name:"Nepali"},{code:"no",name:"Norwegian"},{code:"or",name:"Odia (Oriya)"},{code:"om",name:"Oromo"},{code:"ps",name:"Pashto"},{code:"fa",name:"Persian"},{code:"pl",name:"Polish"},{code:"pt",name:"Portuguese"},{code:"pa",name:"Punjabi"},{code:"qu",name:"Quechua"},{code:"ro",name:"Romanian"},{code:"ru",name:"Russian"},{code:"sm",name:"Samoan"},{code:"sa",name:"Sanskrit"},{code:"gd",name:"Scots Gaelic"},{code:"nso",name:"Sepedi"},{code:"sr",name:"Serbian"},{code:"st",name:"Sesotho"},{code:"sn",name:"Shona"},{code:"sd",name:"Sindhi"},{code:"si",name:"Sinhala"},{code:"sk",name:"Slovak"},{code:"sl",name:"Slovenian"},{code:"so",name:"Somali"},{code:"es",name:"Spanish"},{code:"su",name:"Sundanese"},{code:"sw",name:"Swahili"},{code:"sv",name:"Swedish"},{code:"tg",name:"Tajik"},{code:"ta",name:"Tamil"},{code:"tt",name:"Tatar"},{code:"te",name:"Telugu"},{code:"th",name:"Thai"},{code:"ti",name:"Tigrinya"},{code:"ts",name:"Tsonga"},{code:"tr",name:"Turkish"},{code:"tk",name:"Turkmen"},{code:"ak",name:"Twi"},{code:"uk",name:"Ukrainian"},{code:"ur",name:"Urdu"},{code:"ug",name:"Uyghur"},{code:"uz",name:"Uzbek"},{code:"vi",name:"Vietnamese"},{code:"cy",name:"Welsh"},{code:"xh",name:"Xhosa"},{code:"yi",name:"Yiddish"},{code:"yo",name:"Yoruba"},{code:"zu",name:"Zulu"}];function el(...e){try{return Ia(...e)}catch{return e[2]||!1}}const to=st(el),tl=[new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],nl=to(tl,Qc.map(e=>e.code.replace("_","-")),"en");function us(e=!1){if(e){const{contentTranslationTargetLanguage:t}=W.settings;if(t)return t}return nl}const rl=new Intl.DisplayNames(void 0,{type:"language"});function ol(e){try{return rl.of(e)}catch{return null}}const Ir=st(ol),il=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,sr=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");const t=e.match(il);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},ri=e=>e==="*"||e==="x"||e==="X",oi=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},sl=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],al=(e,t)=>{if(ri(e)||ri(t))return 0;const[n,r]=sl(oi(e),oi(t));return n>r?1:n{for(let n=0;n{const n=sr(e),r=sr(t),o=n.pop(),i=r.pop(),a=Ft(n,r);return a!==0?a:o&&i?Ft(o.split("."),i.split(".")):o||i?o?-1:1:0},ll=(e,t,n)=>{ul(n);const r=cl(e,t);return ds[n].includes(r)},ds={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},ii=Object.keys(ds),ul=e=>{if(typeof e!="string")throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`);if(ii.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${ii.join("|")}`)},Zn=(e,t)=>{if(t=t.replace(/([><=]+)\s+/g,"$1"),t.includes("||"))return t.split("||").some(y=>Zn(e,y));if(t.includes(" - ")){const[y,T]=t.split(" - ",2);return Zn(e,`>=${y} <=${T}`)}else if(t.includes(" "))return t.trim().replace(/\s{2,}/g," ").split(" ").every(y=>Zn(e,y));const n=t.match(/^([<>=~^]+)/),r=n?n[1]:"=";if(r!=="^"&&r!=="~")return ll(e,t,r);const[o,i,a,,u]=sr(e),[c,l,f,,d]=sr(t),p=[o,i,a],m=[c,l??"x",f??"x"];if(d&&(!u||Ft(p,m)!==0||Ft(u.split("."),d.split("."))===-1))return!1;const h=m.findIndex(y=>y!=="0")+1,g=r==="~"?2:h>1?h:1;return!(Ft(p.slice(0,g),m.slice(0,g))!==0||Ft(p.slice(g),m.slice(g))===-1)};const dl={"@mastodon/edit-media-attributes":">=4.1","@mastodon/list-exclusive":">=4.2","@mastodon/filtered-notifications":"~4.3 || >=4.3","@mastodon/fetch-multiple-statuses":"~4.3 || >=4.3","@mastodon/trending-link-posts":"~4.3 || >=4.3","@mastodon/grouped-notifications":"~4.3 || >=4.3"},$r=/pixelfed/i,et=/^(?!.*pixelfed).*$/i,si={"@mastodon/lists":et,"@mastodon/filters":et,"@mastodon/mentions":et,"@mastodon/trending-hashtags":et,"@mastodon/trending-links":et,"@mastodon/post-bookmark":et,"@mastodon/post-edit":et,"@mastodon/profile-edit":et,"@mastodon/profile-private-note":et,"@pixelfed/trending":$r,"@pixelfed/home-include-reblogs":$r,"@pixelfed/global-feed":$r},Nn={};function Fn(e){try{const{version:t,domain:n}=ba(),r=`${n}-${e}`;if(Nn[r])return Nn[r];if(si[e])return Nn[r]=si[e].test(t);const o=dl[e];return o?Nn[r]=Zn(t,o,{includePrerelease:!0,loose:!0}):!1}catch{return!1}}const Vt=2147483647,Ye=36,Eo=1,vn=26,fl=38,hl=700,fs=72,hs=128,ps="-",pl=/^xn--/,ml=/[^\0-\x7F]/,gl=/[\x2E\u3002\uFF0E\uFF61]/g,vl={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Lr=Ye-Eo,qe=Math.floor,Cr=String.fromCharCode;function ft(e){throw new RangeError(vl[e])}function yl(e,t){const n=[];let r=e.length;for(;r--;)n[r]=t(e[r]);return n}function ms(e,t){const n=e.split("@");let r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(gl,".");const o=e.split("."),i=yl(o,t).join(".");return r+i}function gs(e){const t=[];let n=0;const r=e.length;for(;n=55296&&o<=56319&&nString.fromCodePoint(...e),bl=function(e){return e>=48&&e<58?26+(e-48):e>=65&&e<91?e-65:e>=97&&e<123?e-97:Ye},ai=function(e,t){return e+22+75*(e<26)-((t!=0)<<5)},vs=function(e,t,n){let r=0;for(e=n?qe(e/hl):e>>1,e+=qe(e/t);e>Lr*vn>>1;r+=Ye)e=qe(e/Lr);return qe(r+(Lr+1)*e/(e+fl))},ys=function(e){const t=[],n=e.length;let r=0,o=hs,i=fs,a=e.lastIndexOf(ps);a<0&&(a=0);for(let u=0;u=128&&ft("not-basic"),t.push(e.charCodeAt(u));for(let u=a>0?a+1:0;u=n&&ft("invalid-input");const p=bl(e.charCodeAt(u++));p>=Ye&&ft("invalid-input"),p>qe((Vt-r)/f)&&ft("overflow"),r+=p*f;const m=d<=i?Eo:d>=i+vn?vn:d-i;if(pqe(Vt/h)&&ft("overflow"),f*=h}const l=t.length+1;i=vs(r-c,l,c==0),qe(r/l)>Vt-o&&ft("overflow"),o+=qe(r/l),r%=l,t.splice(r++,0,o)}return String.fromCodePoint(...t)},_s=function(e){const t=[];e=gs(e);const n=e.length;let r=hs,o=0,i=fs;for(const c of e)c<128&&t.push(Cr(c));const a=t.length;let u=a;for(a&&t.push(ps);u=r&&fqe((Vt-o)/l)&&ft("overflow"),o+=(c-r)*l,r=c;for(const f of e)if(fVt&&ft("overflow"),f===r){let d=o;for(let p=Ye;;p+=Ye){const m=p<=i?Eo:p>=i+vn?vn:p-i;if(d{const{shortcode:r,staticUrl:o,url:i}=n;e=e.replace(new RegExp(`:${r}:`,"g"),`:${r}:`)}),e):""}const Pt=document.createElement("div"),El=["u-url","mention","hashtag"];function xl(e,t={}){const{emojis:n,postEnhanceDOM:r=()=>{}}=t;let o=e;const i=document.createElement("div");i.innerHTML=o;const a=/{d.setAttribute("target","_blank")}),i.querySelectorAll("a[class]").forEach(d=>{d.classList.forEach(p=>{El.includes(p)||d.classList.remove(p)})})),a&&i.querySelectorAll("a[href]").forEach(f=>{/^https?:\/\//i.test(f.textContent.trim())&&(f.classList.add("has-url-text"),Al(f))}),a){const l=i.querySelectorAll("a[href]"),f=[];l.forEach(d=>{const p=d.innerText.trim(),m=d.querySelector("*");if(/^@[^@]+(@[^@]+)?$/g.test(p)){const[h,g,y]=p.split("@");m||(!f.some(([T])=>T===g)||f.some(([T,_])=>T===g&&_===y)?(d.innerHTML=`@${g}`,f.push([g,y])):d.innerHTML=`@${g}@${y}`),d.classList.add("mention")}/^#[^#]+$/g.test(p)&&(m||(d.innerHTML=`#${p.slice(1)}`),d.classList.add("mention","hashtag"))})}let c;if(o.includes(":")&&(c=Or(i),c.forEach(l=>{let f=l.nodeValue.replace(/&/g,"&").replace(//g,">");n&&(f=ar(f,n)),Pt.innerHTML=f,l.replaceWith(...Pt.childNodes)})),u&&[...i.querySelectorAll("p")].filter(f=>/^```[^]+```$/g.test(f.innerText.trim())).forEach(f=>{const d=document.createElement("pre");f.querySelectorAll("br").forEach(p=>p.replaceWith(` +`)),d.innerHTML=`${f.innerHTML.trim()}`,f.replaceWith(d)}),u&&[...i.querySelectorAll("p")].filter(d=>/^```/g.test(d.innerText)).forEach(d=>{const p=[d];let m=!1,h=d;for(;h.nextElementSibling;){const g=h.nextElementSibling;if(g&&g.tagName==="P")if(/```$/g.test(g.innerText)){p.push(g),m=!0;break}else p.push(g);else break;h=g}if(m){const g=document.createElement("pre");p.forEach(T=>{T.querySelectorAll("br").forEach(_=>_.replaceWith(` +`))});const y=p.map(T=>T.innerHTML).join(` + +`);g.innerHTML=`${y}`,d.replaceWith(g),p.forEach(T=>T.remove())}}),o.includes("`")&&(c=Or(i),c.forEach(l=>{let f=l.nodeValue.replace(/&/g,"&").replace(//g,">");/`[^`]+`/g.test(f)&&(f=f.replaceAll(/(`[^]+?`)/g,"$1")),Pt.innerHTML=f,l.replaceWith(...Pt.childNodes)})),/twitter\.com/i.test(o)&&(c=Or(i,{rejectFilter:["A"]}),c.forEach(l=>{let f=l.nodeValue.replace(/&/g,"&").replace(//g,">");/@[a-zA-Z0-9_]+@twitter\.com/g.test(f)&&(f=f.replaceAll(/(@([a-zA-Z0-9_]+)@twitter\.com)/g,'$1')),Pt.innerHTML=f,l.replaceWith(...Pt.childNodes)})),o.includes("#")){let l=null;const f=[...i.querySelectorAll("p")].filter((d,p)=>{let m=0;for(let h=0;h3||m>1&&l&&p===l+1)return l=p,!0});f!=null&&f.length&&f.forEach(d=>{d.classList.add("hashtag-stuffing"),d.title=d.innerText})}return o.includes("{const f=l.getAttribute("width")||l.naturalWidth,d=l.getAttribute("height")||l.naturalHeight;f&&d&&l.style.setProperty("--original-aspect-ratio",`${f}/${d}`)}),r&&queueMicrotask(()=>r(i)),o=i.innerHTML,o}const ws=st(xl),Ml=["STYLE","IMG","VIDEO","AUDIO","AREA","MAP","TRACK","EMBED","IFRAME","OBJECT","PICTURE","PORTAL","SOURCE","SVG","MATH","CANVAS","NOSCRIPT","SCRIPT","INPUT","OPTION","TEXTAREA","SLOT","TEMPLATE"],Sl=Object.fromEntries(Ml.map(e=>[e,!0])),kl=/^(https?:\/\/(www\.)?|xmpp:)/,Pr=30;function Al(e){var t;if(!(!e||(t=e.querySelector)!=null&&t.call(e,"*")))try{const n=e.innerText.trim(),r=(n.match(kl)||[])[0]||"";if(!r)return;const o=n.slice(r.length,r.length+Pr),i=n.slice(r.length+Pr),a=n.slice(r.length).length>Pr;e.innerHTML=`${o}`}catch{}}function Or(e,t={}){var a;const n=[],r=Object.assign({},Sl,(a=t.rejectFilter)==null?void 0:a.reduce((u,c)=>(u[c]=!0,u),{})),o=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(u){return r[u.parentNode.nodeName]?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}},!1);let i;for(;i=o.nextNode();)n.push(i);return n}const Ot=document.createElement("div");function Il(e,t){if(!e)return"";const{preProcess:n}=t||{};return Ot.innerHTML=e.replace(/<\/p>/g,`

    + +`).replace(/<\/li>/g,` +`),Ot.querySelectorAll("br").forEach(r=>{r.replaceWith(` +`)}),n==null||n(Ot),Ot.querySelectorAll(".invisible").forEach(r=>{r.remove()}),Ot.querySelectorAll(".ellipsis").forEach(r=>{r.append("...")}),Ot.innerText.replace(/[\r\n]{3,}/g,` + +`).trim()}const cr=st(Il);function $l(e){const{mentions:t=[],instance:n,previewMode:r,statusURL:o}=e||{};return i=>{var f,d;let{target:a}=i;if(a=a.closest("a"),!a||i.metaKey||i.ctrlKey||i.shiftKey||i.altKey||i.which===2)return;const u=(f=a.previousSibling)==null?void 0:f.textContent,c=u==null?void 0:u.endsWith("@"),l=a.innerText.startsWith("@");if((a.classList.contains("u-url")||a.classList.contains("mention"))&&l||c&&!l){const p=(a.querySelector("span")||a).innerText.trim(),m=p.replace(/^@/,""),h=a.getAttribute("href"),g=t.find(y=>y.url===h)||t.find(y=>y.acct===m||y.username===m);if(g)i.preventDefault(),i.stopPropagation(),W.showAccount={account:g.acct,instance:n};else if(!/^http/i.test(p)){i.preventDefault(),i.stopPropagation();const y=a.getAttribute("href");W.showAccount={account:y,instance:n}}}else if(!r){const p=u==null?void 0:u.endsWith("#");if(a.classList.contains("hashtag")||p){i.preventDefault(),i.stopPropagation();const m=a.innerText.replace(/^#/,"").trim(),h=n?`#/${n}/t/${m}`:`#/t/${m}`;location.hash=h}else(d=W.unfurledLinks[a.href])!=null&&d.url&&o!==a.href&&(i.preventDefault(),i.stopPropagation(),W.prevLocation={pathname:location.hash.replace(/^#/,"")},location.hash=`#${W.unfurledLinks[a.href].url}`)}}}const{locale:Ll}=new Intl.DateTimeFormat().resolvedOptions(),Cl=e=>{const{dateYear:t,hideTime:n,formatOpts:r}=e||{},o=new Date().getFullYear();return Intl.DateTimeFormat(Ll,{year:t===o?void 0:"numeric",month:"short",day:"numeric",hour:n?void 0:"numeric",minute:n?void 0:"numeric",...r})},Pl=st(Cl);function yn(e,t){return e instanceof Date||(e=new Date(e)),Pl({dateYear:e.getFullYear(),...t}).format(e)}const{locale:Ol}=Intl.NumberFormat().resolvedOptions(),mt=Intl.NumberFormat(Ol,{notation:"compact",roundingMode:"floor"}).format,ci=5e3;function zn(e){if(e||(e=!0),W.showCompose){W.composerState.minimized?$e({duration:ci,text:"A draft post is currently minimized. Post or discard it before creating a new one."}):$e({duration:ci,text:"A post is currently open. Post or discard it before creating a new one."});return}Ya(),W.showCompose=e}function Af({skeleton:e,account:t,avatarSize:n="xl",useAvatarStatic:r=!1,instance:o,external:i,internal:a,onClick:u,showActivity:c=!1,showStats:l=!1,accountInstance:f,hideDisplayName:d=!1,relationship:p={},excludeRelationshipAttrs:m=[]}){if(e)return s("div",{class:"account-block skeleton",children:[s(nt,{size:n}),s("span",{children:[s("b",{children:"████████"}),s("br",{}),s("span",{class:"account-block-acct",children:"██████"})]})]});if(!t)return null;const{id:h,acct:g,avatar:y,avatarStatic:T,displayName:_,username:E,emojis:w,url:b,statusesCount:M,lastStatusAt:A,bot:O,fields:P,note:x,group:S,followersCount:V,createdAt:B,locked:D}=t;let[$,k,R]=g.match(/([^@]+)(@.+)/i)||[,g];f&&(R=`@${f}`);const L=P==null?void 0:P.find(C=>!!C.verifiedAt&&!!C.value),z={};for(const C in p)m.includes(C)||(z[C]=p[C]);const N=z.following||z.followedBy||z.requested;return s("a",{class:"account-block",href:b,target:i?"_blank":null,title:R?g:`@${g}`,onClick:C=>{if(!i){if(C.preventDefault(),u)return u(C);a?location.hash=`/${o}/a/${h}`:W.showAccount={account:t,instance:o}}},children:[s(nt,{url:r?T:y||T,size:n,squircle:O}),s("span",{class:"account-block-content",children:[!d&&s(U,{children:_?s("b",{children:s(Bt,{text:_,emojis:w})}):s("b",{children:E})})," ",s("span",{class:"account-block-acct bidi-isolate",children:[R?"":"@",k,s("wbr",{}),R,D&&s(U,{children:[" ",s(H,{icon:"lock",size:"s",alt:"Locked"})]})]}),c&&s("div",{class:"account-block-stats",children:["Posts: ",mt(M),!!A&&s(U,{children:[" ","· Last posted:"," ",yn(A,{hideTime:!0})]})]}),l&&s("div",{class:"account-block-stats",children:[O&&s(U,{children:s("span",{class:"tag collapsed",children:[s(H,{icon:"bot"})," Automated"]})}),!!S&&s(U,{children:s("span",{class:"tag collapsed",children:[s(H,{icon:"group"})," Group"]})}),N&&s("div",{class:"shazam-container-horizontal",children:s("div",{class:"shazam-container-inner",children:z.following&&z.followedBy?s("span",{class:"tag minimal",children:"Mutual"}):z.requested?s("span",{class:"tag minimal",children:"Requested"}):z.following?s("span",{class:"tag minimal",children:"Following"}):z.followedBy?s("span",{class:"tag minimal",children:"Follows you"}):null})},p.id),!!V&&s("span",{class:"ib",children:[mt(V)," ",V===1?"follower":"followers"]}),!!L&&s("span",{class:"verified-field",children:[s(H,{icon:"check-circle",size:"s"})," ",s("span",{dangerouslySetInnerHTML:{__html:ws(L.value,{emojis:w})}})]}),!O&&!S&&!N&&!V&&!L&&!!B&&s("span",{class:"created-at",children:["Joined"," ",s("time",{datetime:B,children:yn(B,{hideTime:!0})})]})]})]})]})}function li(e){const{className:t,disabled:n,...r}=e;return s(Dc,{className:t,disabled:n,children:({ref:o,closeMenu:i})=>s(jt,{...r,ref:o,onClick:({detail:a})=>i(a===0?"Enter":void 0)})})}var Ts={};function We(e,t){typeof t=="boolean"&&(t={forever:t}),this._originalTimeouts=JSON.parse(JSON.stringify(e)),this._timeouts=e,this._options=t||{},this._maxRetryTime=t&&t.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}var Dl=We;We.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};We.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};We.prototype.retry=function(e){if(this._timeout&&clearTimeout(this._timeout),!e)return!1;var t=new Date().getTime();if(e&&t-this._operationStart>=this._maxRetryTime)return this._errors.push(e),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var n=this._timeouts.shift();if(n===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),n=this._cachedTimeouts.slice(-1);else return!1;var r=this;return this._timer=setTimeout(function(){r._attempts++,r._operationTimeoutCb&&(r._timeout=setTimeout(function(){r._operationTimeoutCb(r._attempts)},r._operationTimeout),r._options.unref&&r._timeout.unref()),r._fn(r._attempts)},n),this._options.unref&&this._timer.unref(),!0};We.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var n=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){n._operationTimeoutCb()},n._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};We.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)};We.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)};We.prototype.start=We.prototype.try;We.prototype.errors=function(){return this._errors};We.prototype.attempts=function(){return this._attempts};We.prototype.mainError=function(){if(this._errors.length===0)return null;for(var e={},t=null,n=0,r=0;r=n&&(t=o,n=a)}return t};(function(e){var t=Dl;e.operation=function(n){var r=e.timeouts(n);return new t(r,{forever:n&&(n.forever||n.retries===1/0),unref:n&&n.unref,maxRetryTime:n&&n.maxRetryTime})},e.timeouts=function(n){if(n instanceof Array)return[].concat(n);var r={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var o in n)r[o]=n[o];if(r.minTimeout>r.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var i=[],a=0;aFl.call(e)==="[object Error]",Hl=new Set(["Failed to fetch","NetworkError when attempting to fetch resource.","The Internet connection appears to be offline.","Load failed","Network request failed","fetch failed"]);function Vl(e){return e&&zl(e)&&e.name==="TypeError"&&typeof e.message=="string"?e.message==="Load failed"?e.stack===void 0:Hl.has(e.message):!1}class jl extends Error{constructor(t){super(),t instanceof Error?(this.originalError=t,{message:t}=t):(this.originalError=new Error(t),this.originalError.stack=this.stack),this.name="AbortError",this.message=t}}const ui=(e,t,n)=>{const r=n.retries-(t-1);return e.attemptNumber=t,e.retriesLeft=r,e};async function Bl(e,t){return new Promise((n,r)=>{t={onFailedAttempt(){},retries:10,shouldRetry:()=>!0,...t};const o=Nl.operation(t),i=()=>{var u;o.stop(),r((u=t.signal)==null?void 0:u.reason)};t.signal&&!t.signal.aborted&&t.signal.addEventListener("abort",i,{once:!0});const a=()=>{var u;(u=t.signal)==null||u.removeEventListener("abort",i),o.stop()};o.attempt(async u=>{try{const c=await e(u);a(),n(c)}catch(c){try{if(!(c instanceof Error))throw new TypeError(`Non-error was thrown: "${c}". You should only throw errors.`);if(c instanceof jl)throw c.originalError;if(c instanceof TypeError&&!Vl(c))throw c;if(ui(c,u,t),await t.shouldRetry(c)||(o.stop(),r(c)),await t.onFailedAttempt(c),!o.retry(c))throw o.mainError()}catch(l){ui(l,u,t),a(),r(l)}}})})}const Ul=[{code:"auto",name:"Detect"},{code:"af",name:"Afrikaans"},{code:"sq",name:"Albanian"},{code:"am",name:"Amharic"},{code:"ar",name:"Arabic"},{code:"hy",name:"Armenian"},{code:"as",name:"Assamese"},{code:"ay",name:"Aymara"},{code:"az",name:"Azerbaijani"},{code:"bm",name:"Bambara"},{code:"eu",name:"Basque"},{code:"be",name:"Belarusian"},{code:"bn",name:"Bengali"},{code:"bho",name:"Bhojpuri"},{code:"bs",name:"Bosnian"},{code:"bg",name:"Bulgarian"},{code:"ca",name:"Catalan"},{code:"ceb",name:"Cebuano"},{code:"ny",name:"Chichewa"},{code:"zh",name:"Chinese"},{code:"co",name:"Corsican"},{code:"hr",name:"Croatian"},{code:"cs",name:"Czech"},{code:"da",name:"Danish"},{code:"dv",name:"Dhivehi"},{code:"doi",name:"Dogri"},{code:"nl",name:"Dutch"},{code:"en",name:"English"},{code:"eo",name:"Esperanto"},{code:"et",name:"Estonian"},{code:"ee",name:"Ewe"},{code:"tl",name:"Filipino"},{code:"fi",name:"Finnish"},{code:"fr",name:"French"},{code:"fy",name:"Frisian"},{code:"gl",name:"Galician"},{code:"ka",name:"Georgian"},{code:"de",name:"German"},{code:"el",name:"Greek"},{code:"gn",name:"Guarani"},{code:"gu",name:"Gujarati"},{code:"ht",name:"Haitian Creole"},{code:"ha",name:"Hausa"},{code:"haw",name:"Hawaiian"},{code:"iw",name:"Hebrew"},{code:"hi",name:"Hindi"},{code:"hmn",name:"Hmong"},{code:"hu",name:"Hungarian"},{code:"is",name:"Icelandic"},{code:"ig",name:"Igbo"},{code:"ilo",name:"Ilocano"},{code:"id",name:"Indonesian"},{code:"ga",name:"Irish"},{code:"it",name:"Italian"},{code:"ja",name:"Japanese"},{code:"jw",name:"Javanese"},{code:"kn",name:"Kannada"},{code:"kk",name:"Kazakh"},{code:"km",name:"Khmer"},{code:"rw",name:"Kinyarwanda"},{code:"gom",name:"Konkani"},{code:"ko",name:"Korean"},{code:"kri",name:"Krio"},{code:"ku",name:"Kurdish (Kurmanji)"},{code:"ckb",name:"Kurdish (Sorani)"},{code:"ky",name:"Kyrgyz"},{code:"lo",name:"Lao"},{code:"la",name:"Latin"},{code:"lv",name:"Latvian"},{code:"ln",name:"Lingala"},{code:"lt",name:"Lithuanian"},{code:"lg",name:"Luganda"},{code:"lb",name:"Luxembourgish"},{code:"mk",name:"Macedonian"},{code:"mai",name:"Maithili"},{code:"mg",name:"Malagasy"},{code:"ms",name:"Malay"},{code:"ml",name:"Malayalam"},{code:"mt",name:"Maltese"},{code:"mi",name:"Maori"},{code:"mr",name:"Marathi"},{code:"mni-Mtei",name:"Meiteilon (Manipuri)"},{code:"lus",name:"Mizo"},{code:"mn",name:"Mongolian"},{code:"my",name:"Myanmar (Burmese)"},{code:"ne",name:"Nepali"},{code:"no",name:"Norwegian"},{code:"or",name:"Odia (Oriya)"},{code:"om",name:"Oromo"},{code:"ps",name:"Pashto"},{code:"fa",name:"Persian"},{code:"pl",name:"Polish"},{code:"pt",name:"Portuguese"},{code:"pa",name:"Punjabi"},{code:"qu",name:"Quechua"},{code:"ro",name:"Romanian"},{code:"ru",name:"Russian"},{code:"sm",name:"Samoan"},{code:"sa",name:"Sanskrit"},{code:"gd",name:"Scots Gaelic"},{code:"nso",name:"Sepedi"},{code:"sr",name:"Serbian"},{code:"st",name:"Sesotho"},{code:"sn",name:"Shona"},{code:"sd",name:"Sindhi"},{code:"si",name:"Sinhala"},{code:"sk",name:"Slovak"},{code:"sl",name:"Slovenian"},{code:"so",name:"Somali"},{code:"es",name:"Spanish"},{code:"su",name:"Sundanese"},{code:"sw",name:"Swahili"},{code:"sv",name:"Swedish"},{code:"tg",name:"Tajik"},{code:"ta",name:"Tamil"},{code:"tt",name:"Tatar"},{code:"te",name:"Telugu"},{code:"th",name:"Thai"},{code:"ti",name:"Tigrinya"},{code:"ts",name:"Tsonga"},{code:"tr",name:"Turkish"},{code:"tk",name:"Turkmen"},{code:"ak",name:"Twi"},{code:"uk",name:"Ukrainian"},{code:"ur",name:"Urdu"},{code:"ug",name:"Uyghur"},{code:"uz",name:"Uzbek"},{code:"vi",name:"Vietnamese"},{code:"cy",name:"Welsh"},{code:"xh",name:"Xhosa"},{code:"yi",name:"Yiddish"},{code:"yo",name:"Yoruba"},{code:"zu",name:"Zulu"}];var Wl=Object.defineProperty,Kl=(e,t,n)=>t in e?Wl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Hn=(e,t,n)=>Kl(e,typeof t!="symbol"?t+"":t,n),no=new Map,Vn=new WeakMap,di=0,Zl=void 0;function Yl(e){return e?(Vn.has(e)||(di+=1,Vn.set(e,di.toString())),Vn.get(e)):"0"}function ql(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t==="root"?Yl(e.root):e[t]}`).toString()}function Gl(e){const t=ql(e);let n=no.get(t);if(!n){const r=new Map;let o;const i=new IntersectionObserver(a=>{a.forEach(u=>{var c;const l=u.isIntersecting&&o.some(f=>u.intersectionRatio>=f);e.trackVisibility&&typeof u.isVisible>"u"&&(u.isVisible=l),(c=r.get(u.target))==null||c.forEach(f=>{f(l,u)})})},e);o=i.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:i,elements:r},no.set(t,n)}return n}function Es(e,t,n={},r=Zl){if(typeof window.IntersectionObserver>"u"&&r!==void 0){const c=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold=="number"?n.threshold:0,time:0,boundingClientRect:c,intersectionRect:c,rootBounds:c}),()=>{}}const{id:o,observer:i,elements:a}=Gl(n),u=a.get(e)||[];return a.has(e)||a.set(e,u),u.push(t),i.observe(e),function(){u.splice(u.indexOf(t),1),u.length===0&&(a.delete(e),i.unobserve(e)),a.size===0&&(i.disconnect(),no.delete(o))}}function Xl(e){return typeof e.children!="function"}var If=class extends Fi{constructor(e){super(e),Hn(this,"node",null),Hn(this,"_unobserveCb",null),Hn(this,"handleNode",t=>{this.node&&(this.unobserve(),!t&&!this.props.triggerOnce&&!this.props.skip&&this.setState({inView:!!this.props.initialInView,entry:void 0})),this.node=t||null,this.observeNode()}),Hn(this,"handleChange",(t,n)=>{t&&this.props.triggerOnce&&this.unobserve(),Xl(this.props)||this.setState({inView:t,entry:n}),this.props.onChange&&this.props.onChange(t,n)}),this.state={inView:!!e.initialInView,entry:void 0}}componentDidMount(){this.unobserve(),this.observeNode()}componentDidUpdate(e){(e.rootMargin!==this.props.rootMargin||e.root!==this.props.root||e.threshold!==this.props.threshold||e.skip!==this.props.skip||e.trackVisibility!==this.props.trackVisibility||e.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())}componentWillUnmount(){this.unobserve()}observeNode(){if(!this.node||this.props.skip)return;const{threshold:e,root:t,rootMargin:n,trackVisibility:r,delay:o,fallbackInView:i}=this.props;this._unobserveCb=Es(this.node,this.handleChange,{threshold:e,root:t,rootMargin:n,trackVisibility:r,delay:o},i)}unobserve(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)}render(){const{children:e}=this.props;if(typeof e=="function"){const{inView:m,entry:h}=this.state;return e({inView:m,entry:h,ref:this.handleNode})}const{as:t,triggerOnce:n,threshold:r,root:o,rootMargin:i,onChange:a,skip:u,trackVisibility:c,delay:l,initialInView:f,fallbackInView:d,...p}=this.props;return wa(t||"div",{ref:this.handleNode,...p},e)}};function Jl({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:o,triggerOnce:i,skip:a,initialInView:u,fallbackInView:c,onChange:l}={}){var f;const[d,p]=te(null),m=j(),[h,g]=te({inView:!!u,entry:void 0});m.current=l,se(()=>{if(a||!d)return;let E;return E=Es(d,(w,b)=>{g({inView:w,entry:b}),m.current&&m.current(w,b),b.isIntersecting&&i&&E&&(E(),E=void 0)},{root:o,rootMargin:r,threshold:e,trackVisibility:n,delay:t},c),()=>{E&&E()}},[Array.isArray(e)?e.toString():e,d,o,r,i,a,n,c,t]);const y=(f=h.entry)==null?void 0:f.target,T=j();!d&&y&&!i&&!a&&T.current!==y&&(T.current=y,g({inView:!!u,entry:void 0}));const _=[p,h.inView,h.entry];return _.ref=_[0],_.inView=_[1],_.entry=_[2],_}const fi=48,Dr={};function xs({id:e,children:t}){const n=j(),r=!!Dr[e],[o,i]=te(!1),[a,u]=te(r||!1),{ref:c}=Jl({root:null,rootMargin:`-${fi}px 0px 0px 0px`,trackVisibility:!0,delay:1e3,onChange:l=>{l&&(i(!0),e&&(Dr[e]=!0))},triggerOnce:!0,skip:a||o});return se(()=>{if(!n.current)return;const l=n.current.getBoundingClientRect();l.bottom>fi&&(l.top{let o=fn[Rr];return fetch(`https://${o}/api/v1/${t}/${n}/${encodeURIComponent(e)}`).then(i=>{if(!i.ok)throw new Error(i.statusText);return i.json()}).then(i=>{var a;return{provider:"lingva",content:i.translation,detectedSourceLanguage:(a=i.info)==null?void 0:a.detectedSource,info:i.info}})},{retries:3,onFailedAttempt:o=>{Rr=(Rr+1)%fn.length}})}const Ms=1e3*60*60,Ss=fo(tu,{maxAge:Ms}),nu=fo(eu(Ss),{maxAge:Ms});function ru({forceTranslate:e,sourceLanguage:t,onTranslate:n,text:r="",mini:o,autoDetected:i}){const a=us(!0),[u,c]=te("default"),[l,f]=te(null),[d,p]=te(null),[m,h]=te(null),g=j(),y=t?Ir(t):null,T=Ir(a),_=j("auto");n||(n=o?nu:Ss);const E=async()=>{var w,b;c("loading");try{const{content:M,detectedSourceLanguage:A,provider:O,error:P,...x}=await n(r,_.current,a);if(M){if(A){const S=Ir(A);h(S)}if(O==="lingva"){const S=(b=(w=x==null?void 0:x.info)==null?void 0:w.pronunciation)==null?void 0:b.query;S&&f(S)}p(M),c("default"),!o&&M.trim()!==r.trim()&&(g.current.open=!0,g.current.scrollIntoView({behavior:"smooth",block:"nearest"}))}else c("error")}catch{c("error")}};return se(()=>{e&&E()},[e]),o?d&&d.trim()!==r.trim()&&m!==T?s(xs,{children:s("div",{class:"status-translation-block-mini",children:[s(H,{icon:"translate",alt:`Auto-translated from ${y}`}),s("output",{lang:a,dir:"auto",title:l||"",children:d})]})}):null:s("div",{class:"status-translation-block",onClick:w=>{w.preventDefault()},children:s("details",{ref:g,children:[s("summary",{children:s("button",{type:"button",onClick:async w=>{w.preventDefault(),w.stopPropagation(),g.current.open=!g.current.open,u!=="loading"&&(d||E())},children:[s(H,{icon:"translate"})," ",s("span",{children:u==="loading"?"Translating…":t&&y&&!m?i?`Translate from ${y} (auto-detected)`:`Translate from ${y}`:"Translate"})]})}),s("div",{class:"translated-block",children:[s("div",{class:"translation-info insignificant",children:[s("select",{class:"translated-source-select",disabled:u==="loading",onChange:w=>{_.current=w.target.value,E()},children:Ul.map(w=>s("option",{value:w.code,children:w.code==="auto"?`Auto (${m??"…"})`:w.name}))})," ",s("span",{children:["→ ",T]}),s(Hi,{abrupt:!0,hidden:u!=="loading"})]}),u==="error"?s("p",{class:"ui-state",children:"Failed to translate"}):!!d&&s(U,{children:[s("output",{class:"translated-content",lang:a,dir:"auto",children:d}),!!l&&s("output",{class:"translated-pronunciation-content",tabIndex:-1,onClick:w=>{w.target.classList.toggle("expand")},children:l})]})]})]})})}const ou=fn!=null&&fn.length?ru:()=>null;function at(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function ks(e,t){const n=indexedDB.open(e);n.onupgradeneeded=()=>n.result.createObjectStore(t);const r=at(n);return(o,i)=>r.then(a=>i(a.transaction(t,o).objectStore(t)))}let Nr;function At(){return Nr||(Nr=ks("keyval-store","keyval")),Nr}function iu(e,t=At()){return t("readonly",n=>at(n.get(e)))}function su(e,t,n=At()){return n("readwrite",r=>(r.put(t,e),at(r.transaction)))}function au(e,t=At()){return t("readonly",n=>Promise.all(e.map(r=>at(n.get(r)))))}function cu(e,t=At()){return t("readwrite",n=>(n.delete(e),at(n.transaction)))}function lu(e,t=At()){return t("readwrite",n=>(e.forEach(r=>n.delete(r)),at(n.transaction)))}function uu(e=At()){return e("readwrite",t=>(t.clear(),at(t.transaction)))}function du(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},at(e.transaction)}function fu(e=At()){return e("readonly",t=>{if(t.getAllKeys)return at(t.getAllKeys());const n=[];return du(t,r=>n.push(r.key)).then(()=>n)})}function pi(e,t){const n=ks(e,t);return{set:(r,o)=>su(r,o,n),get:r=>iu(r,n),getMany:r=>au(r,n),del:r=>cu(r,n),delMany:r=>lu(r,n),clear:()=>uu(n),keys:()=>fu(n)}}const $f={drafts:pi("drafts-db","drafts-store"),catchup:pi("catchup-db","catchup-store")};async function Lf(e,t={}){if(!(e!=null&&e.length))return;const{masto:n}=Xn(),r=ho(),o=e.reduce((i,a)=>(!i.includes(a.id)&&!t[a.id]&&a.id!==r&&i.push(a.id),i),[]);if(!o.length)return null;try{return(await n.v1.accounts.relationships.fetch({id:o})).reduce((u,c)=>(u[c.id]=c,u),{})}catch{return null}}class Be extends HTMLElement{constructor(){super(),this.isIframeLoaded=!1,this.setupDom()}static get observedAttributes(){return["videoid","playlistid"]}connectedCallback(){this.addEventListener("pointerover",Be.warmConnections,{once:!0}),this.addEventListener("click",()=>this.addIframe())}get videoId(){return encodeURIComponent(this.getAttribute("videoid")||"")}set videoId(t){this.setAttribute("videoid",t)}get playlistId(){return encodeURIComponent(this.getAttribute("playlistid")||"")}set playlistId(t){this.setAttribute("playlistid",t)}get videoTitle(){return this.getAttribute("videotitle")||"Video"}set videoTitle(t){this.setAttribute("videotitle",t)}get videoPlay(){return this.getAttribute("videoPlay")||"Play"}set videoPlay(t){this.setAttribute("videoPlay",t)}get videoStartAt(){return this.getAttribute("videoStartAt")||"0"}get autoLoad(){return this.hasAttribute("autoload")}get noCookie(){return this.hasAttribute("nocookie")}get posterQuality(){return this.getAttribute("posterquality")||"hqdefault"}get posterLoading(){return this.getAttribute("posterloading")||"lazy"}get params(){return`start=${this.videoStartAt}&${this.getAttribute("params")}`}set params(t){this.setAttribute("params",t)}setupDom(){const t=this.attachShadow({mode:"open"});let n="";window.liteYouTubeNonce&&(n=`nonce="${window.liteYouTubeNonce}"`),t.innerHTML=` + +
    + + + + + + +
    + `,this.domRefFrame=t.querySelector("#frame"),this.domRefImg={fallback:t.querySelector("#fallbackPlaceholder"),webp:t.querySelector("#webpPlaceholder"),jpeg:t.querySelector("#jpegPlaceholder")},this.domRefPlayButton=t.querySelector("#playButton")}setupComponent(){this.initImagePlaceholder(),this.domRefPlayButton.setAttribute("aria-label",`${this.videoPlay}: ${this.videoTitle}`),this.setAttribute("title",`${this.videoPlay}: ${this.videoTitle}`),(this.autoLoad||this.isYouTubeShort())&&this.initIntersectionObserver()}attributeChangedCallback(t,n,r){switch(t){case"videoid":case"playlistid":case"videoTitle":case"videoPlay":{n!==r&&(this.setupComponent(),this.domRefFrame.classList.contains("activated")&&(this.domRefFrame.classList.remove("activated"),this.shadowRoot.querySelector("iframe").remove(),this.isIframeLoaded=!1));break}default:break}}addIframe(t=!1){if(!this.isIframeLoaded){let n=t?0:1;const r=this.noCookie?"-nocookie":"";let o;this.playlistId?o=`?listType=playlist&list=${this.playlistId}&`:o=`${this.videoId}?`,this.isYouTubeShort()&&(this.params=`loop=1&mute=1&modestbranding=1&playsinline=1&rel=0&enablejsapi=1&playlist=${this.videoId}`,n=1);const i=` +`;this.domRefFrame.insertAdjacentHTML("beforeend",i),this.domRefFrame.classList.add("activated"),this.isIframeLoaded=!0,this.attemptShortAutoPlay(),this.dispatchEvent(new CustomEvent("liteYoutubeIframeLoaded",{detail:{videoId:this.videoId},bubbles:!0,cancelable:!0}))}}initImagePlaceholder(){var r,o;const t=`https://i.ytimg.com/vi_webp/${this.videoId}/${this.posterQuality}.webp`,n=`https://i.ytimg.com/vi/${this.videoId}/${this.posterQuality}.jpg`;this.domRefImg.fallback.loading=this.posterLoading,this.domRefImg.webp.srcset=t,this.domRefImg.jpeg.srcset=n,this.domRefImg.fallback.src=n,this.domRefImg.fallback.setAttribute("aria-label",`${this.videoPlay}: ${this.videoTitle}`),(o=(r=this.domRefImg)==null?void 0:r.fallback)==null||o.setAttribute("alt",`${this.videoPlay}: ${this.videoTitle}`)}initIntersectionObserver(){const t={root:null,rootMargin:"0px",threshold:0};new IntersectionObserver((r,o)=>{r.forEach(i=>{i.isIntersecting&&!this.isIframeLoaded&&(Be.warmConnections(),this.addIframe(!0),o.unobserve(this))})},t).observe(this)}attemptShortAutoPlay(){this.isYouTubeShort()&&setTimeout(()=>{var t,n;(n=(t=this.shadowRoot.querySelector("iframe"))==null?void 0:t.contentWindow)==null||n.postMessage('{"event":"command","func":"playVideo","args":""}',"*")},2e3)}isYouTubeShort(){return this.getAttribute("short")===""&&window.matchMedia("(max-width: 40em)").matches}static addPrefetch(t,n){const r=document.createElement("link");r.rel=t,r.href=n,r.crossOrigin="true",document.head.append(r)}static warmConnections(){Be.isPreconnected||window.liteYouTubeIsPreconnected||(Be.addPrefetch("preconnect","https://i.ytimg.com/"),Be.addPrefetch("preconnect","https://s.ytimg.com"),Be.addPrefetch("preconnect","https://www.youtube.com"),Be.addPrefetch("preconnect","https://www.google.com"),Be.addPrefetch("preconnect","https://googleads.g.doubleclick.net"),Be.addPrefetch("preconnect","https://static.doubleclick.net"),Be.isPreconnected=!0,window.liteYouTubeIsPreconnected=!0)}}Be.isPreconnected=!1;customElements.define("lite-youtube",Be);const As=new Uint8Array(128);for(let e=0;e<83;e++)As["0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".charCodeAt(e)]=e;const Yn=(e,t,n)=>{let r=0;for(;te>10.31475?Is(e/Ls+.052132,2.4):e/$s,Fr=e=>~~(e>1227e-8?Ls*Is(e,.416666)-13.025:e*$s+1),hn=e=>(e<0?-1:1)*e*e,mi=e=>{for(e+=_n/2;e>_n;)e-=hu;const t=1.27323954*e-.405284735*hn(e);return .225*(hn(t)-t)+t};function xo(e){const t=Yn(e,2,6);return[t>>16,t>>8&255,t&255]}function mu(e,t,n,r){const o=Yn(e,0,1),i=o%9+1,a=~~(o/9)+1,u=i*a;let c=0,l=0,f=0,d=0,p=0,m=0,h=0,g=0,y=0,T=0,_=0,E=0;const w=(Yn(e,1,2)+1)/13446*(r|1),b=new Float64Array(u*3),M=xo(e);for(c=0;c<3;c++)b[c]=pu(M[c]);for(c=1;c{const n=t.char||" ",r=t.count||2;let o=0;const i=[];return e.reverse().reduce((a,u)=>{i.length&&o&&i[o]&&i[o]===u.substring(1,i[o].length+1)&&(i.splice(o,1),o--);const l=[`${n.repeat(o?o*r:0)}${u}`,...a];return u.substring(0,2)==="e.trim().replace(/(^(\s|\t)+|(( |\t)+)$)/gm,""),yu=e=>{const t=Cs(e).split(` +`),n=[];let r="";for(let o=0;o")){n.push(`${r}${i.slice(0,-2)} />`),r="";continue}if(i.endsWith(">")){n.push(`${r}${i.startsWith(">")||i.startsWith("<")?"":" "}${i}`),r="";continue}r+=r.length?` ${i}`:i}return n};var _u={mergeAttributesWithElements:yu,removeEmptyLines:Cs};const bu=vu,{mergeAttributesWithElements:wu}=_u,Tu=(e,t={})=>{const n=wu(e);return bu(n,t)};var Eu=Tu;const xu=St(Eu);var cn=(e=>(e.Mouse="mouse",e.Touch="touch",e.Pointer="pointer",e))(cn||{}),ln=(e=>(e.CancelledByMovement="cancelled-by-movement",e.CancelledByRelease="cancelled-by-release",e.CancelledOutsideElement="cancelled-outside-element",e))(ln||{});const Ps=()=>typeof window=="object"?(window==null?void 0:window.PointerEvent)??null:null,Mu=()=>typeof window=="object"?(window==null?void 0:window.TouchEvent)??null:null;function Os(e){const{nativeEvent:t}=e,n=Mu();return n&&t instanceof n||"touches"in e}function Ds(e){const t=Ps();return e.nativeEvent instanceof MouseEvent&&!(t&&e.nativeEvent instanceof t)}function Rs(e){const{nativeEvent:t}=e;if(!t)return!1;const n=Ps();return n&&t instanceof n||"pointerId"in t}function gi(e){return Ds(e)||Os(e)||Rs(e)}function vi(e){return Os(e)?{x:e.touches[0].pageX,y:e.touches[0].pageY}:Ds(e)||Rs(e)?{x:e.pageX,y:e.pageY}:null}function Su(e){return{target:e.target,currentTarget:e.currentTarget,nativeEvent:e,persist:()=>{}}}function Ns(e,{threshold:t=400,captureEvent:n=!1,detect:r=cn.Pointer,cancelOnMovement:o=!1,cancelOutsideElement:i=!0,filterEvents:a,onStart:u,onMove:c,onFinish:l,onCancel:f}={}){const d=j(!1),p=j(!1),m=j(),h=j(),g=j(e),y=j(null),T=Ie(b=>M=>{p.current||gi(M)&&(a!==void 0&&!a(M)||(n&&M.persist(),u==null||u(M,{context:b}),y.current=vi(M),p.current=!0,m.current=M.currentTarget,h.current=setTimeout(()=>{g.current&&(g.current(M,{context:b}),d.current=!0)},t)))},[n,a,u,t]),_=Ie(b=>(M,A)=>{gi(M)&&p.current&&(y.current=null,n&&M.persist(),d.current?l==null||l(M,{context:b}):p.current&&(f==null||f(M,{context:b,reason:A??ln.CancelledByRelease})),d.current=!1,p.current=!1,h.current!==void 0&&clearTimeout(h.current))},[n,l,f]),E=Ie(b=>M=>{if(c==null||c(M,{context:b}),o!==!1&&y.current){const A=vi(M);if(A){const O=o===!0?25:o,P={x:Math.abs(A.x-y.current.x),y:Math.abs(A.y-y.current.y)};(P.x>O||P.y>O)&&_(b)(M,ln.CancelledByMovement)}}},[_,o,c]),w=Ie(b=>{if(e===null)return{};switch(r){case cn.Mouse:{const M={onMouseDown:T(b),onMouseMove:E(b),onMouseUp:_(b)};return i&&(M.onMouseLeave=A=>{_(b)(A,ln.CancelledOutsideElement)}),M}case cn.Touch:return{onTouchStart:T(b),onTouchMove:E(b),onTouchEnd:_(b)};case cn.Pointer:{const M={onPointerDown:T(b),onPointerMove:E(b),onPointerUp:_(b)};return i&&(M.onPointerLeave=A=>_(b)(A,ln.CancelledOutsideElement)),M}}},[e,_,i,r,E,T]);return se(()=>{if(!window)return;function b(M){const A=Su(M);_()(A)}return window.addEventListener("mouseup",b),window.addEventListener("touchend",b),window.addEventListener("pointerup",b),()=>{window.removeEventListener("mouseup",b),window.removeEventListener("touchend",b),window.removeEventListener("pointerup",b)}},[_]),se(()=>()=>{h.current!==void 0&&clearTimeout(h.current)},[]),se(()=>{g.current=e},[e]),w}function ku({poll:e,lang:t,readOnly:n,refresh:r=()=>{},votePoll:o=()=>{}}){const[i,a]=te("default"),{expired:u,expiresAt:c,id:l,multiple:f,options:d,ownVotes:p,voted:m,votersCount:h,votesCount:g,emojis:y}=e,T=!!c&&new Date(c),_=h||g;let E=0;_<=1e3?E=0:_<=1e4?E=1:_<=1e5&&(E=2);const[w,b]=te(!1),M=d.every(A=>A.votesCount!==null);return s("div",{lang:t,dir:"auto",class:`poll ${n?"read-only":""} ${i==="loading"?"loading":""}`,children:[w&&M||m||u?s(U,{children:[s("div",{class:"poll-options",children:d.map((A,O)=>{const{title:P,votesCount:x}=A,S=_?(x/_*100).toFixed(E):0,V=x>0&&x===Math.max(...d.map(B=>B.votesCount));return s("div",{class:`poll-option poll-result ${V?"poll-option-leading":""}`,style:{"--percentage":`${S}%`},children:[s("div",{class:"poll-option-title",children:[s("span",{children:s(Bt,{text:P,emojis:y})}),m&&p.includes(O)&&s(U,{children:[" ",s(H,{icon:"check-circle"})]})]}),s("div",{class:"poll-option-votes",title:`${x} vote${x===1?"":"s"}`,children:[S,"%"]})]},`${O}-${P}-${x}`)})}),!u&&!m&&s("button",{class:"poll-vote-button plain2",disabled:i==="loading",onClick:A=>{A.preventDefault(),b(!1)},children:[s(H,{icon:"arrow-left",size:"s"})," Hide results"]})]}):s("form",{onSubmit:async A=>{A.preventDefault();const O=A.target,P=new FormData(O),x=[];P.forEach((S,V)=>{V==="poll"&&x.push(S)}),x.length&&(a("loading"),await o(x),a("default"))},children:[s("div",{class:"poll-options",children:d.map((A,O)=>{const{title:P}=A;return s("div",{class:"poll-option",children:s("label",{class:"poll-label",children:[s("input",{type:f?"checkbox":"radio",name:"poll",value:O,disabled:i==="loading",readOnly:n}),s("span",{class:"poll-option-title",children:s(Bt,{text:P,emojis:y})})]})})})}),!n&&s("button",{class:"poll-vote-button",type:"submit",disabled:i==="loading",children:"Vote"})]}),s("p",{class:"poll-meta",children:[!u&&!n&&s("button",{type:"button",class:"plain small",disabled:i==="loading",onClick:A=>{A.preventDefault(),a("loading"),(async()=>(await r(),a("default")))()},title:"Refresh",children:s(H,{icon:"refresh",alt:"Refresh"})}),!m&&!u&&!n&&M&&s("button",{type:"button",class:"plain small",disabled:i==="loading",onClick:A=>{A.preventDefault(),b(!w)},title:w?"Hide results":"Show results",children:[s(H,{icon:w?"eye-open":"eye-close",alt:w?"Hide results":"Show results"})," "]}),!u&&!n&&" ",s("span",{title:g,children:mt(g)})," vote",g===1?"":"s",!!h&&h!==g&&s(U,{children:[" ","• ",s("span",{title:h,children:mt(h)})," ","voter",h===1?"":"s"]})," ","• ",u?"Ended":"Ending"," ",!!T&&s(Mt,{datetime:T})]})," "]})}const Fs=ot();function Au(e,t){if(!(e!=null&&e.length))return!1;const n=e.filter(i=>{const{filter:a}=i,u=a.context.includes(t);return u?a.expiresAt?new Date(a.expiresAt)>new Date:u:!1});if(!n.length)return!1;if(n.some(i=>i.filter.filterAction==="hide"))return{action:"hide"};if(n.some(i=>i.filter.filterAction==="warn")){const i=n.map(a=>a.filter.title);return{action:"warn",titles:i,titlesStr:i.join(" • ")}}return!1}const Mo=st(Au);function Iu(e,t,n){var a;const{filtered:r}=e;if(!(r!=null&&r.length)||n&&((a=e.account)==null?void 0:a.id)===n)return!0;const i=Mo(r,t);return i?i.action!=="hide":!0}function Cf(e,t){if(!(e!=null&&e.length))return[];if(!t)return e;const n=ho();return e.filter(r=>Iu(r,t,n))}const zr=document.createElement("div");function Hr(e){return e?(zr.innerHTML=e,zr.querySelectorAll(".invisible").forEach(t=>{t.remove()}),zr.innerText.length):0}const un="speechSynthesis"in window;function yi(e,t){if(un)try{speechSynthesis.speaking&&speechSynthesis.cancel();const n=new SpeechSynthesisUtterance(e);t&&(n.lang=t),speechSynthesis.speak(n)}catch(n){alert(n)}}function zs(e){var a;const{spoilerText:t,content:n,poll:r,mediaAttachments:o}=e;let i="";return t!=null&&t.trim()?i+=t:i+=cr(n),i=i.trim(),(a=r==null?void 0:r.options)!=null&&a.length&&(i+=` + +📊: +${r.options.map(u=>`${r.multiple?"▪️":"•"} ${u.title}`).join(` +`)}`),o!=null&&o.length&&(i+=" "+o.map(u=>({image:"🖼️",gifv:"🎞️",video:"📹",audio:"🎵",unknown:""})[u.type]||"").join("")),i}function $u(e,t,n){var r=this,o=j(null),i=j(0),a=j(null),u=j([]),c=j(),l=j(),f=j(e),d=j(!0);f.current=e;var p=typeof window<"u",m=!t&&t!==0&&p;if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var h=!!(n=n||{}).leading,g=!("trailing"in n)||!!n.trailing,y="maxWait"in n,T="debounceOnServer"in n&&!!n.debounceOnServer,_=y?Math.max(+n.maxWait||0,t):null;se(function(){return d.current=!0,function(){d.current=!1}},[]);var E=fe(function(){var w=function(x){var S=u.current,V=c.current;return u.current=c.current=null,i.current=x,l.current=f.current.apply(V,S)},b=function(x,S){m&&cancelAnimationFrame(a.current),a.current=m?requestAnimationFrame(x):setTimeout(x,S)},M=function(x){if(!d.current)return!1;var S=x-o.current;return!o.current||S>=t||S<0||y&&x-i.current>=_},A=function(x){return a.current=null,g&&u.current?w(x):(u.current=c.current=null,l.current)},O=function x(){var S=Date.now();if(M(S))return A(S);if(d.current){var V=t-(S-o.current),B=y?Math.min(V,_-(S-i.current)):V;b(x,B)}},P=function(){if(p||T){var x=Date.now(),S=M(x);if(u.current=[].slice.call(arguments),c.current=r,o.current=x,S){if(!a.current&&d.current)return i.current=o.current,b(O,t),h?w(o.current):l.current;if(y)return b(O,t),w(o.current)}return a.current||b(O,t),l.current}};return P.cancel=function(){a.current&&(m?cancelAnimationFrame(a.current):clearTimeout(a.current)),i.current=0,u.current=o.current=c.current=a.current=null},P.isPending=function(){return!!a.current},P.flush=function(){return a.current?A(Date.now()):l.current},P},[h,y,t,_,g,m,p,T]);return E}function Lu(e,t,n){var r=n===void 0?{}:n,o=r.leading,i=r.trailing;return $u(e,t,{maxWait:t,leading:o===void 0||o,trailing:i===void 0||i})}function Cu(e,t){var n=j(null),r=j(null);r.current=t;var o=j(null);se(function(){i()});var i=Ie(function(){var a=o.current,u=r.current,c=a||(u?u instanceof Element?u:u.current:null);n.current&&n.current.element===c&&n.current.subscriber===e||(n.current&&n.current.cleanup&&n.current.cleanup(),n.current={element:c,subscriber:e,cleanup:c?e(c):void 0})},[e]);return se(function(){return function(){n.current&&n.current.cleanup&&(n.current.cleanup(),n.current=null)}},[]),Ie(function(a){o.current=a,i()},[i])}function _i(e,t,n){return e[t]?e[t][0]?e[t][0][n]:e[t][n]:t==="contentBoxSize"?e.contentRect[n==="inlineSize"?"width":"height"]:void 0}function Pu(e){e===void 0&&(e={});var t=e.onResize,n=j(void 0);n.current=t;var r=e.round||Math.round,o=j(),i=te({width:void 0,height:void 0}),a=i[0],u=i[1],c=j(!1);se(function(){return c.current=!1,function(){c.current=!0}},[]);var l=j({width:void 0,height:void 0}),f=Cu(Ie(function(d){return(!o.current||o.current.box!==e.box||o.current.round!==r)&&(o.current={box:e.box,round:r,instance:new ResizeObserver(function(p){var m=p[0],h=e.box==="border-box"?"borderBoxSize":e.box==="device-pixel-content-box"?"devicePixelContentBoxSize":"contentBoxSize",g=_i(m,h,"inlineSize"),y=_i(m,h,"blockSize"),T=g?r(g):void 0,_=y?r(y):void 0;if(l.current.width!==T||l.current.height!==_){var E={width:T,height:_};l.current.width=T,l.current.height=_,n.current?n.current(E):c.current||u(E)}})}),o.current.instance.observe(d,{box:e.box}),function(){o.current&&o.current.instance.unobserve(d)}},[e.box,r]),e.ref);return fe(function(){return{ref:f,width:a.width,height:a.height}},[f,a.width,a.height])}function qn({className:e="truncated"}={}){const t=j(),n=Lu(({height:r})=>{if(t.current){const{scrollHeight:o}=t.current;let i=o>r;if(i){const{height:a,maxHeight:u}=getComputedStyle(t.current),c=parseInt(u||a,10);i=o>c}t.current.classList.toggle(e,i)}},300);return Pu({ref:t,box:"border-box",onResize:n}),t}const ro={public:"earth",unlisted:"group",private:"lock",direct:"message"};var Hs="kvfysmfp",Vs="ufhsfnkm",Ou=".".concat(Hs,"{overflow:hidden;touch-action:none}.").concat(Vs,"{transform-origin: 0 0}"),Du=typeof window>"u",Ru=function(){return!Du&&("ontouchstart"in window||navigator.maxTouchPoints>0)};var Nu=function(e){var t=e.x,n=e.y,r=e.scale;return"scale3d(".concat(r,",").concat(r,", 1) translate3d(").concat(t,"px, ").concat(n,"px, 0)")};var Fu=Math.min,zu=Math.max;function bi(e){var t=e.containerDimension,n=e.childDimension,r=e.padding,o=e.centerContained,i=n-t;return i+2*r<=0&&o?[i/2,i/2]:[Fu(i+r,0)-r,zu(0,i+r)]}var wi=function(e,t){return t?"".concat(e," ").concat(t):e},jn=Math.abs,Hu=Math.min,Vu=Math.sqrt,js=typeof window>"u",ju=js?!1:/(Mac)/i.test(navigator.platform),Dt=function(e){return e==="drag"},rn=function(e){return e==="zoom"},Bu=function(e){return ju&&e.ctrlKey},on=function(e){e.stopPropagation(),e.preventDefault()},Ti=function(e,t){var n=e.x-t.x,r=e.y-t.y;return Vu(n*n+r*r)},Uu=function(e,t){var n=Ti(e[0],e[1]),r=Ti(t[0],t[1]);return r/n},Wu=function(e,t){return e>t-.01&&et?t:n},qu=function(e){return!(e.ctrlKey||e.metaKey)},Gu=function(e){if(e){var t=e.offsetWidth,n=e.offsetHeight;if(t&&n)return{width:t,height:n};var r=getComputedStyle(e),o=parseFloat(r.width),i=parseFloat(r.height);if(i&&o)return{width:o,height:i}}return{width:0,height:0}},Xu=function(e,t){return{x:t.x-e.x,y:t.y-e.y}},Ju=function(e,t){return e.x===t.x&&e.y===t.y},Tt=function(){},Un={x:0,y:0},xi=function(e){Ta(t,e);function t(){var n=e!==null&&e.apply(this,arguments)||this;return n._prevDragMovePoint=null,n._containerObserver=null,n._fingers=0,n._firstMove=!0,n._initialOffset=Pe({},Un),n._interaction=null,n._isDoubleTap=!1,n._isOffsetsSet=!1,n._lastDragPosition=null,n._lastScale=1,n._lastTouchStart=0,n._lastZoomCenter=null,n._listenMouseMove=!1,n._nthZoom=0,n._offset=Pe({},Un),n._startOffset=Pe({},Un),n._startTouches=null,n._updatePlaned=!1,n._wheelTimeOut=null,n._zoomFactor=1,n._initialZoomFactor=1,n._draggingPoint=Pe({},Un),n._ignoreNextClick=!1,n._containerRef=Ea(),n._handleClick=function(r){n._ignoreNextClick&&(n._ignoreNextClick=!1,r.stopPropagation())},n._onResize=function(){var r;!((r=n._containerRef)===null||r===void 0)&&r.current&&(n._updateInitialZoomFactor(),n._setupOffsets(),n._update())},n._handlerOnTouchEnd=n._handlerIfEnable(function(r){n._fingers=r.touches.length,n.props.shouldCancelHandledTouchEndEvents&&(rn(n._interaction)||Dt(n._interaction)&&(n._startOffset.x!==n._offset.x||n._startOffset.y!==n._offset.y))&&on(r),Dt(n._interaction)&&!n._enoughToDrag()&&n._handleClick(r),n._updateInteraction(r)}),n._handlerOnTouchStart=n._handlerIfEnable(function(r){n._firstMove=!0,n._fingers=r.touches.length,n._detectDoubleTap(r)}),n._handlerOnTouchMove=n._handlerIfEnable(function(r){n._isDoubleTap||(n._collectInertia(r),n._firstMove?(n._updateInteraction(r),n._interaction&&on(r),n._startOffset=Pe({},n._offset),n._startTouches=Bn(r.touches)):(rn(n._interaction)?n._startTouches&&n._startTouches.length===2&&r.touches.length===2&&n._handleZoom(r,Uu(n._startTouches,Bn(r.touches))):Dt(n._interaction)&&n._handleDrag(r),n._interaction&&(on(r),n._update())),n._firstMove=!1)}),n._handlerWheel=function(r){if(!n.props.shouldInterceptWheel(r)){on(r);var o=r.pageX,i=r.pageY,a=r.deltaY,u=r.deltaMode,c=1;(Bu(r)||u===1)&&(c=15);var l={touches:[{pageX:o,pageY:i}]},f=n._getOffsetByFirstTouch(l),d=a*c;n._stopAnimation(),n._scaleTo(n._zoomFactor-d/n.props.wheelScaleFactor,f),n._update(),clearTimeout(n._wheelTimeOut),n._wheelTimeOut=setTimeout(function(){return n._sanitize()},100)}},n._handlers=n.props.isTouch()?[["touchstart",n._handlerOnTouchStart],["touchend",n._handlerOnTouchEnd],["touchmove",n._handlerOnTouchMove]]:[["mousemove",n.simulate(n._handlerOnTouchMove),n.props._document],["mouseup",n.simulate(n._handlerOnTouchEnd),n.props._document],["mousedown",n.simulate(n._handlerOnTouchStart)],["click",n._handleClick],["wheel",n._handlerWheel]],n}return t.prototype._handleDragStart=function(n){this._ignoreNextClick=!0,this.props.onDragStart(),this._stopAnimation(),this._resetInertia(),this._lastDragPosition=null,this._hasInteraction=!0,this._draggingPoint=this._offset,this._handleDrag(n)},t.prototype._handleDrag=function(n){var r=this._getOffsetByFirstTouch(n);this._enoughToDrag()?this._drag(r,this._lastDragPosition):this._virtualDrag(r,this._lastDragPosition),this._offset=this._sanitizeOffset(this._offset),this._lastDragPosition=r},t.prototype._resetInertia=function(){this._velocity=null,this._prevDragMovePoint=null},t.prototype._realizeInertia=function(){var n=this,r=this.props,o=r.inertiaFriction,i=r.inertia;if(!(!i||!this._velocity)){var a=this._velocity,u=a.x,c=a.y;if(u||c){this._stopAnimation(),this._resetInertia();var l=function(){if(u*=o,c*=o,!u&&!c)return n._stopAnimation();var f=Pe({},n._offset);if(n._addOffset({x:u,y:c}),n._offset=n._sanitizeOffset(n._offset),Ju(f,n._offset))return n._stopAnimation();n._update({isAnimation:!0})};this._animate(l,{duration:9999})}}},t.prototype._collectInertia=function(n){var r=n.touches;if(this.props.inertia){var o=Bn(r)[0],i=this._prevDragMovePoint;i&&(this._velocity=Xu(o,i)),this._prevDragMovePoint=o}},t.prototype._handleDragEnd=function(){this.props.onDragEnd(),this._end(),this._realizeInertia()},t.prototype._handleZoomStart=function(){this.props.onZoomStart(),this._stopAnimation(),this._lastScale=1,this._nthZoom=0,this._lastZoomCenter=null,this._hasInteraction=!0},t.prototype._handleZoom=function(n,r){var o=Yu(this._getOffsetTouches(n)),i=r/this._lastScale;this._lastScale=r,this._nthZoom+=1,this._nthZoom>3&&(this._scale(i,o),this._drag(o,this._lastZoomCenter),this.props.enforceBoundsDuringZoom&&(this._offset=this._sanitizeOffset(this._offset))),this._lastZoomCenter=o},t.prototype._handleZoomEnd=function(){this.props.onZoomEnd(),this._end()},t.prototype._handleDoubleTap=function(n){var r=this;if(!(this._hasInteraction||this.props.tapZoomFactor===0)){var o=this.props.doubleTapZoomOutOnMaxScale&&this._zoomFactor===this.props.maxZoom||this.props.doubleTapToggleZoom&&this._zoomFactor>1;this.props.onDoubleTap(),this._ignoreNextClick=!0;var i=this._zoomFactor+this.props.tapZoomFactor,a=this._zoomFactor,u=function(l){r._scaleTo(a+l*(i-a),c)},c=this._getOffsetByFirstTouch(n);this._isDoubleTap=!0,a>i&&(c=this._getCurrentZoomCenter()),o?this._zoomOutAnimation():this._animate(u)}},t.prototype._computeInitialOffset=function(){var n=this._getContainerRect(),r=this._getChildSize(),o=r.width,i=r.height,a=-jn(o*this._getInitialZoomFactor()-n.width)/2,u=-jn(i*this._getInitialZoomFactor()-n.height)/2;this._initialOffset={x:a,y:u}},t.prototype._resetOffset=function(){this._offset=Pe({},this._initialOffset)},t.prototype._setupOffsets=function(){this.props.setOffsetsOnce&&this._isOffsetsSet||(this._isOffsetsSet=!0,this._computeInitialOffset(),this._resetOffset())},t.prototype._sanitizeOffset=function(n){var r=this._getContainerRect(),o=this._getChildSize(),i=o.width,a=o.height,u=i*this._getInitialZoomFactor()*this._zoomFactor,c=a*this._getInitialZoomFactor()*this._zoomFactor,l=bi({containerDimension:r.width,childDimension:u,padding:this.props.horizontalPadding,centerContained:this.props.centerContained}),f=l[0],d=l[1],p=bi({containerDimension:r.height,childDimension:c,padding:this.props.verticalPadding,centerContained:this.props.centerContained}),m=p[0],h=p[1];return{x:Vr(f,d,n.x),y:Vr(m,h,n.y)}},t.prototype.alignCenter=function(n){var r=this,o=Pe({duration:250,animated:!0},n),i=o.x,a=o.y,u=o.scale,c=o.animated,l=o.duration,f=i*this._initialZoomFactor,d=a*this._initialZoomFactor,p=this._zoomFactor,m=Pe({},this._offset),h=this._getContainerRect(),g={x:h.width/2,y:h.height/2};if(this._zoomFactor=1,this._offset={x:-(g.x-f),y:-(g.y-d)},this._scaleTo(u,g),this._stopAnimation(),!c)return this._update();var y=this._zoomFactor-p,T={x:this._offset.x-m.x,y:this._offset.y-m.y};this._zoomFactor=p,this._offset=Pe({},m);var _=function(E){var w=m.x+T.x*E,b=m.y+T.y*E;r._zoomFactor=p+y*E,r._offset=r._sanitizeOffset({x:w,y:b}),r._update()};this._animate(_,{callback:function(){return r._sanitize()},duration:l})},t.prototype.scaleTo=function(n){var r=this,o=Pe({duration:250,animated:!0},n),i=o.x,a=o.y,u=o.scale,c=o.animated,l=o.duration,f=this._zoomFactor,d=Pe({},this._offset);if(this._zoomFactor=1,this._offset={x:0,y:0},this._scaleTo(u,{x:i,y:a}),this._stopAnimation(),!c)return this._update();var p=this._zoomFactor-f,m={x:this._offset.x-d.x,y:this._offset.y-d.y};this._zoomFactor=f,this._offset=Pe({},d);var h=function(g){var y=d.x+m.x*g,T=d.y+m.y*g;r._zoomFactor=f+p*g,r._offset={x:y,y:T},r._update()};this._animate(h,{callback:function(){return r._sanitize()},duration:l})},t.prototype._scaleTo=function(n,r){this._scale(n/this._zoomFactor,r),this._offset=this._sanitizeOffset(this._offset)},t.prototype._scale=function(n,r){n=this._scaleZoomFactor(n),this._addOffset({x:(n-1)*(r.x+this._offset.x),y:(n-1)*(r.y+this._offset.y)}),this.props.onZoomUpdate()},t.prototype._scaleZoomFactor=function(n){var r=this._zoomFactor;return this._zoomFactor*=n,this._zoomFactor=Vr(this.props.minZoom,this.props.maxZoom,this._zoomFactor),this._zoomFactor/r},t.prototype._canDrag=function(){return this.props.draggableUnZoomed||!Wu(this._zoomFactor,1)},t.prototype._drag=function(n,r){if(r){var o=-(n.y-r.y),i=-(n.x-r.x);this.props.lockDragAxis?jn(i)>jn(o)?this._addOffset({x:i,y:0}):this._addOffset({y:o,x:0}):this._addOffset({x:i,y:o}),this.props.onDragUpdate()}},t.prototype._virtualDrag=function(n,r){if(r){var o=-(n.y-r.y),i=-(n.x-r.x);this._draggingPoint={x:i+this._draggingPoint.x,y:o+this._draggingPoint.y}}},t.prototype._addOffset=function(n){var r=this._offset,o=r.x,i=r.y;this._offset={x:o+n.x,y:i+n.y}},t.prototype._sanitize=function(){this._zoomFactor=l?(n(1),o._stopAnimation(),c(),o._update()):(p=u(p),n(p),o._update({isAnimation:!0}),requestAnimationFrame(f))}};this._inAnimation=!0,requestAnimationFrame(f)},t.prototype._stopAnimation=function(){this._inAnimation=!1},t.prototype._end=function(){this._hasInteraction=!1,this._sanitize(),this._update()},t.prototype._getContainerRect=function(){var n=this._containerRef.current;return n.getBoundingClientRect()},t.prototype._getChildSize=function(){var n=this._containerRef.current;return Gu(n==null?void 0:n.firstElementChild)},t.prototype._updateInitialZoomFactor=function(){var n=this._getContainerRect(),r=this._getChildSize(),o=n.width/r.width,i=n.height/r.height;this._initialZoomFactor=Hu(o,i)},t.prototype._bindEvents=function(){var n=this,r=this._containerRef.current;window.ResizeObserver?(this._containerObserver=new ResizeObserver(this._onResize),this._containerObserver.observe(r)):window.addEventListener("resize",this._onResize),this._handlers.forEach(function(o){var i=o[0],a=o[1],u=o[2];(u||r).addEventListener(i,a,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(o){return o.addEventListener("load",n._onResize)})},t.prototype._unSubscribe=function(){var n=this,r=this._containerRef.current;this._containerObserver&&(this._containerObserver.disconnect(),this._containerObserver=null),window.removeEventListener("resize",this._onResize),this._handlers.forEach(function(o){var i=o[0],a=o[1],u=o[2];(u||r).removeEventListener(i,a,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(o){return o.removeEventListener("load",n._onResize)})},t.prototype._update=function(n){var r=this;if(!this._updatePlaned){var o=function(){var i=r._getInitialZoomFactor()*r._zoomFactor,a=-r._offset.x/i,u=-r._offset.y/i;r.props.onUpdate({scale:i,x:a,y:u})};if(n!=null&&n.isAnimation)return o();this._updatePlaned=!0,requestAnimationFrame(function(){r._updatePlaned=!1,o()})}},t.prototype._handlerIfEnable=function(n){var r=this;return function(){for(var o=[],i=0;ir?n-r:r-n},t.prototype._enoughToDrag=function(){return this._distanceBetweenNumbers(this._startOffset.x,this._draggingPoint.x)>5||this._distanceBetweenNumbers(this._startOffset.y,this._draggingPoint.y)>5},t.prototype._updateInteraction=function(n){var r=this._fingers;if(r===2)return this._setInteraction("zoom",n);if(r===1&&this._canDrag())return this._setInteraction("drag",n);this._setInteraction(null,n)},t.prototype._detectDoubleTap=function(n){var r=new Date().getTime();this._fingers>1&&(this._lastTouchStart=0),r-this._lastTouchStart<300?(on(n),this._handleDoubleTap(n),rn(this._interaction)?this._handleZoomEnd():Dt(this._interaction)&&this._handleDragEnd()):this._isDoubleTap=!1,this._fingers===1&&(this._lastTouchStart=r)},t.prototype.simulate=function(n){var r=this;return function(o){var i=o.pageX,a=o.pageY,u=o.type,c=u==="mouseup",l=u==="mousedown";l&&(o.preventDefault(),r._listenMouseMove=!0),r._listenMouseMove&&(o.touches=c?[]:[{pageX:i,pageY:a}],n(o)),c&&(r._listenMouseMove=!1)}},t.prototype.componentDidMount=function(){this._bindEvents(),this._update()},t.prototype.componentWillUnmount=function(){this._stopAnimation(),this._unSubscribe()},t.prototype.render=function(){var n=this.props,r=n.children,o=n.containerProps,i=xa.only(r),a=o||{};return Dn.createElement(Dn.Fragment,null,Dn.createElement("style",null,Ou),Dn.createElement("div",Pe({},a,{ref:this._containerRef,className:wi(Hs,a.className)}),Ri(i,{className:wi(Vs,i.props.className)})))},t.defaultProps={animationDuration:250,draggableUnZoomed:!0,enforceBoundsDuringZoom:!1,centerContained:!1,enabled:!0,inertia:!0,inertiaFriction:.96,horizontalPadding:0,isTouch:Ru,lockDragAxis:!1,maxZoom:5,minZoom:.5,onDoubleTap:Tt,onDragEnd:Tt,onDragStart:Tt,onDragUpdate:Tt,onZoomEnd:Tt,onZoomStart:Tt,onZoomUpdate:Tt,setOffsetsOnce:!1,shouldInterceptWheel:qu,shouldCancelHandledTouchEndEvents:!1,tapZoomFactor:1,verticalPadding:0,wheelScaleFactor:1500,zoomOutFactor:1.3,doubleTapZoomOutOnMaxScale:!1,doubleTapToggleZoom:!1,_document:js?null:window.document},t}(Fi);if(0)var Pf,Of,Df,Rf,Nf,Ff,zf;function jr(e){if(!e)return;let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.round(e%60);return t===0?`${n}:${r.toString().padStart(2,"0")}`:`${t}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}const Qu=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),ed="ALT",Br=e=>{const{alt:t,lang:n,index:r,...o}=e;return!t||!t.trim()?null:s("button",{type:"button",class:"alt-badge clickable",...o,onClick:i=>{i.stopPropagation(),i.preventDefault(),W.showMediaAlt={alt:t,lang:n}},title:"Media description",children:[ed,!!r&&s("sup",{children:r})]})},td=140,nd=280,Bs=st(e=>e!=null&&e.length?e.length>td||/[\n\r].*[\n\r]/.test(e.trim()):!1);function rd({class:e="",media:t,to:n,lang:r,showOriginal:o,autoAnimate:i,showCaption:a,allowLongerCaption:u,altIndex:c,onClick:l=()=>{}}){let{blurhash:f,description:d,meta:p,previewRemoteUrl:m,previewUrl:h,remoteUrl:g,url:y,type:T}=t;/no\-preview\./i.test(h)&&(h=null);const{original:_={},small:E,focus:w}=p||{},b=o?_==null?void 0:_.width:(E==null?void 0:E.width)||(_==null?void 0:_.width),M=o?_==null?void 0:_.height:(E==null?void 0:E.height)||(_==null?void 0:_.height),A=o?y:h||y,O=o?g:m||g,P=b&&M,x=P?b>M?"landscape":"portrait":null,S=f?xo(f):null,V=j();let B;if(w){const Y=(w.x+1)/2*100,ge=(1-w.y)/2*100;B=`${Y.toFixed(0)}% ${ge.toFixed(0)}%`}const D=j(),$=Ie(({x:Y,y:ge,scale:ee})=>{const{current:J}=D;if(J){const pe=Nu({x:Y,y:ge,scale:ee});ee===1?J.style.removeProperty("transform"):J.style.setProperty("transform",pe),J.closest(".media-zoom").style.touchAction=ee<=1.01?"pan-x":""}},[]),[k,R]=te(!1),L={enabled:k,draggableUnZoomed:!1,inertiaFriction:.9,tapZoomFactor:2,doubleTapToggleZoom:!0,containerProps:{className:"media-zoom",style:{overflow:"visible"}},onUpdate:$},z=fe(()=>n?Y=>s(jt,{to:n,...Y}):"div",[n]),N=O?od(O):null,C=T==="unknown"&&N&&/\.(mp4|m4r|m4v|mov|webm)$/i.test(N.pathname),K=T==="unknown"&&N&&/\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(N.pathname),Z=T==="image"||T==="unknown"&&h&&!C&&!K,ne=j(),[le,Te]=te(!1);pn(()=>{if(!Z||!o||!ne.current)return;const{offsetWidth:Y,offsetHeight:ge}=ne.current,ee=b{const{children:ge,...ee}=Y;return s("figure",{...ee,children:[ge,s("figcaption",{class:"media-caption",lang:r,dir:"auto",onClick:J=>{J.preventDefault(),J.stopPropagation(),W.showMediaAlt={alt:d,lang:r}},children:d})]})}:U,[Ee,ct]=te(void 0);if(Z)return L.containerProps.style.display="inherit",pn(()=>{Qu&&o&&(async()=>{try{await fetch(A,{mode:"no-cors"}),D.current.src=A}catch{}})()},[A]),s(oe,{children:s(z,{ref:ne,class:`media media-image ${e}`,onClick:l,"data-orientation":x,"data-has-alt":!q||void 0,"data-has-natural-aspect-ratio":Ee||void 0,style:o?{backgroundImage:`url(${h})`,backgroundSize:le?`${b}px ${M}px`:void 0,...ye}:ie,children:o?s(xi,{...L,children:s("img",{ref:D,src:A,alt:d,width:b,height:M,"data-orientation":x,loading:"eager",decoding:"sync",onLoad:Y=>{Y.target.closest(".media-image").style.backgroundImage="",Y.target.closest(".media-zoom").style.display="",R(!0)},onError:Y=>{const{src:ge}=Y.target;ge===A&&O&&A!==O&&(Y.target.src=O)}})}):s(U,{children:[s("img",{src:A,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",style:{objectPosition:B||"center","--anim-duration":`${Math.min(Math.max(Math.max(b,M)/100,5),120)}s`},onLoad:Y=>{Y.target.dataset.loaded=!0;const ge=Y.target.closest(".media");if(!P&&ge){const{naturalWidth:ee,naturalHeight:J}=Y.target;ge.dataset.orientation=ee>J?"landscape":"portrait",ge.style.setProperty("--width",`${ee}px`),ge.style.setProperty("--height",`${J}px`),ge.style.aspectRatio=`${ee}/${J}`}if(ge){const{clientWidth:ee,clientHeight:J,naturalWidth:pe,naturalHeight:ue}=Y.target;if(ee&&J&&pe&&ue)if(pe<88||ue<88)ge.dataset.hasSmallDimension=!0;else{const ze=ue*ee/pe;Math.abs(ze-J)<5&&ct(!0)}}},onError:Y=>{const{src:ge}=Y.target;ge===A&&A!==O&&(Y.target.src=O)}}),!q&&s(Br,{alt:d,lang:r,index:c})]})})});if(T==="gifv"||T==="video"||C){const Y=_.duration>0,ge=_.duration<31,ee=T==="gifv"&&ge,J=_.duration<61,pe=jr(_.duration),ue=!o&&!i&&ee,ae=!o&&i&&ee,ze=_.duration>5,Le=` + + `,Ve=` + + `;return s(oe,{children:s(z,{class:`media ${e} media-${ee?"gif":"video"} ${ae?"media-contain":""} ${ue?"media-hover-animate":""}`,"data-orientation":x,"data-formatted-duration":o?void 0:pe,"data-label":ee&&!o&&!ae?"GIF":void 0,"data-has-alt":!q||void 0,style:!o&&ie,onClick:Se=>{if(ue)try{V.current.pause()}catch{}l(Se)},onMouseEnter:()=>{if(ue)try{V.current.play()}catch{}},onMouseLeave:()=>{if(ue)try{V.current.pause()}catch{}},onFocus:()=>{if(ue)try{V.current.play()}catch{}},onBlur:()=>{if(ue)try{V.current.pause()}catch{}},children:[o||ae?ee&&o?s(xi,{...L,enabled:!0,children:s("div",{ref:D,dangerouslySetInnerHTML:{__html:Le}})}):ee?s("div",{class:"video-container",dangerouslySetInnerHTML:{__html:Le}}):s("div",{class:"video-container",dangerouslySetInnerHTML:{__html:Ve}}):ee?s("video",{ref:V,src:y,poster:h,width:b,height:M,"data-orientation":x,preload:"auto",playsinline:!0,loop:!0,muted:!0,onTimeUpdate:ze?Se=>{const{target:Ae}=Se,Re=Ae==null?void 0:Ae.closest(".media-gif");if(Re){const _e=Ae.currentTime/Ae.duration*100;Re.style.setProperty("--progress",`${_e}%`)}}:void 0}):s(U,{children:[h?s("img",{src:h,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",decoding:"async",onLoad:Se=>{if(!P){const Ae=Se.target.closest(".media");if(Ae){const{naturalHeight:Re,naturalWidth:_e}=Se.target;Ae.dataset.orientation=_e>Re?"landscape":"portrait",Ae.style.setProperty("--width",`${_e}px`),Ae.style.setProperty("--height",`${Re}px`),Ae.style.aspectRatio=`${_e}/${Re}`}}}}):s("video",{src:y+"#t=0.1",width:b,height:M,"data-orientation":x,preload:"metadata",muted:!0,disablePictureInPicture:!0,onLoadedMetadata:Se=>{if(!Y){const{duration:Ae}=Se.target;if(Ae){const Re=jr(Ae),_e=Se.target.closest(".media-video");_e&&(_e.dataset.formattedDuration=Re)}}}}),s("div",{class:"media-play",children:s(H,{icon:"play",size:"xl"})})]}),!o&&!q&&s(Br,{alt:d,lang:r,index:c})]})})}else if(T==="audio"||K){const Y=jr(_.duration);return s(oe,{children:s(z,{class:`media media-audio ${e}`,"data-formatted-duration":o?void 0:Y,"data-has-alt":!q||void 0,onClick:l,style:!o&&ie,children:[o?s("audio",{src:g||y,preload:"none",controls:!0,autoPlay:!0}):h?s("img",{src:h,alt:q?"":d,width:b,height:M,"data-orientation":x,loading:"lazy",onError:ge=>{var ee,J;try{(J=(ee=ge.target)==null?void 0:ee.remove)==null||J.call(ee)}catch{}}}):null,!o&&s(U,{children:[s("div",{class:"media-play",children:s(H,{icon:"play",size:"xl"})}),!q&&s(Br,{alt:d,lang:r,index:c})]})]})})}}function od(e){return URL.parse(e,location.origin)}const oo=it(rd,(e,t)=>{const n=e.media||{},r=t.media||{};return(n==null?void 0:n.id)===(r==null?void 0:r.id)&&n.url===r.url&&e.to===t.to&&e.class===t.class}),id=280,sd=140,ad=zi({limit:1,interval:1e3});function cd(e,t){return t.v1.accounts.$select(e).fetch()}const ld=fo(ad(cd)),dn={public:"Public",unlisted:"Unlisted",private:"Followers only",direct:"Private mention"},ud=window.ontouchstart!==void 0&&/iPad|iPhone|iPod/.test(navigator.userAgent),dd=new Intl.RelativeTimeFormat,Mi=80;function fd(e){var t;return(t=e==null?void 0:e.options)!=null&&t.length?`📊: +${e.options.map(n=>`- ${n.title}${n.votesCount>=0?` (${n.votesCount})`:""}`).join(` +`)}`:""}function Ur(e){const{spoilerText:t,content:n,poll:r}=e;return(t?`${t} + +`:"")+cr(n)+fd(r)}const Si=it(({post:e,instance:t,previewMode:n})=>{const{content:r,emojis:o,language:i,mentions:a,url:u}=e;return s("div",{lang:i,dir:"auto",class:"inner-content",onClick:$l({mentions:a,instance:t,previewMode:n,statusURL:u}),dangerouslySetInnerHTML:{__html:ws(r,{emojis:o,postEnhanceDOM:c=>{c.querySelectorAll('a.u-url[target="_blank"]').forEach(l=>{/http/i.test(l.innerText.trim())||l.removeAttribute("target")})}})}})},(e,t)=>{const{post:n}=e,{post:r}=t;return n.content===r.content}),hd={s:"small",m:"medium",l:"large"},pd=st(e=>{if(e=e==null?void 0:e.trim(),(e==null?void 0:e.length)>500)return null;const n=Aa(e)[0];return n!=null&&n.lang&&(n==null?void 0:n.accuracy)>.5?n.lang:null});function Ut({statusID:e,status:t,instance:n,size:r="m",contentTextWeight:o,readOnly:i,enableCommentHint:a,withinContext:u,skeleton:c,enableTranslate:l,forceTranslate:f,previewMode:d,onMediaClick:p,quoted:m,onStatusLinkClick:h=()=>{},showFollowedTags:g,allowContextMenu:y,showActionsBar:T,showReplyParent:_,mediaFirst:E}){var Uo,Wo,Ko;if(c)return s("div",{class:`status skeleton ${E?"status-media-first small":""}`,children:[!E&&s(nt,{size:"xxl"}),s("div",{class:"container",children:[s("div",{class:"meta",children:[(r==="s"||E)&&s(nt,{size:"m"})," ███ ████████"]}),s("div",{class:"content-container",children:[E&&s("div",{class:"media-first-container"}),s("div",{class:`content ${E?"media-first-content":""}`,children:s("p",{children:"████ ████████"})})]})]})]});const{masto:w,instance:b,authenticated:M}=Xn({instance:n}),{instance:A}=Xn(),O=b===A;let P=tt(e||(t==null?void 0:t.id),b);const x=wn(W);if(t||(t=x.statuses[P]||x.statuses[e],P=tt(t==null?void 0:t.id,b)),!t)return null;const{account:{acct:S,avatar:V,avatarStatic:B,id:D,url:$,displayName:k,username:R,emojis:L,bot:z,group:N},id:C,repliesCount:K,reblogged:Z,reblogsCount:ne,favourited:le,favouritesCount:Te,bookmarked:he,poll:ve,muted:ye,sensitive:ie,spoilerText:de,visibility:q,language:oe,editedAt:Ee,filtered:ct,card:Y,createdAt:ge,inReplyToId:ee,inReplyToAccountId:J,content:pe,mentions:ue,mediaAttachments:ae,reblog:ze,uri:Le,url:Ve,emojis:Se,tags:Ae,pinned:Re,_deleted:_e,_pinned:Zt,emojiReactions:It}=t,[$t,Yt]=te(null);se(()=>{if(!pe||oe)return;let v;return v=setTimeout(()=>{let F=pd(cr(pe,{preProcess:Q=>{Q.querySelectorAll(".mention, .hashtag, pre, code, a:has(.invisible)").forEach(ce=>{ce.remove()}),Q.querySelectorAll("a").forEach(ce=>{const Ce=ce.innerText.trim();(Ce.startsWith("https://")||Ce.startsWith("http://"))&&ce.remove()})}}));Yt(F)},1e3),()=>clearTimeout(v)},[pe,oe]);const we=oe||$t,qt=!!(ae!=null&&ae.length);E&&qt&&(r="s");const lt=fe(()=>ho(),[]),Qe=fe(()=>lt&<===D,[D,lt]),hr=De(Fs),ut=!Qe&&!i&&!d&&Mo(ct,hr);if((ut==null?void 0:ut.action)==="hide")return null;const re=v=>{v.shiftKey};if(r!=="l"&&ut)return s(Td,{status:t,filterInfo:ut,instance:b,containerProps:{onMouseEnter:re},showFollowedTags:!0,quoted:m});const be=new Date(ge),He=new Date(Ee);let Ne=ue==null?void 0:ue.find(v=>v.id===J);!Ne&&J===C&&(Ne={url:$,username:R,displayName:k});const[xe,vt]=te(Ne);if(!u&&!xe&&J){const v=W.accounts[J];v?vt(v):ld(J,w).then(F=>{vt(F),W.accounts[F.id]=F}).catch(F=>{})}const En=J===lt||(ue==null?void 0:ue.find(v=>v.id===lt)),je=fe(()=>!!(Zo.account.get("preferences")||{})["reading:expand:spoilers"],[]),xn=fe(()=>(Zo.account.get("preferences")||{})["reading:expand:media"]||"default",[]),Ke=d||je||!!x.spoilers[C],dt=d||xn==="show_all"||!!x.spoilersMedia[C];if(ze)return N?s("div",{"data-state-post-id":P,class:"status-group",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"group",size:"l",alt:"Group"})," ",s(an,{account:t.account,instance:b,showAvatar:!0})]}),s(Ut,{status:e?null:ze,statusID:e?ze.id:null,instance:b,size:r,contentTextWeight:o,readOnly:i,mediaFirst:E})]}):s("div",{"data-state-post-id":P,class:"status-reblog",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"rocket",size:"l"})," ",s(an,{account:t.account,instance:b,showAvatar:!0})," ",s("span",{children:"boosted"})]}),s(Ut,{status:e?null:ze,statusID:e?ze.id:null,instance:b,size:r,contentTextWeight:o,readOnly:i,enableCommentHint:!0,mediaFirst:E})]});const pr=Ie(({children:v})=>s("div",{"data-state-post-id":P,class:"status-followed-tags",onMouseEnter:re,children:[s("div",{class:"status-pre-meta",children:[s(H,{icon:"hashtag",size:"l"})," ",x.statusFollowedTags[P].slice(0,3).map(F=>s(jt,{to:b?`/${b}/t/${F}`:`/t/${F}`,class:"status-followed-tag-item",children:F},F))]}),v]}),[P,b,x.statusFollowedTags[P]]),mr=g&&((Uo=x.statusFollowedTags[P])!=null&&Uo.length)?pr:U,me=r==="l",[yt,Gt]=te(f),_t=us(!0),ta=x.settings.contentTranslationHideLanguages||[],{contentTranslation:gr,contentTranslationAutoInline:ko}=x.settings;gr||(l=!1);const Ao=fe(()=>{if(!gr||!ko||i||u&&!me||d||de||ie||ve||Y||ae!=null&&ae.length)return!1;const v=Hr(pe);return v>0&&v<=sd},[gr,ko,i,u,me,d,de,ie,ve,Y,ae,pe]),[vr,Mn]=te(!1),[na,yr]=te(!1),Io=qn(),$o=qn(),ra=qn(),_r="Read more →",Lt=j(null),Xt="Sorry, your current logged-in instance can't interact with this post from another instance.",Lo=Ie(()=>Math.max(Math.round((de.length+Hr(pe))/140)||1,1),[de,pe]),Co=yn(be),Po=Ee&&yn(He);let Jt=M&&q!=="direct"&&q!=="private";q==="private"&&Qe&&(Jt=!0);const Sn=v=>{var F;if(!O||!M)return alert(Xt);(v!=null&&v.shiftKey||(F=v==null?void 0:v.syntheticEvent)!=null&&F.shiftKey)&&Ka({replyToStatus:t})||zn({replyToStatus:t})},br=fe(()=>ae.some(v=>{var F,Q;return!((Q=(F=v.description)==null?void 0:F.trim)!=null&&Q.call(F))}),[ae]),Oo=fe(()=>Math.floor((new Date-be)/(1e3*60*60*24*30)),[be]),df=async()=>{if(!O||!M)return alert(Xt),!1;try{if(!Z){let v="Boost this post?";if(br&&(v+=` + +⚠️ Some media have no descriptions.`),!confirm(v))return!1}if(W.statuses[P]={...t,reblogged:!Z,reblogsCount:ne+(Z?-1:1)},Z){const v=await w.v1.statuses.$select(C).unreblog();return Ze(v,b),!0}else{const v=await w.v1.statuses.$select(C).reblog();return Ze(v,b),!0}}catch{return W.statuses[P]=t,!1}},wr=async()=>{if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,reblogged:!Z,reblogsCount:ne+(Z?-1:1)},Z){const v=await w.v1.statuses.$select(C).unreblog();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).reblog();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}},Do=async()=>{if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,favourited:!le,favouritesCount:Te+(le?-1:1)},le){const v=await w.v1.statuses.$select(C).unfavourite();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).favourite();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}},Tr=async()=>{try{const v=await Do();!me&&v&&$e(le?`Unliked @${R||S}'s post`:`Liked @${R||S}'s post`)}catch{}},Ro=async()=>{if(Fn("@mastodon/post-bookmark")){if(!O||!M)return alert(Xt),!1;try{if(W.statuses[P]={...t,bookmarked:!he},he){const v=await w.v1.statuses.$select(C).unbookmark();Ze(v,b)}else{const v=await w.v1.statuses.$select(C).bookmark();Ze(v,b)}return!0}catch{return W.statuses[P]=t,!1}}},No=async()=>{try{const v=await Ro();!me&&v&&$e(he?`Unbookmarked @${R||S}'s post`:`Bookmarked @${R||S}'s post`)}catch{}},kn=!!we&&we!==_t&&!to([we],[_t])&&!ta.find(v=>we===v||to([we],[v])),Fo=j(),zo=j();async function oa(v){var ce,Ce,Ct,Er;v&&(Fo.current=w.v1.statuses.$select(e).rebloggedBy.list({limit:Mi}),zo.current=w.v1.statuses.$select(e).favouritedBy.list({limit:Mi}));const[{value:F},{value:Q}]=await Promise.allSettled([Fo.current.next(),zo.current.next()]);if((ce=F.value)!=null&&ce.length||(Ce=Q.value)!=null&&Ce.length){const bt=[];return(Ct=F.value)!=null&&Ct.length&&bt.push(...F.value.map(wt=>(wt._types=["reblog"],wt))),(Er=Q.value)!=null&&Er.length&&bt.push(...Q.value.map(wt=>(wt._types=["favourite"],wt))),{value:bt,done:F.done&&Q.done}}return{value:[],done:!0}}const ia=j(),Ho=["public","unlisted"].includes(q),sa=["public","unlisted","private"].includes(q),Vo=s(U,{children:[!me&&O&&s(U,{children:s("div",{class:"menu-control-group-horizontal status-menu",children:[s(ke,{onClick:Sn,children:[s(H,{icon:"comment"}),s("span",{children:K>0?mt(K):"Reply"})]}),s(Ar,{subMenu:!0,confirmLabel:s(U,{children:[s(H,{icon:"rocket"}),s("span",{children:Z?"Unboost":"Boost"})]}),className:`menu-reblog ${Z?"checked":""}`,menuExtras:s(ke,{onClick:()=>{zn({draftStatus:{status:` +${Ve}`}})},children:[s(H,{icon:"quote"}),s("span",{children:"Quote"})]}),menuFooter:br&&!Z?s("div",{class:"footer",children:[s(H,{icon:"alert"}),"Some media have no descriptions."]}):Oo>=3&&s("div",{class:"footer",children:[s(H,{icon:"info"}),s("span",{children:["Old post (",s("strong",{children:dd.format(-Oo,"month")}),")"]})]}),disabled:!Jt,onClick:async()=>{try{const v=await wr();!me&&v&&$e(Z?`Unboosted @${R||S}'s post`:`Boosted @${R||S}'s post`)}catch{}},children:[s(H,{icon:"rocket"}),s("span",{children:ne>0?mt(ne):Z?"Unboost":"Boost…"})]}),s(ke,{onClick:Tr,className:`menu-favourite ${le?"checked":""}`,children:[s(H,{icon:"heart"}),s("span",{children:Te>0?mt(Te):le?"Unlike":"Like"})]}),Fn("@mastodon/post-bookmark")&&s(ke,{onClick:No,className:`menu-bookmark ${he?"checked":""}`,children:[s(H,{icon:"bookmark"}),s("span",{children:he?"Unbookmark":"Bookmark"})]})]})}),!me&&O&&(me||T)&&s(tn,{}),(me||T)&&s(U,{children:s(ke,{onClick:()=>{W.showGenericAccounts={heading:"Boosted/Liked by…",fetchAccounts:oa,instance:b,showReactions:!0,postID:P}},children:[s(H,{icon:"react"}),s("span",{children:["Boosted/Liked by",s("span",{class:"more-insignificant",children:"…"})]})]})}),!E&&s(U,{children:[(l||!we||kn)&&s(tn,{}),l?s("div",{class:un?"menu-horizontal":"",children:[s(ke,{disabled:yt,onClick:()=>{Gt(!0)},children:[s(H,{icon:"translate"}),s("span",{children:"Translate"})]}),un&&s(ke,{onClick:()=>{const v=Ur(t);v&&yi(v,we)},children:[s(H,{icon:"speak"}),s("span",{children:"Speak"})]})]}):(!we||kn)&&s("div",{class:un?"menu-horizontal":"",children:[s(li,{to:`${b?`/${b}`:""}/s/${C}?translate=1`,children:[s(H,{icon:"translate"}),s("span",{children:"Translate"})]}),un&&s(ke,{onClick:()=>{const v=Ur(t);v&&yi(v,we)},children:[s(H,{icon:"speak"}),s("span",{children:"Speak"})]})]})]}),(!me&&O||l||!we||kn)&&s(tn,{}),!me&&s(U,{children:s(li,{to:b?`/${b}/s/${C}`:`/s/${C}`,onClick:v=>{h(v,t)},children:[s(H,{icon:"arrows-right"}),s("small",{children:["View post by @",R||S,s("br",{}),s("span",{class:"more-insignificant",children:[dn[q]," • ",Co]})]})]})}),!!Ee&&s(U,{children:s(ke,{onClick:()=>{Mn(C)},children:[s(H,{icon:"history"}),s("small",{children:["Show Edit History",s("br",{}),s("span",{class:"more-insignificant",children:["Edited: ",Po]})]})]})}),s(ke,{href:Ve,target:"_blank",children:[s(H,{icon:"external"}),s("small",{class:"menu-double-lines",children:bd(Ve)})]}),s("div",{class:"menu-horizontal",children:[s(ke,{onClick:()=>{try{navigator.clipboard.writeText(Ve),$e("Link copied")}catch{$e("Unable to copy link")}},children:[s(H,{icon:"link"}),s("span",{children:"Copy"})]}),Ho&&(navigator==null?void 0:navigator.share)&&((Wo=navigator==null?void 0:navigator.canShare)==null?void 0:Wo.call(navigator,{url:Ve}))&&s(ke,{onClick:()=>{try{navigator.share({url:Ve})}catch{alert("Sharing doesn't seem to work.")}},children:[s(H,{icon:"share"}),s("span",{children:"Share…"})]})]}),Ho&&me&&s(ke,{onClick:()=>{yr(!0)},children:[s(H,{icon:"code"}),s("span",{children:"Embed post"})]}),(Qe||En)&&s(tn,{}),(Qe||En)&&s(ke,{onClick:async()=>{try{const v=await w.v1.statuses.$select(C)[ye?"unmute":"mute"]();Ze(v,b),$e(ye?"Conversation unmuted":"Conversation muted")}catch{$e(ye?"Unable to unmute conversation":"Unable to mute conversation")}},children:ye?s(U,{children:[s(H,{icon:"unmute"}),s("span",{children:"Unmute conversation"})]}):s(U,{children:[s(H,{icon:"mute"}),s("span",{children:"Mute conversation"})]})}),Qe&&sa&&s(ke,{onClick:async()=>{try{const v=await w.v1.statuses.$select(C)[Re?"unpin":"pin"]();Ze(v,b),$e(Re?"Post unpinned from profile":"Post pinned to profile")}catch{$e(Re?"Unable to unpin post":"Unable to pin post")}},children:Re?s(U,{children:[s(H,{icon:"unpin"}),s("span",{children:"Unpin from profile"})]}):s(U,{children:[s(H,{icon:"pin"}),s("span",{children:"Pin to profile"})]})}),Qe&&s("div",{class:"menu-horizontal",children:[Fn("@mastodon/post-edit")&&s(ke,{onClick:()=>{zn({editStatus:t})},children:[s(H,{icon:"pencil"}),s("span",{children:"Edit"})]}),me&&s(Ar,{subMenu:!0,confirmLabel:s(U,{children:[s(H,{icon:"trash"}),s("span",{children:"Delete this post?"})]}),menuItemClassName:"danger",onClick:()=>{(async()=>{try{await w.v1.statuses.$select(C).remove();const v=Vi(C,b);v._deleted=!0,$e("Deleted")}catch{$e("Unable to delete")}})()},children:[s(H,{icon:"trash"}),s("span",{children:"Delete…"})]})]}),!Qe&&me&&s(U,{children:[s(tn,{}),s(ke,{className:"danger",onClick:()=>{W.showReportModal={account:t.account,post:t}},children:[s(H,{icon:"flag"}),s("span",{children:"Report post…"})]})]})]}),jo=j(),[An,Qt]=te(!1),[In,$n]=te({}),Ln=y||!me&&!d&&!_e&&!m,aa=Ns(ud&&Ln?v=>{var Ce;if(v.pointerType==="mouse")return;const{clientX:F,clientY:Q}=((Ce=v.touches)==null?void 0:Ce[0])||v,ce=v.target.closest("a");ce&&Lt.current.contains(ce)&&!ce.getAttribute("href").startsWith("#")||(v.preventDefault(),$n({anchorPoint:{x:F,y:Q},direction:"right"}),Qt(!0))}:null,{threshold:600,captureEvent:!0,detect:"touch",cancelOnMovement:2}),Cn=!i&&!d&&!m,ca=Nt("r, shift+r",Sn,{enabled:Cn}),la=Nt("f, l",Tr,{enabled:Cn}),ua=Nt("d",No,{enabled:Cn}),da=Nt("shift+b",()=>{(async()=>{try{const v=await wr();!me&&v&&$e(Z?`Unboosted @${R||S}'s post`:`Boosted @${R||S}'s post`)}catch{}})()},{enabled:Cn&&Jt}),fa=Nt("x",v=>{const F=document.activeElement.closest(".status-link, .status-focus");if(F){const Q=F.querySelector(".spoiler-button:not(.spoiling)");if(Q)v.stopPropagation(),Q.click();else{const ce=F.querySelector(".spoiler-media-button:not(.spoiling)");ce&&(v.stopPropagation(),ce.click())}}}),Pn=ae.slice(0,me?void 0:4),On=ae.length>1&&Pn.some(v=>!!v.description&&!Bs(v.description)),ha=fe(()=>{if(!On)return null;const v=[];return Pn.forEach((F,Q)=>{if(!F.description)return;const ce=v.findIndex(Ce=>Ce.media.description===F.description);ce===-1?v.push({media:F,indices:[Q]}):v[ce].indices.push(Q)}),v.map(({media:F,indices:Q})=>s("div",{"data-caption-index":Q.map(ce=>ce+1).join(" "),onClick:ce=>{ce.preventDefault(),ce.stopPropagation(),W.showMediaAlt={alt:F.description,lang:we}},title:F.description,children:[s("sup",{children:Q.map(ce=>ce+1).join(" ")})," ",F.description]},F.id))},[On,Pn,we]),en=fe(()=>{var v;return!!ee&&J===((v=t.account)==null?void 0:v.id)||!!x.statusThreadNumber[P]},[ee,J,(Ko=t.account)==null?void 0:Ko.id,x.statusThreadNumber[P]]),pa=fe(()=>a&&!en&&!u&&!ee&&q==="public"&&K>0,[a,en,u,ee,K,q]),Bo=fe(()=>{if(Y||ve||ie||de||ae!=null&&ae.length||en||u||ee||K<=0||!/[???︖❓❔⁇⁈⁉¿‽؟]/.test(pe))return!1;const Q=Hr(pe);if(Q>0&&Q<=id)return!0},[Y,ve,ie,de,ae,ze,en,u,ee,K,pe]);return s(mr,{children:[_&&!!(ee&&J)&&s(wd,{sKey:P}),s("article",{"data-state-post-id":P,ref:v=>{var Q;Lt.current=v;const F=((Q=v==null?void 0:v.closest)==null?void 0:Q.call(v,".timeline-item, .timeline-item-alt, .status-link, .status-focus"))||v;ca.current=F,la.current=F,ua.current=F,da.current=F,fa.current=F},tabindex:"-1",class:`status ${!u&&ee&&xe?"status-reply-to":""} visibility-${q} ${Zt?"status-pinned":""} ${hd[r]} ${_e?"status-deleted":""} ${m?"status-card":""} ${An?"status-menu-open":""} ${E&&qt?"status-media-first":""}`,onMouseEnter:re,onContextMenu:v=>{var ce,Ce;if(!Ln||v.metaKey)return;const F=v.target.closest("a");if(F&&Lt.current.contains(F)&&!F.getAttribute("href").startsWith("#"))return;const Q=(ce=window.getSelection)==null?void 0:ce.call(window);if(Q.toString().length>0){const{anchorNode:Ct}=Q;if((Ce=Lt.current)!=null&&Ce.contains(Ct))return}v.preventDefault(),$n({anchorPoint:{x:v.clientX,y:v.clientY},direction:"right"}),Qt(!0)},...Ln?aa():{},children:[Ln&&s(Qi,{ref:jo,state:An?"open":void 0,...In,onClose:v=>{var F,Q,ce;Qt(!1),(v==null?void 0:v.reason)==="click"&&((ce=(Q=(F=Lt.current)==null?void 0:F.closest("[tabindex]"))==null?void 0:Q.focus)==null||ce.call(Q))},portal:{target:document.body},containerProps:{style:{zIndex:1001},onClick:()=>{var v,F;(F=(v=jo.current)==null?void 0:v.closeMenu)==null||F.call(v)}},overflow:"auto",boundingBoxPadding:cs(),unmountOnClose:!0,children:Vo}),T&&r!=="l"&&!d&&!i&&!_e&&!m&&s("div",{class:`status-actions ${An==="actions-bar"?"open":""}`,ref:ia,children:[s(Rt,{size:"s",title:"Reply",alt:"Reply",class:"reply-button",icon:"comment",iconSize:"m",onClick:Sn}),s(Rt,{size:"s",checked:le,title:["Like","Unlike"],alt:["Like","Liked"],class:"favourite-button",icon:"heart",iconSize:"m",count:Te,onClick:Tr}),s("button",{type:"button",title:"More",class:"plain more-button",onClick:v=>{v.preventDefault(),v.stopPropagation(),$n({anchorRef:{current:v.currentTarget},align:"start",direction:"left",gap:0,shift:-8}),Qt("actions-bar")},children:s(H,{icon:"more2",size:"m",alt:"More"})})]}),r!=="l"&&s("div",{class:"status-badge",children:[Z&&s(H,{class:"reblog",icon:"rocket",size:"s"}),le&&s(H,{class:"favourite",icon:"heart",size:"s"}),he&&s(H,{class:"bookmark",icon:"bookmark",size:"s"}),Zt&&s(H,{class:"pin",icon:"pin",size:"s"})]}),r!=="s"&&s("a",{href:$,tabindex:"-1",title:`@${S}`,onClick:v=>{v.preventDefault(),v.stopPropagation(),W.showAccount={account:t.account,instance:b}},children:s(nt,{url:B||V,size:"xxl",squircle:z})}),s("div",{class:"container",children:[s("div",{class:"meta",children:[s("span",{class:"meta-name",children:s(an,{account:t.account,instance:b,showAvatar:r==="s",showAcct:me})})," ",r!=="l"&&(_e?s("span",{class:"status-deleted-tag",children:"Deleted"}):Ve&&!d&&!i&&!m?s(jt,{to:b?`/${b}/s/${C}`:`/s/${C}`,onClick:v=>{v.metaKey||v.ctrlKey||v.shiftKey||v.altKey||v.which===2||(v.preventDefault(),v.stopPropagation(),h==null||h(v,t),$n({anchorRef:{current:v.currentTarget},align:"end",direction:"bottom",gap:4}),Qt(!0))},class:`time ${An&&(In!=null&&In.anchorRef)?"is-open":""}`,children:[pa&&!Bo?s(H,{icon:"comment2",size:"s",alt:`${K} ${K===1?"reply":"replies"}`}):q!=="public"&&q!=="direct"&&s(H,{icon:ro[q],alt:dn[q],size:"s"})," ",s(Mt,{datetime:be,format:"micro"}),!d&&!i&&s(H,{icon:"more2",class:"more"})]}):s("span",{class:"time",children:[q!=="public"&&q!=="direct"&&s(U,{children:[s(H,{icon:ro[q],alt:dn[q],size:"s"})," "]}),s(Mt,{datetime:be,format:"micro"})]}))]}),q==="direct"&&s(U,{children:[s("div",{class:"status-direct-badge",children:"Private mention"})," "]}),!u&&s(U,{children:en?s("div",{class:"status-thread-badge",children:[s(H,{icon:"thread",size:"s"}),"Thread",x.statusThreadNumber[P]?` ${x.statusThreadNumber[P]}/X`:""]}):!!ee&&!!xe&&(!!de||!ue.find(v=>v.id===J))&&s("div",{class:"status-reply-badge",children:[s(H,{icon:"reply"})," ",s(an,{account:xe,instance:b,short:!0})]})}),s("div",{class:`content-container ${de||ie?"has-spoiler":""} ${Ke?"show-spoiler":""} ${dt?"show-media":""}`,"data-content-text-weight":o?Lo():null,style:(me||o)&&{"--content-text-weight":Lo()},children:E&&qt?s(U,{children:[(!!de||!!ie)&&!je&&s(U,{children:[!!de&&s("span",{class:"spoiler-content media-first-spoiler-content",lang:we,dir:"auto",ref:Io,"data-read-more":_r,children:[s(Bt,{text:de,emojis:Se})," "]}),s("button",{class:`light spoiler-button media-first-spoiler-button ${Ke?"spoiling":""}`,type:"button",onClick:v=>{v.preventDefault(),v.stopPropagation(),Ke?(delete W.spoilers[C],je||delete W.spoilersMedia[C]):(W.spoilers[C]=!0,je||(W.spoilersMedia[C]=!0))},children:[s(H,{icon:Ke?"eye-open":"eye-close"})," ",Ke?"Show less":"Show content"]})]}),s(gd,{mediaAttachments:ae,language:we,postID:C,instance:b}),!!pe&&s("div",{class:"media-first-content content",ref:$o,children:s(Si,{post:t,instance:b,previewMode:d})})]}):s(U,{children:[!!de&&s(U,{children:[s("div",{class:"content spoiler-content",lang:we,dir:"auto",ref:Io,"data-read-more":_r,children:s("p",{children:s(Bt,{text:de,emojis:Se})})}),je||d?s("div",{class:"spoiler-divider",children:[s(H,{icon:"eye-open"})," Content warning"]}):s("button",{class:`light spoiler-button ${Ke?"spoiling":""}`,type:"button",onClick:v=>{v.preventDefault(),v.stopPropagation(),Ke?(delete W.spoilers[C],je||delete W.spoilersMedia[C]):(W.spoilers[C]=!0,je||(W.spoilersMedia[C]=!0))},children:[s(H,{icon:Ke?"eye-open":"eye-close"})," ",Ke?"Show less":"Show content"]})]}),!!pe&&s("div",{class:"content",ref:$o,"data-read-more":_r,children:[s(Si,{post:t,instance:b,previewMode:d}),s(Ed,{id:C,instance:b,level:m})]}),!!ve&&s(ku,{lang:we,poll:ve,readOnly:i||!O||!M,onUpdate:v=>{W.statuses[P].poll=v},refresh:()=>w.v1.polls.$select(ve.id).fetch().then(v=>{W.statuses[P].poll=v}).catch(v=>{}),votePoll:v=>w.v1.polls.$select(ve.id).votes.create({choices:v}).then(F=>{W.statuses[P].poll=F}).catch(F=>{})}),((l||Ao)&&!!pe.trim()&&!!cr(ar(pe,Se))&&kn||yt)&&s(ou,{forceTranslate:yt||Ao,mini:!me&&!u,sourceLanguage:we,autoDetected:$t,text:Ur(t)}),!d&&ie&&!!ae.length&&xn!=="show_all"&&s("button",{class:`plain spoiler-media-button ${dt?"spoiling":""}`,type:"button",hidden:!je&&!!de,onClick:v=>{v.preventDefault(),v.stopPropagation(),dt?delete W.spoilersMedia[C]:W.spoilersMedia[C]=!0},children:[s(H,{icon:dt?"eye-open":"eye-close"})," ",dt?"Show less":"Show media"]}),!!ae.length&&(ae.length>1&&(me||u&&r==="m")?s("div",{class:"media-large-container",children:ae.map((v,F)=>s("div",{class:"media-container media-eq1",children:s(oo,{media:v,autoAnimate:!0,showCaption:!0,allowLongerCaption:!pe,lang:we,to:`/${b}/s/${C}?${u?"media":"media-only"}=${F+1}`,onClick:p?Q=>p(Q,F,v,t):void 0})},v.id))}):s(md,{lang:we,enabled:On,captionChildren:ha,children:s("div",{ref:ra,class:`media-container media-eq${ae.length} ${ae.length>2?"media-gt2":""} ${ae.length>4?"media-gt4":""}`,children:Pn.map((v,F)=>s(oo,{media:v,autoAnimate:me,showCaption:ae.length===1,allowLongerCaption:!pe&&ae.length===1,lang:we,altIndex:On&&!!v.description&&F+1,to:`/${b}/s/${C}?${u?"media":"media-only"}=${F+1}`,onClick:p?Q=>{p(Q,F,v,t)}:void 0},v.id))})})),!!Y&&/^https/i.test(Y==null?void 0:Y.url)&&!ie&&!de&&!ve&&!ae.length&&!x.statusQuotes[P]&&s(vd,{card:Y,selfReferential:(Y==null?void 0:Y.url)===t.url||(Y==null?void 0:Y.url)===t.uri,instance:A})]})}),!me&&Bo&&s("div",{class:"content-comment-hint insignificant",children:[s(H,{icon:"comment2",alt:"Replies"})," ",K]}),me&&s(U,{children:[s("div",{class:"extra-meta",children:_e?s("span",{class:"status-deleted-tag",children:"Deleted"}):s(U,{children:[s("span",{children:dn[q]})," •"," ",s("a",{href:Ve,target:"_blank",rel:"noopener noreferrer",children:s("time",{class:"created",datetime:be.toISOString(),title:be.toLocaleString(),children:Co})}),Ee&&s(U,{children:[" ","• ",s(H,{icon:"pencil",alt:"Edited"})," ",s("time",{tabIndex:"0",class:"edited",datetime:He.toISOString(),onClick:()=>{Mn(C)},children:Po})]})]})}),!!(It!=null&&It.length)&&s("div",{class:"emoji-reactions",children:It.map(v=>{const{name:F,count:Q,me:ce,url:Ce,staticUrl:Ct}=v;if(Ce)return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[s(eo,{alt:F,url:Ce,staticUrl:Ct})," ",Q]});if(/^:.+?:$/.test(F)){const bt=Se.find(wt=>wt.shortcode===F.replace(/^:/,"").replace(/:$/,""));if(bt)return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[s(eo,{alt:F,url:bt.url,staticUrl:bt.staticUrl})," ",Q]})}return s("span",{class:`emoji-reaction tag ${ce?"":"insignificant"}`,children:[F," ",Q]})})}),s("div",{class:`actions ${_e?"disabled":""}`,children:[s("div",{class:"action has-count",children:s(Rt,{title:"Reply",alt:"Comments",class:"reply-button",icon:"comment",count:K,onClick:Sn})}),s(Ar,{disabled:!Jt,onClick:wr,confirmLabel:s(U,{children:[s(H,{icon:"rocket"}),s("span",{children:Z?"Unboost":"Boost"})]}),menuExtras:s(ke,{onClick:()=>{zn({draftStatus:{status:` +${Ve}`}})},children:[s(H,{icon:"quote"}),s("span",{children:"Quote"})]}),menuFooter:br&&!Z&&s("div",{class:"footer",children:[s(H,{icon:"alert"}),"Some media have no descriptions."]}),children:s("div",{class:"action has-count",children:s(Rt,{checked:Z,title:["Boost","Unboost"],alt:["Boost","Boosted"],class:"reblog-button",icon:"rocket",count:ne,disabled:!Jt})})}),s("div",{class:"action has-count",children:s(Rt,{checked:le,title:["Like","Unlike"],alt:["Like","Liked"],class:"favourite-button",icon:"heart",count:Te,onClick:Do})}),Fn("@mastodon/post-bookmark")&&s("div",{class:"action",children:s(Rt,{checked:he,title:["Bookmark","Unbookmark"],alt:["Bookmark","Bookmarked"],class:"bookmark-button",icon:"bookmark",onClick:Ro})}),s(ls,{portal:{target:document.querySelector(".status-deck")||document.body},align:"end",gap:4,overflow:"auto",viewScroll:"close",menuButton:s("div",{class:"action",children:s("button",{type:"button",title:"More",class:"plain more-button",children:s(H,{icon:"more",size:"l",alt:"More"})})}),children:Vo})]})]})]}),!!vr&&s(Zr,{onClick:v=>{v.target===v.currentTarget&&Mn(!1)},children:s(yd,{statusID:vr,instance:b,fetchStatusHistory:()=>w.v1.statuses.$select(vr).history.list(),onClose:()=>{var v;Mn(!1),(v=Lt.current)==null||v.focus()}})}),!!na&&s(Zr,{onClick:v=>{v.target===v.currentTarget&&yr(!1)},children:s(_d,{post:t,instance:b,onClose:()=>{yr(!1)}})})]})]})}function md(e){const{enabled:t,children:n,lang:r,captionChildren:o}=e;return!t||!o?n:s("figure",{class:"media-figure-multiple",children:[n,s("figcaption",{lang:r,dir:"auto",children:o})]})}function gd(e){const{mediaAttachments:t,language:n,postID:r,instance:o}=e,i=t.length>1,a=j(),[u,c]=te(0);return se(()=>{let l=()=>{const{clientWidth:f,scrollLeft:d}=a.current,p=Math.round(Math.abs(d)/f);c(p)};return a.current&&a.current.addEventListener("scroll",l,{passive:!0}),()=>{a.current&&a.current.removeEventListener("scroll",l)}},[]),s(U,{children:[s("div",{class:"media-first-container",children:[s("div",{class:"media-first-carousel",ref:a,children:t.map((l,f)=>s("div",{class:"media-first-item",children:s(oo,{media:l,lang:n,to:`/${o}/s/${r}?media=${f+1}`})},l.id))}),i&&s("div",{class:"media-carousel-controls",children:[s("div",{class:"carousel-indexer",children:[u+1,"/",t.length]}),s("label",{class:"media-carousel-button",children:s("button",{type:"button",class:"carousel-button",hidden:u===0,onClick:l=>{l.preventDefault(),l.stopPropagation(),a.current.focus(),a.current.scrollTo({left:a.current.clientWidth*(u-1)*(Qr()?-1:1),behavior:"smooth"})},children:s(H,{icon:"arrow-left"})})}),s("label",{class:"media-carousel-button",children:s("button",{type:"button",class:"carousel-button",hidden:u===t.length-1,onClick:l=>{l.preventDefault(),l.stopPropagation(),a.current.focus(),a.current.scrollTo({left:a.current.clientWidth*(u+1)*(Qr()?-1:1),behavior:"smooth"})},children:s(H,{icon:"arrow-right"})})})]})]}),i&&s("div",{class:"media-carousel-dots",style:{"--dots-count":t.length},children:t.map((l,f)=>s("span",{class:`carousel-dot ${f===u?"active":""}`},l.id))})]})}function ki(e){return bs.toUnicode(URL.parse(e).hostname.replace(/^www\./,"").replace(/\/$/,""))}function Ai(e){return["x.com","twitter.com","threads.net","bsky.app"].includes(e)}function vd({card:e,selfReferential:t,instance:n}){var V;const r=wn(W),{blurhash:o,title:i,description:a,html:u,providerName:c,providerUrl:l,authorName:f,authorUrl:d,width:p,height:m,image:h,imageDescription:g,url:y,type:T,embedUrl:_,language:E,publishedAt:w}=e,b=i||c||f,A=p/m>=1.2?"large":"",[O,P]=te(null);if(se(()=>{b&&h&&!t&&Ma(y)&&Sa(n,y).then(B=>{if(!B)return;const{id:D,url:$}=B;P("#"+$)})},[b,h,t]),r.unfurledLinks[y])return null;const x=/`;\n this.domRefFrame.insertAdjacentHTML('beforeend', iframeHTML);\n this.domRefFrame.classList.add('activated');\n this.isIframeLoaded = true;\n this.attemptShortAutoPlay();\n this.dispatchEvent(new CustomEvent('liteYoutubeIframeLoaded', {\n detail: {\n videoId: this.videoId,\n },\n bubbles: true,\n cancelable: true,\n }));\n }\n }\n initImagePlaceholder() {\n const posterUrlWebp = `https://i.ytimg.com/vi_webp/${this.videoId}/${this.posterQuality}.webp`;\n const posterUrlJpeg = `https://i.ytimg.com/vi/${this.videoId}/${this.posterQuality}.jpg`;\n this.domRefImg.fallback.loading = this.posterLoading;\n this.domRefImg.webp.srcset = posterUrlWebp;\n this.domRefImg.jpeg.srcset = posterUrlJpeg;\n this.domRefImg.fallback.src = posterUrlJpeg;\n this.domRefImg.fallback.setAttribute('aria-label', `${this.videoPlay}: ${this.videoTitle}`);\n this.domRefImg?.fallback?.setAttribute('alt', `${this.videoPlay}: ${this.videoTitle}`);\n }\n initIntersectionObserver() {\n const options = {\n root: null,\n rootMargin: '0px',\n threshold: 0,\n };\n const observer = new IntersectionObserver((entries, observer) => {\n entries.forEach(entry => {\n if (entry.isIntersecting && !this.isIframeLoaded) {\n LiteYTEmbed.warmConnections();\n this.addIframe(true);\n observer.unobserve(this);\n }\n });\n }, options);\n observer.observe(this);\n }\n attemptShortAutoPlay() {\n if (this.isYouTubeShort()) {\n setTimeout(() => {\n this.shadowRoot\n .querySelector('iframe')\n ?.contentWindow?.postMessage('{\"event\":\"command\",\"func\":\"' + 'playVideo' + '\",\"args\":\"\"}', '*');\n }, 2000);\n }\n }\n isYouTubeShort() {\n return (this.getAttribute('short') === '' &&\n window.matchMedia('(max-width: 40em)').matches);\n }\n static addPrefetch(kind, url) {\n const linkElem = document.createElement('link');\n linkElem.rel = kind;\n linkElem.href = url;\n linkElem.crossOrigin = 'true';\n document.head.append(linkElem);\n }\n static warmConnections() {\n if (LiteYTEmbed.isPreconnected || window.liteYouTubeIsPreconnected)\n return;\n LiteYTEmbed.addPrefetch('preconnect', 'https://i.ytimg.com/');\n LiteYTEmbed.addPrefetch('preconnect', 'https://s.ytimg.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.google.com');\n LiteYTEmbed.addPrefetch('preconnect', 'https://googleads.g.doubleclick.net');\n LiteYTEmbed.addPrefetch('preconnect', 'https://static.doubleclick.net');\n LiteYTEmbed.isPreconnected = true;\n window.liteYouTubeIsPreconnected = true;\n }\n}\nLiteYTEmbed.isPreconnected = false;\ncustomElements.define('lite-youtube', LiteYTEmbed);\n//# sourceMappingURL=lite-youtube.js.map","const digitLookup = new Uint8Array(128);\nfor (let i = 0; i < 83; i++) {\n digitLookup[\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~'.charCodeAt(\n i,\n )\n ] = i;\n}\nconst decode83 = (str, start, end) => {\n let value = 0;\n while (start < end) {\n value *= 83;\n value += digitLookup[str.charCodeAt(start++)];\n }\n return value;\n};\n\nconst pow = Math.pow;\nconst PI = Math.PI;\nconst PI2 = PI * 2;\n\nconst d = 3294.6;\nconst e = 269.025;\nconst sRGBToLinear = (value) =>\n value > 10.31475 ? pow(value / e + 0.052132, 2.4) : value / d;\n\nconst linearTosRGB = (v) =>\n ~~(v > 0.00001227 ? e * pow(v, 0.416666) - 13.025 : v * d + 1);\n\nconst signSqr = (x) => (x < 0 ? -1 : 1) * x * x;\n\n/**\n * Fast approximate cosine implementation\n * Based on FTrig https://github.com/netcell/FTrig\n */\nconst fastCos = (x) => {\n x += PI / 2;\n while (x > PI) {\n x -= PI2;\n }\n const cos = 1.27323954 * x - 0.405284735 * signSqr(x);\n return 0.225 * (signSqr(cos) - cos) + cos;\n};\n\n/**\n * Extracts average color from BlurHash image\n * @param {string} blurHash BlurHash image string\n * @returns {[number, number, number]}\n */\nexport function getBlurHashAverageColor(blurHash) {\n const val = decode83(blurHash, 2, 6);\n return [val >> 16, (val >> 8) & 255, val & 255];\n}\n\n/**\n * Decodes BlurHash image\n * @param {string} blurHash BlurHash image string\n * @param {number} width Output image width\n * @param {number} height Output image height\n * @param {?number} punch\n * @returns {Uint8ClampedArray}\n */\nexport function decodeBlurHash(blurHash, width, height, punch) {\n const sizeFlag = decode83(blurHash, 0, 1);\n const numX = (sizeFlag % 9) + 1;\n const numY = ~~(sizeFlag / 9) + 1;\n const size = numX * numY;\n\n let i = 0,\n j = 0,\n x = 0,\n y = 0,\n r = 0,\n g = 0,\n b = 0,\n basis = 0,\n basisY = 0,\n colorIndex = 0,\n pixelIndex = 0,\n value = 0;\n\n const maximumValue = ((decode83(blurHash, 1, 2) + 1) / 13446) * (punch | 1);\n\n const colors = new Float64Array(size * 3);\n\n const averageColor = getBlurHashAverageColor(blurHash);\n for (i = 0; i < 3; i++) {\n colors[i] = sRGBToLinear(averageColor[i]);\n }\n\n for (i = 1; i < size; i++) {\n value = decode83(blurHash, 4 + i * 2, 6 + i * 2);\n colors[i * 3] = signSqr(~~(value / 361) - 9) * maximumValue;\n colors[i * 3 + 1] = signSqr((~~(value / 19) % 19) - 9) * maximumValue;\n colors[i * 3 + 2] = signSqr((value % 19) - 9) * maximumValue;\n }\n\n const cosinesY = new Float64Array(numY * height);\n const cosinesX = new Float64Array(numX * width);\n for (j = 0; j < numY; j++) {\n for (y = 0; y < height; y++) {\n cosinesY[j * height + y] = fastCos((PI * y * j) / height);\n }\n }\n for (i = 0; i < numX; i++) {\n for (x = 0; x < width; x++) {\n cosinesX[i * width + x] = fastCos((PI * x * i) / width);\n }\n }\n\n const bytesPerRow = width * 4;\n const pixels = new Uint8ClampedArray(bytesPerRow * height);\n\n for (y = 0; y < height; y++) {\n for (x = 0; x < width; x++) {\n r = g = b = 0;\n for (j = 0; j < numY; j++) {\n basisY = cosinesY[j * height + y];\n for (i = 0; i < numX; i++) {\n basis = cosinesX[i * width + x] * basisY;\n colorIndex = (i + j * numX) * 3;\n r += colors[colorIndex] * basis;\n g += colors[colorIndex + 1] * basis;\n b += colors[colorIndex + 2] * basis;\n }\n }\n\n pixelIndex = 4 * x + y * bytesPerRow;\n pixels[pixelIndex] = linearTosRGB(r);\n pixels[pixelIndex + 1] = linearTosRGB(g);\n pixels[pixelIndex + 2] = linearTosRGB(b);\n pixels[pixelIndex + 3] = 255; // alpha\n }\n }\n return pixels;\n}\n","/**\n * @param {string[]} splittedHtml\n * @param {{ char?: string; count?: number}} options\n * @returns {string}\n */\nconst addIndentation = (splittedHtml, options = {}) => {\n const char = options.char || ' '\n const count = options.count || 2\n\n let level = 0\n const opened = []\n\n return splittedHtml.reverse().reduce((indented, elTag) => {\n if (opened.length\n && level\n && opened[level]\n /* if current element tag is the same as previously opened one */\n && opened[level] === elTag.substring(1, opened[level].length + 1)\n ) {\n opened.splice(level, 1)\n level--\n }\n\n const indentation = char.repeat(level ? level * count : 0)\n\n const newIndented = [\n `${indentation}${elTag}`,\n ...indented,\n ]\n\n // if current element tag is closing tag\n // add it to opened elements\n if (elTag.substring(0, 2) === ' (\n // Replace\n // - 1 or more spaces or tabs at the start of line\n // - 1 or more spaces or tabs at the end of line\n // - empty lines\n // with empty string\n nonFormattedString.trim().replace(/(^(\\s|\\t)+|(( |\\t)+)$)/gm, '')\n)\n\n/**\n * @param {string} markup\n * @returns {string[]} Array of strings splitted on new lines without empty lines\n */\nconst mergeAttributesWithElements = (markup) => {\n const splittedMarkup = removeEmptyLines(markup).split('\\n')\n\n const mergedLines = []\n let currentElement = ''\n for (let i = 0; i < splittedMarkup.length; i += 1) {\n const line = splittedMarkup[i]\n\n // If line is closing element/tag separate closing tag from rest of the line with space\n if (line.endsWith('/>')) {\n mergedLines.push(`${currentElement}${line.slice(0, -2)} />`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n if (line.endsWith('>')) {\n mergedLines.push(`${currentElement}${\n line.startsWith('>') || line.startsWith('<') ? '' : ' '\n }${line}`)\n currentElement = ''\n // eslint-disable-next-line no-continue\n continue\n }\n\n currentElement += currentElement.length ? ` ${line}` : line\n }\n\n return mergedLines\n}\n\nmodule.exports = {\n mergeAttributesWithElements,\n removeEmptyLines,\n}\n","const addIndentation = require('./utils/addIndentation')\nconst { mergeAttributesWithElements } = require('./utils/toLines')\n\n/**\n * @param {string} markup\n * @param {{ char?: string; count?: number }} options\n * @returns {string}\n */\nconst prettify = (markup, options = {}) => {\n const splitted = mergeAttributesWithElements(markup)\n\n return addIndentation(splitted, options)\n}\n\nmodule.exports = prettify\n","import { useRef as s, useCallback as h, useEffect as g } from \"react\";\nvar l = /* @__PURE__ */ ((e) => (e.Mouse = \"mouse\", e.Touch = \"touch\", e.Pointer = \"pointer\", e))(l || {}), d = /* @__PURE__ */ ((e) => (e.CancelledByMovement = \"cancelled-by-movement\", e.CancelledByRelease = \"cancelled-by-release\", e.CancelledOutsideElement = \"cancelled-outside-element\", e))(d || {});\nconst A = () => typeof window == \"object\" ? window?.PointerEvent ?? null : null, z = () => typeof window == \"object\" ? window?.TouchEvent ?? null : null;\nfunction U(e) {\n const { nativeEvent: t } = e, u = z();\n return u && t instanceof u || \"touches\" in e;\n}\nfunction X(e) {\n const t = A();\n return e.nativeEvent instanceof MouseEvent && !(t && e.nativeEvent instanceof t);\n}\nfunction Y(e) {\n const { nativeEvent: t } = e;\n if (!t)\n return !1;\n const u = A();\n return u && t instanceof u || \"pointerId\" in t;\n}\nfunction R(e) {\n return X(e) || U(e) || Y(e);\n}\nfunction j(e) {\n return U(e) ? {\n x: e.touches[0].pageX,\n y: e.touches[0].pageY\n } : X(e) || Y(e) ? {\n x: e.pageX,\n y: e.pageY\n } : null;\n}\nfunction G(e) {\n return {\n target: e.target,\n currentTarget: e.currentTarget,\n nativeEvent: e,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n persist: () => {\n }\n };\n}\nfunction J(e, {\n threshold: t = 400,\n captureEvent: u = !1,\n detect: y = l.Pointer,\n cancelOnMovement: w = !1,\n cancelOutsideElement: v = !0,\n filterEvents: p,\n onStart: M,\n onMove: C,\n onFinish: L,\n onCancel: b\n} = {}) {\n const P = s(!1), c = s(!1), I = s(), a = s(), T = s(e), f = s(null), E = h(\n (n) => (r) => {\n c.current || R(r) && (p !== void 0 && !p(r) || (u && r.persist(), M?.(r, { context: n }), f.current = j(r), c.current = !0, I.current = r.currentTarget, a.current = setTimeout(() => {\n T.current && (T.current(r, { context: n }), P.current = !0);\n }, t)));\n },\n [u, p, M, t]\n ), i = h(\n (n) => (r, o) => {\n R(r) && c.current && (f.current = null, u && r.persist(), P.current ? L?.(r, { context: n }) : c.current && b?.(r, { context: n, reason: o ?? d.CancelledByRelease }), P.current = !1, c.current = !1, a.current !== void 0 && clearTimeout(a.current));\n },\n [u, L, b]\n ), m = h(\n (n) => (r) => {\n if (C?.(r, { context: n }), w !== !1 && f.current) {\n const o = j(r);\n if (o) {\n const B = w === !0 ? 25 : w, D = {\n x: Math.abs(o.x - f.current.x),\n y: Math.abs(o.y - f.current.y)\n };\n (D.x > B || D.y > B) && i(n)(r, d.CancelledByMovement);\n }\n }\n },\n [i, w, C]\n ), q = h(\n (n) => {\n if (e === null)\n return {};\n switch (y) {\n case l.Mouse: {\n const r = {\n onMouseDown: E(n),\n onMouseMove: m(n),\n onMouseUp: i(n)\n };\n return v && (r.onMouseLeave = (o) => {\n i(n)(o, d.CancelledOutsideElement);\n }), r;\n }\n case l.Touch:\n return {\n onTouchStart: E(n),\n onTouchMove: m(n),\n onTouchEnd: i(n)\n };\n case l.Pointer: {\n const r = {\n onPointerDown: E(n),\n onPointerMove: m(n),\n onPointerUp: i(n)\n };\n return v && (r.onPointerLeave = (o) => i(n)(o, d.CancelledOutsideElement)), r;\n }\n }\n },\n [e, i, v, y, m, E]\n );\n return g(() => {\n if (!window)\n return;\n function n(r) {\n const o = G(r);\n i()(o);\n }\n return window.addEventListener(\"mouseup\", n), window.addEventListener(\"touchend\", n), window.addEventListener(\"pointerup\", n), () => {\n window.removeEventListener(\"mouseup\", n), window.removeEventListener(\"touchend\", n), window.removeEventListener(\"pointerup\", n);\n };\n }, [i]), g(\n () => () => {\n a.current !== void 0 && clearTimeout(a.current);\n },\n []\n ), g(() => {\n T.current = e;\n }, [e]), q;\n}\nexport {\n d as LongPressCallbackReason,\n l as LongPressEventType,\n J as useLongPress\n};\n","import { useState } from 'preact/hooks';\n\nimport shortenNumber from '../utils/shorten-number';\n\nimport EmojiText from './emoji-text';\nimport Icon from './icon';\nimport RelativeTime from './relative-time';\n\nexport default function Poll({\n poll,\n lang,\n readOnly,\n refresh = () => {},\n votePoll = () => {},\n}) {\n const [uiState, setUIState] = useState('default');\n const {\n expired,\n expiresAt,\n id,\n multiple,\n options,\n ownVotes,\n voted,\n votersCount,\n votesCount,\n emojis,\n } = poll;\n const expiresAtDate = !!expiresAt && new Date(expiresAt); // Update poll at point of expiry\n // NOTE: Disable this because setTimeout runs immediately if delay is too large\n // https://stackoverflow.com/a/56718027/20838\n // useEffect(() => {\n // let timeout;\n // if (!expired && expiresAtDate) {\n // const ms = expiresAtDate.getTime() - Date.now() + 1; // +1 to give it a little buffer\n // if (ms > 0) {\n // timeout = setTimeout(() => {\n // setUIState('loading');\n // (async () => {\n // // await refresh();\n // setUIState('default');\n // })();\n // }, ms);\n // }\n // }\n // return () => {\n // clearTimeout(timeout);\n // };\n // }, [expired, expiresAtDate]);\n\n const pollVotesCount = votersCount || votesCount;\n let roundPrecision = 0;\n\n if (pollVotesCount <= 1000) {\n roundPrecision = 0;\n } else if (pollVotesCount <= 10000) {\n roundPrecision = 1;\n } else if (pollVotesCount <= 100000) {\n roundPrecision = 2;\n }\n\n const [showResults, setShowResults] = useState(false);\n const optionsHaveVoteCounts = options.every((o) => o.votesCount !== null);\n\n return (\n \n {(showResults && optionsHaveVoteCounts) || voted || expired ? (\n <>\n
    \n {options.map((option, i) => {\n const { title, votesCount: optionVotesCount } = option;\n const percentage = pollVotesCount\n ? ((optionVotesCount / pollVotesCount) * 100).toFixed(\n roundPrecision,\n )\n : 0; // check if current poll choice is the leading one\n\n const isLeading =\n optionVotesCount > 0 &&\n optionVotesCount ===\n Math.max(...options.map((o) => o.votesCount));\n return (\n \n
    \n \n \n \n {voted && ownVotes.includes(i) && (\n <>\n {' '}\n \n \n )}\n
    \n \n {percentage}%\n
    \n \n );\n })}\n \n {!expired && !voted && (\n {\n e.preventDefault();\n setShowResults(false);\n }}\n >\n Hide results\n \n )}\n \n ) : (\n {\n e.preventDefault();\n const form = e.target;\n const formData = new FormData(form);\n const choices = [];\n formData.forEach((value, key) => {\n if (key === 'poll') {\n choices.push(value);\n }\n });\n if (!choices.length) return;\n setUIState('loading');\n await votePoll(choices);\n setUIState('default');\n }}\n >\n
    \n {options.map((option, i) => {\n const { title } = option;\n return (\n
    \n \n
    \n );\n })}\n
    \n {!readOnly && (\n \n Vote\n \n )}\n \n )}\n

    \n {!expired && !readOnly && (\n {\n e.preventDefault();\n setUIState('loading');\n\n (async () => {\n await refresh();\n setUIState('default');\n })();\n }}\n title=\"Refresh\"\n >\n \n \n )}\n {!voted && !expired && !readOnly && optionsHaveVoteCounts && (\n {\n e.preventDefault();\n setShowResults(!showResults);\n }}\n title={showResults ? 'Hide results' : 'Show results'}\n >\n {' '}\n \n )}\n {!expired && !readOnly && ' '}\n {shortenNumber(votesCount)} vote\n {votesCount === 1 ? '' : 's'}\n {!!votersCount && votersCount !== votesCount && (\n <>\n {' '}\n • \n {shortenNumber(votersCount)}\n {' '}\n voter\n {votersCount === 1 ? '' : 's'}\n \n )}{' '}\n • {expired ? 'Ended' : 'Ending'}{' '}\n {!!expiresAtDate && }\n

    {' '}\n \n );\n}\n","import { createContext } from 'preact';\n\nconst FilterContext = createContext();\nexport default FilterContext;\n","import mem from './mem';\nimport { getCurrentAccountID } from './store-utils';\n\nfunction _isFiltered(filtered, filterContext) {\n if (!filtered?.length) return false;\n const appliedFilters = filtered.filter((f) => {\n const { filter } = f;\n const hasContext = filter.context.includes(filterContext);\n if (!hasContext) return false;\n if (!filter.expiresAt) return hasContext;\n return new Date(filter.expiresAt) > new Date();\n });\n if (!appliedFilters.length) return false;\n const isHidden = appliedFilters.some((f) => f.filter.filterAction === 'hide');\n if (isHidden)\n return {\n action: 'hide',\n };\n const isWarn = appliedFilters.some((f) => f.filter.filterAction === 'warn');\n if (isWarn) {\n const filterTitles = appliedFilters.map((f) => f.filter.title);\n return {\n action: 'warn',\n titles: filterTitles,\n titlesStr: filterTitles.join(' • '),\n };\n }\n return false;\n}\nexport const isFiltered = mem(_isFiltered);\n\nexport function filteredItem(item, filterContext, currentAccountID) {\n const { filtered } = item;\n if (!filtered?.length) return true;\n const isSelf = currentAccountID && item.account?.id === currentAccountID;\n if (isSelf) return true;\n const filterState = isFiltered(filtered, filterContext);\n if (!filterState) return true;\n if (filterState.action === 'hide') return false;\n // item._filtered = filterState;\n return true;\n}\nexport function filteredItems(items, filterContext) {\n if (!items?.length) return [];\n if (!filterContext) return items;\n const currentAccountID = getCurrentAccountID();\n return items.filter((item) =>\n filteredItem(item, filterContext, currentAccountID),\n );\n}\n","const div = document.createElement('div');\nexport default function htmlContentLength(html) {\n if (!html) return 0;\n div.innerHTML = html;\n // .invisible spans for links\n // e.g. https://mastodon.social\n div.querySelectorAll('.invisible').forEach((el) => {\n el.remove();\n });\n return div.innerText.length;\n}\n","export const supportsTTS = 'speechSynthesis' in window;\n\nexport function speak(text, lang) {\n if (!supportsTTS) return;\n try {\n if (speechSynthesis.speaking) {\n speechSynthesis.cancel();\n }\n const utterance = new SpeechSynthesisUtterance(text);\n if (lang) utterance.lang = lang;\n speechSynthesis.speak(utterance);\n } catch (e) {\n alert(e);\n }\n}\n","import getHTMLText from './getHTMLText';\n\nfunction statusPeek(status) {\n const { spoilerText, content, poll, mediaAttachments } = status;\n let text = '';\n if (spoilerText?.trim()) {\n text += spoilerText;\n } else {\n text += getHTMLText(content);\n }\n text = text.trim();\n if (poll?.options?.length) {\n text += `\\n\\n📊:\\n${poll.options\n .map((o) => `${poll.multiple ? '▪️' : '•'} ${o.title}`)\n .join('\\n')}`;\n }\n if (mediaAttachments?.length) {\n text +=\n ' ' +\n mediaAttachments\n .map(\n (m) =>\n ({\n image: '🖼️',\n gifv: '🎞️',\n video: '📹',\n audio: '🎵',\n unknown: '',\n }[m.type] || ''),\n )\n .join('');\n }\n return text;\n}\n\nexport default statusPeek;\n","import{useRef as r,useEffect as n,useMemo as t,useReducer as e,useCallback as u}from\"react\";function c(e,u,c){var i=this,a=r(null),o=r(0),f=r(null),l=r([]),v=r(),m=r(),d=r(e),g=r(!0);d.current=e;var p=\"undefined\"!=typeof window,w=!u&&0!==u&&p;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");u=+u||0;var s=!!(c=c||{}).leading,x=!(\"trailing\"in c)||!!c.trailing,h=\"maxWait\"in c,y=\"debounceOnServer\"in c&&!!c.debounceOnServer,F=h?Math.max(+c.maxWait||0,u):null;n(function(){return g.current=!0,function(){g.current=!1}},[]);var A=t(function(){var r=function(r){var n=l.current,t=v.current;return l.current=v.current=null,o.current=r,m.current=d.current.apply(t,n)},n=function(r,n){w&&cancelAnimationFrame(f.current),f.current=w?requestAnimationFrame(r):setTimeout(r,n)},t=function(r){if(!g.current)return!1;var n=r-a.current;return!a.current||n>=u||n<0||h&&r-o.current>=F},e=function(n){return f.current=null,x&&l.current?r(n):(l.current=v.current=null,m.current)},c=function r(){var c=Date.now();if(t(c))return e(c);if(g.current){var i=u-(c-a.current),f=h?Math.min(i,F-(c-o.current)):i;n(r,f)}},A=function(){if(p||y){var e=Date.now(),d=t(e);if(l.current=[].slice.call(arguments),v.current=i,a.current=e,d){if(!f.current&&g.current)return o.current=a.current,n(c,u),s?r(a.current):m.current;if(h)return n(c,u),r(a.current)}return f.current||n(c,u),m.current}};return A.cancel=function(){f.current&&(w?cancelAnimationFrame(f.current):clearTimeout(f.current)),o.current=0,l.current=a.current=v.current=f.current=null},A.isPending=function(){return!!f.current},A.flush=function(){return f.current?e(Date.now()):m.current},A},[s,h,u,F,x,w,p,y]);return A}function i(r,n){return r===n}function a(r,n){return n}function o(n,t,o){var f=o&&o.equalityFn||i,l=e(a,n),v=l[0],m=l[1],d=c(u(function(r){return m(r)},[m]),t,o),g=r(n);return f(g.current,n)||(d(n),g.current=n),f(v,n)&&d.cancel(),[v,d]}function f(r,n,t){var e=void 0===t?{}:t,u=e.leading,i=e.trailing;return c(r,n,{maxWait:n,leading:void 0===u||u,trailing:void 0===i||i})}export{o as useDebounce,c as useDebouncedCallback,f as useThrottledCallback};\n//# sourceMappingURL=index.module.js.map\n","import { useRef, useEffect, useCallback, useState, useMemo } from 'react';\n\n// This could've been more streamlined with internal state instead of abusing\n// refs to such extent, but then composing hooks and components could not opt out of unnecessary renders.\nfunction useResolvedElement(subscriber, refOrElement) {\n var lastReportRef = useRef(null);\n var refOrElementRef = useRef(null);\n refOrElementRef.current = refOrElement;\n var cbElementRef = useRef(null); // Calling re-evaluation after each render without using a dep array,\n // as the ref object's current value could've changed since the last render.\n\n useEffect(function () {\n evaluateSubscription();\n });\n var evaluateSubscription = useCallback(function () {\n var cbElement = cbElementRef.current;\n var refOrElement = refOrElementRef.current; // Ugly ternary. But smaller than an if-else block.\n\n var element = cbElement ? cbElement : refOrElement ? refOrElement instanceof Element ? refOrElement : refOrElement.current : null;\n\n if (lastReportRef.current && lastReportRef.current.element === element && lastReportRef.current.subscriber === subscriber) {\n return;\n }\n\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n }\n\n lastReportRef.current = {\n element: element,\n subscriber: subscriber,\n // Only calling the subscriber, if there's an actual element to report.\n // Setting cleanup to undefined unless a subscriber returns one, as an existing cleanup function would've been just called.\n cleanup: element ? subscriber(element) : undefined\n };\n }, [subscriber]); // making sure we call the cleanup function on unmount\n\n useEffect(function () {\n return function () {\n if (lastReportRef.current && lastReportRef.current.cleanup) {\n lastReportRef.current.cleanup();\n lastReportRef.current = null;\n }\n };\n }, []);\n return useCallback(function (element) {\n cbElementRef.current = element;\n evaluateSubscription();\n }, [evaluateSubscription]);\n}\n\n// We're only using the first element of the size sequences, until future versions of the spec solidify on how\n// exactly it'll be used for fragments in multi-column scenarios:\n// From the spec:\n// > The box size properties are exposed as FrozenArray in order to support elements that have multiple fragments,\n// > which occur in multi-column scenarios. However the current definitions of content rect and border box do not\n// > mention how those boxes are affected by multi-column layout. In this spec, there will only be a single\n// > ResizeObserverSize returned in the FrozenArray, which will correspond to the dimensions of the first column.\n// > A future version of this spec will extend the returned FrozenArray to contain the per-fragment size information.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-entry-interface)\n//\n// Also, testing these new box options revealed that in both Chrome and FF everything is returned in the callback,\n// regardless of the \"box\" option.\n// The spec states the following on this:\n// > This does not have any impact on which box dimensions are returned to the defined callback when the event\n// > is fired, it solely defines which box the author wishes to observe layout changes on.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// I'm not exactly clear on what this means, especially when you consider a later section stating the following:\n// > This section is non-normative. An author may desire to observe more than one CSS box.\n// > In this case, author will need to use multiple ResizeObservers.\n// (https://drafts.csswg.org/resize-observer/#resize-observer-interface)\n// Which is clearly not how current browser implementations behave, and seems to contradict the previous quote.\n// For this reason I decided to only return the requested size,\n// even though it seems we have access to results for all box types.\n// This also means that we get to keep the current api, being able to return a simple { width, height } pair,\n// regardless of box option.\nfunction extractSize(entry, boxProp, sizeType) {\n if (!entry[boxProp]) {\n if (boxProp === \"contentBoxSize\") {\n // The dimensions in `contentBoxSize` and `contentRect` are equivalent according to the spec.\n // See the 6th step in the description for the RO algorithm:\n // https://drafts.csswg.org/resize-observer/#create-and-populate-resizeobserverentry-h\n // > Set this.contentRect to logical this.contentBoxSize given target and observedBox of \"content-box\".\n // In real browser implementations of course these objects differ, but the width/height values should be equivalent.\n return entry.contentRect[sizeType === \"inlineSize\" ? \"width\" : \"height\"];\n }\n\n return undefined;\n } // A couple bytes smaller than calling Array.isArray() and just as effective here.\n\n\n return entry[boxProp][0] ? entry[boxProp][0][sizeType] : // TS complains about this, because the RO entry type follows the spec and does not reflect Firefox's current\n // behaviour of returning objects instead of arrays for `borderBoxSize` and `contentBoxSize`.\n // @ts-ignore\n entry[boxProp][sizeType];\n}\n\nfunction useResizeObserver(opts) {\n if (opts === void 0) {\n opts = {};\n }\n\n // Saving the callback as a ref. With this, I don't need to put onResize in the\n // effect dep array, and just passing in an anonymous function without memoising\n // will not reinstantiate the hook's ResizeObserver.\n var onResize = opts.onResize;\n var onResizeRef = useRef(undefined);\n onResizeRef.current = onResize;\n var round = opts.round || Math.round; // Using a single instance throughout the hook's lifetime\n\n var resizeObserverRef = useRef();\n\n var _useState = useState({\n width: undefined,\n height: undefined\n }),\n size = _useState[0],\n setSize = _useState[1]; // In certain edge cases the RO might want to report a size change just after\n // the component unmounted.\n\n\n var didUnmount = useRef(false);\n useEffect(function () {\n didUnmount.current = false;\n return function () {\n didUnmount.current = true;\n };\n }, []); // Using a ref to track the previous width / height to avoid unnecessary renders.\n\n var previous = useRef({\n width: undefined,\n height: undefined\n }); // This block is kinda like a useEffect, only it's called whenever a new\n // element could be resolved based on the ref option. It also has a cleanup\n // function.\n\n var refCallback = useResolvedElement(useCallback(function (element) {\n // We only use a single Resize Observer instance, and we're instantiating it on demand, only once there's something to observe.\n // This instance is also recreated when the `box` option changes, so that a new observation is fired if there was a previously observed element with a different box option.\n if (!resizeObserverRef.current || resizeObserverRef.current.box !== opts.box || resizeObserverRef.current.round !== round) {\n resizeObserverRef.current = {\n box: opts.box,\n round: round,\n instance: new ResizeObserver(function (entries) {\n var entry = entries[0];\n var boxProp = opts.box === \"border-box\" ? \"borderBoxSize\" : opts.box === \"device-pixel-content-box\" ? \"devicePixelContentBoxSize\" : \"contentBoxSize\";\n var reportedWidth = extractSize(entry, boxProp, \"inlineSize\");\n var reportedHeight = extractSize(entry, boxProp, \"blockSize\");\n var newWidth = reportedWidth ? round(reportedWidth) : undefined;\n var newHeight = reportedHeight ? round(reportedHeight) : undefined;\n\n if (previous.current.width !== newWidth || previous.current.height !== newHeight) {\n var newSize = {\n width: newWidth,\n height: newHeight\n };\n previous.current.width = newWidth;\n previous.current.height = newHeight;\n\n if (onResizeRef.current) {\n onResizeRef.current(newSize);\n } else {\n if (!didUnmount.current) {\n setSize(newSize);\n }\n }\n }\n })\n };\n }\n\n resizeObserverRef.current.instance.observe(element, {\n box: opts.box\n });\n return function () {\n if (resizeObserverRef.current) {\n resizeObserverRef.current.instance.unobserve(element);\n }\n };\n }, [opts.box, round]), opts.ref);\n return useMemo(function () {\n return {\n ref: refCallback,\n width: size.width,\n height: size.height\n };\n }, [refCallback, size.width, size.height]);\n}\n\nexport { useResizeObserver as default };\n","import { useRef } from 'preact/hooks';\nimport { useThrottledCallback } from 'use-debounce';\nimport useResizeObserver from 'use-resize-observer';\n\nexport default function useTruncated({ className = 'truncated' } = {}) {\n const ref = useRef();\n const onResize = useThrottledCallback(({ height }) => {\n if (ref.current) {\n const { scrollHeight } = ref.current;\n let truncated = scrollHeight > height;\n if (truncated) {\n const { height: _height, maxHeight } = getComputedStyle(ref.current);\n const computedHeight = parseInt(maxHeight || _height, 10);\n truncated = scrollHeight > computedHeight;\n }\n ref.current.classList.toggle(className, truncated);\n }\n }, 300);\n useResizeObserver({\n ref,\n box: 'border-box',\n onResize,\n });\n return ref;\n}\n","export default {\n public: 'earth',\n unlisted: 'group',\n private: 'lock',\n direct: 'message',\n};\n","export var styleRoot = 'kvfysmfp';\nexport var styleChild = 'ufhsfnkm';\nexport var styles = \".\".concat(styleRoot, \"{overflow:hidden;touch-action:none}.\").concat(styleChild, \"{transform-origin: 0 0}\");\n","var isSsr = typeof window === 'undefined';\nexport var isTouch = function () {\n return !isSsr && ('ontouchstart' in window || navigator.maxTouchPoints > 0);\n};\nexport var make2dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale(\".concat(scale, \") translate(\").concat(x, \"px, \").concat(y, \"px)\");\n};\nexport var make3dTransformValue = function (_a) {\n var x = _a.x, y = _a.y, scale = _a.scale;\n return \"scale3d(\".concat(scale, \",\").concat(scale, \", 1) translate3d(\").concat(x, \"px, \").concat(y, \"px, 0)\");\n};\nexport var hasTranslate3DSupport = function () {\n var css = !isSsr && window.CSS;\n return css && css.supports && css.supports('transform', 'translate3d(0,0,0)');\n};\n","var min = Math.min, max = Math.max;\nexport function getOffsetBounds(_a) {\n var containerDimension = _a.containerDimension, childDimension = _a.childDimension, padding = _a.padding, centerContained = _a.centerContained;\n var diff = childDimension - containerDimension;\n if (diff + 2 * padding <= 0 && centerContained) {\n return [diff / 2, diff / 2];\n }\n else {\n return [min(diff + padding, 0) - padding, max(0, diff + padding)];\n }\n}\n","import { __assign, __extends } from \"tslib\";\nimport React, { Component, createRef, Children, cloneElement } from 'react';\nimport { styleRoot, styleChild, styles } from './styles.css';\nimport { isTouch } from '../utils';\nimport { getOffsetBounds } from './getOffsetBounds';\nvar classnames = function (base, other) {\n return other ? \"\".concat(base, \" \").concat(other) : base;\n};\nvar abs = Math.abs, min = Math.min, sqrt = Math.sqrt;\nvar isSsr = typeof window === 'undefined';\nvar isMac = isSsr ? false : /(Mac)/i.test(navigator.platform);\nvar isDragInteraction = function (i) { return i === 'drag'; };\nvar isZoomInteraction = function (i) { return i === 'zoom'; };\nvar isZoomGesture = function (wheelEvent) { return isMac && wheelEvent.ctrlKey; };\nvar cancelEvent = function (event) {\n event.stopPropagation();\n event.preventDefault();\n};\nvar getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return sqrt(x * x + y * y);\n};\nvar calculateScale = function (startTouches, endTouches) {\n var startDistance = getDistance(startTouches[0], startTouches[1]);\n var endDistance = getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n};\nvar isCloseTo = function (value, expected) {\n return value > expected - 0.01 && value < expected + 0.01;\n};\nvar swing = function (p) { return -Math.cos(p * Math.PI) / 2 + 0.5; };\nvar getPointByPageCoordinates = function (touch) { return ({\n x: touch.pageX,\n y: touch.pageY,\n}); };\nvar getPageCoordinatesByTouches = function (touches) {\n return Array.from(touches).map(getPointByPageCoordinates);\n};\nvar sum = function (a, b) { return a + b; };\nvar getVectorAvg = function (vectors) { return ({\n x: vectors.map(function (_a) {\n var x = _a.x;\n return x;\n }).reduce(sum, 0) / vectors.length,\n y: vectors.map(function (_a) {\n var y = _a.y;\n return y;\n }).reduce(sum, 0) / vectors.length,\n}); };\nvar clamp = function (min, max, value) {\n return value < min ? min : value > max ? max : value;\n};\nvar shouldInterceptWheel = function (event) {\n return !(event.ctrlKey || event.metaKey);\n};\nvar getElementSize = function (element) {\n if (element) {\n var offsetWidth = element.offsetWidth, offsetHeight = element.offsetHeight;\n // Any DOMElement\n if (offsetWidth && offsetHeight) {\n return { width: offsetWidth, height: offsetHeight };\n }\n // Svg support\n var style = getComputedStyle(element);\n var width = parseFloat(style.width);\n var height = parseFloat(style.height);\n if (height && width) {\n return { width: width, height: height };\n }\n }\n return { width: 0, height: 0 };\n};\nvar calculateVelocity = function (startPoint, endPoint) { return ({\n x: endPoint.x - startPoint.x,\n y: endPoint.y - startPoint.y,\n}); };\nvar comparePoints = function (p1, p2) { return p1.x === p2.x && p1.y === p2.y; };\nvar noup = function () { };\nvar zeroPoint = { x: 0, y: 0 };\nvar PinchZoom = /** @class */ (function (_super) {\n __extends(PinchZoom, _super);\n function PinchZoom() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._prevDragMovePoint = null;\n _this._containerObserver = null;\n _this._fingers = 0;\n _this._firstMove = true;\n _this._initialOffset = __assign({}, zeroPoint);\n _this._interaction = null;\n _this._isDoubleTap = false;\n _this._isOffsetsSet = false;\n _this._lastDragPosition = null;\n _this._lastScale = 1;\n _this._lastTouchStart = 0;\n _this._lastZoomCenter = null;\n _this._listenMouseMove = false;\n _this._nthZoom = 0;\n _this._offset = __assign({}, zeroPoint);\n _this._startOffset = __assign({}, zeroPoint);\n _this._startTouches = null;\n _this._updatePlaned = false;\n _this._wheelTimeOut = null;\n _this._zoomFactor = 1;\n _this._initialZoomFactor = 1;\n _this._draggingPoint = __assign({}, zeroPoint);\n // It help reduce behavior difference between touch and mouse events\n _this._ignoreNextClick = false;\n // @ts-ignore\n _this._containerRef = createRef();\n _this._handleClick = function (clickEvent) {\n if (_this._ignoreNextClick) {\n _this._ignoreNextClick = false;\n clickEvent.stopPropagation();\n }\n };\n _this._onResize = function () {\n var _a;\n if ((_a = _this._containerRef) === null || _a === void 0 ? void 0 : _a.current) {\n _this._updateInitialZoomFactor();\n _this._setupOffsets();\n _this._update();\n }\n };\n _this._handlerOnTouchEnd = _this._handlerIfEnable(function (touchEndEvent) {\n _this._fingers = touchEndEvent.touches.length;\n if (_this.props.shouldCancelHandledTouchEndEvents &&\n (isZoomInteraction(_this._interaction) ||\n (isDragInteraction(_this._interaction) &&\n (_this._startOffset.x !== _this._offset.x ||\n _this._startOffset.y !== _this._offset.y)))) {\n cancelEvent(touchEndEvent);\n }\n if (isDragInteraction(_this._interaction) && !_this._enoughToDrag()) {\n _this._handleClick(touchEndEvent);\n }\n _this._updateInteraction(touchEndEvent);\n });\n _this._handlerOnTouchStart = _this._handlerIfEnable(function (touchStartEvent) {\n _this._firstMove = true;\n _this._fingers = touchStartEvent.touches.length;\n _this._detectDoubleTap(touchStartEvent);\n });\n _this._handlerOnTouchMove = _this._handlerIfEnable(function (touchMoveEvent) {\n if (_this._isDoubleTap) {\n return;\n }\n _this._collectInertia(touchMoveEvent);\n if (_this._firstMove) {\n _this._updateInteraction(touchMoveEvent);\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n }\n _this._startOffset = __assign({}, _this._offset);\n _this._startTouches = getPageCoordinatesByTouches(touchMoveEvent.touches);\n }\n else {\n if (isZoomInteraction(_this._interaction)) {\n if (_this._startTouches &&\n _this._startTouches.length === 2 &&\n touchMoveEvent.touches.length === 2) {\n _this._handleZoom(touchMoveEvent, calculateScale(_this._startTouches, getPageCoordinatesByTouches(touchMoveEvent.touches)));\n }\n }\n else if (isDragInteraction(_this._interaction)) {\n _this._handleDrag(touchMoveEvent);\n }\n if (_this._interaction) {\n cancelEvent(touchMoveEvent);\n _this._update();\n }\n }\n _this._firstMove = false;\n });\n _this._handlerWheel = function (wheelEvent) {\n if (_this.props.shouldInterceptWheel(wheelEvent)) {\n return;\n }\n cancelEvent(wheelEvent);\n var pageX = wheelEvent.pageX, pageY = wheelEvent.pageY, deltaY = wheelEvent.deltaY, deltaMode = wheelEvent.deltaMode;\n var scaleDelta = 1;\n if (isZoomGesture(wheelEvent) || deltaMode === 1) {\n scaleDelta = 15;\n }\n var likeTouchEvent = {\n touches: [\n // @ts-ignore\n { pageX: pageX, pageY: pageY },\n ],\n };\n var center = _this._getOffsetByFirstTouch(likeTouchEvent);\n var dScale = deltaY * scaleDelta;\n _this._stopAnimation();\n _this._scaleTo(_this._zoomFactor - dScale / _this.props.wheelScaleFactor, center);\n _this._update();\n clearTimeout(\n // @ts-ignore\n _this._wheelTimeOut);\n _this._wheelTimeOut = setTimeout(function () { return _this._sanitize(); }, 100);\n };\n // @ts-ignore\n _this._handlers = _this.props.isTouch()\n ? [\n ['touchstart', _this._handlerOnTouchStart],\n ['touchend', _this._handlerOnTouchEnd],\n ['touchmove', _this._handlerOnTouchMove],\n ]\n : [\n [\n 'mousemove',\n _this.simulate(_this._handlerOnTouchMove),\n _this.props._document,\n ],\n [\n 'mouseup',\n _this.simulate(_this._handlerOnTouchEnd),\n _this.props._document,\n ],\n ['mousedown', _this.simulate(_this._handlerOnTouchStart)],\n ['click', _this._handleClick],\n ['wheel', _this._handlerWheel],\n ];\n return _this;\n }\n PinchZoom.prototype._handleDragStart = function (event) {\n this._ignoreNextClick = true;\n this.props.onDragStart();\n this._stopAnimation();\n this._resetInertia();\n this._lastDragPosition = null;\n this._hasInteraction = true;\n this._draggingPoint = this._offset;\n this._handleDrag(event);\n };\n PinchZoom.prototype._handleDrag = function (event) {\n var touch = this._getOffsetByFirstTouch(event);\n if (this._enoughToDrag()) {\n this._drag(touch, this._lastDragPosition);\n }\n else {\n this._virtualDrag(touch, this._lastDragPosition);\n }\n this._offset = this._sanitizeOffset(this._offset);\n this._lastDragPosition = touch;\n };\n PinchZoom.prototype._resetInertia = function () {\n this._velocity = null;\n this._prevDragMovePoint = null;\n };\n PinchZoom.prototype._realizeInertia = function () {\n var _this = this;\n var _a = this.props, inertiaFriction = _a.inertiaFriction, inertia = _a.inertia;\n if (!inertia || !this._velocity) {\n return;\n }\n var _b = this._velocity, x = _b.x, y = _b.y;\n if (x || y) {\n this._stopAnimation();\n this._resetInertia();\n var renderFrame = function () {\n x *= inertiaFriction;\n y *= inertiaFriction;\n if (!x && !y) {\n return _this._stopAnimation();\n }\n var prevOffset = __assign({}, _this._offset);\n _this._addOffset({ x: x, y: y });\n _this._offset = _this._sanitizeOffset(_this._offset);\n if (comparePoints(prevOffset, _this._offset)) {\n return _this._stopAnimation();\n }\n _this._update({ isAnimation: true });\n };\n this._animate(renderFrame, { duration: 9999 });\n }\n };\n PinchZoom.prototype._collectInertia = function (_a) {\n var touches = _a.touches;\n if (!this.props.inertia) {\n return;\n }\n var currentCoordinates = getPageCoordinatesByTouches(touches)[0];\n var prevPoint = this._prevDragMovePoint;\n if (prevPoint) {\n this._velocity = calculateVelocity(currentCoordinates, prevPoint);\n }\n this._prevDragMovePoint = currentCoordinates;\n };\n PinchZoom.prototype._handleDragEnd = function () {\n this.props.onDragEnd();\n this._end();\n this._realizeInertia();\n };\n PinchZoom.prototype._handleZoomStart = function () {\n this.props.onZoomStart();\n this._stopAnimation();\n this._lastScale = 1;\n this._nthZoom = 0;\n this._lastZoomCenter = null;\n this._hasInteraction = true;\n };\n PinchZoom.prototype._handleZoom = function (event, newScale) {\n var touchCenter = getVectorAvg(this._getOffsetTouches(event));\n var scale = newScale / this._lastScale;\n this._lastScale = newScale;\n // The first touch events are thrown away since they are not precise\n this._nthZoom += 1;\n if (this._nthZoom > 3) {\n this._scale(scale, touchCenter);\n this._drag(touchCenter, this._lastZoomCenter);\n if (this.props.enforceBoundsDuringZoom) {\n this._offset = this._sanitizeOffset(this._offset);\n }\n }\n this._lastZoomCenter = touchCenter;\n };\n PinchZoom.prototype._handleZoomEnd = function () {\n this.props.onZoomEnd();\n this._end();\n };\n PinchZoom.prototype._handleDoubleTap = function (event) {\n var _this = this;\n if (this._hasInteraction || this.props.tapZoomFactor === 0) {\n return;\n }\n var needZoomOut = (this.props.doubleTapZoomOutOnMaxScale &&\n this._zoomFactor === this.props.maxZoom) ||\n (this.props.doubleTapToggleZoom && this._zoomFactor > 1);\n this.props.onDoubleTap();\n this._ignoreNextClick = true;\n var zoomFactor = this._zoomFactor + this.props.tapZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var updateProgress = function (progress) {\n _this._scaleTo(startZoomFactor + progress * (zoomFactor - startZoomFactor), center);\n };\n var center = this._getOffsetByFirstTouch(event);\n this._isDoubleTap = true;\n if (startZoomFactor > zoomFactor) {\n center = this._getCurrentZoomCenter();\n }\n needZoomOut ? this._zoomOutAnimation() : this._animate(updateProgress);\n };\n PinchZoom.prototype._computeInitialOffset = function () {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var x = -abs(width * this._getInitialZoomFactor() - rect.width) / 2;\n var y = -abs(height * this._getInitialZoomFactor() - rect.height) / 2;\n this._initialOffset = { x: x, y: y };\n };\n PinchZoom.prototype._resetOffset = function () {\n this._offset = __assign({}, this._initialOffset);\n };\n PinchZoom.prototype._setupOffsets = function () {\n if (this.props.setOffsetsOnce && this._isOffsetsSet) {\n return;\n }\n this._isOffsetsSet = true;\n this._computeInitialOffset();\n this._resetOffset();\n };\n PinchZoom.prototype._sanitizeOffset = function (offset) {\n var rect = this._getContainerRect();\n var _a = this._getChildSize(), width = _a.width, height = _a.height;\n var elWidth = width * this._getInitialZoomFactor() * this._zoomFactor;\n var elHeight = height * this._getInitialZoomFactor() * this._zoomFactor;\n var _b = getOffsetBounds({\n containerDimension: rect.width,\n childDimension: elWidth,\n padding: this.props.horizontalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetX = _b[0], maxOffsetX = _b[1];\n var _c = getOffsetBounds({\n containerDimension: rect.height,\n childDimension: elHeight,\n padding: this.props.verticalPadding,\n centerContained: this.props.centerContained,\n }), minOffsetY = _c[0], maxOffsetY = _c[1];\n return {\n x: clamp(minOffsetX, maxOffsetX, offset.x),\n y: clamp(minOffsetY, maxOffsetY, offset.y),\n };\n };\n PinchZoom.prototype.alignCenter = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), __x = _a.x, __y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n // Bug-Fix: https://github.com/retyui/react-quick-pinch-zoom/issues/58\n var x = __x * this._initialZoomFactor;\n var y = __y * this._initialZoomFactor;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n var rect = this._getContainerRect();\n var containerCenter = { x: rect.width / 2, y: rect.height / 2 };\n this._zoomFactor = 1;\n this._offset = { x: -(containerCenter.x - x), y: -(containerCenter.y - y) };\n this._scaleTo(scale, containerCenter);\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = _this._sanitizeOffset({ x: x, y: y });\n _this._update();\n };\n this._animate(updateFrame, {\n callback: function () { return _this._sanitize(); },\n duration: duration,\n });\n };\n PinchZoom.prototype.scaleTo = function (options) {\n var _this = this;\n var _a = __assign({ duration: 250, animated: true }, options), x = _a.x, y = _a.y, scale = _a.scale, animated = _a.animated, duration = _a.duration;\n var startZoomFactor = this._zoomFactor;\n var startOffset = __assign({}, this._offset);\n this._zoomFactor = 1;\n this._offset = { x: 0, y: 0 };\n this._scaleTo(scale, { x: x, y: y });\n this._stopAnimation();\n if (!animated) {\n return this._update();\n }\n var diffZoomFactor = this._zoomFactor - startZoomFactor;\n var diffOffset = {\n x: this._offset.x - startOffset.x,\n y: this._offset.y - startOffset.y,\n };\n this._zoomFactor = startZoomFactor;\n this._offset = __assign({}, startOffset);\n var updateFrame = function (progress) {\n var x = startOffset.x + diffOffset.x * progress;\n var y = startOffset.y + diffOffset.y * progress;\n _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateFrame, { callback: function () { return _this._sanitize(); }, duration: duration });\n };\n PinchZoom.prototype._scaleTo = function (zoomFactor, center) {\n this._scale(zoomFactor / this._zoomFactor, center);\n this._offset = this._sanitizeOffset(this._offset);\n };\n PinchZoom.prototype._scale = function (scale, center) {\n scale = this._scaleZoomFactor(scale);\n this._addOffset({\n x: (scale - 1) * (center.x + this._offset.x),\n y: (scale - 1) * (center.y + this._offset.y),\n });\n this.props.onZoomUpdate();\n };\n PinchZoom.prototype._scaleZoomFactor = function (scale) {\n var originalZoomFactor = this._zoomFactor;\n this._zoomFactor *= scale;\n this._zoomFactor = clamp(this.props.minZoom, this.props.maxZoom, this._zoomFactor);\n return this._zoomFactor / originalZoomFactor;\n };\n PinchZoom.prototype._canDrag = function () {\n return this.props.draggableUnZoomed || !isCloseTo(this._zoomFactor, 1);\n };\n PinchZoom.prototype._drag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n if (!this.props.lockDragAxis) {\n this._addOffset({\n x: x,\n y: y,\n });\n }\n else {\n // lock scroll to position that was changed the most\n if (abs(x) > abs(y)) {\n this._addOffset({\n x: x,\n y: 0,\n });\n }\n else {\n this._addOffset({\n y: y,\n x: 0,\n });\n }\n }\n this.props.onDragUpdate();\n }\n };\n PinchZoom.prototype._virtualDrag = function (center, lastCenter) {\n if (lastCenter) {\n var y = -(center.y - lastCenter.y);\n var x = -(center.x - lastCenter.x);\n this._draggingPoint = {\n x: x + this._draggingPoint.x,\n y: y + this._draggingPoint.y,\n };\n }\n };\n PinchZoom.prototype._addOffset = function (offset) {\n var _a = this._offset, x = _a.x, y = _a.y;\n this._offset = {\n x: x + offset.x,\n y: y + offset.y,\n };\n };\n PinchZoom.prototype._sanitize = function () {\n if (this._zoomFactor < this.props.zoomOutFactor) {\n this._resetInertia();\n this._zoomOutAnimation();\n }\n else if (this._isInsaneOffset()) {\n this._sanitizeOffsetAnimation();\n }\n };\n PinchZoom.prototype._isInsaneOffset = function () {\n var offset = this._offset;\n var sanitizedOffset = this._sanitizeOffset(offset);\n return sanitizedOffset.x !== offset.x || sanitizedOffset.y !== offset.y;\n };\n PinchZoom.prototype._sanitizeOffsetAnimation = function () {\n var _this = this;\n var targetOffset = this._sanitizeOffset(this._offset);\n var startOffset = __assign({}, this._offset);\n var updateProgress = function (progress) {\n var x = startOffset.x + progress * (targetOffset.x - startOffset.x);\n var y = startOffset.y + progress * (targetOffset.y - startOffset.y);\n _this._offset = { x: x, y: y };\n _this._update();\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._zoomOutAnimation = function () {\n var _this = this;\n if (this._zoomFactor === 1) {\n return;\n }\n var startZoomFactor = this._zoomFactor;\n var zoomFactor = 1;\n var center = this._getCurrentZoomCenter();\n var updateProgress = function (progress) {\n var scaleFactor = startZoomFactor + progress * (zoomFactor - startZoomFactor);\n _this._scaleTo(scaleFactor, center);\n };\n this._animate(updateProgress);\n };\n PinchZoom.prototype._getInitialZoomFactor = function () {\n return this._initialZoomFactor;\n };\n PinchZoom.prototype._getCurrentZoomCenter = function () {\n var _a = this._offset, x = _a.x, y = _a.y;\n var offsetLeft = x - this._initialOffset.x;\n var offsetTop = y - this._initialOffset.y;\n return {\n x: -1 * x - offsetLeft / (1 / this._zoomFactor - 1),\n y: -1 * y - offsetTop / (1 / this._zoomFactor - 1),\n };\n };\n PinchZoom.prototype._getOffsetByFirstTouch = function (event) {\n return this._getOffsetTouches(event)[0];\n };\n PinchZoom.prototype._getOffsetTouches = function (event) {\n var _document = this.props._document;\n var _html = _document.documentElement;\n var _body = _document.body;\n var _a = this._getContainerRect(), top = _a.top, left = _a.left;\n var scrollTop = _html.scrollTop || _body.scrollTop;\n var scrollLeft = _html.scrollLeft || _body.scrollLeft;\n var posTop = top + scrollTop;\n var posLeft = left + scrollLeft;\n return getPageCoordinatesByTouches(event.touches).map(function (_a) {\n var x = _a.x, y = _a.y;\n return ({\n x: x - posLeft,\n y: y - posTop,\n });\n });\n };\n PinchZoom.prototype._animate = function (frameFn, options) {\n var _this = this;\n var startTime = new Date().getTime();\n var _a = __assign({ timeFn: swing, callback: function () { }, duration: this.props.animationDuration }, options), timeFn = _a.timeFn, callback = _a.callback, duration = _a.duration;\n var renderFrame = function () {\n if (!_this._inAnimation) {\n return;\n }\n var frameTime = new Date().getTime() - startTime;\n var progress = frameTime / duration;\n if (frameTime >= duration) {\n frameFn(1);\n _this._stopAnimation();\n callback();\n _this._update();\n }\n else {\n progress = timeFn(progress);\n frameFn(progress);\n _this._update({ isAnimation: true });\n requestAnimationFrame(renderFrame);\n }\n };\n this._inAnimation = true;\n requestAnimationFrame(renderFrame);\n };\n PinchZoom.prototype._stopAnimation = function () {\n this._inAnimation = false;\n };\n PinchZoom.prototype._end = function () {\n this._hasInteraction = false;\n this._sanitize();\n this._update();\n };\n PinchZoom.prototype._getContainerRect = function () {\n var div = this._containerRef.current;\n return div.getBoundingClientRect();\n };\n PinchZoom.prototype._getChildSize = function () {\n var div = this._containerRef.current;\n return getElementSize(div === null || div === void 0 ? void 0 : div.firstElementChild);\n };\n PinchZoom.prototype._updateInitialZoomFactor = function () {\n var rect = this._getContainerRect();\n var size = this._getChildSize();\n var xZoomFactor = rect.width / size.width;\n var yZoomFactor = rect.height / size.height;\n this._initialZoomFactor = min(xZoomFactor, yZoomFactor);\n };\n PinchZoom.prototype._bindEvents = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (window.ResizeObserver) {\n this._containerObserver = new ResizeObserver(this._onResize);\n this._containerObserver.observe(div);\n }\n else {\n window.addEventListener('resize', this._onResize);\n }\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).addEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.addEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._unSubscribe = function () {\n var _this = this;\n var div = this._containerRef.current;\n if (this._containerObserver) {\n this._containerObserver.disconnect();\n this._containerObserver = null;\n }\n window.removeEventListener('resize', this._onResize);\n this._handlers.forEach(function (_a) {\n var eventName = _a[0], fn = _a[1], target = _a[2];\n (target || div).removeEventListener(eventName, fn, true);\n });\n Array.from(div.querySelectorAll('img')).forEach(function (img) {\n return img.removeEventListener('load', _this._onResize);\n });\n };\n PinchZoom.prototype._update = function (options) {\n var _this = this;\n if (this._updatePlaned) {\n return;\n }\n var updateFrame = function () {\n var scale = _this._getInitialZoomFactor() * _this._zoomFactor;\n var x = -_this._offset.x / scale;\n var y = -_this._offset.y / scale;\n _this.props.onUpdate({ scale: scale, x: x, y: y });\n };\n if (options === null || options === void 0 ? void 0 : options.isAnimation) {\n return updateFrame();\n }\n this._updatePlaned = true;\n requestAnimationFrame(function () {\n _this._updatePlaned = false;\n updateFrame();\n });\n };\n PinchZoom.prototype._handlerIfEnable = function (fn) {\n var _this = this;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (_this.props.enabled) {\n fn.apply(void 0, args);\n }\n };\n };\n PinchZoom.prototype._setInteraction = function (newInteraction, event) {\n var interaction = this._interaction;\n if (interaction !== newInteraction) {\n if (interaction && !newInteraction) {\n if (isZoomInteraction(interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(interaction)) {\n this._handleDragEnd();\n }\n }\n if (isZoomInteraction(newInteraction)) {\n this._handleZoomStart();\n }\n else if (isDragInteraction(newInteraction)) {\n this._handleDragStart(event);\n }\n }\n this._interaction = newInteraction;\n };\n PinchZoom.prototype._distanceBetweenNumbers = function (a, b) {\n return a > b ? a - b : b - a;\n };\n PinchZoom.prototype._enoughToDrag = function () {\n if (this._distanceBetweenNumbers(this._startOffset.x, this._draggingPoint.x) >\n 5 ||\n this._distanceBetweenNumbers(this._startOffset.y, this._draggingPoint.y) >\n 5)\n return true;\n return false;\n };\n PinchZoom.prototype._updateInteraction = function (event) {\n var fingers = this._fingers;\n if (fingers === 2) {\n return this._setInteraction('zoom', event);\n }\n if (fingers === 1 && this._canDrag()) {\n return this._setInteraction('drag', event);\n }\n this._setInteraction(null, event);\n };\n PinchZoom.prototype._detectDoubleTap = function (event) {\n var time = new Date().getTime();\n if (this._fingers > 1) {\n this._lastTouchStart = 0;\n }\n if (time - this._lastTouchStart < 300) {\n cancelEvent(event);\n this._handleDoubleTap(event);\n if (isZoomInteraction(this._interaction)) {\n this._handleZoomEnd();\n }\n else if (isDragInteraction(this._interaction)) {\n this._handleDragEnd();\n }\n }\n else {\n this._isDoubleTap = false;\n }\n if (this._fingers === 1) {\n this._lastTouchStart = time;\n }\n };\n PinchZoom.prototype.simulate = function (fn) {\n var _this = this;\n return function (mouseEvent) {\n var pageX = mouseEvent.pageX, pageY = mouseEvent.pageY, type = mouseEvent.type;\n var isEnd = type === 'mouseup';\n var isStart = type === 'mousedown';\n if (isStart) {\n mouseEvent.preventDefault();\n _this._listenMouseMove = true;\n }\n if (_this._listenMouseMove) {\n // @ts-ignore\n mouseEvent.touches = isEnd ? [] : [{ pageX: pageX, pageY: pageY }];\n fn(\n // @ts-ignore\n mouseEvent);\n }\n if (isEnd) {\n _this._listenMouseMove = false;\n }\n };\n };\n PinchZoom.prototype.componentDidMount = function () {\n this._bindEvents();\n this._update();\n };\n PinchZoom.prototype.componentWillUnmount = function () {\n this._stopAnimation();\n this._unSubscribe();\n };\n PinchZoom.prototype.render = function () {\n var _a = this.props, children = _a.children, containerProps = _a.containerProps;\n var child = Children.only(children);\n var props = containerProps || {};\n return (React.createElement(React.Fragment, null,\n React.createElement(\"style\", null, styles),\n React.createElement(\"div\", __assign({}, props, { ref: this._containerRef, className: classnames(styleRoot, props.className) }), cloneElement(child, {\n className: classnames(styleChild, child.props.className),\n }))));\n };\n PinchZoom.defaultProps = {\n animationDuration: 250,\n draggableUnZoomed: true,\n enforceBoundsDuringZoom: false,\n centerContained: false,\n enabled: true,\n inertia: true,\n inertiaFriction: 0.96,\n horizontalPadding: 0,\n isTouch: isTouch,\n lockDragAxis: false,\n maxZoom: 5,\n minZoom: 0.5,\n onDoubleTap: noup,\n onDragEnd: noup,\n onDragStart: noup,\n onDragUpdate: noup,\n onZoomEnd: noup,\n onZoomStart: noup,\n onZoomUpdate: noup,\n setOffsetsOnce: false,\n shouldInterceptWheel: shouldInterceptWheel,\n shouldCancelHandledTouchEndEvents: false,\n tapZoomFactor: 1,\n verticalPadding: 0,\n wheelScaleFactor: 1500,\n zoomOutFactor: 1.3,\n doubleTapZoomOutOnMaxScale: false,\n doubleTapToggleZoom: false,\n // @ts-expect-error\n _document: isSsr ? null : window.document,\n };\n return PinchZoom;\n}(Component));\nif (process.env.NODE_ENV !== 'production') {\n var _a = require('prop-types'), any = _a.any, element = _a.element, object = _a.object, number = _a.number, func = _a.func, bool = _a.bool;\n // @ts-ignore\n PinchZoom.propTypes = {\n children: element,\n containerProps: object,\n wheelScaleFactor: number,\n animationDuration: number,\n draggableUnZoomed: bool,\n enforceBoundsDuringZoom: bool,\n centerContained: bool,\n enabled: bool,\n horizontalPadding: number,\n lockDragAxis: bool,\n onUpdate: func.isRequired,\n maxZoom: number,\n minZoom: number,\n onDoubleTap: func,\n onDragEnd: func,\n onDragStart: func,\n onDragUpdate: func,\n onZoomEnd: func,\n onZoomStart: func,\n onZoomUpdate: func,\n setOffsetsOnce: bool,\n tapZoomFactor: number,\n verticalPadding: number,\n zoomOutFactor: number,\n doubleTapZoomOutOnMaxScale: bool,\n doubleTapToggleZoom: bool,\n isTouch: func,\n _document: any,\n };\n}\nexport default PinchZoom;\n","export default function formatDuration(time) {\n if (!time) return;\n let hours = Math.floor(time / 3600);\n let minutes = Math.floor((time % 3600) / 60);\n let seconds = Math.round(time % 60);\n\n if (hours === 0) {\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n } else {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds\n .toString()\n .padStart(2, '0')}`;\n }\n}\n","import { getBlurHashAverageColor } from 'fast-blurhash';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport QuickPinchZoom, { make3dTransformValue } from 'react-quick-pinch-zoom';\n\nimport formatDuration from '../utils/format-duration';\nimport mem from '../utils/mem';\nimport states from '../utils/states';\n\nimport Icon from './icon';\nimport Link from './link';\n\nconst isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); // https://stackoverflow.com/a/23522755\n\n/*\nMedia type\n===\nunknown = unsupported or unrecognized file type\nimage = Static image\ngifv = Looping, soundless animation\nvideo = Video clip\naudio = Audio track\n*/\n\nconst dataAltLabel = 'ALT';\nconst AltBadge = (props) => {\n const { alt, lang, index, ...rest } = props;\n if (!alt || !alt.trim()) return null;\n return (\n {\n e.stopPropagation();\n e.preventDefault();\n states.showMediaAlt = {\n alt,\n lang,\n };\n }}\n title=\"Media description\"\n >\n {dataAltLabel}\n {!!index && {index}}\n \n );\n};\n\nconst MEDIA_CAPTION_LIMIT = 140;\nconst MEDIA_CAPTION_LIMIT_LONGER = 280;\nexport const isMediaCaptionLong = mem((caption) =>\n caption?.length\n ? caption.length > MEDIA_CAPTION_LIMIT ||\n /[\\n\\r].*[\\n\\r]/.test(caption.trim())\n : false,\n);\n\nfunction Media({\n class: className = '',\n media,\n to,\n lang,\n showOriginal,\n autoAnimate,\n showCaption,\n allowLongerCaption,\n altIndex,\n onClick = () => {},\n}) {\n let {\n blurhash,\n description,\n meta,\n previewRemoteUrl,\n previewUrl,\n remoteUrl,\n url,\n type,\n } = media;\n if (/no\\-preview\\./i.test(previewUrl)) {\n previewUrl = null;\n }\n const { original = {}, small, focus } = meta || {};\n\n const width = showOriginal\n ? original?.width\n : small?.width || original?.width;\n const height = showOriginal\n ? original?.height\n : small?.height || original?.height;\n const mediaURL = showOriginal ? url : previewUrl || url;\n const remoteMediaURL = showOriginal\n ? remoteUrl\n : previewRemoteUrl || remoteUrl;\n const hasDimensions = width && height;\n const orientation = hasDimensions\n ? width > height\n ? 'landscape'\n : 'portrait'\n : null;\n\n const rgbAverageColor = blurhash ? getBlurHashAverageColor(blurhash) : null;\n\n const videoRef = useRef();\n\n let focalPosition;\n if (focus) {\n // Convert focal point to CSS background position\n // Formula from jquery-focuspoint\n // x = -1, y = 1 => 0% 0%\n // x = 0, y = 0 => 50% 50%\n // x = 1, y = -1 => 100% 100%\n const x = ((focus.x + 1) / 2) * 100;\n const y = ((1 - focus.y) / 2) * 100;\n focalPosition = `${x.toFixed(0)}% ${y.toFixed(0)}%`;\n }\n\n const mediaRef = useRef();\n const onUpdate = useCallback(({ x, y, scale }) => {\n const { current: media } = mediaRef;\n\n if (media) {\n const value = make3dTransformValue({ x, y, scale });\n\n if (scale === 1) {\n media.style.removeProperty('transform');\n } else {\n media.style.setProperty('transform', value);\n }\n\n media.closest('.media-zoom').style.touchAction =\n scale <= 1.01 ? 'pan-x' : '';\n }\n }, []);\n\n const [pinchZoomEnabled, setPinchZoomEnabled] = useState(false);\n const quickPinchZoomProps = {\n enabled: pinchZoomEnabled,\n draggableUnZoomed: false,\n inertiaFriction: 0.9,\n tapZoomFactor: 2,\n doubleTapToggleZoom: true,\n containerProps: {\n className: 'media-zoom',\n style: {\n overflow: 'visible',\n // width: 'inherit',\n // height: 'inherit',\n // justifyContent: 'inherit',\n // alignItems: 'inherit',\n // display: 'inherit',\n },\n },\n onUpdate,\n };\n\n const Parent = useMemo(\n () => (to ? (props) => : 'div'),\n [to],\n );\n\n const remoteMediaURLObj = remoteMediaURL ? getURLObj(remoteMediaURL) : null;\n const isVideoMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp4|m4r|m4v|mov|webm)$/i.test(remoteMediaURLObj.pathname);\n const isAudioMaybe =\n type === 'unknown' &&\n remoteMediaURLObj &&\n /\\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(remoteMediaURLObj.pathname);\n const isImage =\n type === 'image' ||\n (type === 'unknown' && previewUrl && !isVideoMaybe && !isAudioMaybe);\n\n const parentRef = useRef();\n const [imageSmallerThanParent, setImageSmallerThanParent] = useState(false);\n useLayoutEffect(() => {\n if (!isImage) return;\n if (!showOriginal) return;\n if (!parentRef.current) return;\n const { offsetWidth, offsetHeight } = parentRef.current;\n const smaller = width < offsetWidth && height < offsetHeight;\n if (smaller) setImageSmallerThanParent(smaller);\n }, [width, height]);\n\n const maxAspectHeight =\n window.innerHeight * (orientation === 'portrait' ? 0.45 : 0.33);\n const maxHeight = orientation === 'portrait' ? 0 : 160;\n const averageColorStyle = {\n '--average-color': rgbAverageColor && `rgb(${rgbAverageColor.join(',')})`,\n };\n const mediaStyles =\n width && height\n ? {\n '--width': `${width}px`,\n '--height': `${height}px`,\n // Calculate '--aspectWidth' based on aspect ratio calculated from '--width' and '--height', max height has to be 160px\n '--aspectWidth': `${\n (width / height) * Math.max(maxHeight, maxAspectHeight)\n }px`,\n aspectRatio: `${width} / ${height}`,\n ...averageColorStyle,\n }\n : {\n ...averageColorStyle,\n };\n\n const longDesc = isMediaCaptionLong(description);\n let showInlineDesc =\n !!showCaption && !showOriginal && !!description && !longDesc;\n if (\n allowLongerCaption &&\n !showInlineDesc &&\n description?.length <= MEDIA_CAPTION_LIMIT_LONGER\n ) {\n showInlineDesc = true;\n }\n const Figure = !showInlineDesc\n ? Fragment\n : (props) => {\n const { children, ...restProps } = props;\n return (\n
    \n {children}\n {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: description,\n lang,\n };\n }}\n >\n {description}\n \n
    \n );\n };\n\n const [hasNaturalAspectRatio, setHasNaturalAspectRatio] = useState(undefined);\n\n if (isImage) {\n // Note: type: unknown might not have width/height\n quickPinchZoomProps.containerProps.style.display = 'inherit';\n\n useLayoutEffect(() => {\n if (!isSafari) return;\n if (!showOriginal) return;\n (async () => {\n try {\n await fetch(mediaURL, { mode: 'no-cors' });\n mediaRef.current.src = mediaURL;\n } catch (e) {\n // Ignore\n }\n })();\n }, [mediaURL]);\n\n return (\n
    \n \n {showOriginal ? (\n \n {\n e.target.closest('.media-image').style.backgroundImage = '';\n e.target.closest('.media-zoom').style.display = '';\n setPinchZoomEnabled(true);\n }}\n onError={(e) => {\n const { src } = e.target;\n if (\n src === mediaURL &&\n remoteMediaURL &&\n mediaURL !== remoteMediaURL\n ) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n \n ) : (\n <>\n {\n // e.target.closest('.media-image').style.backgroundImage = '';\n e.target.dataset.loaded = true;\n const $media = e.target.closest('.media');\n if (!hasDimensions && $media) {\n const { naturalWidth, naturalHeight } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight ? 'landscape' : 'portrait';\n $media.style.setProperty('--width', `${naturalWidth}px`);\n $media.style.setProperty('--height', `${naturalHeight}px`);\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n\n // Check natural aspect ratio vs display aspect ratio\n if ($media) {\n const {\n clientWidth,\n clientHeight,\n naturalWidth,\n naturalHeight,\n } = e.target;\n if (\n clientWidth &&\n clientHeight &&\n naturalWidth &&\n naturalHeight\n ) {\n const minDimension = 88;\n if (\n naturalWidth < minDimension ||\n naturalHeight < minDimension\n ) {\n $media.dataset.hasSmallDimension = true;\n } else {\n const displayNaturalHeight =\n (naturalHeight * clientWidth) / naturalWidth;\n const almostSimilarHeight =\n Math.abs(displayNaturalHeight - clientHeight) < 5;\n\n if (almostSimilarHeight) {\n setHasNaturalAspectRatio(true);\n }\n }\n }\n }\n }}\n onError={(e) => {\n const { src } = e.target;\n if (src === mediaURL && mediaURL !== remoteMediaURL) {\n e.target.src = remoteMediaURL;\n }\n }}\n />\n {!showInlineDesc && (\n \n )}\n \n )}\n \n
    \n );\n } else if (type === 'gifv' || type === 'video' || isVideoMaybe) {\n const hasDuration = original.duration > 0;\n const shortDuration = original.duration < 31;\n const isGIF = type === 'gifv' && shortDuration;\n // If GIF is too long, treat it as a video\n const loopable = original.duration < 61;\n const formattedDuration = formatDuration(original.duration);\n const hoverAnimate = !showOriginal && !autoAnimate && isGIF;\n const autoGIFAnimate = !showOriginal && autoAnimate && isGIF;\n const showProgress = original.duration > 5;\n\n // This string is only for autoplay + muted to work on Mobile Safari\n const gifHTML = `\n \n `;\n\n const videoHTML = `\n \n `;\n\n return (\n
    \n {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n onClick(e);\n }}\n onMouseEnter={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onMouseLeave={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n onFocus={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.play();\n } catch (e) {}\n }\n }}\n onBlur={() => {\n if (hoverAnimate) {\n try {\n videoRef.current.pause();\n } catch (e) {}\n }\n }}\n >\n {showOriginal || autoGIFAnimate ? (\n isGIF && showOriginal ? (\n \n \n \n ) : isGIF ? (\n \n ) : (\n \n )\n ) : isGIF ? (\n {\n const { target } = e;\n const container = target?.closest('.media-gif');\n if (container) {\n const percentage =\n (target.currentTime / target.duration) * 100;\n container.style.setProperty(\n '--progress',\n `${percentage}%`,\n );\n }\n }\n : undefined\n }\n />\n ) : (\n <>\n {previewUrl ? (\n {\n if (!hasDimensions) {\n const $media = e.target.closest('.media');\n if ($media) {\n const { naturalHeight, naturalWidth } = e.target;\n $media.dataset.orientation =\n naturalWidth > naturalHeight\n ? 'landscape'\n : 'portrait';\n $media.style.setProperty(\n '--width',\n `${naturalWidth}px`,\n );\n $media.style.setProperty(\n '--height',\n `${naturalHeight}px`,\n );\n $media.style.aspectRatio = `${naturalWidth}/${naturalHeight}`;\n }\n }\n }}\n />\n ) : (\n {\n if (!hasDuration) {\n const { duration } = e.target;\n if (duration) {\n const formattedDuration = formatDuration(duration);\n const container = e.target.closest('.media-video');\n if (container) {\n container.dataset.formattedDuration =\n formattedDuration;\n }\n }\n }\n }}\n />\n )}\n
    \n \n
    \n \n )}\n {!showOriginal && !showInlineDesc && (\n \n )}\n \n
    \n );\n } else if (type === 'audio' || isAudioMaybe) {\n const formattedDuration = formatDuration(original.duration);\n return (\n
    \n \n {showOriginal ? (\n
    \n );\n }\n}\n\nfunction getURLObj(url) {\n // Fake base URL if url doesn't have https:// prefix\n return URL.parse(url, location.origin);\n}\n\nexport default memo(Media, (oldProps, newProps) => {\n const oldMedia = oldProps.media || {};\n const newMedia = newProps.media || {};\n\n return (\n oldMedia?.id === newMedia?.id &&\n oldMedia.url === newMedia.url &&\n oldProps.to === newProps.to &&\n oldProps.class === newProps.class\n );\n});\n","import './status.css';\nimport '@justinribeiro/lite-youtube';\n\nimport {\n ControlledMenu,\n Menu,\n MenuDivider,\n MenuHeader,\n MenuItem,\n} from '@szhsin/react-menu';\nimport { decodeBlurHash, getBlurHashAverageColor } from 'fast-blurhash';\nimport { shallowEqual } from 'fast-equals';\nimport prettify from 'html-prettify';\nimport pThrottle from 'p-throttle';\nimport { Fragment } from 'preact';\nimport { memo } from 'preact/compat';\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport punycode from 'punycode/';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { detectAll } from 'tinyld/light';\nimport { useLongPress } from 'use-long-press';\nimport { useSnapshot } from 'valtio';\n\nimport CustomEmoji from '../components/custom-emoji';\nimport EmojiText from '../components/emoji-text';\nimport LazyShazam from '../components/lazy-shazam';\nimport Loader from '../components/loader';\nimport MenuConfirm from '../components/menu-confirm';\nimport Menu2 from '../components/menu2';\nimport Modal from '../components/modal';\nimport NameText from '../components/name-text';\nimport Poll from '../components/poll';\nimport { api } from '../utils/api';\nimport emojifyText from '../utils/emojify-text';\nimport enhanceContent from '../utils/enhance-content';\nimport FilterContext from '../utils/filter-context';\nimport { isFiltered } from '../utils/filters';\nimport getTranslateTargetLanguage from '../utils/get-translate-target-language';\nimport getHTMLText from '../utils/getHTMLText';\nimport handleContentLinks from '../utils/handle-content-links';\nimport htmlContentLength from '../utils/html-content-length';\nimport isRTL from '../utils/is-rtl';\nimport isMastodonLinkMaybe from '../utils/isMastodonLinkMaybe';\nimport localeMatch from '../utils/locale-match';\nimport mem from '../utils/mem';\nimport niceDateTime from '../utils/nice-date-time';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport safeBoundingBoxPadding from '../utils/safe-bounding-box-padding';\nimport shortenNumber from '../utils/shorten-number';\nimport showCompose from '../utils/show-compose';\nimport showToast from '../utils/show-toast';\nimport { speak, supportsTTS } from '../utils/speech';\nimport states, { getStatus, saveStatus, statusKey } from '../utils/states';\nimport statusPeek from '../utils/status-peek';\nimport store from '../utils/store';\nimport { getCurrentAccountID } from '../utils/store-utils';\nimport supports from '../utils/supports';\nimport unfurlMastodonLink from '../utils/unfurl-link';\nimport useTruncated from '../utils/useTruncated';\nimport visibilityIconsMap from '../utils/visibility-icons-map';\n\nimport Avatar from './avatar';\nimport Icon from './icon';\nimport Link from './link';\nimport Media, { isMediaCaptionLong } from './media';\nimport MenuLink from './menu-link';\nimport RelativeTime from './relative-time';\nimport TranslationBlock from './translation-block';\n\nconst SHOW_COMMENT_COUNT_LIMIT = 280;\nconst INLINE_TRANSLATE_LIMIT = 140;\n\nconst throttle = pThrottle({\n limit: 1,\n interval: 1000,\n});\nfunction fetchAccount(id, masto) {\n return masto.v1.accounts.$select(id).fetch();\n}\nconst memFetchAccount = pmem(throttle(fetchAccount));\n\nconst visibilityText = {\n public: 'Public',\n unlisted: 'Unlisted',\n private: 'Followers only',\n direct: 'Private mention',\n};\n\nconst isIOS =\n window.ontouchstart !== undefined &&\n /iPad|iPhone|iPod/.test(navigator.userAgent);\n\nconst rtf = new Intl.RelativeTimeFormat();\n\nconst REACTIONS_LIMIT = 80;\n\nfunction getPollText(poll) {\n if (!poll?.options?.length) return '';\n return `📊:\\n${poll.options\n .map(\n (option) =>\n `- ${option.title}${\n option.votesCount >= 0 ? ` (${option.votesCount})` : ''\n }`,\n )\n .join('\\n')}`;\n}\nfunction getPostText(status) {\n const { spoilerText, content, poll } = status;\n return (\n (spoilerText ? `${spoilerText}\\n\\n` : '') +\n getHTMLText(content) +\n getPollText(poll)\n );\n}\n\nconst PostContent = memo(\n ({ post, instance, previewMode }) => {\n const { content, emojis, language, mentions, url } = post;\n return (\n {\n // Remove target=\"_blank\" from links\n dom.querySelectorAll('a.u-url[target=\"_blank\"]').forEach((a) => {\n if (!/http/i.test(a.innerText.trim())) {\n a.removeAttribute('target');\n }\n });\n },\n }),\n }}\n />\n );\n },\n (oldProps, newProps) => {\n const { post: oldPost } = oldProps;\n const { post: newPost } = newProps;\n return oldPost.content === newPost.content;\n },\n);\n\nconst SIZE_CLASS = {\n s: 'small',\n m: 'medium',\n l: 'large',\n};\n\nconst detectLang = mem((text) => {\n text = text?.trim();\n\n // Ref: https://github.com/komodojp/tinyld/blob/develop/docs/benchmark.md\n // 500 should be enough for now, also the default max chars for Mastodon\n if (text?.length > 500) {\n return null;\n }\n const langs = detectAll(text);\n const lang = langs[0];\n if (lang?.lang && lang?.accuracy > 0.5) {\n // If > 50% accurate, use it\n // It can be accurate if < 50% but better be safe\n // Though > 50% also can be inaccurate 🤷‍♂️\n return lang.lang;\n }\n return null;\n});\n\nfunction Status({\n statusID,\n status,\n instance: propInstance,\n size = 'm',\n contentTextWeight,\n readOnly,\n enableCommentHint,\n withinContext,\n skeleton,\n enableTranslate,\n forceTranslate: _forceTranslate,\n previewMode,\n // allowFilters,\n onMediaClick,\n quoted,\n onStatusLinkClick = () => {},\n showFollowedTags,\n allowContextMenu,\n showActionsBar,\n showReplyParent,\n mediaFirst,\n}) {\n if (skeleton) {\n return (\n \n {!mediaFirst && }\n
    \n
    \n {(size === 's' || mediaFirst) && } ███ ████████\n
    \n
    \n {mediaFirst &&
    }\n
    \n

    ████ ████████

    \n
    \n
    \n
    \n
    \n );\n }\n const { masto, instance, authenticated } = api({ instance: propInstance });\n const { instance: currentInstance } = api();\n const sameInstance = instance === currentInstance;\n\n let sKey = statusKey(statusID || status?.id, instance);\n const snapStates = useSnapshot(states);\n if (!status) {\n status = snapStates.statuses[sKey] || snapStates.statuses[statusID];\n sKey = statusKey(status?.id, instance);\n }\n if (!status) {\n return null;\n }\n\n const {\n account: {\n acct,\n avatar,\n avatarStatic,\n id: accountId,\n url: accountURL,\n displayName,\n username,\n emojis: accountEmojis,\n bot,\n group,\n },\n id,\n repliesCount,\n reblogged,\n reblogsCount,\n favourited,\n favouritesCount,\n bookmarked,\n poll,\n muted,\n sensitive,\n spoilerText,\n visibility, // public, unlisted, private, direct\n language: _language,\n editedAt,\n filtered,\n card,\n createdAt,\n inReplyToId,\n inReplyToAccountId,\n content,\n mentions,\n mediaAttachments,\n reblog,\n uri,\n url,\n emojis,\n tags,\n pinned,\n // Non-API props\n _deleted,\n _pinned,\n // _filtered,\n // Non-Mastodon\n emojiReactions,\n } = status;\n\n const [languageAutoDetected, setLanguageAutoDetected] = useState(null);\n useEffect(() => {\n if (!content) return;\n if (_language) return;\n let timer;\n timer = setTimeout(() => {\n let detected = detectLang(\n getHTMLText(content, {\n preProcess: (dom) => {\n // Remove anything that can skew the language detection\n\n // Remove .mention, .hashtag, pre, code, a:has(.invisible)\n dom\n .querySelectorAll(\n '.mention, .hashtag, pre, code, a:has(.invisible)',\n )\n .forEach((a) => {\n a.remove();\n });\n\n // Remove links that contains text that starts with https?://\n dom.querySelectorAll('a').forEach((a) => {\n const text = a.innerText.trim();\n if (text.startsWith('https://') || text.startsWith('http://')) {\n a.remove();\n }\n });\n },\n }),\n );\n setLanguageAutoDetected(detected);\n }, 1000);\n return () => clearTimeout(timer);\n }, [content, _language]);\n const language = _language || languageAutoDetected;\n\n // if (!mediaAttachments?.length) mediaFirst = false;\n const hasMediaAttachments = !!mediaAttachments?.length;\n if (mediaFirst && hasMediaAttachments) size = 's';\n\n const currentAccount = useMemo(() => {\n return getCurrentAccountID();\n }, []);\n const isSelf = useMemo(() => {\n return currentAccount && currentAccount === accountId;\n }, [accountId, currentAccount]);\n\n const filterContext = useContext(FilterContext);\n const filterInfo =\n !isSelf && !readOnly && !previewMode && isFiltered(filtered, filterContext);\n\n if (filterInfo?.action === 'hide') {\n return null;\n }\n\n console.debug('RENDER Status', id, status?.account.displayName, quoted);\n\n const debugHover = (e) => {\n if (e.shiftKey) {\n console.log({\n ...status,\n });\n }\n };\n\n if (/*allowFilters && */ size !== 'l' && filterInfo) {\n return (\n \n );\n }\n\n const createdAtDate = new Date(createdAt);\n const editedAtDate = new Date(editedAt);\n\n let inReplyToAccountRef = mentions?.find(\n (mention) => mention.id === inReplyToAccountId,\n );\n if (!inReplyToAccountRef && inReplyToAccountId === id) {\n inReplyToAccountRef = { url: accountURL, username, displayName };\n }\n const [inReplyToAccount, setInReplyToAccount] = useState(inReplyToAccountRef);\n if (!withinContext && !inReplyToAccount && inReplyToAccountId) {\n const account = states.accounts[inReplyToAccountId];\n if (account) {\n setInReplyToAccount(account);\n } else {\n memFetchAccount(inReplyToAccountId, masto)\n .then((account) => {\n setInReplyToAccount(account);\n states.accounts[account.id] = account;\n })\n .catch((e) => {});\n }\n }\n const mentionSelf =\n inReplyToAccountId === currentAccount ||\n mentions?.find((mention) => mention.id === currentAccount);\n\n const readingExpandSpoilers = useMemo(() => {\n const prefs = store.account.get('preferences') || {};\n return !!prefs['reading:expand:spoilers'];\n }, []);\n const readingExpandMedia = useMemo(() => {\n // default | show_all | hide_all\n // Ignore hide_all because it means hide *ALL* media including non-sensitive ones\n const prefs = store.account.get('preferences') || {};\n return prefs['reading:expand:media'] || 'default';\n }, []);\n // FOR TESTING:\n // const readingExpandSpoilers = true;\n // const readingExpandMedia = 'show_all';\n const showSpoiler =\n previewMode || readingExpandSpoilers || !!snapStates.spoilers[id];\n const showSpoilerMedia =\n previewMode ||\n readingExpandMedia === 'show_all' ||\n !!snapStates.spoilersMedia[id];\n\n if (reblog) {\n // If has statusID, means useItemID (cached in states)\n\n if (group) {\n return (\n \n
    \n {' '}\n \n
    \n \n \n );\n }\n\n return (\n \n
    \n {' '}\n {' '}\n boosted\n
    \n \n \n );\n }\n\n // Check followedTags\n const FollowedTagsParent = useCallback(\n ({ children }) => (\n \n
    \n {' '}\n {snapStates.statusFollowedTags[sKey].slice(0, 3).map((tag) => (\n \n {tag}\n \n ))}\n
    \n {children}\n \n ),\n [sKey, instance, snapStates.statusFollowedTags[sKey]],\n );\n const StatusParent =\n showFollowedTags && !!snapStates.statusFollowedTags[sKey]?.length\n ? FollowedTagsParent\n : Fragment;\n\n const isSizeLarge = size === 'l';\n\n const [forceTranslate, setForceTranslate] = useState(_forceTranslate);\n const targetLanguage = getTranslateTargetLanguage(true);\n const contentTranslationHideLanguages =\n snapStates.settings.contentTranslationHideLanguages || [];\n const { contentTranslation, contentTranslationAutoInline } =\n snapStates.settings;\n if (!contentTranslation) enableTranslate = false;\n const inlineTranslate = useMemo(() => {\n if (\n !contentTranslation ||\n !contentTranslationAutoInline ||\n readOnly ||\n (withinContext && !isSizeLarge) ||\n previewMode ||\n spoilerText ||\n sensitive ||\n poll ||\n card ||\n mediaAttachments?.length\n ) {\n return false;\n }\n const contentLength = htmlContentLength(content);\n return contentLength > 0 && contentLength <= INLINE_TRANSLATE_LIMIT;\n }, [\n contentTranslation,\n contentTranslationAutoInline,\n readOnly,\n withinContext,\n isSizeLarge,\n previewMode,\n spoilerText,\n sensitive,\n poll,\n card,\n mediaAttachments,\n content,\n ]);\n\n const [showEdited, setShowEdited] = useState(false);\n const [showEmbed, setShowEmbed] = useState(false);\n\n const spoilerContentRef = useTruncated();\n const contentRef = useTruncated();\n const mediaContainerRef = useTruncated();\n const readMoreText = 'Read more →';\n\n const statusRef = useRef(null);\n\n const unauthInteractionErrorMessage = `Sorry, your current logged-in instance can't interact with this post from another instance.`;\n\n const textWeight = useCallback(\n () =>\n Math.max(\n Math.round((spoilerText.length + htmlContentLength(content)) / 140) ||\n 1,\n 1,\n ),\n [spoilerText, content],\n );\n\n const createdDateText = niceDateTime(createdAtDate);\n const editedDateText = editedAt && niceDateTime(editedAtDate);\n\n // Can boost if:\n // - authenticated AND\n // - visibility != direct OR\n // - visibility = private AND isSelf\n let canBoost =\n authenticated && visibility !== 'direct' && visibility !== 'private';\n if (visibility === 'private' && isSelf) {\n canBoost = true;\n }\n\n const replyStatus = (e) => {\n if (!sameInstance || !authenticated) {\n return alert(unauthInteractionErrorMessage);\n }\n // syntheticEvent comes from MenuItem\n if (e?.shiftKey || e?.syntheticEvent?.shiftKey) {\n const newWin = openCompose({\n replyToStatus: status,\n });\n if (newWin) return;\n }\n showCompose({\n replyToStatus: status,\n });\n };\n\n // Check if media has no descriptions\n const mediaNoDesc = useMemo(() => {\n return mediaAttachments.some(\n (attachment) => !attachment.description?.trim?.(),\n );\n }, [mediaAttachments]);\n\n const statusMonthsAgo = useMemo(() => {\n return Math.floor(\n (new Date() - createdAtDate) / (1000 * 60 * 60 * 24 * 30),\n );\n }, [createdAtDate]);\n\n const boostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n if (!reblogged) {\n let confirmText = 'Boost this post?';\n if (mediaNoDesc) {\n confirmText += '\\n\\n⚠️ Some media have no descriptions.';\n }\n const yes = confirm(confirmText);\n if (!yes) {\n return false;\n }\n }\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n return true;\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n return true;\n }\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const confirmBoostStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n reblogged: !reblogged,\n reblogsCount: reblogsCount + (reblogged ? -1 : 1),\n };\n if (reblogged) {\n const newStatus = await masto.v1.statuses.$select(id).unreblog();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).reblog();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n\n const favouriteStatus = async () => {\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n favourited: !favourited,\n favouritesCount: favouritesCount + (favourited ? -1 : 1),\n };\n if (favourited) {\n const newStatus = await masto.v1.statuses.$select(id).unfavourite();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).favourite();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const favouriteStatusNotify = async () => {\n try {\n const done = await favouriteStatus();\n if (!isSizeLarge && done) {\n showToast(\n favourited\n ? `Unliked @${username || acct}'s post`\n : `Liked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const bookmarkStatus = async () => {\n if (!supports('@mastodon/post-bookmark')) return;\n if (!sameInstance || !authenticated) {\n alert(unauthInteractionErrorMessage);\n return false;\n }\n try {\n // Optimistic\n states.statuses[sKey] = {\n ...status,\n bookmarked: !bookmarked,\n };\n if (bookmarked) {\n const newStatus = await masto.v1.statuses.$select(id).unbookmark();\n saveStatus(newStatus, instance);\n } else {\n const newStatus = await masto.v1.statuses.$select(id).bookmark();\n saveStatus(newStatus, instance);\n }\n return true;\n } catch (e) {\n console.error(e);\n // Revert optimistism\n states.statuses[sKey] = status;\n return false;\n }\n };\n const bookmarkStatusNotify = async () => {\n try {\n const done = await bookmarkStatus();\n if (!isSizeLarge && done) {\n showToast(\n bookmarked\n ? `Unbookmarked @${username || acct}'s post`\n : `Bookmarked @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n };\n\n const differentLanguage =\n !!language &&\n language !== targetLanguage &&\n !localeMatch([language], [targetLanguage]) &&\n !contentTranslationHideLanguages.find(\n (l) => language === l || localeMatch([language], [l]),\n );\n\n const reblogIterator = useRef();\n const favouriteIterator = useRef();\n async function fetchBoostedLikedByAccounts(firstLoad) {\n if (firstLoad) {\n reblogIterator.current = masto.v1.statuses\n .$select(statusID)\n .rebloggedBy.list({\n limit: REACTIONS_LIMIT,\n });\n favouriteIterator.current = masto.v1.statuses\n .$select(statusID)\n .favouritedBy.list({\n limit: REACTIONS_LIMIT,\n });\n }\n const [{ value: reblogResults }, { value: favouriteResults }] =\n await Promise.allSettled([\n reblogIterator.current.next(),\n favouriteIterator.current.next(),\n ]);\n if (reblogResults.value?.length || favouriteResults.value?.length) {\n const accounts = [];\n if (reblogResults.value?.length) {\n accounts.push(\n ...reblogResults.value.map((a) => {\n a._types = ['reblog'];\n return a;\n }),\n );\n }\n if (favouriteResults.value?.length) {\n accounts.push(\n ...favouriteResults.value.map((a) => {\n a._types = ['favourite'];\n return a;\n }),\n );\n }\n return {\n value: accounts,\n done: reblogResults.done && favouriteResults.done,\n };\n }\n return {\n value: [],\n done: true,\n };\n }\n\n const actionsRef = useRef();\n const isPublic = ['public', 'unlisted'].includes(visibility);\n const isPinnable = ['public', 'unlisted', 'private'].includes(visibility);\n const StatusMenuItems = (\n <>\n {!isSizeLarge && sameInstance && (\n <>\n
    \n \n \n \n {repliesCount > 0 ? shortenNumber(repliesCount) : 'Reply'}\n \n \n \n \n {reblogged ? 'Unboost' : 'Boost'}\n \n }\n className={`menu-reblog ${reblogged ? 'checked' : ''}`}\n menuExtras={\n {\n showCompose({\n draftStatus: {\n status: `\\n${url}`,\n },\n });\n }}\n >\n \n Quote\n \n }\n menuFooter={\n mediaNoDesc && !reblogged ? (\n
    \n \n Some media have no descriptions.\n
    \n ) : (\n statusMonthsAgo >= 3 && (\n
    \n \n \n Old post (\n {rtf.format(-statusMonthsAgo, 'month')}\n )\n \n
    \n )\n )\n }\n disabled={!canBoost}\n onClick={async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n }}\n >\n \n \n {reblogsCount > 0\n ? shortenNumber(reblogsCount)\n : reblogged\n ? 'Unboost'\n : 'Boost…'}\n \n \n \n \n \n {favouritesCount > 0\n ? shortenNumber(favouritesCount)\n : favourited\n ? 'Unlike'\n : 'Like'}\n \n \n {supports('@mastodon/post-bookmark') && (\n \n \n {bookmarked ? 'Unbookmark' : 'Bookmark'}\n \n )}\n
    \n \n )}\n {!isSizeLarge && sameInstance && (isSizeLarge || showActionsBar) && (\n \n )}\n {(isSizeLarge || showActionsBar) && (\n <>\n {\n states.showGenericAccounts = {\n heading: 'Boosted/Liked by…',\n fetchAccounts: fetchBoostedLikedByAccounts,\n instance,\n showReactions: true,\n postID: sKey,\n };\n }}\n >\n \n \n Boosted/Liked by\n \n \n \n )}\n {!mediaFirst && (\n <>\n {(enableTranslate || !language || differentLanguage) && (\n \n )}\n {enableTranslate ? (\n
    \n {\n setForceTranslate(true);\n }}\n >\n \n Translate\n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n Speak\n \n )}\n
    \n ) : (\n (!language || differentLanguage) && (\n
    \n \n \n Translate\n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n Speak\n \n )}\n
    \n )\n )}\n \n )}\n {((!isSizeLarge && sameInstance) ||\n enableTranslate ||\n !language ||\n differentLanguage) && }\n {!isSizeLarge && (\n <>\n {\n onStatusLinkClick(e, status);\n }}\n >\n \n \n View post by @{username || acct}\n
    \n \n {visibilityText[visibility]} • {createdDateText}\n \n
    \n \n \n )}\n {!!editedAt && (\n <>\n {\n setShowEdited(id);\n }}\n >\n \n \n Show Edit History\n
    \n Edited: {editedDateText}\n
    \n \n \n )}\n \n \n {nicePostURL(url)}\n \n
    \n {\n // Copy url to clipboard\n try {\n navigator.clipboard.writeText(url);\n showToast('Link copied');\n } catch (e) {\n console.error(e);\n showToast('Unable to copy link');\n }\n }}\n >\n \n Copy\n \n {isPublic &&\n navigator?.share &&\n navigator?.canShare?.({\n url,\n }) && (\n {\n try {\n navigator.share({\n url,\n });\n } catch (e) {\n console.error(e);\n alert(\"Sharing doesn't seem to work.\");\n }\n }}\n >\n \n Share…\n \n )}\n
    \n {isPublic && isSizeLarge && (\n {\n setShowEmbed(true);\n }}\n >\n \n Embed post\n \n )}\n {(isSelf || mentionSelf) && }\n {(isSelf || mentionSelf) && (\n {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [muted ? 'unmute' : 'mute']();\n saveStatus(newStatus, instance);\n showToast(muted ? 'Conversation unmuted' : 'Conversation muted');\n } catch (e) {\n console.error(e);\n showToast(\n muted\n ? 'Unable to unmute conversation'\n : 'Unable to mute conversation',\n );\n }\n }}\n >\n {muted ? (\n <>\n \n Unmute conversation\n \n ) : (\n <>\n \n Mute conversation\n \n )}\n \n )}\n {isSelf && isPinnable && (\n {\n try {\n const newStatus = await masto.v1.statuses\n .$select(id)\n [pinned ? 'unpin' : 'pin']();\n saveStatus(newStatus, instance);\n showToast(\n pinned\n ? 'Post unpinned from profile'\n : 'Post pinned to profile',\n );\n } catch (e) {\n console.error(e);\n showToast(pinned ? 'Unable to unpin post' : 'Unable to pin post');\n }\n }}\n >\n {pinned ? (\n <>\n \n Unpin from profile\n \n ) : (\n <>\n \n Pin to profile\n \n )}\n \n )}\n {isSelf && (\n
    \n {supports('@mastodon/post-edit') && (\n {\n showCompose({\n editStatus: status,\n });\n }}\n >\n \n Edit\n \n )}\n {isSizeLarge && (\n \n \n Delete this post?\n \n }\n menuItemClassName=\"danger\"\n onClick={() => {\n // const yes = confirm('Delete this post?');\n // if (yes) {\n (async () => {\n try {\n await masto.v1.statuses.$select(id).remove();\n const cachedStatus = getStatus(id, instance);\n cachedStatus._deleted = true;\n showToast('Deleted');\n } catch (e) {\n console.error(e);\n showToast('Unable to delete');\n }\n })();\n // }\n }}\n >\n \n Delete…\n \n )}\n
    \n )}\n {!isSelf && isSizeLarge && (\n <>\n \n {\n states.showReportModal = {\n account: status.account,\n post: status,\n };\n }}\n >\n \n Report post…\n \n \n )}\n \n );\n\n const contextMenuRef = useRef();\n const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);\n const [contextMenuProps, setContextMenuProps] = useState({});\n\n const showContextMenu =\n allowContextMenu || (!isSizeLarge && !previewMode && !_deleted && !quoted);\n\n // Only iOS/iPadOS browsers don't support contextmenu\n // Some comments report iPadOS might support contextmenu if a mouse is connected\n const bindLongPressContext = useLongPress(\n isIOS && showContextMenu\n ? (e) => {\n if (e.pointerType === 'mouse') return;\n // There's 'pen' too, but not sure if contextmenu event would trigger from a pen\n\n const { clientX, clientY } = e.touches?.[0] || e;\n // link detection copied from onContextMenu because here it works\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: clientX,\n y: clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }\n : null,\n {\n threshold: 600,\n captureEvent: true,\n detect: 'touch',\n cancelOnMovement: 2, // true allows movement of up to 25 pixels\n },\n );\n\n const hotkeysEnabled = !readOnly && !previewMode && !quoted;\n const rRef = useHotkeys('r, shift+r', replyStatus, {\n enabled: hotkeysEnabled,\n });\n const fRef = useHotkeys('f, l', favouriteStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const dRef = useHotkeys('d', bookmarkStatusNotify, {\n enabled: hotkeysEnabled,\n });\n const bRef = useHotkeys(\n 'shift+b',\n () => {\n (async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? `Unboosted @${username || acct}'s post`\n : `Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n })();\n },\n {\n enabled: hotkeysEnabled && canBoost,\n },\n );\n const xRef = useHotkeys('x', (e) => {\n const activeStatus = document.activeElement.closest(\n '.status-link, .status-focus',\n );\n if (activeStatus) {\n const spoilerButton = activeStatus.querySelector(\n '.spoiler-button:not(.spoiling)',\n );\n if (spoilerButton) {\n e.stopPropagation();\n spoilerButton.click();\n } else {\n const spoilerMediaButton = activeStatus.querySelector(\n '.spoiler-media-button:not(.spoiling)',\n );\n if (spoilerMediaButton) {\n e.stopPropagation();\n spoilerMediaButton.click();\n }\n }\n }\n });\n\n const displayedMediaAttachments = mediaAttachments.slice(\n 0,\n isSizeLarge ? undefined : 4,\n );\n const showMultipleMediaCaptions =\n mediaAttachments.length > 1 &&\n displayedMediaAttachments.some(\n (media) => !!media.description && !isMediaCaptionLong(media.description),\n );\n const captionChildren = useMemo(() => {\n if (!showMultipleMediaCaptions) return null;\n const attachments = [];\n displayedMediaAttachments.forEach((media, i) => {\n if (!media.description) return;\n const index = attachments.findIndex(\n (attachment) => attachment.media.description === media.description,\n );\n if (index === -1) {\n attachments.push({\n media,\n indices: [i],\n });\n } else {\n attachments[index].indices.push(i);\n }\n });\n return attachments.map(({ media, indices }) => (\n i + 1).join(' ')}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n states.showMediaAlt = {\n alt: media.description,\n lang: language,\n };\n }}\n title={media.description}\n >\n {indices.map((i) => i + 1).join(' ')} {media.description}\n \n ));\n\n // return displayedMediaAttachments.map(\n // (media, i) =>\n // !!media.description && (\n // {\n // e.preventDefault();\n // e.stopPropagation();\n // states.showMediaAlt = {\n // alt: media.description,\n // lang: language,\n // };\n // }}\n // title={media.description}\n // >\n // {i + 1} {media.description}\n // \n // ),\n // );\n }, [showMultipleMediaCaptions, displayedMediaAttachments, language]);\n\n const isThread = useMemo(() => {\n return (\n (!!inReplyToId && inReplyToAccountId === status.account?.id) ||\n !!snapStates.statusThreadNumber[sKey]\n );\n }, [\n inReplyToId,\n inReplyToAccountId,\n status.account?.id,\n snapStates.statusThreadNumber[sKey],\n ]);\n\n const showCommentHint = useMemo(() => {\n return (\n enableCommentHint &&\n !isThread &&\n !withinContext &&\n !inReplyToId &&\n visibility === 'public' &&\n repliesCount > 0\n );\n }, [\n enableCommentHint,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n visibility,\n ]);\n const showCommentCount = useMemo(() => {\n if (\n card ||\n poll ||\n sensitive ||\n spoilerText ||\n mediaAttachments?.length ||\n isThread ||\n withinContext ||\n inReplyToId ||\n repliesCount <= 0\n ) {\n return false;\n }\n const questionRegex = /[???︖❓❔⁇⁈⁉¿‽؟]/;\n const containsQuestion = questionRegex.test(content);\n if (!containsQuestion) return false;\n const contentLength = htmlContentLength(content);\n if (contentLength > 0 && contentLength <= SHOW_COMMENT_COUNT_LIMIT) {\n return true;\n }\n }, [\n card,\n poll,\n sensitive,\n spoilerText,\n mediaAttachments,\n reblog,\n isThread,\n withinContext,\n inReplyToId,\n repliesCount,\n content,\n ]);\n\n return (\n \n {showReplyParent && !!(inReplyToId && inReplyToAccountId) && (\n \n )}\n {\n statusRef.current = node;\n // Use parent node if it's in focus\n // Use case: \n // When navigating (j/k), the is focused instead of \n // Hotkey binding doesn't bubble up thus this hack\n const nodeRef =\n node?.closest?.(\n '.timeline-item, .timeline-item-alt, .status-link, .status-focus',\n ) || node;\n rRef.current = nodeRef;\n fRef.current = nodeRef;\n dRef.current = nodeRef;\n bRef.current = nodeRef;\n xRef.current = nodeRef;\n }}\n tabindex=\"-1\"\n class={`status ${\n !withinContext && inReplyToId && inReplyToAccount\n ? 'status-reply-to'\n : ''\n } visibility-${visibility} ${_pinned ? 'status-pinned' : ''} ${\n SIZE_CLASS[size]\n } ${_deleted ? 'status-deleted' : ''} ${quoted ? 'status-card' : ''} ${\n isContextMenuOpen ? 'status-menu-open' : ''\n } ${mediaFirst && hasMediaAttachments ? 'status-media-first' : ''}`}\n onMouseEnter={debugHover}\n onContextMenu={(e) => {\n if (!showContextMenu) return;\n if (e.metaKey) return;\n // console.log('context menu', e);\n const link = e.target.closest('a');\n if (\n link &&\n statusRef.current.contains(link) &&\n !link.getAttribute('href').startsWith('#')\n )\n return;\n\n // If there's selected text, don't show custom context menu\n const selection = window.getSelection?.();\n if (selection.toString().length > 0) {\n const { anchorNode } = selection;\n if (statusRef.current?.contains(anchorNode)) {\n return;\n }\n }\n e.preventDefault();\n setContextMenuProps({\n anchorPoint: {\n x: e.clientX,\n y: e.clientY,\n },\n direction: 'right',\n });\n setIsContextMenuOpen(true);\n }}\n {...(showContextMenu ? bindLongPressContext() : {})}\n >\n {showContextMenu && (\n {\n setIsContextMenuOpen(false);\n // statusRef.current?.focus?.();\n if (e?.reason === 'click') {\n statusRef.current?.closest('[tabindex]')?.focus?.();\n }\n }}\n portal={{\n target: document.body,\n }}\n containerProps={{\n style: {\n // Higher than the backdrop\n zIndex: 1001,\n },\n onClick: () => {\n contextMenuRef.current?.closeMenu?.();\n },\n }}\n overflow=\"auto\"\n boundingBoxPadding={safeBoundingBoxPadding()}\n unmountOnClose\n >\n {StatusMenuItems}\n \n )}\n {showActionsBar &&\n size !== 'l' &&\n !previewMode &&\n !readOnly &&\n !_deleted &&\n !quoted && (\n \n \n \n {\n e.preventDefault();\n e.stopPropagation();\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'start',\n direction: 'left',\n gap: 0,\n shift: -8,\n });\n setIsContextMenuOpen('actions-bar');\n }}\n >\n \n \n \n )}\n {size !== 'l' && (\n
    \n {reblogged && }\n {favourited && }\n {bookmarked && }\n {_pinned && }\n
    \n )}\n {size !== 's' && (\n {\n e.preventDefault();\n e.stopPropagation();\n states.showAccount = {\n account: status.account,\n instance,\n };\n }}\n >\n \n
    \n )}\n
    \n
    \n \n \n \n {/* {inReplyToAccount && !withinContext && size !== 's' && (\n <>\n {' '}\n \n {' '}\n \n \n \n )} */}\n {/* */}{' '}\n {size !== 'l' &&\n (_deleted ? (\n Deleted\n ) : url && !previewMode && !readOnly && !quoted ? (\n {\n if (\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey ||\n e.altKey ||\n e.which === 2\n ) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n onStatusLinkClick?.(e, status);\n setContextMenuProps({\n anchorRef: {\n current: e.currentTarget,\n },\n align: 'end',\n direction: 'bottom',\n gap: 4,\n });\n setIsContextMenuOpen(true);\n }}\n class={`time ${\n isContextMenuOpen && contextMenuProps?.anchorRef\n ? 'is-open'\n : ''\n }`}\n >\n {showCommentHint && !showCommentCount ? (\n \n ) : (\n visibility !== 'public' &&\n visibility !== 'direct' && (\n \n )\n )}{' '}\n \n {!previewMode && !readOnly && (\n \n )}\n \n ) : (\n // {\n // if (e.target === e.currentTarget)\n // menuInstanceRef.current?.closeMenu?.();\n // },\n // }}\n // align=\"end\"\n // gap={4}\n // overflow=\"auto\"\n // viewScroll=\"close\"\n // boundingBoxPadding=\"8 8 8 8\"\n // unmountOnClose\n // menuButton={({ open }) => (\n // {\n // e.preventDefault();\n // e.stopPropagation();\n // onStatusLinkClick?.(e, status);\n // }}\n // class={`time ${open ? 'is-open' : ''}`}\n // >\n // {' '}\n // \n // \n // )}\n // >\n // {StatusMenuItems}\n // \n \n {visibility !== 'public' && visibility !== 'direct' && (\n <>\n {' '}\n \n )}\n \n \n ))}\n
    \n {visibility === 'direct' && (\n <>\n
    Private mention
    {' '}\n \n )}\n {!withinContext && (\n <>\n {isThread ? (\n
    \n \n Thread\n {snapStates.statusThreadNumber[sKey]\n ? ` ${snapStates.statusThreadNumber[sKey]}/X`\n : ''}\n
    \n ) : (\n !!inReplyToId &&\n !!inReplyToAccount &&\n (!!spoilerText ||\n !mentions.find((mention) => {\n return mention.id === inReplyToAccountId;\n })) && (\n
    \n {' '}\n \n
    \n )\n )}\n \n )}\n \n {mediaFirst && hasMediaAttachments ? (\n <>\n {(!!spoilerText || !!sensitive) && !readingExpandSpoilers && (\n <>\n {!!spoilerText && (\n \n {' '}\n \n )}\n {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n {' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n \n \n )}\n \n {!!content && (\n
    \n \n
    \n )}\n \n ) : (\n <>\n {!!spoilerText && (\n <>\n \n

    \n \n

    \n
    \n {readingExpandSpoilers || previewMode ? (\n
    \n Content warning\n
    \n ) : (\n {\n e.preventDefault();\n e.stopPropagation();\n if (showSpoiler) {\n delete states.spoilers[id];\n if (!readingExpandSpoilers) {\n delete states.spoilersMedia[id];\n }\n } else {\n states.spoilers[id] = true;\n if (!readingExpandSpoilers) {\n states.spoilersMedia[id] = true;\n }\n }\n }}\n >\n {' '}\n {showSpoiler ? 'Show less' : 'Show content'}\n \n )}\n \n )}\n {!!content && (\n \n \n \n \n )}\n {!!poll && (\n {\n states.statuses[sKey].poll = newPoll;\n }}\n refresh={() => {\n return masto.v1.polls\n .$select(poll.id)\n .fetch()\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n votePoll={(choices) => {\n return masto.v1.polls\n .$select(poll.id)\n .votes.create({\n choices,\n })\n .then((pollResponse) => {\n states.statuses[sKey].poll = pollResponse;\n })\n .catch((e) => {}); // Silently fail\n }}\n />\n )}\n {(((enableTranslate || inlineTranslate) &&\n !!content.trim() &&\n !!getHTMLText(emojifyText(content, emojis)) &&\n differentLanguage) ||\n forceTranslate) && (\n \n )}\n {!previewMode &&\n sensitive &&\n !!mediaAttachments.length &&\n readingExpandMedia !== 'show_all' && (\n
    \n );\n}\n\nfunction MultipleMediaFigure(props) {\n const { enabled, children, lang, captionChildren } = props;\n if (!enabled || !captionChildren) return children;\n return (\n
    \n {children}\n
    \n {captionChildren}\n
    \n
    \n );\n}\n\nfunction MediaFirstContainer(props) {\n const { mediaAttachments, language, postID, instance } = props;\n const moreThanOne = mediaAttachments.length > 1;\n\n const carouselRef = useRef();\n const [currentIndex, setCurrentIndex] = useState(0);\n\n useEffect(() => {\n let handleScroll = () => {\n const { clientWidth, scrollLeft } = carouselRef.current;\n const index = Math.round(Math.abs(scrollLeft) / clientWidth);\n setCurrentIndex(index);\n };\n if (carouselRef.current) {\n carouselRef.current.addEventListener('scroll', handleScroll, {\n passive: true,\n });\n }\n return () => {\n if (carouselRef.current) {\n carouselRef.current.removeEventListener('scroll', handleScroll);\n }\n };\n }, []);\n\n return (\n <>\n
    \n
    \n {mediaAttachments.map((media, i) => (\n
    \n \n
    \n ))}\n
    \n {moreThanOne && (\n \n )}\n
    \n {moreThanOne && (\n \n {mediaAttachments.map((media, i) => (\n \n ))}\n \n )}\n \n );\n}\n\nfunction getDomain(url) {\n return punycode.toUnicode(\n URL.parse(url)\n .hostname.replace(/^www\\./, '')\n .replace(/\\/$/, ''),\n );\n}\n\n// \"Post\": Quote post + card link preview combo\n// Assume all links from these domains are \"posts\"\n// Mastodon links are \"posts\" too but they are converted to real quote posts and there's too many domains to check\n// This is just \"Progressive Enhancement\"\nfunction isCardPost(domain) {\n return ['x.com', 'twitter.com', 'threads.net', 'bsky.app'].includes(domain);\n}\n\nfunction Card({ card, selfReferential, instance }) {\n const snapStates = useSnapshot(states);\n const {\n blurhash,\n title,\n description,\n html,\n providerName,\n providerUrl,\n authorName,\n authorUrl,\n width,\n height,\n image,\n imageDescription,\n url,\n type,\n embedUrl,\n language,\n publishedAt,\n } = card;\n\n /* type\n link = Link OEmbed\n photo = Photo OEmbed\n video = Video OEmbed\n rich = iframe OEmbed. Not currently accepted, so won’t show up in practice.\n */\n\n const hasText = title || providerName || authorName;\n const isLandscape = width / height >= 1.2;\n const size = isLandscape ? 'large' : '';\n\n const [cardStatusURL, setCardStatusURL] = useState(null);\n // const [cardStatusID, setCardStatusID] = useState(null);\n useEffect(() => {\n if (hasText && image && !selfReferential && isMastodonLinkMaybe(url)) {\n unfurlMastodonLink(instance, url).then((result) => {\n if (!result) return;\n const { id, url } = result;\n setCardStatusURL('#' + url);\n\n // NOTE: This is for quote post\n // (async () => {\n // const { masto } = api({ instance });\n // const status = await masto.v1.statuses.$select(id).fetch();\n // saveStatus(status, instance);\n // setCardStatusID(id);\n // })();\n });\n }\n }, [hasText, image, selfReferential]);\n\n // if (cardStatusID) {\n // return (\n // \n // );\n // }\n\n if (snapStates.unfurledLinks[url]) return null;\n\n const hasIframeHTML = /