diff --git a/assets/compose-IsB0nqM4.js b/assets/compose-IsB0nqM4.js new file mode 100644 index 0000000..1c17dd8 --- /dev/null +++ b/assets/compose-IsB0nqM4.js @@ -0,0 +1,2 @@ +import{a9 as _,u as g,h as l,U as v,K as T,a3 as m,y as u,T as t,d as e,H as y,v as C,aa as I,r as x,ac as E}from"./useTitle-2fhxq2KA.js";_();window.opener&&(console=window.opener.console);function L(){var d,r;const{_:i}=g(),[o,p]=l("default"),[a,f]=l(null),{editStatus:c,replyToStatus:s,draftStatus:h}=window.__COMPOSE__||{};return v(i(c?{id:"Txus+H"}:s?{id:"03vjxE",values:{0:((d=s.account)==null?void 0:d.acct)||((r=s.account)==null?void 0:r.username)}}:{id:"QOhkyl"})),u(()=>{const n=T();f(!!n),n&&m()},[]),u(()=>{if(o==="closed"){try{window.opener.focus()}catch{}window.close()}},[o]),o==="closed"?e("div",{class:"box",children:[e("p",{children:e(t,{id:"mBdQnV"})}),e("p",{children:e("button",{onClick:()=>{window.close()},children:e(t,{id:"rf8fiC"})})})]}):a===!1?e("div",{class:"box",children:[e("h1",{children:e(t,{id:"SlfejT"})}),e("p",{children:e(t,{id:"D3vX+9"})}),e("p",{children:e("a",{href:"/",children:e(t,{id:"iWpEwy"})})})]}):a?e(y,{editStatus:c,replyToStatus:s,draftStatus:h,standalone:!0,hasOpener:window.opener,onClose:n=>{const{newStatus:w,fn:S=()=>{}}=n||{};try{w&&window.opener.__STATES__.reloadStatusPage++,S(),p("closed")}catch{}}}):e("div",{class:"box",children:e(C,{})})}E(e(I,{i18n:x,children:e(L,{})}),document.getElementById("app-standalone")); +//# sourceMappingURL=compose-IsB0nqM4.js.map diff --git a/assets/compose-IsB0nqM4.js.map b/assets/compose-IsB0nqM4.js.map new file mode 100644 index 0000000..d2e2fbe --- /dev/null +++ b/assets/compose-IsB0nqM4.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compose-IsB0nqM4.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\nimport './app.css';\nimport './polyfills';\n\nimport { i18n } from '@lingui/core';\nimport { I18nProvider } from '@lingui/react';\nimport { Trans, useLingui } from '@lingui/react/macro';\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport ComposeSuspense from './components/compose-suspense';\nimport Loader from './components/loader';\nimport { initActivateLang } from './utils/lang';\nimport { initStates } from './utils/states';\nimport { getCurrentAccount } from './utils/store-utils';\nimport useTitle from './utils/useTitle';\n\ninitActivateLang();\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const { t } = useLingui();\n const [uiState, setUIState] = useState('default');\n const [isLoggedIn, setIsLoggedIn] = useState(null);\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? t`Editing source status`\n : replyToStatus\n ? t`Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : t`Compose`,\n );\n\n useEffect(() => {\n const account = getCurrentAccount();\n setIsLoggedIn(!!account);\n if (account) {\n initStates();\n }\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

\n You may close this page now.\n

\n

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

\n
\n );\n }\n\n console.debug('OPEN COMPOSE');\n\n if (isLoggedIn === false) {\n return (\n
\n

\n Error\n

\n

\n Login required.\n

\n

\n \n Go home\n \n

\n
\n );\n }\n\n if (isLoggedIn) {\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\n return (\n
\n \n
\n );\n}\n\nrender(\n \n \n ,\n document.getElementById('app-standalone'),\n);\n"],"names":["initActivateLang","window","opener","console","App","t","_useLingui","uiState","setUIState","useState","isLoggedIn","setIsLoggedIn","editStatus","replyToStatus","draftStatus","__COMPOSE__","useTitle","_t","id","values","0","account","acct","username","useEffect","getCurrentAccount","initStates","focus","close","_jsxs","class","children","_jsx","_Trans","onClick","href","ComposeSuspense","standalone","hasOpener","newStatus","results","fn","Loader","render","I18nProvider","i18n"],"mappings":"0IAiBAA,IAEIC,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACP,KAAA,CAAEC,EAAAA,GAAGC,EAAc,EACnB,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAC1C,CAACC,EAAYC,CAAa,EAAIF,EAAS,IAAI,EAE3C,CAAEG,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBb,OAAOc,aAAe,GA8BzE,OA5BAC,EACYC,EAAVL,EACI,CAAAM,GAAA,QAAuB,EACvBL,EACE,CAAAK,GAAA,SAAAC,OAAA,CAAAC,IACEP,EAAAA,EAAcQ,UAAdR,YAAAA,EAAuBS,SAAQT,EAAAA,EAAcQ,UAAdR,YAAAA,EAAuBU,SAAQ,CAC/D,EACD,CAAAL,GAAA,QAAS,EACjB,EAEAM,EAAU,IAAM,CACd,MAAMH,EAAUI,IACFd,EAAA,CAAC,CAACU,CAAO,EACnBA,GACSK,GAEf,EAAG,CAAE,CAAA,EAELF,EAAU,IAAM,CACd,GAAIjB,IAAY,SAAU,CACpB,GAAA,CAEFN,OAAOC,OAAOyB,aACJ,CAAC,CACb1B,OAAO2B,MAAM,CACf,CAAA,EACC,CAACrB,CAAO,CAAC,EAERA,IAAY,SAEZsB,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SACEC,EAAAC,EAAA,CAAAf,GAAA,QAAA,CAA0C,CAAA,CACzC,EACHc,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEE,QAASA,IAAM,CACbjC,OAAO2B,MAAM,CACf,EAAEG,SAEFC,EAAAC,EAAA,CAAAf,GAAA,QAAA,CAA0B,CAAA,CACpB,CAAA,CACP,CAAC,CAAA,CACD,EAITf,IAA4B,WAEF,CACxB,YACO2B,SAAM,CAAAE,EAAA,KAAA,CAAKD,SACdC,EAAAC,EAAA,CAAAF,GAAAA,QACE,CAAA,CAAA,CAAA,EAAmBC,EAAA,IAAA,CAErBA,SAAAA,EAAAC,EAAA,CAAAF,GAAAA,QACE,CAAA,CAAA,CAAA,EAA6BC,EAAA,IAAA,CAE/BA,SAAAA,EAAA,IAAA,CAAAD,KAAAA,IACKI,SAAKH,EAAAC,EAAA,CAAGF,GAAAA,QACT,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAC,CACrB,CAAA,EAIXrB,EAEgBsB,EAAAI,EAAA,CACd,WAAAxB,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAuB,UAAU,OAAA,OACVC,WAAkBpC,OAEV,UAAAqC,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGjC,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,EAGNwB,EAAA,MAAA,CAEA,YACOF,SAAME,EAAAU,EAAA,EAAA,CAAA,CAAA,CACA,CAGfC,EAAAX,EAAAY,EAAA,CAEAD,KAAAA,EACgBE,SAAAA,EAAAA,EAAAA,EAAAA,CAAAA,CAAAA,EACZb,SAAAA,eAAM,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/compose-lJLfU2UC.js b/assets/compose-lJLfU2UC.js new file mode 100644 index 0000000..db674b0 --- /dev/null +++ b/assets/compose-lJLfU2UC.js @@ -0,0 +1,26 @@ +var qt=s=>{throw TypeError(s)};var xt=(s,t,n)=>t.has(s)||qt("Cannot "+n);var B=(s,t,n)=>(xt(s,t,"read from private field"),n?n.call(s):t.get(s)),de=(s,t,n)=>t.has(s)?qt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(s):t.set(s,n),ge=(s,t,n,a)=>(xt(s,t,"write to private field"),a?a.call(s,n):t.set(s,n),n),te=(s,t,n)=>(xt(s,t,"access private method"),n);import{x as An,s as ce,V as on,u as ze,a as Bt,h as H,A as q,K as Sn,aE as rn,e as Te,y as oe,w as _n,aF as In,r as Oe,i as Ne,d as e,T as G,b as Bn,k as qe,v as dt,o as Tn,ae as Mn,P as Rn,c as Dn,q as Wt,M as ln}from"./useTitle-2fhxq2KA.js";import{j as Le,G as $n,$ as jn,a as Ke,a9 as Pn,y as Ut,u as On,aa as Hn,m as cn,b as Kn,I as N,B as Vt,i as st,ab as Nn,c as un,d as Be,l as Ct,M as at,s as Se,a5 as qn,a1 as Wn,r as Un,Q as Vn,Y as ht,p as nt,z as Gn}from"./fuse-ljJAS_uA.js";class Yn{constructor(t,n,{tabInsertsSuggestions:a,defaultFirstOption:l}={}){this.input=t,this.list=n,this.tabInsertsSuggestions=a??!0,this.defaultFirstOption=l??!1,this.isComposing=!1,n.id||(n.id=`combobox-${Math.random().toString().slice(2,6)}`),this.ctrlBindings=!!navigator.userAgent.match(/Macintosh/),this.keyboardEventHandler=d=>Zn(d,this),this.compositionEventHandler=d=>Xn(d,this),this.inputHandler=this.clearSelection.bind(this),t.setAttribute("role","combobox"),t.setAttribute("aria-controls",n.id),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-autocomplete","list"),t.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",Gt),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",Gt)}indicateDefaultOption(){var t;this.defaultFirstOption&&((t=Array.from(this.list.querySelectorAll('[role="option"]:not([aria-disabled="true"])')).filter(yt)[0])===null||t===void 0||t.setAttribute("data-combobox-option-default","true"))}navigate(t=1){const n=Array.from(this.list.querySelectorAll('[aria-selected="true"]')).filter(yt)[0],a=Array.from(this.list.querySelectorAll('[role="option"]')).filter(yt),l=a.indexOf(n);if(l===a.length-1&&t===1||l===0&&t===-1){this.clearSelection(),this.input.focus();return}let d=t===1?0:a.length-1;if(n&&l>=0){const p=l+t;p>=0&&p0||s.offsetHeight>0)}function Xn(s,t){t.isComposing=s.type==="compositionstart",document.getElementById(t.input.getAttribute("aria-controls")||"")&&t.clearSelection()}function Qn(s,t){ei(s,t)||(s.scrollTop=t.offsetTop)}function ei(s,t){const n=s.scrollTop,a=n+s.clientHeight,l=t.offsetTop,d=l+t.clientHeight;return l>=n&&d<=a}const ti=/\s|\(|\[/;function ni(s,t,n,{multiWord:a,lookBackIndex:l,lastMatchPosition:d}={multiWord:!1,lookBackIndex:0,lastMatchPosition:null}){let r=s.lastIndexOf(t,n-1);if(r===-1||r=r+t.length+1||s.lastIndexOf(` +`,n-1)>r||s.lastIndexOf(".",n-1)>r)return}else if(s.lastIndexOf(" ",n-1)>r)return;const p=s[r-1];return p&&!ti.test(p)?void 0:{text:s.substring(r+t.length,n),position:r+t.length}}class ii extends HTMLElement{}class si extends Event{constructor(){super("update")}}const wt=new WeakMap;var We,Ue,Ve,ke,Y,zt,Ie,Me,Re,Lt,De,ot,rt,lt,Ge,_e;const Mt=class Mt extends ii{constructor(){super(...arguments);de(this,Y);de(this,We,new MutationObserver(()=>te(this,Y,rt).call(this)));de(this,Ue,new ResizeObserver(()=>te(this,Y,ot).call(this)));de(this,Ve);de(this,ke);de(this,Me,0);de(this,Re,0);de(this,De,!1);de(this,Ge,()=>te(this,Y,lt).call(this));de(this,_e,n=>{te(this,Y,Ie).call(this,a=>{(n.target===document||n.target===window||n.target instanceof Node&&n.target.contains(a))&&te(this,Y,ot).call(this)})})}static for(n){let a=wt.get(n);return a||(a=new Mt,a.connect(n),wt.set(n,a)),a}connect(n){ge(this,Ve,new WeakRef(n)),ge(this,ke,document.createElement("div")),B(this,ke).style.position="absolute",B(this,ke).style.pointerEvents="none",n.after(B(this,ke)),B(this,ke).appendChild(this)}forceUpdate(){te(this,Y,rt).call(this),te(this,Y,lt).call(this)}connectedCallback(){te(this,Y,Ie).call(this,n=>{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"),te(this,Y,rt).call(this),te(this,Y,lt).call(this),B(this,We).observe(n,{attributeFilter:["style","dir"]}),B(this,Ue).observe(n),document.addEventListener("scroll",B(this,_e),{capture:!0}),window.addEventListener("resize",B(this,_e),{capture:!0}),n.addEventListener("input",B(this,Ge),{capture:!0})})}disconnectedCallback(){var a;(a=B(this,ke))==null||a.remove(),B(this,We).disconnect(),B(this,Ue).disconnect(),document.removeEventListener("scroll",B(this,_e),{capture:!0}),window.removeEventListener("resize",B(this,_e),{capture:!0});const n=B(this,Y,zt);n&&(n.removeEventListener("input",B(this,Ge),{capture:!0}),wt.delete(n))}};We=new WeakMap,Ue=new WeakMap,Ve=new WeakMap,ke=new WeakMap,Y=new WeakSet,zt=function(){var n;return(n=B(this,Ve))==null?void 0:n.deref()},Ie=function(n){const a=B(this,Y,zt);return a?n(a):this.remove()},Me=new WeakMap,Re=new WeakMap,Lt=function(){te(this,Y,Ie).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 l=n.getBoundingClientRect(),d=this.getBoundingClientRect();ge(this,Me,B(this,Me)+l.left-d.left),ge(this,Re,B(this,Re)+l.top-d.top),this.style.transform=`translate(${B(this,Me)}px, ${B(this,Re)}px)`,this.scrollTop=n.scrollTop,this.scrollLeft=n.scrollLeft,this.dispatchEvent(new si)})},De=new WeakMap,ot=function(){B(this,De)||(ge(this,De,!0),requestAnimationFrame(()=>{te(this,Y,Lt).call(this),ge(this,De,!1)}))},rt=function(){te(this,Y,Ie).call(this,n=>{const a=window.getComputedStyle(n);for(const l of ai)this.style[l]=a[l];te(this,Y,ot).call(this)})},lt=function(){te(this,Y,Ie).call(this,n=>{this.textContent=n.value,te(this,Y,Lt).call(this)})},Ge=new WeakMap,_e=new WeakMap;let ct=Mt;const ai=["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",ct)}catch(s){if(!(s instanceof DOMException&&s.name==="NotSupportedError"))throw s}var ye,$e,je,he,St,dn,_t,He;const ut=class ut{constructor(t,n=0,a=n){de(this,he);de(this,ye);de(this,$e);de(this,je);ge(this,ye,t),ge(this,$e,n),ge(this,je,a)}static fromSelection(t){const{selectionStart:n,selectionEnd:a}=t;return new ut(t,n??void 0,a??void 0)}get collapsed(){return this.startOffset===this.endOffset}get commonAncestorContainer(){return B(this,ye)}get endContainer(){return B(this,ye)}get startContainer(){return B(this,ye)}get startOffset(){return B(this,$e)}get endOffset(){return B(this,je)}setStartOffset(t){ge(this,$e,te(this,he,_t).call(this,t))}setEndOffset(t){ge(this,je,te(this,he,_t).call(this,t))}collapse(t=!1){t?this.setEndOffset(this.startOffset):this.setStartOffset(this.endOffset)}cloneContents(){return te(this,he,He).call(this).cloneContents()}cloneRange(){return new ut(B(this,ye),this.startOffset,this.endOffset)}getBoundingClientRect(){return te(this,he,He).call(this).getBoundingClientRect()}getClientRects(){return te(this,he,He).call(this).getClientRects()}toString(){return te(this,he,He).call(this).toString()}getStyleClone(){return B(this,he,St)}};ye=new WeakMap,$e=new WeakMap,je=new WeakMap,he=new WeakSet,St=function(){return ct.for(B(this,ye))},dn=function(){return B(this,he,St)},_t=function(t){return Math.max(0,Math.min(t,B(this,ye).value.length))},He=function(){const t=document.createRange(),n=B(this,he,dn).childNodes[0];return n&&(t.setStart(n,this.startOffset),t.setEnd(n,this.endOffset)),t};let At=ut;const it=new WeakMap;class oi{constructor(t,n){this.expander=t,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(t,n){var a,l;this.input!==document.activeElement&&this.input!==((l=(a=document.activeElement)===null||a===void 0?void 0:a.shadowRoot)===null||l===void 0?void 0:l.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 Yn(this.input,n),this.expander.dispatchEvent(new Event("text-expander-activate")),this.positionMenu(n,t.position),this.combobox.start(),n.addEventListener("combobox-commit",this.oncommit),n.addEventListener("mousedown",this.onmousedown),this.combobox.navigate(1))}positionMenu(t,n){const a=new At(this.input,n).getBoundingClientRect(),l={left:a.left,top:a.top+a.height},d=t.getBoundingClientRect(),r={left:l.left-d.left,top:l.top-d.top};if(r.left!==0||r.top!==0){const p=getComputedStyle(t);t.style.left=p.left?`calc(${p.left} + ${r.left}px)`:`${r.left}px`,t.style.top=p.top?`calc(${p.top} + ${r.top}px)`:`${r.top}px`}}deactivate(){const t=this.menu;return!t||!this.combobox?!1:(this.expander.dispatchEvent(new Event("text-expander-deactivate")),this.menu=null,t.removeEventListener("combobox-commit",this.oncommit),t.removeEventListener("mousedown",this.onmousedown),this.combobox.destroy(),this.combobox=null,t.remove(),!0)}onCommit({target:t}){var n;const a=t;if(!(a instanceof HTMLElement)||!this.combobox)return;const l=this.match;if(!l)return;const d=this.input.value.substring(0,l.position-l.key.length),r=this.input.value.substring(l.position+l.text.length),p={item:a,key:l.key,value:null,continue:!1};if(!this.expander.dispatchEvent(new CustomEvent("text-expander-value",{cancelable:!0,detail:p}))||!p.value)return;let v=(n=this.expander.getAttribute("suffix"))!==null&&n!==void 0?n:" ";p.continue&&(v="");const re=`${p.value}${v}`;this.input.value=d+re+r;const T=d.length+re.length;this.deactivate(),this.input.focus({preventScroll:!0}),this.input.selectionStart=T,this.input.selectionEnd=T,p.continue||(this.lookBackIndex=T,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 t=this.findMatch();if(t){this.match=t;const n=await this.notifyProviders(t);if(!this.match)return;n?this.activate(t,n):this.deactivate()}else this.match=null,this.deactivate()}findMatch(){const t=this.input.selectionEnd||0,n=this.input.value;t<=this.lookBackIndex&&(this.lookBackIndex=t-1);for(const{key:a,multiWord:l}of this.expander.keys){const d=ni(n,a,t,{multiWord:l,lookBackIndex:this.lookBackIndex,lastMatchPosition:this.match?this.match.position:null});if(d)return{text:d.text,key:a,position:d.position}}}async notifyProviders(t){const n=[],a=p=>n.push(p);return this.expander.dispatchEvent(new CustomEvent("text-expander-change",{cancelable:!0,detail:{provide:a,text:t.text,key:t.key}}))?(await Promise.all(n)).filter(p=>p.matched).map(p=>p.fragment)[0]:void 0}onMousedown(){this.interactingWithList=!0}onKeydown(t){t.key==="Escape"&&(this.match=null,this.deactivate()&&(this.lookBackIndex=this.input.selectionEnd||this.lookBackIndex,t.stopImmediatePropagation(),t.preventDefault()))}}class Zt extends HTMLElement{get keys(){const t=this.getAttribute("keys"),n=t?t.split(" "):[],a=this.getAttribute("multiword"),l=a?a.split(" "):[],d=l.length===0&&this.hasAttribute("multiword");return n.map(r=>({key:r,multiWord:d||l.includes(r)}))}set keys(t){this.setAttribute("keys",t)}connectedCallback(){const t=this.querySelector('input[type="text"], textarea');if(!(t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement))return;const n=new oi(this,t);it.set(this,n)}disconnectedCallback(){const t=it.get(this);t&&(t.destroy(),it.delete(this))}dismiss(){const t=it.get(this);t&&t.dismissMenu()}}window.customElements.get("text-expander")||(window.TextExpanderElement=Zt,window.customElements.define("text-expander",Zt));function ri({onlyFirst:s=!1}={}){const t=["[\\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(t,s?void 0:"g")}const li=ri();function ci(s){if(typeof s!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof s}\``);return s.replace(li,"")}const ui=new Intl.Segmenter;function Jt(s,{countAnsiEscapeCodes:t=!1}={}){if(s===""||(t||(s=ci(s)),s===""))return 0;let n=0;for(const a of ui.segment(s))n++;return n}const di="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",Tt=[["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"],["ms-Arab","Jawi Malay","بهاس ملايو"],["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","Punjabi","ਪੰਜਾਬੀ"],["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"],["csb","Kashubian","Kaszëbsczi"],["jbo","Lojban","la .lojban."],["kab","Kabyle","Taqbaylit"],["ldn","Láadan","Láadan"],["lfn","Lingua Franca Nova","lingua franca nova"],["moh","Mohawk","Kanienʼkéha"],["nds","Low German","Plattdüütsch"],["pdc","Pennsylvania Dutch","Pennsilfaani-Deitsch"],["sco","Scots","Scots"],["sma","Southern Sami","Åarjelsaemien Gïele"],["smj","Lule Sami","Julevsámegiella"],["szl","Silesian","ślůnsko godka"],["tok","Toki Pona","toki pona"],["vai","Vai","ꕙꔤ"],["xal","Kalmyk","Хальмг келн"],["zba","Balaibalan","باليبلن"],["zgh","Standard Moroccan Tamazight","ⵜⴰⵎⴰⵣⵉⵖⵜ"]],hi="(((?:[^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\\-_&=#\\/])?))",pi="gi",Xt={source:hi,flags:pi},mi={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"},{PHANPY_IMG_ALT_API_URL:kt,PHANPY_GIPHY_API_KEY:gi}=mi,fi=Tt.reduce((s,t)=>{const[n,a,l]=t;return s[n]={common:a,native:l},s},{}),hn={300:Le(5,"minute"),1800:Le(30,"minute"),3600:Le(1,"hour"),21600:Le(6,"hour"),86400:Le(1,"day"),259200:Le(3,"day"),604800:Le(1,"week")},vi=Object.keys(hn),Qt=24*60*60,en=s=>{if(!s)return Qt;const t=(new Date(s).getTime()-Date.now())/1e3;return vi.find(n=>n>=t)||Qt},Ce=document.createElement("ul");Ce.role="listbox";Ce.className="text-expander-menu";const bi=16,xi=new IntersectionObserver(s=>{s.forEach(t=>{if(t.isIntersecting){const{left:n,width:a}=t.boundingClientRect,{innerWidth:l}=window;if(n+a>l){const d=$n()?"right":"left";Ce.style[d]=l-a-bi+"px"}}})});xi.observe(Ce);const Ae=An([new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages],Tt.map(s=>s[0]),"en"),pn=new RegExp(Xt.source,Xt.flags),yi=/(^|[^\/\w])@(([a-z0-9_]+)@[a-z0-9\.\-]+[a-z0-9]+)/gi,wi="$2xxxxxxxxxxxxxxxxxxxxxxx";function ki(s){return s.replace(pn,wi).replace(yi,"$1@$3")}const Ei=/[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i,Fi=new RegExp(`(^|[^=\\/\\w])(@${Ei.source}(?:@[\\p{L}\\w.-]+[\\w]+)?)`,"uig"),Ci=new RegExp("(^|[^=\\/\\w])(#[a-z0-9_]+([a-z0-9_.]+[a-z0-9_]+)?)(?![\\/\\w])","ig"),zi="[a-zA-Z0-9_]{2,}",Li=new RegExp(`(^|[^=\\/\\w])(:${zi}:)(?=[^A-Za-z0-9_:]|$)`,"g"),Ai=new Intl.Segmenter;function Et(s){return s.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function Si(s,{maxCharacters:t=1/0}){const{composerCharacterCount:n}=ce;if(n>t){let a="",l="";const d=Ai.segment(s);for(const{segment:r,index:p}of d)p"),Et(a)+l}return Et(s).replace(pn,'$2$3').replace(Fi,'$1$2').replace(Ci,'$1$2').replace(Li,'$1$2')}const _i=on(s=>new Intl.RelativeTimeFormat(s||void 0)),Ii=on(s=>new Intl.ListFormat(s||void 0)),It=100,Ee={media:{id:"MfJ43d"},customEmoji:{id:"ggiJLM"},gif:{id:"Fm6c4W"},poll:{id:"cZJ92q"}};function Wi({onClose:s,replyToStatus:t,editStatus:n,draftStatus:a,standalone:l,hasOpener:d}){var Nt;const{i18n:r,_:p,_:F}=ze(),v=_i(r.locale),re=Ii(r.locale),{masto:T,instance:g}=Bt(),[E,R]=H("default"),W=q((a==null?void 0:a.uid)||jn()),$=Sn(),P=$.info,le=rn(),{statuses:{maxCharacters:w,maxMediaAttachments:c,charactersReservedPerUrl:f}={},mediaAttachments:{supportedMimeTypes:b,imageSizeLimit:y,imageMatrixLimit:M,videoSizeLimit:z,videoMatrixLimit:J,videoFrameRateLimit:ne}={},polls:{maxOptions:X,maxCharactersPerOption:U,maxExpiration:ve,minExpiration:pe}={}}=le||{},_=q(),j=q(),[Z,se]=H("public"),[V,ie]=H(!1),[Q,I]=H(Te.session.get("currentLanguage")||Ae),K=q(Q),[m,ee]=H([]),[D,ue]=H(null),ae=Te.account.get("preferences")||{},be=()=>{_.current&&_.current.dispatchEvent(new Event("input"))},xe=()=>{setTimeout(()=>{var o,u,k;_.current&&((u=(o=a==null?void 0:a.status)==null?void 0:o.startsWith)!=null&&u.call(o,` +`)&&(_.current.selectionStart=0,_.current.selectionEnd=0),(k=_.current)==null||k.focus())},300)};oe(()=>{var o,u;if(t){const{spoilerText:k,visibility:h,language:A,sensitive:L}=t;k&&j.current&&(j.current.value=k);const x=[...new Set([t.account.acct,...t.mentions.map(C=>C.acct)])].filter(C=>C!==P.acct);x.length>0&&(_.current.value=`${x.map(C=>`@${C}`).join(" ")} `,be()),xe(),se(h==="public"&&ae["posting:default:visibility"]?ae["posting:default:visibility"].toLowerCase():h),I(A||((o=ae["posting:default:language"])==null?void 0:o.toLowerCase())||Ae),ie(L&&!!k)}else if(n){const{visibility:k,language:h,sensitive:A,poll:L,mediaAttachments:S}=n,x=!!(L!=null&&L.options)&&{...L,options:L.options.map(C=>(C==null?void 0:C.title)||C),expiresIn:(L==null?void 0:L.expiresIn)||en(L.expiresAt)};R("loading"),(async()=>{var C;try{const O=await T.v1.statuses.$select(n.id).source.fetch(),{text:me,spoilerText:fe}=O;_.current.value=me,_.current.dataset.source=me,be(),xe(),j.current.value=fe,se(k),I(h||((C=ae["posting:default:language"])==null?void 0:C.toLowerCase())||Ae),ie(A),x&&ue(x),ee(S),R("default")}catch(O){alert((O==null?void 0:O.reason)||O),R("error")}})()}else xe(),ae["posting:default:visibility"]&&se(ae["posting:default:visibility"].toLowerCase()),ae["posting:default:language"]&&I(ae["posting:default:language"].toLowerCase()),ae["posting:default:sensitive"]&&ie(!!ae["posting:default:sensitive"]);if(a){const{status:k,spoilerText:h,visibility:A,language:L,sensitive:S,poll:x,mediaAttachments:C}=a,O=!!(x!=null&&x.options)&&{...x,options:x.options.map(me=>(me==null?void 0:me.title)||me),expiresIn:(x==null?void 0:x.expiresIn)||en(x.expiresAt)};_.current.value=k,be(),xe(),h&&(j.current.value=h),A&&se(A),I(L||((u=ae["posting:default:language"])==null?void 0:u.toLowerCase())||Ae),S!==null&&ie(S),O&&ue(O),C&&ee(C)}},[a,n,t]);const Ye=q(),Rt=F({id:"hR9gtK"}),pt=()=>{const{value:o,dataset:u}=_.current;if(E==="loading")return!1;const k=(o||"").trim().replace(new RegExp("^\\p{White_Space}+|\\p{White_Space}+$","gu"),""),h=m.length>0;if(!k&&!h||m.length>0&&m.every(C=>C.id))return!0;const L=(t==null?void 0:t.account.id)===P.id,S=t&&o.trim()===`@${t.account.acct}`;return!!(!L&&S||o===(u==null?void 0:u.source))},Ze=()=>pt()?!0:confirm(Rt);oe(()=>{const o=u=>{pt()||(u.preventDefault(),u.returnValue=Rt)};return window.addEventListener("beforeunload",o,{capture:!0}),()=>window.removeEventListener("beforeunload",o,{capture:!0})},[]);const fn=()=>{const{value:o}=_.current,{value:u}=j.current;return Jt(ki(o))+Jt(u)},mt=()=>{const o=fn();ce.composerCharacterCount=o};oe(mt,[]);const Dt=window.CloseWatcher,gt=q(!1);Ke("esc",()=>{gt.current=!0},{enabled:!Dt,enableOnFormTags:!0}),Ke("esc",()=>{!l&>.current&&Ze()&&s(),gt.current=!1},{enabled:!Dt,enableOnFormTags:!0,keyup:!0,ignoreEventWhen:o=>{const u=document.querySelectorAll("#modal-container > *"),k=!!u,h=u.length===1&&u[0].querySelector("#compose-container");return k&&!h}}),Pn(()=>{!l&&Ze()&&s()},[l,Ze,s]);const $t=q({}),jt=()=>`${_n()}#${W.current}`,ft=()=>{if(n||ce.composerState.minimized)return;const o=jt(),u={key:o,replyTo:t?{id:t.id,account:{id:t.account.id,username:t.account.username,acct:t.account.acct}}:null,draftStatus:{uid:W.current,status:_.current.value,spoilerText:j.current.value,visibility:Z,language:Q,sensitive:V,poll:D,mediaAttachments:m}};!In(u,$t.current)&&!pt()&&(Ut.drafts.set(o,{...u,state:"unsaved",updatedAt:Date.now()}).then(()=>{}).catch(k=>{}),$t.current=structuredClone(u))};On(ft,5e3),oe(()=>(ft(),()=>{Ut.drafts.del(jt())}),[]),oe(()=>{const o=k=>{const{items:h}=k.clipboardData||k.dataTransfer,A=[],L=[];for(let S=0;S0&&alert(Oe._({id:"rpXAF6",values:{0:L.length,1:L[0].name,2:re.format(L.map(S=>S.name))}})),A.length>0&&m.length>=c){alert(Oe._({id:"ctFhjs",values:{maxMediaAttachments:c}}));return}if(A.length>0){k.preventDefault(),k.stopPropagation();let S=A;if(c!==void 0){const C=c-m.length;if(S=S.slice(0,C),S.length<=0){alert(Oe._({id:"ctFhjs",values:{maxMediaAttachments:c}}));return}}const x=S.map(C=>({file:C,type:C.type,size:C.size,url:URL.createObjectURL(C),id:null,description:null}));ee([...m,...x])}};window.addEventListener("paste",o);const u=k=>{k.dataTransfer.items.length>0&&(k.preventDefault(),k.stopPropagation())};return window.addEventListener("dragover",u),window.addEventListener("drop",o),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",u),window.removeEventListener("drop",o)}},[m]);const[Je,vt]=H(!1),[Xe,Pe]=H(!1),[vn,Qe]=H(!1),[we,bn]=H(null),[xn,yn]=Ne(()=>{const o=[],u=[],{contentTranslationHideLanguages:k=[]}=ce.settings;return Tt.forEach(h=>{const[A]=h;A===Q||A===K.current||A===Ae||k.includes(A)||we!=null&&we.length&&we.includes(A)?o.push(h):u.push(h)}),o.sort(([h,A],[L,S])=>h===Q?-1:L===Q?1:A.localeCompare(S)),u.sort(([h,A],[L,S])=>A.localeCompare(S)),[o,u]},[Q,we]),Pt=Ne(()=>!!(t!=null&&t.createdAt)&&Math.floor((Date.now()-new Date(t.createdAt))/(1e3*60*60*24*30)),[t]),wn=()=>{ft(),ce.composerState.minimized=!0},Ot=E==="loading"||c!==void 0&&m.length>=c||!!D,kn=X==null||X>1,Ht=E==="loading"||!!D||!!m.length,Kt=()=>{ue({options:["",""],expiresIn:24*60*60,multiple:!1})},et=q(),[En,Fn]=H(!1);return Hn({ref:et,box:"border-box",onResize:({width:o})=>{const{scrollWidth:u}=et.current,k=u>o,h=o<84;Fn(h||k),et.current.hidden=h}}),e("div",{id:"compose-container-outer",children:[e("div",{id:"compose-container",class:l?"standalone":"",children:[e("div",{class:"compose-top",children:[(P==null?void 0:P.avatarStatic)&&e(cn,{account:P,accountInstance:$.instanceURL,hideDisplayName:!0,useAvatarStatic:!0}),l?d&&e("button",{type:"button",class:"light pop-button",disabled:E==="loading",onClick:()=>{var o;if(!window.opener){alert(F({id:"qiPXgY"}));return}if(window.opener.__STATES__.showCompose){if((o=window.opener.__STATES__.composerState)!=null&&o.publishing){alert(F({id:"Z2l5Bt"}));return}let u=F({id:"AB/GtR"});if(!confirm(u))return}s({fn:()=>{const u={editStatus:n,replyToStatus:t,draftStatus:{uid:W.current,status:_.current.value,spoilerText:j.current.value,visibility:Z,language:Q,sensitive:V,poll:D,mediaAttachments:m}};window.opener.__COMPOSE__=u,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:e(N,{icon:"popin",alt:F({id:"/5ZKeE"})})}):e("span",{class:"compose-controls",children:[e("button",{type:"button",class:"plain4 pop-button",disabled:E==="loading",onClick:()=>{Kn({editStatus:n,replyToStatus:t,draftStatus:{uid:W.current,status:_.current.value,spoilerText:j.current.value,visibility:Z,language:Q,sensitive:V,poll:D,mediaAttachments:m}})&&s()},children:e(N,{icon:"popout",alt:F({id:"JsU2En"})})}),e("button",{type:"button",class:"plain4 min-button",onClick:wn,children:e(N,{icon:"minimize",alt:F({id:"3TSz9S"})})})," ",e("button",{type:"button",class:"light close-button",disabled:E==="loading",onClick:()=>{Ze()&&s()},children:e(N,{icon:"x",alt:F({id:"yz7wBu"})})})]})]}),!!t&&e("div",{class:"status-preview",children:[e(Vt,{status:t,size:"s",previewMode:!0}),e("div",{class:"status-preview-legend reply-to",children:Pt>0?e(G,{id:"Q1Huya",values:{0:t.account.acct||t.account.username,1:v.format(-Pt,"month")},components:{0:e("strong",{})}}):e(G,{id:"dwLCPZ",values:{0:t.account.acct||t.account.username}})})]}),!!n&&e("div",{class:"status-preview",children:[e(Vt,{status:n,size:"s",previewMode:!0}),e("div",{class:"status-preview-legend",children:e(G,{id:"wKtOLH"})})]}),e("form",{ref:Ye,class:`form-visibility-${Z}`,style:{pointerEvents:E==="loading"?"none":"auto",opacity:E==="loading"?.5:1},onKeyDown:o=>{o.key==="Enter"&&(o.ctrlKey||o.metaKey)&&Ye.current.dispatchEvent(new Event("submit",{cancelable:!0}))},onSubmit:o=>{o.preventDefault();const u=new FormData(o.target),k=Object.fromEntries(u.entries());let{status:h,visibility:A,sensitive:L,spoilerText:S}=k;if(L=L==="on",D){if(D.options.length<2){alert(F({id:"zhrMYj"}));return}if(D.options.some(x=>x==="")){alert(F({id:"uNVxXX"}));return}}m.length>0&&m.some(C=>{var O,me;return!((me=(O=C.description)==null?void 0:O.trim)!=null&&me.call(O))})&&!confirm(F({id:"MQYucx"}))||(S=L&&S||void 0,h=h===""?void 0:h,ce.composerState.publishing=!0,R("loading"),(async()=>{try{if(m.length>0){const O=m.map(fe=>{const{file:tt,description:Cn,id:zn}=fe;if(zn)return fe;{const Ln=an({file:tt,description:Cn});return T.v2.media.create(Ln).then(bt=>(bt.id&&(fe.id=bt.id),bt))}}),me=await Promise.allSettled(O);if(me.some(fe=>{var tt;return fe.status==="rejected"||!((tt=fe.value)!=null&&tt.id)})){ce.composerState.publishing=!1,ce.composerState.publishingError=!0,R("error"),me.forEach(fe=>{fe.status==="rejected"&&alert(fe.reason||F({id:"eIiurD",values:{i}}))});return}}let x={status:h,spoiler_text:S,language:Q,sensitive:L,poll:D,media_ids:m.map(O=>O.id)};n&&st("@mastodon/edit-media-attributes")?x.media_attributes=m.map(O=>({id:O.id,description:O.description})):n||(x.visibility=A,x.in_reply_to_id=(t==null?void 0:t.id)||void 0),x=an(x);let C;if(n)C=await T.v1.statuses.$select(n.id).update(x),Bn(C,g,{skipThreading:!0});else try{C=await T.v1.statuses.create(x,{requestInit:{headers:{"Idempotency-Key":W.current}}})}catch{C=await T.v1.statuses.create(x)}ce.composerState.minimized=!1,ce.composerState.publishing=!1,R("default"),s({type:n?"edit":t?"reply":"post",newStatus:C,instance:g})}catch(x){ce.composerState.publishing=!1,ce.composerState.publishingError=!0,alert((x==null?void 0:x.reason)||x),R("error")}})())},children:[e("div",{class:"toolbar stretch",children:[e("input",{ref:j,type:"text",name:"spoilerText",placeholder:F({id:"gnKo7f"}),disabled:E==="loading",class:"spoiler-text-field",lang:Q,spellCheck:"true",dir:"auto",style:{opacity:V?1:0,pointerEvents:V?"auto":"none"},onInput:()=>{mt()}}),e("label",{class:`toolbar-button ${V?"highlight":""}`,title:F({id:"zKu2Aq"}),children:[e("input",{name:"sensitive",type:"checkbox",checked:V,disabled:E==="loading",onChange:o=>{var k,h;const u=o.target.checked;ie(u),u?(k=j.current)==null||k.focus():(h=_.current)==null||h.focus()}}),e(N,{icon:`eye-${V?"close":"open"}`})]})," ",e("label",{class:`toolbar-button ${Z!=="public"&&!V?"show-field":""} ${Z!=="public"?"highlight":""}`,title:Z,children:[e(N,{icon:Nn[Z],alt:Z}),e("select",{name:"visibility",value:Z,onChange:o=>{se(o.target.value)},disabled:E==="loading"||!!n,dir:"auto",children:[e("option",{value:"public",children:e(G,{id:"7d1a0d"})}),(st("@pleroma/local-visibility-post")||st("@akkoma/local-visibility-post"))&&e("option",{value:"local",children:e(G,{id:"d5zxa4"})}),e("option",{value:"unlisted",children:e(G,{id:"WDcQq9"})}),e("option",{value:"private",children:e(G,{id:"o34OrG"})}),e("option",{value:"direct",children:e(G,{id:"IV4QaU"})})]})]})," "]}),e(Mi,{ref:_,placeholder:F(t?{id:"Sjj+EN"}:n?{id:"qzVesX"}:{id:"owpNF1"}),required:(m==null?void 0:m.length)===0,disabled:E==="loading",lang:Q,onInput:()=>{mt()},maxCharacters:w,performSearch:o=>{const{type:u,q:k,limit:h}=o;return u==="accounts"?T.v1.accounts.search.list({q:k,limit:h,resolve:!1}):T.v2.search.fetch(o)},onTrigger:o=>{(o==null?void 0:o.name)==="custom-emojis"?Pe({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="mention"?vt({defaultSearchTerm:(o==null?void 0:o.defaultSearchTerm)||null}):(o==null?void 0:o.name)==="auto-detect-language"&&(o!=null&&o.languages)&&bn(o.languages)}}),(m==null?void 0:m.length)>0&&e("div",{class:"media-attachments",children:[m.map((o,u)=>{const{id:k,file:h}=o,A=(h==null?void 0:h.size)+(h==null?void 0:h.type)+(h==null?void 0:h.name);return e(Di,{attachment:o,disabled:E==="loading",lang:Q,onDescriptionChange:L=>{ee(S=>{const x=[...S];return x[u]={...x[u],description:L},x})},onRemove:()=>{ee(L=>L.filter((S,x)=>x!==u))}},k||A||u)}),e("label",{class:"media-sensitive",children:[e("input",{name:"sensitive",type:"checkbox",checked:V,disabled:E==="loading",onChange:o=>{const u=o.target.checked;ie(u)}})," ",e("span",{children:e(G,{id:"jER18a"})})," ",e(N,{icon:`eye-${V?"close":"open"}`})]})]}),!!D&&e($i,{lang:Q,maxOptions:X,maxExpiration:ve,minExpiration:pe,maxCharactersPerOption:U,poll:D,disabled:E==="loading",onInput:o=>{if(o){const u={...o};ue(u)}else ue(null)}}),e("div",{class:"toolbar compose-footer",children:[e("span",{class:"add-toolbar-button-group spacer",children:[En&&e(un,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},menuButton:({open:o})=>e("button",{type:"button",class:`toolbar-button add-button ${o?"active":""}`,children:e(N,{icon:"plus",title:F({id:"m16xKo"})})}),children:[e(Be,{className:"compose-menu-add-media",children:[e("label",{class:"compose-menu-add-media-field",children:e(tn,{hidden:!0,supportedMimeTypes:b,maxMediaAttachments:c,mediaAttachments:m,disabled:E==="loading"||m.length>=c||!!D,setMediaAttachments:ee})}),e(N,{icon:"media"})," ",e("span",{children:p(Ee.media)})]}),e(Be,{onClick:()=>{Pe(!0)},children:[e(N,{icon:"emoji2"})," ",e("span",{children:p(Ee.customEmoji)})]}),!!ce.settings.composerGIFPicker&&e(Be,{disabled:Ot,onClick:()=>{Qe(!0)},children:[e("span",{class:"icon icon-gif",role:"img"}),e("span",{children:p(Ee.gif)})]}),e(Be,{disabled:Ht,onClick:Kt,children:[e(N,{icon:"poll"})," ",e("span",{children:p(Ee.poll)})]})]}),e("span",{class:"add-sub-toolbar-button-group",ref:et,children:[e("label",{class:"toolbar-button",children:[e(tn,{supportedMimeTypes:b,maxMediaAttachments:c,mediaAttachments:m,disabled:E==="loading"||m.length>=c||!!D,setMediaAttachments:ee}),e(N,{icon:"media",alt:p(Ee.media)})]}),e("button",{type:"button",class:"toolbar-button",disabled:E==="loading",onClick:()=>{Pe(!0)},children:e(N,{icon:"emoji2",alt:p(Ee.customEmoji)})}),!!ce.settings.composerGIFPicker&&e("button",{type:"button",class:"toolbar-button gif-picker-button",disabled:Ot,onClick:()=>{Qe(!0)},children:e("span",{class:"icon icon-gif","aria-label":p(Ee.gif)})}),kn&&e(qe,{children:e("button",{type:"button",class:"toolbar-button",disabled:Ht,onClick:Kt,children:e(N,{icon:"poll",alt:p(Ee.poll)})})})]})]}),E==="loading"?e(dt,{abrupt:!0}):e(Ri,{maxCharacters:w,hidden:E==="loading"}),e("label",{class:`toolbar-button ${Q!==K.current||we!=null&&we.length&&!we.includes(Q)?"highlight":""}`,children:[e("span",{class:"icon-text",children:(Nt=fi[Q])==null?void 0:Nt.native}),e("select",{name:"language",value:Q,onChange:o=>{const{value:u}=o.target;I(u||Ae),Te.session.set("currentLanguage",u||Ae)},disabled:E==="loading",dir:"auto",children:[xn.map(([o,u,k])=>{const h=Ct({code:o,fallback:u});return e("option",{value:o,children:h!==k?`${k} - ${h}`:h},o)}),e("hr",{}),yn.map(([o,u,k])=>{const h=Ct({code:o,fallback:u});return e("option",{value:o,children:h!==k?`${k} - ${h}`:h},o)})]})]})," ",e("button",{type:"submit",disabled:E==="loading",children:F(t?{id:"ImOQa9"}:n?{id:"EkH9pt"}:{id:"GMe2XV"})})]})]})]}),Je&&e(at,{onClick:o=>{o.target===o.currentTarget&&vt(!1)},children:e(ji,{masto:T,instance:g,onClose:()=>{vt(!1)},defaultSearchTerm:Je==null?void 0:Je.defaultSearchTerm,onSelect:o=>{const u=_.current;if(!u)return;const{selectionStart:k,selectionEnd:h}=u,A=u.value,L=A.slice(0,k),S=L?/[\s\t\n\r]$/.test(L)?"":" ":"",x=A.slice(h),C=/^[\s\t\n\r]/.test(x)?"":" ",O=L+S+"@"+o+C+x;u.value=O,u.selectionStart=u.selectionEnd=h+1+o.length+C.length,u.focus(),u.dispatchEvent(new Event("input"))}})}),Xe&&e(at,{onClick:o=>{o.target===o.currentTarget&&Pe(!1)},children:e(Pi,{masto:T,instance:g,onClose:()=>{Pe(!1)},defaultSearchTerm:Xe==null?void 0:Xe.defaultSearchTerm,onSelect:o=>{const u=_.current;if(!u)return;const{selectionStart:k,selectionEnd:h}=u,A=u.value,L=A.slice(0,k),S=L?/[\s\t\n\r]$/.test(L)?"":" ":"",x=A.slice(h),C=/^[\s\t\n\r]/.test(x)?"":" ",O=L+S+o+C+x;u.value=O,u.selectionStart=u.selectionEnd=h+o.length+C.length,u.focus(),u.dispatchEvent(new Event("input"))}})}),vn&&e(at,{onClick:o=>{o.target===o.currentTarget&&Qe(!1)},children:e(Hi,{onClose:()=>Qe(!1),onSelect:({url:o,type:u,alt_text:k})=>{if(m.length>=c){alert(Oe._({id:"ctFhjs",values:{maxMediaAttachments:c}}));return}(async()=>{var A,L;let h;try{h=Se({text:F({id:"/Cw4Tx"}),duration:-1});const S=await fetch(o,{referrerPolicy:"no-referrer"}).then(O=>O.blob()),x=new File([S],u==="video/mp4"?"video.mp4":"image.gif",{type:u}),C=[...m,{file:x,type:u,size:x.size,id:null,description:k||""}];ee(C),(A=h==null?void 0:h.hideToast)==null||A.call(h)}catch{(L=h==null?void 0:h.hideToast)==null||L.call(h),Se(F({id:"VKDnAx"}))}})()}})})]})}function tn({hidden:s,supportedMimeTypes:t,maxMediaAttachments:n,mediaAttachments:a,disabled:l=!1,setMediaAttachments:d}){return e("input",{type:"file",hidden:s,accept:t==null?void 0:t.join(","),multiple:n===void 0||n-a>=2,disabled:l,onChange:r=>{const p=r.target.files;if(!p)return;const F=Array.from(p).map(v=>({file:v,type:v.type,size:v.size,url:URL.createObjectURL(v),id:null,description:null}));a.length+F.length>n?alert(Oe._({id:"ctFhjs",values:{maxMediaAttachments:n}})):d(v=>v.concat(F)),r.target.value=""}})}function nn(s){if(!s)return;const{value:t,offsetHeight:n,scrollHeight:a,clientHeight:l}=s;if(nd.visibleInPicker),l=new qn(a,{keys:["shortcode"],findAllMatches:!0});return[a,l]}const mn=Tn(Bi,{matchesArg:(s,t)=>s.instance===t.instance,maxAge:30*60*1e3}),Ti=async s=>{const{detectAll:t}=await Mn(async()=>{const{detectAll:a}=await import("./tinyld-light-tbgyvj3S.js");return{detectAll:a}},[],import.meta.url),n=t(s);return n!=null&&n.length?n.slice(0,2).map(a=>a.lang):null},Mi=Rn((s,t)=>{var w;const{_:n}=ze(),{masto:a,instance:l}=Bt(),[d,r]=H(((w=t.current)==null?void 0:w.value)||""),{maxCharacters:p,performSearch:F=()=>{},onTrigger:v=()=>{},...re}=s,T=q();oe(()=>{mn(l,a).then(c=>{const[f,b]=c;T.current=b}).catch(c=>{})},[]);const g=q(),E=q(""),R=q(!1);oe(()=>{let c,f,b,y,M;return g.current&&(c=z=>{var ve;const{key:J,provide:ne,text:X}=z.detail;if(E.current=X,X===""){ne(Promise.resolve({matched:!1}));return}if(J===":"){const pe=(ve=T.current)==null?void 0:ve.search(X,{limit:5});let _="";pe.forEach(({item:j})=>{const{shortcode:Z,url:se}=j;_+=` +
  • + + ${Fe(Z)} +
  • `}),_+=`
  • ${n({id:"24misb"})}
  • `,Ce.innerHTML=_,ne(Promise.resolve({matched:pe.length>0,fragment:Ce}));return}const U={"@":"accounts","#":"hashtags"}[J];ne(new Promise(pe=>{F({type:U,q:X,limit:5}).then(j=>{if(X!==E.current)return;const Z=j[U]||j;let se="";Z.forEach(V=>{var ae;const{name:ie,avatarStatic:Q,displayName:I,username:K,acct:m,emojis:ee,history:D}=V,ue=Wn(I,ee);if(m)se+=` +
  • + + + + + ${ue||K} +
    @${Fe(m)} +
    +
  • + `;else{const be=(ae=D==null?void 0:D.reduce)==null?void 0:ae.call(D,(xe,Ye)=>xe+ +Ye.uses,0);se+=` +
  • + #${Fe(ie)} + ${be?`${Un(be)}`:""} +
  • + `}}),U==="accounts"&&(se+=`
  • ${n({id:"24misb"})}
  • `),Ce.innerHTML=se,pe({matched:Z.length>0,fragment:Ce})})}))},g.current.addEventListener("text-expander-change",c),f=z=>{const{key:J,item:ne}=z.detail,{value:X,more:U}=ne.dataset;J===":"?(z.detail.value=X?`:${X}:`:"​",U&&(z.detail.continue=!0,setTimeout(()=>{v==null||v({name:"custom-emojis",defaultSearchTerm:U})},300))):J==="@"?(z.detail.value=X?`@${X} `:"​",U&&(z.detail.continue=!0,setTimeout(()=>{v==null||v({name:"mention",defaultSearchTerm:U})},300))):z.detail.value=`${J}${X}`},g.current.addEventListener("text-expander-value",f),b=z=>{const{input:J}=z.detail;if(r(J.value),t.current){const ne=new Event("input",{bubbles:!0});t.current.dispatchEvent(ne)}},g.current.addEventListener("text-expander-committed",b),y=()=>{R.current=!0},g.current.addEventListener("text-expander-activate",y),M=()=>{R.current=!1},g.current.addEventListener("text-expander-deactivate",M)),()=>{g.current&&(g.current.removeEventListener("text-expander-change",c),g.current.removeEventListener("text-expander-value",f),g.current.removeEventListener("text-expander-committed",b),g.current.removeEventListener("text-expander-activate",y),g.current.removeEventListener("text-expander-deactivate",M))}},[]),oe(()=>{const c=t.current;if(!c)return;new ResizeObserver(()=>{if(g.current){const{height:b}=c.getBoundingClientRect();g.current.style.height=b+"px"}}).observe(c)},[]);const W=q(0),$=q(),P=Vn(c=>{var y;if(!$.current)return;if(W.current>3){$.current.innerHTML="",$.current=null,(y=P==null?void 0:P.cancel)==null||y.call(P);return}let f,b;W.current<=3&&(f=Date.now()),$.current.innerHTML=Si(c,{maxCharacters:p})+` +`,W.current<=3&&(b=Date.now()),f&&b&&b-f>50&&W.current++},500),le=ht(()=>{var b,y;const c=(b=$.current)==null?void 0:b.cloneNode(!0);if(!c)return;c.querySelectorAll("mark").forEach(M=>{M.remove()});const f=(y=c.innerText)==null?void 0:y.trim();f&&(async()=>{const M=await Ti(f);M!=null&&M.length&&(v==null||v({name:"auto-detect-language",languages:M}))})()},2e3);return e("text-expander",{ref:g,keys:"@ # :",class:"compose-field-container",children:[e("textarea",{class:"compose-field",autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",rows:"6",cols:"50",...re,ref:t,name:"status",value:d,onKeyDown:c=>{const{key:f,target:b}=c,y=R.current;if(f==="Enter"&&!(c.ctrlKey||c.metaKey||y))try{const{value:M,selectionStart:z}=b,ne=M.slice(0,z).split(` +`).slice(-1)[0];if(ne&&/^\s*(-|\d+\.)\s/.test(ne)){const[X,U,ve,pe,_]=ne.match(/^(\s*)(-|\d+\.)(\s+)(.+)?/)||[];if(_){c.preventDefault();const[j]=ve.match(/\d+/)||[],Z=j?`${+j+1}.`:"-",se=` +${U}${Z}${pe}`;b.setRangeText(se,z,z);const V=z+se.length;b.setSelectionRange(V,V)}else{const j=z-ne.length;b.setRangeText("",j,z)}nn(b),b.dispatchEvent(new Event("input"))}}catch{}$.current&&($.current.scrollTop=b.scrollTop)},onInput:c=>{var y;const{target:f}=c,b=f.value.replace(/\u200b/g,"");r(b),nn(f),(y=s.onInput)==null||y.call(s,c),P(b),le()},style:{width:"100%",height:"4em"},onScroll:c=>{if($.current){const{scrollTop:f}=c.target;$.current.scrollTop=f}}}),e("div",{ref:$,class:"compose-highlight","aria-hidden":"true"})]})});function Ri({maxCharacters:s=500,hidden:t}){const a=Dn(ce).composerCharacterCount,l=s-a;return t?e("span",{class:"char-counter",hidden:!0}):e("span",{class:"char-counter",title:`${l}/${s}`,style:{"--percentage":a/s*100},children:[e("meter",{class:`${l<=-10?"explode":l<=0?"danger":l<=20?"warning":""}`,value:a,max:s}),e("span",{class:"counter",children:l})]})}function sn(s,t,n,a){const l=Math.sqrt(t/s),d=Math.floor(n*l),r=Math.floor(a*l);return{newWidth:d,newHeight:r}}function Di({attachment:s,disabled:t,lang:n,onDescriptionChange:a=()=>{},onRemove:l=()=>{}}){const{i18n:d,_:r}=ze(),[p,F]=H("default"),v=st("@mastodon/edit-media-attributes"),{type:re,id:T,file:g}=s,E=Ne(()=>g?URL.createObjectURL(g):s.url,[g,s.url]),R=!!(g!=null&&g.size),W=R?rn():{},{mediaAttachments:{imageSizeLimit:$,imageMatrixLimit:P,videoSizeLimit:le,videoMatrixLimit:w,videoFrameRateLimit:c}={}}=W||{},[f,b]=H(()=>R?re.startsWith("image")&&$&&g.size>$?{type:"imageSizeLimit",details:{imageSize:g.size,imageSizeLimit:$}}:re.startsWith("video")&&le&&g.size>le?{type:"videoSizeLimit",details:{videoSize:g.size,videoSizeLimit:le}}:null:null),[y,M]=H({});oe(()=>{!R||!P||(y==null?void 0:y.matrix)>P&&b({type:"imageMatrixLimit",details:{imageMatrix:y==null?void 0:y.matrix,imageMatrixLimit:P,width:y==null?void 0:y.width,height:y==null?void 0:y.height}})},[y,P,R]);const[z,J]=H({});oe(()=>{!R||!w||(z==null?void 0:z.matrix)>w&&b({type:"videoMatrixLimit",details:{videoMatrix:z==null?void 0:z.matrix,videoMatrixLimit:w,width:z==null?void 0:z.width,height:z==null?void 0:z.height}})},[z,w,R]);const[ne,X]=H(s.description),[U,ve]=re.split("/"),pe=ht(a,250);oe(()=>{pe(ne)},[ne,pe]);const[_,j]=H(!1),Z=q(null);oe(()=>{let I;return _&&Z.current&&(I=setTimeout(()=>{Z.current.focus()},100)),()=>{clearTimeout(I)}},[_]);const se=e(qe,{children:T&&!v?e("div",{class:"media-desc",children:[e("span",{class:"tag",children:e(G,{id:"3wG7HI"})}),e("p",{title:ne,children:s.description||e("i",{children:"No description"})})]}):e("textarea",{ref:Z,value:ne||"",lang:n,placeholder:{image:r({id:"Lh8B0N"}),video:r({id:"mN4S+e"}),audio:r({id:"ieZytw"})}[U],autoCapitalize:"sentences",autoComplete:"on",autoCorrect:"on",spellCheck:"true",dir:"auto",disabled:t||p==="loading",class:p==="loading"?"loading":"",maxlength:"1500",onInput:I=>{const{value:K}=I.target;X(K)}})}),V=q(null);oe(()=>()=>{var I,K;(K=(I=V.current)==null?void 0:I.hideToast)==null||K.call(I)},[]);const ie=q(null),Q=I=>{const{type:K,details:m}=I;switch(K){case"imageSizeLimit":{const{imageSize:ee,imageSizeLimit:D}=m;return r({id:"d83/LB",values:{0:nt(ee),1:nt(D)}})}case"imageMatrixLimit":{const{imageMatrix:ee,imageMatrixLimit:D,width:ue,height:ae}=m,{newWidth:be,newHeight:xe}=sn(ee,D,ue,ae);return r({id:"TQrVea",values:{2:d.number(ue),3:d.number(ae),4:d.number(be),5:d.number(xe)}})}case"videoSizeLimit":{const{videoSize:ee,videoSizeLimit:D}=m;return r({id:"J5GTer",values:{6:nt(ee),7:nt(D)}})}case"videoMatrixLimit":{const{videoMatrix:ee,videoMatrixLimit:D,width:ue,height:ae}=m,{newWidth:be,newHeight:xe}=sn(ee,D,ue,ae);return r({id:"OG73zj",values:{8:d.number(ue),9:d.number(ae),10:d.number(be),11:d.number(xe)}})}case"videoFrameRateLimit":return r({id:"S1fBwy"})}};return e(qe,{children:[e("div",{class:"media-attachment",children:[e("div",{class:"media-preview",tabIndex:"0",onClick:()=>{j(!0)},children:U==="image"?e("img",{src:E,alt:"",onLoad:I=>{if(!R)return;const{naturalWidth:K,naturalHeight:m}=I.target;M({matrix:K*m,width:K,height:m})}}):U==="video"||U==="gifv"?e("video",{src:E+"#t=0.1",playsinline:!0,muted:!0,disablePictureInPicture:!0,preload:"metadata",onLoadedMetadata:I=>{if(!R)return;const{videoWidth:K,videoHeight:m}=I.target;K&&m&&J({matrix:K*m,width:K,height:m})}}):U==="audio"?e("audio",{src:E,controls:!0}):null}),se,e("div",{class:"media-aside",children:[e("button",{type:"button",class:"plain close-button",disabled:t,onClick:l,children:e(N,{icon:"x",alt:r({id:"t/YqKh"})})}),!!f&&e("button",{type:"button",class:"media-error",title:Q(f),onClick:()=>{ie.current&&ie.current.hideToast(),ie.current=Se({text:Q(f),duration:1e4})},children:e(N,{icon:"alert",alt:r({id:"SlfejT"})})})]})]}),_&&e(at,{onClose:()=>{j(!1)},children:e("div",{id:"media-sheet",class:"sheet sheet-max",children:[e("button",{type:"button",class:"sheet-close",onClick:()=>{j(!1)},children:e(N,{icon:"x",alt:r({id:"yz7wBu"})})}),e("header",{children:e("h2",{children:{image:r({id:"oMslIB"}),video:r({id:"WZw+zB"}),audio:r({id:"KMtgtM"})}[U]})}),e("main",{tabIndex:"-1",children:[e("div",{class:"media-preview",children:U==="image"?e("img",{src:E,alt:""}):U==="video"||U==="gifv"?e("video",{src:E,playsinline:!0,controls:!0}):U==="audio"?e("audio",{src:E,controls:!0}):null}),e("div",{class:"media-form",children:[se,e("footer",{children:[U==="image"&&/^(png|jpe?g|gif|webp)$/i.test(ve)&&!!ce.settings.mediaAltGenerator&&!!kt&&e(un,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:e("button",{type:"button",class:"plain",children:e(N,{icon:"more",size:"l",alt:r({id:"2FYpfJ"})})}),children:[e(Be,{disabled:p==="loading",onClick:()=>{F("loading"),V.current=Se({text:r({id:"8zsp51"}),duration:-1}),async function(){var I,K;try{const m=new FormData;m.append("image",g);const ee=await fetch(kt,{method:"POST",body:m}).then(D=>D.json());if(ee.error)throw new Error(ee.error);X(ee.description)}catch(m){Se(m.message?r({id:"jnKLR+",values:{12:m.message}}):r({id:"xhYfVj"}))}finally{F("default"),(K=(I=V.current)==null?void 0:I.hideToast)==null||K.call(I)}}()},children:[e(N,{icon:"sparkles2"}),n&&n!=="en"?e("small",{children:[e(G,{id:"o5sTJw"}),e("br",{}),"(English)"]}):e("span",{children:e(G,{id:"o5sTJw"})})]}),!!n&&n!=="en"&&e(Be,{disabled:p==="loading",onClick:()=>{F("loading"),V.current=Se({text:r({id:"8zsp51"}),duration:-1}),async function(){var I,K;try{const m=new FormData;m.append("image",g);const ee=`?lang=${n}`,D=await fetch(kt+ee,{method:"POST",body:m}).then(ue=>ue.json());if(D.error)throw new Error(D.error);X(D.description)}catch(m){Se(r({id:"kZwVke",values:{13:m!=null&&m.message?`: ${m.message}`:""}}))}finally{F("default"),(K=(I=V.current)==null?void 0:I.hideToast)==null||K.call(I)}}()},children:[e(N,{icon:"sparkles2"}),e("small",{children:[e(G,{id:"o5sTJw"}),e("br",{}),e(G,{id:"m+pAEQ",values:{0:Ct(n)},components:{0:e("span",{class:"more-insignificant"})}})]})]})]}),e("button",{type:"button",class:"light block",onClick:()=>{j(!1)},disabled:p==="loading",children:e(G,{id:"DPfwMq"})})]})]})]})]})})]})}function $i({lang:s,poll:t,disabled:n,onInput:a=()=>{},maxOptions:l,maxExpiration:d,minExpiration:r,maxCharactersPerOption:p}){const{_:F}=ze(),{options:v,expiresIn:re,multiple:T}=t;return e("div",{class:`poll ${T?"multiple":""}`,children:[e("div",{class:"poll-choices",children:v.map((g,E)=>e("div",{class:"poll-choice",children:[e("input",{required:!0,type:"text",value:g,disabled:n,maxlength:p,placeholder:F({id:"LDUSXg",values:{0:E+1}}),lang:s,spellCheck:"true",dir:"auto",onInput:R=>{const{value:W}=R.target;v[E]=W,a(t)}}),e("button",{type:"button",class:"plain2 poll-button",disabled:n||v.length<=1,onClick:()=>{v.splice(E,1),a(t)},children:e(N,{icon:"x",size:"s",alt:F({id:"t/YqKh"})})})]},E))}),e("div",{class:"poll-toolbar",children:[e("button",{type:"button",class:"plain2 poll-button",disabled:n||v.length>=l,onClick:()=>{v.push(""),a(t)},children:"+"})," ",e("label",{class:"multiple-choices",children:[e("input",{type:"checkbox",checked:T,disabled:n,onChange:g=>{const{checked:E}=g.target;t.multiple=E,a(t)}})," ",e(G,{id:"T57mm9"})]}),e("label",{class:"expires-in",children:[e(G,{id:"lkz6PL"})," ",e("select",{value:re,disabled:n,onChange:g=>{const{value:E}=g.target;t.expiresIn=E,a(t)},children:Object.entries(hn).filter(([g])=>g>=r&&g<=d).map(([g,E])=>e("option",{value:g,children:E()},g))})]})]}),e("div",{class:"poll-toolbar",children:e("button",{type:"button",class:"plain remove-poll-button",disabled:n,onClick:()=>{a(null)},children:e(G,{id:"CDpQAX"})})})]})}function Fe(s){return s.replace(/[&<>"']/g,function(t){return"&#"+t.charCodeAt(0)+";"})}function an(s){for(let t in s)(s[t]===null||s[t]===void 0)&&delete s[t];return s}function ji({onClose:s=()=>{},onSelect:t=()=>{},defaultSearchTerm:n}){const{_:a}=ze(),{masto:l}=Bt(),[d,r]=H("default"),[p,F]=H([]),[v,re]=H({}),[T,g]=H(0),E=async w=>{if(!(w!=null&&w.length))return;const c=await Gn(w,v);c&&re({...v,...c})},R=w=>{w&&(r("loading"),(async()=>{try{const c=await l.v1.accounts.search.list({q:w,limit:40,resolve:!1});F(c),E(c),r("default")}catch{r("error")}})())},W=ht(R,1e3);oe(()=>{R()},[R]);const $=q();oe(()=>{$.current&&($.current.focus(),$.current.value&&($.current.selectionStart=$.current.value.length,$.current.selectionEnd=$.current.value.length))},[]),oe(()=>{n&&R(n)},[n]);const P=w=>{const c=w.acct;t(c),s()};Ke("enter",()=>{const w=p[T];w&&P(w)},{preventDefault:!0,enableOnFormTags:["input"]});const le=q();return Ke("down",()=>{T{const w=le.current.querySelector(".selected");w&&w.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),Ke("up",()=>{T>0?g(T-1):g(p.length-1),setTimeout(()=>{const w=le.current.querySelector(".selected");w&&w.scrollIntoView({behavior:"smooth",block:"center",inline:"center"})},1)},{preventDefault:!0,enableOnFormTags:["input"]}),e("div",{id:"mention-sheet",class:"sheet",children:[!!s&&e("button",{type:"button",class:"sheet-close",onClick:s,children:e(N,{icon:"x",alt:a({id:"yz7wBu"})})}),e("header",{children:e("form",{onSubmit:w=>{var c;w.preventDefault(),(c=W.flush)==null||c.call(W)},children:e("input",{ref:$,required:!0,type:"search",class:"block",placeholder:a({id:"eH1bqp"}),onInput:w=>{const{value:c}=w.target;W(c)},autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:n||""})})}),e("main",{children:(p==null?void 0:p.length)>0?e("ul",{ref:le,class:`accounts-list ${d==="loading"?"loading":""}`,children:p.map((w,c)=>{const f=v[w.id];return e("li",{class:c===T?"selected":"",children:[e(cn,{avatarSize:"xxl",account:w,relationship:f,showStats:!0,showActivity:!0}),e("button",{type:"button",class:"plain2",onClick:()=>{P(w)},children:e(N,{icon:"plus",size:"xl",alt:a({id:"m16xKo"})})})]},w.id)})}):d==="loading"?e("div",{class:"ui-state",children:e(dt,{abrupt:!0})}):d==="error"?e("div",{class:"ui-state",children:e("p",{children:e(G,{id:"AThL/k"})})}):null})]})}function Pi({masto:s,instance:t,onClose:n=()=>{},onSelect:a=()=>{},defaultSearchTerm:l}){const{_:d}=ze(),[r,p]=H("default"),F=q([]),[v,re]=H([]),T=Ne(()=>Te.account.get("recentlyUsedCustomEmojis")||[]),g=q();oe(()=>{p("loading"),(async()=>{try{const[c,f]=await mn(t,s);g.current=f,re(c),p("default")}catch{p("error")}})()},[]);const E=Ne(()=>{const c={"--recent--":T.filter(b=>v.find(y=>y.shortcode===b.shortcode))},f=[];return v.forEach(b=>{var y,M;if((M=(y=F.current)==null?void 0:y.push)==null||M.call(y,b),!b.category){f.push(b);return}c[b.category]||(c[b.category]=[]),c[b.category].push(b)}),f.length&&(c["--others--"]=f),c},[v]),R=q(),[W,$]=H(null),P=Wt(c=>{var b,y,M;const{value:f}=c.target;if(f){const z=(b=g.current)==null?void 0:b.search(f,{limit:It});$(z.map(J=>J.item)),(M=(y=R.current)==null?void 0:y.scrollTo)==null||M.call(y,0,0)}else $(null)},[v]);oe(()=>{l&&(v!=null&&v.length)&&P({target:{value:l}})},[l,P,v]);const le=Wt(c=>{a==null||a(c),n==null||n(),queueMicrotask(()=>{let f=Te.account.get("recentlyUsedCustomEmojis")||[];const b=f.findIndex(y=>y.shortcode===c.shortcode);b!==-1?(f.splice(b,1),f.unshift(c)):(f.unshift(c),f=f.filter(y=>{var M,z;return(z=(M=F.current)==null?void 0:M.find)==null?void 0:z.call(M,J=>J.shortcode===y.shortcode)}),f=f.slice(0,10)),Te.account.set("recentlyUsedCustomEmojis",f)})},[a]),w=q();return oe(()=>{w.current&&(w.current.focus(),w.current.value&&(w.current.selectionStart=w.current.value.length,w.current.selectionEnd=w.current.value.length))},[]),e("div",{id:"custom-emojis-sheet",class:"sheet",children:[!!n&&e("button",{type:"button",class:"sheet-close",onClick:n,children:e(N,{icon:"x",alt:d({id:"yz7wBu"})})}),e("header",{children:[e("div",{children:[e("b",{children:e(G,{id:"8i6Ueo"})})," ",r==="loading"?e(dt,{}):e("small",{class:"insignificant",children:[" • ",t]})]}),e("form",{onSubmit:c=>{c.preventDefault();const f=W[0];f&&le(`:${f.shortcode}:`)},children:e("input",{ref:w,type:"search",placeholder:d({id:"EarrCe"}),onInput:P,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",defaultValue:l||""})})]}),e("main",{ref:R,children:W!==null?e("ul",{class:"custom-emojis-matches custom-emojis-list",children:W.map(c=>e("li",{class:"custom-emojis-match",children:e(gn,{emoji:c,onClick:()=>{le(`:${c.shortcode}:`)},showCode:!0})},c.shortcode))}):e("div",{class:"custom-emojis-list",children:[r==="error"&&e("div",{class:"ui-state",children:e("p",{children:e(G,{id:"Kzwsg2"})})}),r==="default"&&Object.entries(E).map(([c,f])=>!!(f!=null&&f.length)&&e("div",{class:"section-container",children:[e("div",{class:"section-header",children:{"--recent--":d({id:"uabU9X"}),"--others--":d({id:"NuKR0h"})}[c]||c}),e(Oi,{emojis:f,onSelect:le})]}))]})})]})}const Oi=ln(({emojis:s,onSelect:t})=>{const{i18n:n}=ze(),[a,l]=H(It),d=s.length>a;return e("section",{children:[s.slice(0,a).map(r=>e(gn,{emoji:r,onClick:()=>{t(`:${r.shortcode}:`)}},r.shortcode)),d&&e("button",{type:"button",class:"plain small",onClick:()=>l(a+It),children:e(G,{id:"iAB71E",values:{0:n.number(s.length-a)}})})]})}),gn=ln(({emoji:s,onClick:t,showCode:n})=>{const a=l=>{const r=l.currentTarget.closest("main");if(r){const p=r.getBoundingClientRect(),F=l.currentTarget.getBoundingClientRect(),v=l.currentTarget.classList;F.leftp.right-88?(v.add("edge-right"),v.remove("edge-left")):v.remove("edge-left","edge-right")}};return e("button",{type:"button",className:"plain4",onClick:t,"data-title":n?void 0:s.shortcode,onPointerEnter:a,onFocus:a,children:[e("picture",{children:[!!s.staticUrl&&e("source",{srcSet:s.staticUrl,media:"(prefers-reduced-motion: reduce)"}),e("img",{className:"shortcode-emoji",src:s.url||s.staticUrl,alt:s.shortcode,width:"24",height:"24",loading:"lazy",decoding:"async"})]}),n&&e(qe,{children:[" ",e("code",{children:s.shortcode})]})]})}),Ft=20;function Hi({onClose:s=()=>{},onSelect:t=()=>{}}){var R,W,$,P,le,w;const{i18n:n,_:a}=ze(),[l,d]=H("default"),[r,p]=H([]),F=q(null),v=q(null),re=q(0),T=q(null);function g({offset:c}){var f,b,y;(f=v.current)!=null&&f.value&&(d("loading"),(y=(b=T.current)==null?void 0:b.scrollTo)==null||y.call(b,{top:0,left:0,behavior:"smooth"}),(async()=>{var M;try{const z={api_key:gi,q:v.current.value,rating:"g",limit:Ft,bundle:"messaging_non_clips",offset:c,lang:n.locale||"en"},J=await fetch("https://api.giphy.com/v1/gifs/search?"+new URLSearchParams(z),{referrerPolicy:"no-referrer"}).then(ne=>ne.json());re.current=((M=J.pagination)==null?void 0:M.offset)||0,p(J),d("results")}catch{d("error")}})())}oe(()=>{var c;(c=v.current)==null||c.focus()},[]);const E=ht(()=>{g({offset:0})},1e3);return e("div",{id:"gif-picker-sheet",class:"sheet",children:[!!s&&e("button",{type:"button",class:"sheet-close",onClick:s,children:e(N,{icon:"x",alt:a({id:"yz7wBu"})})}),e("header",{children:e("form",{ref:F,onSubmit:c=>{c.preventDefault(),g({offset:0})},children:[e("input",{ref:v,type:"search",name:"q",placeholder:a({id:"wxlF9B"}),required:!0,autocomplete:"off",autocorrect:"off",autocapitalize:"off",spellCheck:"false",dir:"auto",onInput:E}),e("input",{type:"image",class:"powered-button",src:di,width:"86",height:"30",alt:a({id:"c1Q/eU"})})]})}),e("main",{ref:T,class:l==="loading"?"loading":"",children:[l==="default"&&e("div",{class:"ui-state",children:e("p",{class:"insignificant",children:e(G,{id:"9KEidY"})})}),l==="loading"&&!((R=r==null?void 0:r.data)!=null&&R.length)&&e("div",{class:"ui-state",children:e(dt,{abrupt:!0})}),((W=r==null?void 0:r.data)==null?void 0:W.length)>0?e(qe,{children:[e("ul",{children:r.data.map(c=>{const{id:f,images:b,title:y,alt_text:M}=c,{fixed_height_small:z,fixed_height_downsampled:J,fixed_height:ne,original:X}=b,U=z!=null&&z.url?z:J!=null&&J.url?J:ne;let{url:ve,webp:pe,width:_,height:j}=U;+j>100&&(_=_/j*100,j=100);const Z=URL.parse(ve),se=Z.origin+Z.pathname;let V;if(pe){const ie=URL.parse(pe);V=ie.origin+ie.pathname}return e("li",{children:e("button",{type:"button",onClick:()=>{const{mp4:ie,url:Q}=X,I=ie||Q,K=URL.parse(I),m=K.origin+K.pathname;s(),t({url:m,type:ie?"video/mp4":"image/gif",alt_text:M||y})},children:e("figure",{style:{"--figure-width":_+"px"},children:[e("picture",{children:[V&&e("source",{srcset:V,type:"image/webp"}),e("img",{src:se,width:_,height:j,loading:"lazy",decoding:"async",alt:M,referrerpolicy:"no-referrer",onLoad:ie=>{ie.target.style.backgroundColor="transparent"}})]}),e("figcaption",{children:M||y})]})})},f)})}),e("p",{class:"pagination",children:[(($=r.pagination)==null?void 0:$.offset)>0&&e("button",{type:"button",class:"light small",disabled:l==="loading",onClick:()=>{var c;g({offset:((c=r.pagination)==null?void 0:c.offset)-Ft})},children:[e(N,{icon:"chevron-left"}),e("span",{children:e(G,{id:"DHhJ7s"})})]}),e("span",{}),((P=r.pagination)==null?void 0:P.offset)+((le=r.pagination)==null?void 0:le.count)<((w=r.pagination)==null?void 0:w.total_count)&&e("button",{type:"button",class:"light small",disabled:l==="loading",onClick:()=>{var c;g({offset:((c=r.pagination)==null?void 0:c.offset)+Ft})},children:[e("span",{children:e(G,{id:"hXzOVo"})})," ",e(N,{icon:"chevron-right"})]})]})]}):l==="results"&&e("div",{class:"ui-state",children:e("p",{children:"No results"})}),l==="error"&&e("div",{class:"ui-state",children:e("p",{children:e(G,{id:"PbFw9n"})})})]})]})}export{Wi as default}; +//# sourceMappingURL=compose-lJLfU2UC.js.map diff --git a/assets/compose-lJLfU2UC.js.map b/assets/compose-lJLfU2UC.js.map new file mode 100644 index 0000000..8a9ace0 --- /dev/null +++ b/assets/compose-lJLfU2UC.js.map @@ -0,0 +1 @@ +{"version":3,"mappings":"02BAAe,MAAMA,EAAS,CAC1B,YAAYC,EAAOC,EAAM,CAAE,sBAAAC,EAAuB,mBAAAC,CAAoB,EAAG,GAAI,CACzE,KAAK,MAAQH,EACb,KAAK,KAAOC,EACZ,KAAK,sBAAwBC,GAA6F,GAC1H,KAAK,mBAAqBC,GAAoF,GAC9G,KAAK,YAAc,GACdF,EAAK,KACNA,EAAK,GAAK,YAAY,KAAK,OAAM,EAAG,SAAQ,EAAG,MAAM,EAAG,CAAC,CAAC,IAE9D,KAAK,aAAe,CAAC,CAAC,UAAU,UAAU,MAAM,WAAW,EAC3D,KAAK,qBAAuBG,GAASC,GAAiBD,EAAO,IAAI,EACjE,KAAK,wBAA0BA,GAASE,GAAiBF,EAAO,IAAI,EACpE,KAAK,aAAe,KAAK,eAAe,KAAK,IAAI,EACjDJ,EAAM,aAAa,OAAQ,UAAU,EACrCA,EAAM,aAAa,gBAAiBC,EAAK,EAAE,EAC3CD,EAAM,aAAa,gBAAiB,OAAO,EAC3CA,EAAM,aAAa,oBAAqB,MAAM,EAC9CA,EAAM,aAAa,gBAAiB,SAAS,CAChD,CACD,SAAU,CACN,KAAK,eAAc,EACnB,KAAK,KAAI,EACT,KAAK,MAAM,gBAAgB,MAAM,EACjC,KAAK,MAAM,gBAAgB,eAAe,EAC1C,KAAK,MAAM,gBAAgB,eAAe,EAC1C,KAAK,MAAM,gBAAgB,mBAAmB,EAC9C,KAAK,MAAM,gBAAgB,eAAe,CAC7C,CACD,OAAQ,CACJ,KAAK,MAAM,aAAa,gBAAiB,MAAM,EAC/C,KAAK,MAAM,iBAAiB,mBAAoB,KAAK,uBAAuB,EAC5E,KAAK,MAAM,iBAAiB,iBAAkB,KAAK,uBAAuB,EAC1E,KAAK,MAAM,iBAAiB,QAAS,KAAK,YAAY,EACtD,KAAK,MAAM,iBAAiB,UAAW,KAAK,oBAAoB,EAChE,KAAK,KAAK,iBAAiB,QAASO,EAAiB,EACrD,KAAK,sBAAqB,CAC7B,CACD,MAAO,CACH,KAAK,eAAc,EACnB,KAAK,MAAM,aAAa,gBAAiB,OAAO,EAChD,KAAK,MAAM,oBAAoB,mBAAoB,KAAK,uBAAuB,EAC/E,KAAK,MAAM,oBAAoB,iBAAkB,KAAK,uBAAuB,EAC7E,KAAK,MAAM,oBAAoB,QAAS,KAAK,YAAY,EACzD,KAAK,MAAM,oBAAoB,UAAW,KAAK,oBAAoB,EACnE,KAAK,KAAK,oBAAoB,QAASA,EAAiB,CAC3D,CACD,uBAAwB,CACpB,IAAIC,EACA,KAAK,sBACJA,EAAK,MAAM,KAAK,KAAK,KAAK,iBAAiB,6CAA6C,CAAC,EACrF,OAAOC,EAAO,EAAE,CAAC,KAAO,MAAQD,IAAO,QAAkBA,EAAG,aAAa,+BAAgC,MAAM,EAE3H,CACD,SAASE,EAAY,EAAG,CACpB,MAAMC,EAAU,MAAM,KAAK,KAAK,KAAK,iBAAiB,wBAAwB,CAAC,EAAE,OAAOF,EAAO,EAAE,CAAC,EAC5FG,EAAM,MAAM,KAAK,KAAK,KAAK,iBAAiB,iBAAiB,CAAC,EAAE,OAAOH,EAAO,EAC9EI,EAAaD,EAAI,QAAQD,CAAO,EACtC,GAAKE,IAAeD,EAAI,OAAS,GAAKF,IAAc,GAAOG,IAAe,GAAKH,IAAc,GAAK,CAC9F,KAAK,eAAc,EACnB,KAAK,MAAM,QACX,MACH,CACD,IAAII,EAAcJ,IAAc,EAAI,EAAIE,EAAI,OAAS,EACrD,GAAID,GAAWE,GAAc,EAAG,CAC5B,MAAME,EAAWF,EAAaH,EAC1BK,GAAY,GAAKA,EAAWH,EAAI,SAChCE,EAAcC,EACrB,CACD,MAAMC,EAASJ,EAAIE,CAAW,EAC9B,GAAKE,EAEL,UAAWC,KAAML,EACbK,EAAG,gBAAgB,8BAA8B,EAC7CD,IAAWC,GACX,KAAK,MAAM,aAAa,wBAAyBD,EAAO,EAAE,EAC1DA,EAAO,aAAa,gBAAiB,MAAM,EAC3CE,GAAS,KAAK,KAAMF,CAAM,GAG1BC,EAAG,gBAAgB,eAAe,CAG7C,CACD,gBAAiB,CACb,KAAK,MAAM,gBAAgB,uBAAuB,EAClD,UAAWA,KAAM,KAAK,KAAK,iBAAiB,wBAAwB,EAChEA,EAAG,gBAAgB,eAAe,EAEtC,KAAK,sBAAqB,CAC7B,CACL,CACA,SAASZ,GAAiBD,EAAOe,EAAU,CACvC,GAAI,EAAAf,EAAM,UAAYA,EAAM,SAAWA,EAAM,SAEzC,GAACe,EAAS,cAAgBf,EAAM,UAEhC,CAAAe,EAAS,YAEb,OAAQf,EAAM,IAAG,CACb,IAAK,QACGgB,GAAOD,EAAS,MAAOA,EAAS,IAAI,GACpCf,EAAM,eAAc,EAExB,MACJ,IAAK,MACGe,EAAS,uBAAyBC,GAAOD,EAAS,MAAOA,EAAS,IAAI,GACtEf,EAAM,eAAc,EAExB,MACJ,IAAK,SACDe,EAAS,eAAc,EACvB,MACJ,IAAK,YACDA,EAAS,SAAS,CAAC,EACnBf,EAAM,eAAc,EACpB,MACJ,IAAK,UACDe,EAAS,SAAS,EAAE,EACpBf,EAAM,eAAc,EACpB,MACJ,IAAK,IACGe,EAAS,cAAgBf,EAAM,UAC/Be,EAAS,SAAS,CAAC,EACnBf,EAAM,eAAc,GAExB,MACJ,IAAK,IACGe,EAAS,cAAgBf,EAAM,UAC/Be,EAAS,SAAS,EAAE,EACpBf,EAAM,eAAc,GAExB,MACJ,QACI,GAAIA,EAAM,QACN,MACJe,EAAS,eAAc,CAC9B,CACL,CACA,SAASZ,GAAkBH,EAAO,CAC9B,GAAI,EAAEA,EAAM,kBAAkB,SAC1B,OACJ,MAAMY,EAASZ,EAAM,OAAO,QAAQ,iBAAiB,EAChDY,GAEDA,EAAO,aAAa,eAAe,IAAM,QAE7CK,GAAgBL,CAAM,CAC1B,CACA,SAASI,GAAOpB,EAAOC,EAAM,CACzB,MAAMe,EAASf,EAAK,cAAc,+DAA+D,EACjG,OAAKe,GAEDA,EAAO,aAAa,eAAe,IAAM,QAE7CA,EAAO,MAAK,EACL,IAJI,EAKf,CACA,SAASK,GAAgBL,EAAQ,CAC7BA,EAAO,cAAc,IAAI,YAAY,kBAAmB,CAAE,QAAS,EAAM,EAAC,CAC9E,CACA,SAASP,GAAQQ,EAAI,CACjB,MAAQ,CAACA,EAAG,QACR,EAAEA,aAAc,kBAAoBA,EAAG,OAAS,YAC/CA,EAAG,YAAc,GAAKA,EAAG,aAAe,EACjD,CACA,SAASX,GAAiBF,EAAOe,EAAU,CACvCA,EAAS,YAAcf,EAAM,OAAS,mBACzB,SAAS,eAAee,EAAS,MAAM,aAAa,eAAe,GAAK,EAAE,GAGvFA,EAAS,eAAc,CAC3B,CACA,SAASD,GAASI,EAAWN,EAAQ,CAC5BO,GAAWD,EAAWN,CAAM,IAC7BM,EAAU,UAAYN,EAAO,UAErC,CACA,SAASO,GAAWD,EAAWE,EAAS,CACpC,MAAMC,EAAYH,EAAU,UACtBI,EAAkBD,EAAYH,EAAU,aACxCK,EAAMH,EAAQ,UACdI,EAASD,EAAMH,EAAQ,aAC7B,OAAOG,GAAOF,GAAaG,GAAUF,CACzC,CCtLA,MAAMG,GAAW,WACjB,SAASC,GAAMC,EAAMC,EAAKC,EAAQ,CAAE,UAAAC,EAAW,cAAAC,EAAe,kBAAAC,GAAsB,CAChF,UAAW,GACX,cAAe,EACf,kBAAmB,IACvB,EAAG,CACC,IAAIC,EAAWN,EAAK,YAAYC,EAAKC,EAAS,CAAC,EAG/C,GAFII,IAAa,IAEbA,EAAWF,EACX,OACJ,GAAID,EAAW,CACX,GAAIE,GAAqB,KAAM,CAC3B,GAAIA,IAAsBC,EACtB,OACJA,EAAWD,EAAoBJ,EAAI,MACtC,CAQD,GAPqBD,EAAKM,EAAW,CAAC,IACjB,KAAOJ,GAAUI,EAAWL,EAAI,OAAS,GAEzCD,EAAK,YAAY;AAAA,EAAME,EAAS,CAAC,EACnCI,GAEFN,EAAK,YAAY,IAAKE,EAAS,CAAC,EAClCI,EACX,MACP,SAEsBN,EAAK,YAAY,IAAKE,EAAS,CAAC,EAClCI,EACb,OAER,MAAMC,EAAMP,EAAKM,EAAW,CAAC,EAC7B,OAAIC,GAAO,CAACT,GAAS,KAAKS,CAAG,EACzB,OAEG,CACH,KAFgBP,EAAK,UAAUM,EAAWL,EAAI,OAAQC,CAAM,EAG5D,SAAUI,EAAWL,EAAI,MACjC,CACA,CAQA,MAAMO,WAA0B,WAAY,CAC5C,CAEA,MAAMC,WAAmC,KAAM,CAC3C,aAAc,CACV,MAAM,QAAQ,CACjB,CACL,CACA,MAAMC,GAAgB,IAAI,2DAmB1B,MAAMC,GAAN,MAAMA,WAA+BH,EAAkB,CAAvD,kCAAAI,GAAA,KAAAC,GACID,GAAA,KAAAE,GAAiB,IAAI,iBAAiB,IAAMC,GAAA,KAAKF,EAAAG,IAAL,UAAoB,GAChEJ,GAAA,KAAAK,GAAkB,IAAI,eAAe,IAAMF,GAAA,KAAKF,EAAAK,IAAL,UAA2B,GAKtEN,GAAA,KAAAO,IACAP,GAAA,KAAAQ,IA0GAR,GAAA,KAAAS,GAAW,GAEXT,GAAA,KAAAU,GAAW,GA2BXV,GAAA,KAAAW,GAAoB,IAkCpBX,GAAA,KAAAY,GAAW,IAAMT,GAAA,KAAKF,EAAAY,IAAL,YACjBb,GAAA,KAAAc,GAA6BrD,GAAU,CACnC0C,GAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,EACpBI,EAAM,SAAW,UACjBA,EAAM,SAAW,QAChBA,EAAM,kBAAkB,MAAQA,EAAM,OAAO,SAASJ,CAAK,IAC5D8C,GAAA,KAAKF,EAAAK,IAAL,UAChB,EACA,GAvKI,OAAO,IAAIjD,EAAO,CACd,IAAI2D,EAAQlB,GAAc,IAAIzC,CAAK,EACnC,OAAK2D,IACDA,EAAQ,IAAIjB,GACZiB,EAAM,QAAQ3D,CAAK,EACnByC,GAAc,IAAIzC,EAAO2D,CAAK,GAE3BA,CACV,CASD,QAAQ3D,EAAO,CACX4D,GAAA,KAAKV,GAAY,IAAI,QAAQlD,CAAK,GAGlC4D,GAAA,KAAKT,GAAa,SAAS,cAAc,KAAK,GAC9CU,EAAA,KAAKV,IAAW,MAAM,SAAW,WACjCU,EAAA,KAAKV,IAAW,MAAM,cAAgB,OACtCnD,EAAM,MAAM6D,EAAA,KAAKV,GAAU,EAC3BU,EAAA,KAAKV,IAAW,YAAY,IAAI,CACnC,CAKD,aAAc,CACVL,GAAA,KAAKF,EAAAG,IAAL,WACAD,GAAA,KAAKF,EAAAY,IAAL,UACH,CAED,mBAAoB,CAChBV,GAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,CACxB,KAAK,MAAM,cAAgB,OAC3B,KAAK,MAAM,WAAa,OACxB,KAAK,MAAM,SAAW,SACtB,KAAK,MAAM,QAAU,QAErB,KAAK,MAAM,WAAa,SACpBA,aAAiB,qBACjB,KAAK,MAAM,WAAa,WACxB,KAAK,MAAM,SAAW,eAGtB,KAAK,MAAM,WAAa,SAExB,KAAK,MAAM,QAAU,aACrB,KAAK,MAAM,cAAgB,UAE/B,KAAK,aAAa,cAAe,MAAM,EACvC8C,GAAA,KAAKF,EAAAG,IAAL,WACAD,GAAA,KAAKF,EAAAY,IAAL,WACAK,EAAA,KAAKhB,IAAe,QAAQ7C,EAAO,CAC/B,gBAAiB,CACb,QACA,KACH,CACjB,CAAa,EACD6D,EAAA,KAAKb,IAAgB,QAAQhD,CAAK,EAClC,SAAS,iBAAiB,SAAU6D,EAAA,KAAKJ,IAA2B,CAAE,QAAS,EAAI,CAAE,EACrF,OAAO,iBAAiB,SAAUI,EAAA,KAAKJ,IAA2B,CAAE,QAAS,EAAI,CAAE,EAEnFzD,EAAM,iBAAiB,QAAS6D,EAAA,KAAKN,IAAU,CAAE,QAAS,EAAI,CAAE,CAC5E,EACK,CAED,sBAAuB,QACnB/C,EAAAqD,EAAA,KAAKV,MAAL,MAAA3C,EAAiB,SACjBqD,EAAA,KAAKhB,IAAe,aACpBgB,EAAA,KAAKb,IAAgB,aACrB,SAAS,oBAAoB,SAAUa,EAAA,KAAKJ,IAA2B,CAAE,QAAS,EAAI,CAAE,EACxF,OAAO,oBAAoB,SAAUI,EAAA,KAAKJ,IAA2B,CAAE,QAAS,EAAI,CAAE,EAEtF,MAAMzD,EAAQ6D,EAAA,KAAKjB,EAAAkB,IACf9D,IACAA,EAAM,oBAAoB,QAAS6D,EAAA,KAAKN,IAAU,CAAE,QAAS,EAAI,CAAE,EACnEd,GAAc,OAAOzC,CAAK,EAEjC,CAqFL,EAzLI6C,GAAA,YACAG,GAAA,YAKAE,GAAA,YACAC,GAAA,YARJP,EAAA,YAuGQkB,GAAM,UAAG,OACT,OAAOtD,EAAAqD,EAAA,KAAKX,MAAL,YAAA1C,EAAgB,OAC1B,EAEDkD,GAAW,SAACK,EAAI,CACZ,MAAM/D,EAAQ6D,EAAA,KAAKjB,EAAAkB,IACnB,OAAK9D,EAEE+D,EAAG/D,CAAK,EADJ,KAAK,QAEnB,EAEDoD,GAAA,YAEAC,GAAA,YAKAW,GAAa,UAAG,CAEZlB,GAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,CACxB,MAAMiE,EAAa,OAAO,iBAAiBjE,CAAK,EAChD,KAAK,MAAM,OAASiE,EAAW,OAC/B,KAAK,MAAM,MAAQA,EAAW,MAE1BjE,EAAM,eAAiB,KAAK,eAC5B,KAAK,MAAM,OAAS,QAAQiE,EAAW,MAAM,MAAMjE,EAAM,aAAe,KAAK,YAAY,OACzFA,EAAM,cAAgB,KAAK,cAC3B,KAAK,MAAM,MAAQ,QAAQiE,EAAW,KAAK,MAAMjE,EAAM,YAAc,KAAK,WAAW,OAEzF,MAAMkE,EAAYlE,EAAM,wBAClBmE,EAAY,KAAK,wBACvBP,GAAA,KAAKR,GAAWS,EAAA,KAAKT,IAAWc,EAAU,KAAOC,EAAU,MAC3DP,GAAA,KAAKP,GAAWQ,EAAA,KAAKR,IAAWa,EAAU,IAAMC,EAAU,KAC1D,KAAK,MAAM,UAAY,aAAaN,EAAA,KAAKT,GAAQ,OAAOS,EAAA,KAAKR,GAAQ,MACrE,KAAK,UAAYrD,EAAM,UACvB,KAAK,WAAaA,EAAM,WACxB,KAAK,cAAc,IAAIwC,EAA4B,CAC/D,EACK,EACDc,GAAA,YAEAL,GAAoB,UAAG,CACfY,EAAA,KAAKP,MAETM,GAAA,KAAKN,GAAoB,IACzB,sBAAsB,IAAM,CACxBR,GAAA,KAAKF,EAAAoB,IAAL,WACAJ,GAAA,KAAKN,GAAoB,GACrC,CAAS,EACJ,EAEDP,GAAa,UAAG,CACZD,GAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,CACxB,MAAMiE,EAAa,OAAO,iBAAiBjE,CAAK,EAChD,UAAWoE,KAAQC,GACf,KAAK,MAAMD,CAAI,EAAIH,EAAWG,CAAI,EACtCtB,GAAA,KAAKF,EAAAK,IAAL,UACZ,EACK,EAKDO,GAAW,UAAG,CACVV,GAAA,KAAKF,EAAAc,IAAL,UAAkB1D,GAAU,CACxB,KAAK,YAAcA,EAAM,MAKzB8C,GAAA,KAAKF,EAAAoB,IAAL,UACZ,EACK,EACDT,GAAA,YACAE,GAAA,YAlLJ,IAAMa,GAAN5B,GA8LA,MAAM2B,GAAmB,CAErB,YACA,cACA,cACA,kBACA,YACA,iBACA,mBACA,oBACA,kBACA,cACA,aACA,eACA,gBACA,cAEA,YACA,cACA,aACA,cACA,WACA,iBACA,aACA,aACA,YACA,gBACA,aACA,iBACA,gBACA,cACA,UACA,YACJ,EAEA,GAAI,CACA,eAAe,OAAO,oBAAqBC,EAAsB,CACrE,OACOC,EAAG,CAEN,GAAI,EAAEA,aAAa,cAAgBA,EAAE,OAAS,qBAC1C,MAAMA,CACd,6BAEA,MAAMC,GAAN,MAAMA,EAAW,CAUb,YAAYhD,EAASiD,EAAc,EAAGC,EAAYD,EAAa,CAVnE9B,GAAA,KAAAgC,IACIhC,GAAA,KAAAiC,IACAjC,GAAA,KAAAkC,IACAlC,GAAA,KAAAmC,IAQIlB,GAAA,KAAKgB,GAAgBpD,GACrBoC,GAAA,KAAKiB,GAAeJ,GACpBb,GAAA,KAAKkB,GAAaJ,EACrB,CASD,OAAO,cAAc1E,EAAO,CACxB,KAAM,CAAE,eAAA+E,EAAgB,aAAAC,CAAc,EAAGhF,EACzC,OAAO,IAAIwE,GAAWxE,EAAO+E,GAAkB,OAAWC,GAAgB,MAAS,CACtF,CAED,IAAI,WAAY,CACZ,OAAO,KAAK,cAAgB,KAAK,SACpC,CAED,IAAI,yBAA0B,CAC1B,OAAOnB,EAAA,KAAKe,GACf,CAED,IAAI,cAAe,CACf,OAAOf,EAAA,KAAKe,GACf,CAED,IAAI,gBAAiB,CACjB,OAAOf,EAAA,KAAKe,GACf,CACD,IAAI,aAAc,CACd,OAAOf,EAAA,KAAKgB,GACf,CACD,IAAI,WAAY,CACZ,OAAOhB,EAAA,KAAKiB,GACf,CAED,eAAeG,EAAQ,CACnBrB,GAAA,KAAKiB,GAAe/B,GAAA,KAAK6B,GAAAO,IAAL,UAAkBD,GACzC,CAED,aAAaA,EAAQ,CACjBrB,GAAA,KAAKkB,GAAahC,GAAA,KAAK6B,GAAAO,IAAL,UAAkBD,GACvC,CAKD,SAASE,EAAU,GAAO,CAClBA,EACA,KAAK,aAAa,KAAK,WAAW,EAElC,KAAK,eAAe,KAAK,SAAS,CACzC,CAED,eAAgB,CACZ,OAAOrC,GAAA,KAAK6B,GAAAS,IAAL,WAAyB,eACnC,CAED,YAAa,CACT,OAAO,IAAIZ,GAAWX,EAAA,KAAKe,IAAe,KAAK,YAAa,KAAK,SAAS,CAC7E,CAMD,uBAAwB,CACpB,OAAO9B,GAAA,KAAK6B,GAAAS,IAAL,WAAyB,uBACnC,CAMD,gBAAiB,CACb,OAAOtC,GAAA,KAAK6B,GAAAS,IAAL,WAAyB,gBACnC,CAED,UAAW,CACP,OAAOtC,GAAA,KAAK6B,GAAAS,IAAL,WAAyB,UACnC,CAKD,eAAgB,CACZ,OAAOvB,EAAA,KAAKc,GAAAU,GACf,CAuBL,EA3HIT,GAAA,YACAC,GAAA,YACAC,GAAA,YAHJH,GAAA,YAuGQU,GAAW,UAAG,CACd,OAAOf,GAAuB,IAAIT,EAAA,KAAKe,GAAa,CACvD,EACGU,GAAa,UAAG,CAChB,OAAOzB,EAAA,KAAKc,GAAAU,GACf,EACDH,GAAY,SAACD,EAAQ,CACjB,OAAO,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAQpB,EAAA,KAAKe,IAAc,MAAM,MAAM,CAAC,CACvE,EACDQ,GAAiB,UAAG,CAIhB,MAAMG,EAAQ,SAAS,cACjBC,EAAW3B,EAAA,KAAKc,GAAAW,IAAc,WAAW,CAAC,EAChD,OAAIE,IACAD,EAAM,SAASC,EAAU,KAAK,WAAW,EACzCD,EAAM,OAAOC,EAAU,KAAK,SAAS,GAElCD,CACV,EA3HL,IAAME,GAANjB,GA8HA,MAAMkB,GAAS,IAAI,QACnB,MAAMC,EAAa,CACf,YAAYC,EAAU5F,EAAO,CACzB,KAAK,SAAW4F,EAChB,KAAK,MAAQ5F,EACb,KAAK,SAAW,KAChB,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,WAAa,GAClB,KAAK,cAAgB,EACrB,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACzC,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,OAAS,KAAK,OAAO,KAAK,IAAI,EACnC,KAAK,oBAAsB,GAC3BA,EAAM,iBAAiB,QAAS,KAAK,OAAO,EAC5CA,EAAM,iBAAiB,QAAS,KAAK,OAAO,EAC5CA,EAAM,iBAAiB,UAAW,KAAK,SAAS,EAChDA,EAAM,iBAAiB,OAAQ,KAAK,MAAM,CAC7C,CACD,SAAU,CACN,KAAK,MAAM,oBAAoB,QAAS,KAAK,OAAO,EACpD,KAAK,MAAM,oBAAoB,QAAS,KAAK,OAAO,EACpD,KAAK,MAAM,oBAAoB,UAAW,KAAK,SAAS,EACxD,KAAK,MAAM,oBAAoB,OAAQ,KAAK,MAAM,CACrD,CACD,aAAc,CACN,KAAK,eACL,KAAK,cAAgB,KAAK,MAAM,cAAgB,KAAK,cAE5D,CACD,SAAS6F,EAAOC,EAAM,CAClB,IAAItF,EAAIuF,EACJ,KAAK,QAAU,SAAS,eAAiB,KAAK,UAAYA,GAAMvF,EAAK,SAAS,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,cAAgB,MAAQuF,IAAO,OAAS,OAASA,EAAG,iBAG7L,KAAK,WAAU,EACf,KAAK,KAAOD,EACPA,EAAK,KACNA,EAAK,GAAK,iBAAiB,KAAK,MAAM,KAAK,OAAQ,EAAG,GAAM,EAAE,SAAQ,CAAE,IAC5E,KAAK,SAAS,OAAOA,CAAI,EACzB,KAAK,SAAW,IAAI/F,GAAS,KAAK,MAAO+F,CAAI,EAC7C,KAAK,SAAS,cAAc,IAAI,MAAM,wBAAwB,CAAC,EAC/D,KAAK,aAAaA,EAAMD,EAAM,QAAQ,EACtC,KAAK,SAAS,QACdC,EAAK,iBAAiB,kBAAmB,KAAK,QAAQ,EACtDA,EAAK,iBAAiB,YAAa,KAAK,WAAW,EACnD,KAAK,SAAS,SAAS,CAAC,EAC3B,CACD,aAAaA,EAAME,EAAU,CACzB,MAAMC,EAAY,IAAIR,GAAW,KAAK,MAAOO,CAAQ,EAAE,wBACjDE,EAAiB,CAAE,KAAMD,EAAU,KAAM,IAAKA,EAAU,IAAMA,EAAU,QACxEE,EAAkBL,EAAK,wBACvBM,EAAQ,CACV,KAAMF,EAAe,KAAOC,EAAgB,KAC5C,IAAKD,EAAe,IAAMC,EAAgB,GACtD,EACQ,GAAIC,EAAM,OAAS,GAAKA,EAAM,MAAQ,EAAG,CACrC,MAAMC,EAAe,iBAAiBP,CAAI,EAC1CA,EAAK,MAAM,KAAOO,EAAa,KAAO,QAAQA,EAAa,IAAI,MAAMD,EAAM,IAAI,MAAQ,GAAGA,EAAM,IAAI,KACpGN,EAAK,MAAM,IAAMO,EAAa,IAAM,QAAQA,EAAa,GAAG,MAAMD,EAAM,GAAG,MAAQ,GAAGA,EAAM,GAAG,IAClG,CACJ,CACD,YAAa,CACT,MAAMN,EAAO,KAAK,KAClB,MAAI,CAACA,GAAQ,CAAC,KAAK,SACR,IACX,KAAK,SAAS,cAAc,IAAI,MAAM,0BAA0B,CAAC,EACjE,KAAK,KAAO,KACZA,EAAK,oBAAoB,kBAAmB,KAAK,QAAQ,EACzDA,EAAK,oBAAoB,YAAa,KAAK,WAAW,EACtD,KAAK,SAAS,UACd,KAAK,SAAW,KAChBA,EAAK,OAAM,EACJ,GACV,CACD,SAAS,CAAE,OAAA9E,GAAU,CACjB,IAAIR,EACJ,MAAM8F,EAAOtF,EAGb,GAFI,EAAEsF,aAAgB,cAElB,CAAC,KAAK,SACN,OACJ,MAAMT,EAAQ,KAAK,MACnB,GAAI,CAACA,EACD,OACJ,MAAMU,EAAY,KAAK,MAAM,MAAM,UAAU,EAAGV,EAAM,SAAWA,EAAM,IAAI,MAAM,EAC3EW,EAAY,KAAK,MAAM,MAAM,UAAUX,EAAM,SAAWA,EAAM,KAAK,MAAM,EACzEY,EAAS,CAAE,KAAAH,EAAM,IAAKT,EAAM,IAAK,MAAO,KAAM,SAAU,IAI9D,GAHiB,CAAC,KAAK,SAAS,cAAc,IAAI,YAAY,sBAAuB,CAAE,WAAY,GAAM,OAAAY,CAAM,CAAE,CAAC,GAG9G,CAACA,EAAO,MACR,OACJ,IAAIC,GAAUlG,EAAK,KAAK,SAAS,aAAa,QAAQ,KAAO,MAAQA,IAAO,OAASA,EAAK,IACtFiG,EAAO,WACPC,EAAS,IAEb,MAAMC,GAAQ,GAAGF,EAAO,KAAK,GAAGC,CAAM,GACtC,KAAK,MAAM,MAAQH,EAAYI,GAAQH,EACvC,MAAMvE,EAASsE,EAAU,OAASI,GAAM,OACxC,KAAK,WAAU,EACf,KAAK,MAAM,MAAM,CACb,cAAe,EAC3B,CAAS,EACD,KAAK,MAAM,eAAiB1E,EAC5B,KAAK,MAAM,aAAeA,EACrBwE,EAAO,WACR,KAAK,cAAgBxE,EACrB,KAAK,MAAQ,MAEjB,KAAK,SAAS,cAAc,IAAI,YAAY,0BAA2B,CAAE,WAAY,GAAO,OAAQ,CAAE,MAAO,KAAK,KAAO,EAAE,CAAC,CAC/H,CACD,QAAS,CACL,GAAI,KAAK,oBAAqB,CAC1B,KAAK,oBAAsB,GAC3B,MACH,CACD,KAAK,WAAU,CAClB,CACD,SAAU,CACN,KAAK,WAAa,EACrB,CACD,MAAM,SAAU,CACZ,GAAI,KAAK,WAAY,CACjB,KAAK,WAAa,GAClB,MACH,CACD,MAAM4D,EAAQ,KAAK,YACnB,GAAIA,EAAO,CACP,KAAK,MAAQA,EACb,MAAMC,EAAO,MAAM,KAAK,gBAAgBD,CAAK,EAC7C,GAAI,CAAC,KAAK,MACN,OACAC,EACA,KAAK,SAASD,EAAOC,CAAI,EAGzB,KAAK,WAAU,CAEtB,MAEG,KAAK,MAAQ,KACb,KAAK,WAAU,CAEtB,CACD,WAAY,CACR,MAAM7D,EAAS,KAAK,MAAM,cAAgB,EACpCF,EAAO,KAAK,MAAM,MACpBE,GAAU,KAAK,gBACf,KAAK,cAAgBA,EAAS,GAElC,SAAW,CAAE,IAAAD,EAAK,UAAAE,CAAW,IAAI,KAAK,SAAS,KAAM,CACjD,MAAM0E,EAAQ9E,GAAMC,EAAMC,EAAKC,EAAQ,CACnC,UAAAC,EACA,cAAe,KAAK,cACpB,kBAAmB,KAAK,MAAQ,KAAK,MAAM,SAAW,IACtE,CAAa,EACD,GAAI0E,EACA,MAAO,CAAE,KAAMA,EAAM,KAAM,IAAA5E,EAAK,SAAU4E,EAAM,SAEvD,CACJ,CACD,MAAM,gBAAgBf,EAAO,CACzB,MAAMgB,EAAY,GACZC,EAAWC,GAAWF,EAAU,KAAKE,CAAM,EAEjD,OADkB,KAAK,SAAS,cAAc,IAAI,YAAY,uBAAwB,CAAE,WAAY,GAAM,OAAQ,CAAE,QAAAD,EAAS,KAAMjB,EAAM,KAAM,IAAKA,EAAM,IAAO,EAAC,GAGtJ,MAAM,QAAQ,IAAIgB,CAAS,GACjB,OAAOG,GAAKA,EAAE,OAAO,EAAE,IAAIA,GAAKA,EAAE,QAAQ,EAC/C,CAAC,EAHd,MAIP,CACD,aAAc,CACV,KAAK,oBAAsB,EAC9B,CACD,UAAU5G,EAAO,CACTA,EAAM,MAAQ,WACd,KAAK,MAAQ,KACT,KAAK,eACL,KAAK,cAAgB,KAAK,MAAM,cAAgB,KAAK,cACrDA,EAAM,yBAAwB,EAC9BA,EAAM,eAAc,GAG/B,CACL,CACA,MAAM6G,WAA4B,WAAY,CAC1C,IAAI,MAAO,CACP,MAAMC,EAAW,KAAK,aAAa,MAAM,EACnCC,EAAOD,EAAWA,EAAS,MAAM,GAAG,EAAI,GACxCE,EAAgB,KAAK,aAAa,WAAW,EAC7ClF,EAAYkF,EAAgBA,EAAc,MAAM,GAAG,EAAI,GACvDC,EAAkBnF,EAAU,SAAW,GAAK,KAAK,aAAa,WAAW,EAC/E,OAAOiF,EAAK,IAAInF,IAAQ,CAAE,IAAAA,EAAK,UAAWqF,GAAmBnF,EAAU,SAASF,CAAG,CAAC,EAAG,CAC1F,CACD,IAAI,KAAK2E,EAAO,CACZ,KAAK,aAAa,OAAQA,CAAK,CAClC,CACD,mBAAoB,CAChB,MAAM3G,EAAQ,KAAK,cAAc,8BAA8B,EAC/D,GAAI,EAAEA,aAAiB,kBAAoBA,aAAiB,qBACxD,OACJ,MAAMsH,EAAQ,IAAI3B,GAAa,KAAM3F,CAAK,EAC1C0F,GAAO,IAAI,KAAM4B,CAAK,CACzB,CACD,sBAAuB,CACnB,MAAMA,EAAQ5B,GAAO,IAAI,IAAI,EACxB4B,IAELA,EAAM,QAAO,EACb5B,GAAO,OAAO,IAAI,EACrB,CACD,SAAU,CACN,MAAM4B,EAAQ5B,GAAO,IAAI,IAAI,EACxB4B,GAELA,EAAM,YAAW,CACpB,CACL,CAEK,OAAO,eAAe,IAAI,eAAe,IAC1C,OAAO,oBAAsBL,GAC7B,OAAO,eAAe,OAAO,gBAAiBA,EAAmB,GCtpBtD,SAASM,GAAU,CAAC,UAAAC,EAAY,EAAK,EAAI,GAAI,CAC3D,MAAMC,EAAU,CACZ,+HACH,0DACF,EAAG,KAAK,GAAG,EAEV,OAAO,IAAI,OAAOA,EAASD,EAAY,OAAY,GAAG,CACvD,CCLA,MAAME,GAAQH,GAAS,EAER,SAASI,GAAUC,EAAQ,CACzC,GAAI,OAAOA,GAAW,SACrB,MAAM,IAAI,UAAU,gCAAgC,OAAOA,CAAM,IAAI,EAMtE,OAAOA,EAAO,QAAQF,GAAO,EAAE,CAChC,CCXA,MAAMG,GAAY,IAAI,KAAK,UAEZ,SAASC,GAAaF,EAAQ,CAAC,qBAAAG,EAAuB,EAAK,EAAI,GAAI,CASjF,GARIH,IAAW,KAIVG,IACJH,EAASD,GAAUC,CAAM,GAGtBA,IAAW,IACd,MAAO,GAGR,IAAII,EAAS,EAEb,UAAWC,KAAKJ,GAAU,QAAQD,CAAM,EACvCI,IAGD,OAAOA,CACR,CCxBA,MAAeE,GAAA,89sBC+DT,CACJC,uBAAwBC,GACxBC,qBAAsBC,EACxB,EAAIC,GAEEC,GAAwBC,GAAmBC,OAAO,CAACC,EAAKC,IAAM,CAClE,KAAM,CAACC,EAAMC,EAAQC,CAAM,EAAIH,EAC/BD,SAAIE,CAAI,EAAI,CACVC,SACAC,UAEKJ,CACT,EAAG,CAAE,GAMCK,GAAgB,CACpB,IAAKC,GAAa,EAAG,QAAQ,EAC7B,KAAOA,GAAa,GAAI,QAAQ,EAChC,KAAOA,GAAa,EAAG,MAAM,EAC7B,MAAQA,GAAa,EAAG,MAAM,EAC9B,MAAQA,GAAa,EAAG,KAAK,EAC7B,OAASA,GAAa,EAAG,KAAK,EAC9B,OAASA,GAAa,EAAG,MAAM,CACjC,EACMC,GAAgBC,OAAOhC,KAAK6B,EAAa,EACzCI,GAAS,GAAK,GAAK,GAEnBC,GAAwCC,GAAA,CACxC,IAACA,EAAkBF,UACjBhD,SAAS,IAAImD,KAAKD,CAAS,EAAEE,QAAQ,EAAID,KAAKE,IAAS,OAC7D,OAAOP,GAAcQ,KAAYC,MAAKvD,CAAK,GAAKgD,EAClD,EAEMtD,GAAO8D,SAASC,cAAc,IAAI,EACxC/D,GAAKgE,KAAO,UACZhE,GAAKiE,UAAY,qBAGjB,MAAMC,GAAe,GACfC,GAAW,IAAIC,qBAAkCC,GAAA,CAC7CC,UAAmBC,GAAA,CACzB,GAAIA,EAAMC,eAAgB,CAClB,MAAEC,OAAMC,SAAUH,EAAMI,mBACxB,CAAEC,YAAeC,SACnBJ,KAAOC,EAAQE,EAAY,CACvBE,QAAmBC,KAAU,QAAU,OAC7C/E,GAAKgF,MAAMF,CAAgB,EAAIF,EAAaF,EAAQR,GAAe,IACrE,CACF,EACD,CACH,CAAC,EACDC,GAASc,QAAQjF,EAAI,EAErB,MAAMkF,GAAeC,GACnB,CAAC,IAAIC,KAAKC,eAAe,EAAEC,gBAAgB,EAAEC,OAAQ,GAAGC,UAAUC,SAAS,EAC3E9C,GAAmB+C,OAAW5C,EAAE,CAAC,CAAC,EAClC,IACF,EAGM6C,GAAc,IAAIC,OAAOC,GAASC,OAAQD,GAASE,KAAK,EACxDC,GAAgB,sDAChBC,GAAiB,4BACvB,SAASC,GAAcC,EAAW,CAChC,OAAOA,EACJC,QAAQT,GAAaM,EAAc,EACnCG,QAAQJ,GAAe,OAAO,CACnC,CAGA,MAAMK,GAAc,uCACdC,GAAa,IAAIV,OACrB,mBAAmBS,GAAYP,MAAM,8BACrC,KACF,EAGMS,GAAa,IAAIX,OACrB,kEACA,IACF,EAGMY,GAAwB,mBACxBC,GAAU,IAAIb,OAClB,mBAAmBY,EAAqB,yBACxC,GACF,EAEMzE,GAAY,IAAIqD,KAAKsB,UAC3B,SAASC,GAAW1K,EAAM,CACxB,OAAOA,EACJmK,QAAQ,KAAM,OAAO,EACrBA,QAAQ,KAAM,MAAM,EACpBA,QAAQ,KAAM,MAAM,EACpBA,QAAQ,KAAM,QAAQ,EACtBA,QAAQ,KAAM,QAAQ,CAC3B,CACA,SAASQ,GAAc3K,EAAM,CAAE4K,gBAAgBC,GAAS,EAAG,CAEnD,MAAEC,wBAA2BnH,KACnC,GAAImH,EAAyBF,EAAe,CAEtCG,MAAkB,GACpBC,EAAkB,GACdC,QAAenF,GAAUoF,QAAQlL,CAAI,EAChC,UAAEkL,UAASC,WAAWF,EAC3BE,EAAQP,EACSM,KAEAA,KAGvB,OAAIF,IAEAA,EAAA,4CACAN,GAAWM,CAAe,EAC1B,WAEGN,GAAWK,CAAe,EAAIC,CACvC,CAEA,OAAON,GAAW1K,CAAI,EACnBmK,QAAQT,GAAa,iDAAiD,EACtES,QAAQE,GAAY,qDAAqD,EACzEF,QAAQG,GAAY,qDAAqD,EACzEH,QACCK,GACA,6DACF,CACJ,CAGA,MAAMY,GAAMC,GAAgB/B,GAAA,IAAIH,KAAKmC,mBAAmBhC,GAAUiC,MAAS,CAAC,EACtEC,GAAKH,GAAgB/B,GAAA,IAAIH,KAAKsC,WAAWnC,GAAUiC,MAAS,CAAC,EAE7DG,GAAsB,IAEtBC,GAAa,CACjBC,MAAO,CAAAC,GAAA,QAAa,EACpBC,YAAa,CAAAD,GAAA,QAAoB,EACjCE,IAAK,CAAAF,GAAA,QAAW,EAChBG,KAAM,CAAAH,GAAA,QAAY,CACpB,EAEA,SAASI,GAAQ,CACfC,UACAC,gBACAC,aACAC,cACAC,aACAC,WACF,EAAG,QACK,WAAEC,EAAMtG,IAAGuG,KAAGC,GAAc,EAC5BC,EAAMvB,GAAIoB,EAAKlD,MAAM,EACrBsD,GAAKpB,GAAGgB,EAAKlD,MAAM,EAEzBuD,CACM,MAAAC,EAAEA,UAAOC,OAAiB,CAAAC,EAAAC,CAAA,EAAAC,EAAA,WAC1BC,EAACH,GAAmBX,GAAA,YAAAA,QAAae,GAAS,GAC1CD,EAA0BC,KACxBC,EAAmBF,EAAW,KAEhCG,QACAC,CAEN,UACQF,gBAEF,oBAAAG,EAEF5C,4BACA4C,qBACAC,sCAEgB,iBAAAC,EAChBC,iBACAC,mBACAF,wBACAG,GACAC,OACAC,sCAEK,cAAAC,GACLC,kBACAC,IACAF,OACAG,MACEC,EAACC,SACe,EAAAnB,EAAA,UAEhBoB,KAAqB,EAAApB,EAAA,IACrBkB,IAAwB,EAAAlB,EAAAqB,GAAA,gCAAAtF,EAAA,EACxBuF,EAA0BH,EAAAI,CAAIvB,EAC9B,CAACwB,EAAuBC,EAAkB,EAAAzB,EAAA,IAC1C,CAACuB,EAAUG,MAAe1B,MAG1BsB,cAAsBC,IAAQ,mBAC9BI,GAAmBF,KAClB3C,EAAa,SAEpBsC,EAAcC,QAAMO,cAAY,iBAAmB,EAEnD,EACMC,GAAsB,KAC1BT,eAAoBU,WACtBV,EAAA,wDAC4B;AAAA,KAC1BW,EAAiB,yBACXX,UAAsB,iBAGxBA,8BACAA,MAAmC,EAErCzB,gBACAyB,WACI,CACR,YAAAY,EAEAC,WAAgBC,EACVjD,SAAekD,EACX,UAAAC,CAAEJ,IAAaK,eAAYd,mBAC7BS,YADqD/C,wDACvBqD,OAASC,OAAAlC,EAAA,MACzCa,SAAuBxJ,IACzB0J,EAAA,iBAAAoB,EAAA,IAAAD,GAAA,IAAAA,CAAA,iBACAZ,MAOIa,KACFpB,GAAYkB,IAAgB,UAAGE,GACvBD,4BACI,EAAAE,GAAA,4CAAAP,CAAA,EACIR,EAAAS,KAAA5Q,EAAAkR,GAAA,0CAAAlR,EAAA,gBAAAwK,EAAA,EAClB2G,GAAAN,GAAA,EAAAJ,CAAA,CACc,SAAA9C,EAAA,CAEZmD,MAIFX,aAKaF,qBACQY,EACf,KAAAO,EAAEN,oBAAYd,EAAUC,2BAAW1C,KAAM8D,sDAC7C1D,uDACF,EAA0Ca,EACrCjB,YACH+D,gBACAC,GAAWhE,CACb,MAAAiE,EAAA,MAAAnD,EAAA,oBAAAV,EAAA,mBACAa,CACa,KAAAjN,GACP,YAAAkP,EACIe,IAGNpD,EAAY,cAAA7M,GAAEiQ,4BAAapB,KACrBE,KAAE/O,mBAAMkP,MAAYN,EAAIqB,0EAC9B3B,IAA4BtO,EAChBwP,GAAQU,GAAQrG,CAAS7J,EACrB2O,GAAAwB,CAAA,EACFlD,EAAA,UACdmB,UACAgC,iCAAwB5N,CAAA,EACxBoM,UAKAgB,CACIS,IACJ1B,MACA1B,oCACU,GACVJ,MAAe,6CAEfI,6BAAkB,GACpB2B,EAAAe,GAAA,2CAEGA,GAAA,8BACSC,GAAA,EAAAD,GAAA,8BAGZS,MACF,MACIT,SACFf,cACF,WAAAQ,EACIO,WACFC,YACF,KAAAC,EACF,iBAAAM,CACA,EAAiB9D,EACTgE,EAAA,GAAAR,GAAA,MAAAA,EAAA,WACJS,KACApB,0DACAK,yDACAd,EACAC,qBACA1C,KAEEK,uBACJ+C,GAAuBgB,GAAEpE,CAAiB,EAAA4C,EACrC5C,0EACH+D,IAAsBtG,SAAW8G,CAAYA,EAClCvE,GAAMgE,GAAa1I,GAChC6I,GAAAxB,GAAAwB,CAAA,CACA7B,CACgB,GAAAjC,EAAAD,EAAAD,CAAA,GACF,MAAAqE,GAAAnC,IACVa,GAA4BM,EAEhCZ,CAKIF,WACA2B,CACAP,EACNW,GAAA,KACC,KAAcrE,CAEjB,MAAAxH,EAEA,QAAAsL,CAAsBQ,YAAG,GAAA1D,IAAA,UAAAnB,MAAA,GAA+C,MAAA8E,GAAA/L,GAAA,kFACjDkL,EAAA,SAIrB,GAHM,CAAAa,GAAA,CAAAC,GAAiCpB,6BAIrC3C,SAA0BG,MAAS6D,GAAA1E,GAAA,YAAAA,EAAA,cAAAoB,EAAA,GAC5BuD,EAAA3E,GAAAvH,EAAA,aAAAuH,EAAA,eASPU,MARF,IAAAgE,GAAAC,GAOuClM,KAAAsL,GAAA,YAAAA,EAAA,QAE9B,EACTa,GAAA,IAGMC,KAI6C,GADxB,QAAAC,EAAA,EAG3B9B,GAAA,KAGA,MAAM0B,EAAS1E,GAAuBN,CAChCiF,OAGFtO,iBAAwB,EAC1BqK,cAAwBoE,GAAEJ,EAAQC,cAAa,gCAAAI,EAAA,CACxC,WACT,EAGMC,+BAAoCtH,kBAC1C,QAAoB,EAClBgD,EAA0BsE,YAAgBC,GAAA,KACnC,MACT,MAAAxM,CAEAiI,IAAwB,QACtBjI,CACAgM,SACAI,UACAhF,wBAEA8E,QACAK,aACAnE,6BAGKmC,GAAAkC,GAAA,IACT,MAAAC,GAAA,oBAEMP,KAAqB,IACrBQ,SAAa,KACTC,aACCA,GACT,SAAAF,GACO,oBACT,EAEAnC,GAAgB,WAER+B,OAA4B,SAAAH,GAAA,GAC5B7E,IAEF1J,GAAgByO,YAClB,CACF,SAAAK,GACOG,oBAEP,MAAC,GACD,gBACE7I,GAA2B,CACzB8I,MAASC,EAAA,kDACVC,EAAA,EAAAD,EACAE,EAAAF,EAAA,YAAAA,EAAA,uCAEL,UAA2B,CAAAE,CACnB,EAAEjN,KAAsB4K,KACxB,CAAAlD,GAAAyE,MAAEnM,GACR,GAAA0H,KAAkC1H,IACpC,MAAAkN,GAAAzD,EAAA,IACMgD,OAEGvG,OAAyBiH,gBAExBV,OAAmB,CAGvBW,GADAV,GACAU,iBAAyB,iBAC/BT,aAGIS,EAAqB,CAGvB,IAAA/R,UACYqR,GASV,GAAAnF,EAAA,GACA6F,QAAqB,CAEvB,GAAA7F,EAAA,oBACYmF,mBACQ,KAAAnF,EAAA,eAEX,KACP8F,aACQN,cACAC,SAAaD,cACbE,sBACc,MACpB,WAAAtC,EACF,SAAAd,EAEJ,UAAAC,EACAwD,OACM,iBAAApC,CACM,GAEIiB,SAAsB,WAAAN,OAEhCqB,iBACAK,KACJ,MAAWC,UACX,UAAgBjF,KAAIqC,IAAO,EAC7B,qBAAAhN,GAAA,IACAsP,WAA+B,gBAAAO,CAAA,EAKzB1O,EACJ2O,MAAqB,KACrBnD,GAAwB,KACtBlP,SAEI,CAAAsS,GAAA,WAAAJ,GAAA,SAAAhD,GAAA,WAAAqD,EAAAhQ,GAAA,MAMM2J,CACJ2C,OACEjD,mBAA0BA,eAC1B4G,EAAUtG,GACVuG,EAA4BA,GAC9B,QAAAC,EAAA,EAAAA,EAAAC,EAAA,OAAAD,IAAA,CAEF,MAAApO,EAAAqO,EAAAD,CAAA,EACS,GAAApO,EAAA,qBACFiL,gBACTc,IAA4B1L,4BAC5BsK,QAAoCtK,EAEpC6J,SAEAzC,CACA8D,CAoBkBN,GAnBpBqD,EAAA,UACF,MAAAC,GAAA,EAKEjG,CACGkG,GACAC,SACIX,QACI,EAAAQ,EAAA,OACPI,IAAoB,QAEhB,EAAMrG,GAAA,OAAAiG,EAAA,IAAAK,KAAA,MACFC,CAEF3Q,CACE4Q,GAEQ5D,sBAAyChC,EAAA,CAC/D,MAAAsF,GAAA,EAEFR,CACU,GAAM,SACG,QAGJ,oBAAA9E,CACRuF,CACL,EACG,EAEL5D,MACQqD,CACE,GAAAa,EAAA,UAAET,mBAAMpQ,EAAIA,gBAAE8Q,EACpB,IAAMD,EAAUA,EAChB,GAAMR,IAAqB,QAC3B,MAAaU,EAAA/F,EAA0BsC,EAAA,OAEjCvL,GADEA,IAAc,QAAAgP,CAAA,EAChBhP,EAAsB,WAClBiP,WAKJX,CACK,YACLQ,OAAe,CACjB,oBAAA7F,CACF,CACF,CACIqF,GACFY,MAAKvN,CACH,OAAAwN,EAAAC,EAAA,IAAAH,IAAA,MAAAA,EAAA,OAAwBvN,KAAM2N,OACE,KAAOC,wBAEnChB,GACD,QACF,gBACH,IACFlE,GAAA,IAAAmB,EAAA,GAAA4D,CAAA,EACA,CACED,EAAKvN,mCACH,MAAA4N,EAAAtR,GAAA,CAAAA,EAAAqJ,aAAA,iBAAArJ,EAAA,iBAAAgL,oBAA0B,EAGzB,cACH,4BAAAsG,CAAA,EACA,+BAAAtB,CAAA,EACF,KACA3F,2BAAY,QAAA2F,CAAA,EAAEa,yCAAM,OAAC,2BAAAb,CAAA,CACjBa,CACF7Q,IAAiB,GACjBA,SAAkBuR,EAAA,EAAA7G,EAAA,IAElB,CAAA8G,GAAmBX,UACnB,CAAAY,KAAuC,EAAA/G,EAAA,IAC/BqG,MAA6CtN,UACpC0N,MAAyB,EAAAO,GAAA,KACpCP,WACFF,EAAKvN,IACH,gCAAAiO,EAAA,IAAAxQ,GAAA,gBAAA+C,GAAA,QAAAG,GAAA,CAAA2G,WAA0B1G,IAAA2H,GAAA3H,IAAA0H,EAAA,SAAA1H,IAAAmC,IAAAkL,EAAA,SAAArN,CAAA,GAAAsN,IAAA,MAAAA,GAAA,QAAAA,GAAA,SAAAtN,CAAA,EAGzBuN,EAAA,KAAAxN,CAAA,EAEHyN,EAAA,KAAAzN,CAAA,CACF,CACF,EACM6M,EAAaC,YAAkBH,GAAUe,CAAA,IAC7Cf,SACAgB,IAAWA,MACAC,gBACXC,EAA6BJ,EACzB,OAAAK,EAAAC,CAAA,GAAAC,EAAAN,CAAA,IAAAK,EAAA,cAAAL,CAAA,GACS,CAAAF,EAAAC,CAAA,IAAA7F,EACb2F,EAAA,GACFzF,GAA0CuF,GAAA,OAAA/H,GAAA,MAAAA,EAAc,4CAAAA,EAAA,gCAAAA,CAAA,GAC1D2I,GAAA,KACFC,KACOtD,2BAA0Be,EACjC,EAEEwC,GAAyB/O,IAAS,WAAGuH,IAAA,QAAAsC,EAAA,QAAAtC,GAAA,EAAAxB,EACnCxJ,GAAiByL,GAAA,MAAAA,EAAA,EACjBzL,GAAkBwK,IAAA,aAAAhB,GAAA,EAAA8D,EAAA,OACpBmF,GAAA,KACFC,GAAA,CACOzD,gBACAA,mBAEE0D,WACAA,EACAA,EACTC,GAAA/G,IACEyB,IAAiBuF,EAAA,EAAAnI,EAAA,IAErB,OAAAoI,GAAOC,CACP,IAAOvB,GACP,IAAOC,aAEP,SAAOG,EACP,MAAA3L,CACE,IAAM4L,CACN,MACM,YAAAmB,CAAA,aAAkDC,MACrCpN,IAAe,GAC1BgN,GAASxO,MACfuO,GAEEtO,eAAS0H,CAKT6F,CAAmB,GAEnBC,QAAcoB,CAChB,6BACF,SAAC,CAAAC,EAAA,OACYC,uBACPjB,qBAA2B,GAC3BE,kBAA2B,CACxBD,oBACR,WAAArH,GAAA,YAAAA,EAAA,eAkBgBsI,EAAAC,GAAA,CACjBnS,UACF,gBAAA2J,EAAA,YAEM0H,mBAOAe,gBAA+B,EAC/BC,KAoFUzJ,GAAAsJ,EAAA,UAEQ,cACV,yBAAEI,aAEG,kBAAM,cAAYvF,wBAAE,CAAS,WAAC,EAAG,EAExCmF,MACErB,CACA0B,GAAM,sCACGpB,mEAAWmB,MAEpBJ,EAAyBnF,YAAE,IAAU,MAAC,CAAG,IAAAyF,EAAAzF,EAGpC,CACC,YACgB,EAGV,YADUyF,CAAA,EACV,MACV,CACFjK,EAAA,CAAE+J,QAES,MAAAG,EAAA,CAAO1F,6BAAE,iBAAAvD,EAAA,QAAO,OAAAmB,EAAA,cAAC,YAAAF,EAAA,cAAG,WAAAmB,EACxB,SAAAd,EAIToH,YACO,KAAA7J,EACC,iBAAA8D,EACgB,EAehB,cAAgB,YAAAsG,EACb1F,8EAAC,uDAA0C,OAChD,wCAGE9H,OAAcyN,kBAAwB,0BACpCzN,OAAO0N,OAAOD,WAAWE,wBAA2B,GACjD7F,EACH,GAAoJ,SAAAmF,EAAAW,EAAA,MACtJ,QACA,IAAA9F,EAGF,CAAeA,WAAG,GAAiK,EAAC,EAhJhMsF,mCAGI,UAAAH,EAAA,UACN9F,KAAU,SACVC,0BAAqB,SAAAhD,IAAA,UACX,aACXyJ,GAAA,CACH,WAAArK,kBAGOsK,YAA+B,CACpB,IAAAvJ,EAAA,QACXiI,uBACA,YAAAhH,EAAA,cACM,WAAAmB,EAAE9G,WAAY,UAAAiG,EAEjB,KAAA1C,EAAEwJ,kBAAiChG,CACzC,IAIFtD,GACD,WAGC2J,EAAAW,EAAA,CAAQ,kBACNb,GACEA,WAAW,CAAaM,CACDU,6EAONd,EAAAW,EAAA,CACFjJ,sBAGM,CAGjBjB,WACY,CAAkB2J,CAC5B,CACO,IACC,IAAAJ,EAAA,UACNe,cACAC,2BAkBE,aAA2B,UACzBzK,aACAD,MACAE,GAEEiE,EACApB,cACAK,SACAd,MAEAzC,CACA8D,WACF,CACF,CAEA,EACE,IACF,CA4DsL,CAC9K0B,UAAyB,OAC/B,uBACF,UAAAqE,EAAAiB,GAAA,CAMQ,OAAA3K,EAAA,SAEJ,YAAiB,GACfC,WACAD,gDACa4K,GAAA,EAAAlB,EAAAmB,EAAA,aAEX1G,QACApB,oBAAoCtK,iBACpC2K,uBACAd,EACAC,YACA1C,gBACA8D,EACF,EAAA+F,EAAAmB,EAAA,CACF,YACApO,QACIA,IAAcyN,cAAwBlK,EAAA,gBACjCmK,CACPrH,EACSqH,GAAgC,KAAAlK,GACpCuJ,EAAA,8BAEEW,eAAOD,CAChB,OAAAjK,EACA,SAESkK,cAA4C,CACrD,EAAAT,EAAA,OACF,uCACDA,EAAAmB,EAAA,CACH,YAAEf,CAEG,GAAM,GAAAN,EAAWjF,eAAE,yBAAAnB,CAAA,UAAQ,cAAAvC,IAAA,wBAAC,QAAAA,IAAA,gBAAI,UAG1CxK,GAAA,CAEA2J,kBACD3J,EAAA,SAAAA,EAAA,UAAWgO,GAAA,0CAAgByF,WAClB,EAAS9J,GAAoB,EAAe,SACnD3J,GAAA,CAAK0T,EAAM,iBAAgCD,MACxCc,uBACClB,EAAAzN,EAAA,mBAAA6O,EAAA,sBAAA3G,EAEuDmC,WAGvCrD,EAAiC,UAAAE,EAAA4H,aAAA,EAAAC,EACtC,GAAA7H,MAAA,KAIXuG,EAAAmB,CAAAnL,GAAAG,EAAA,wBAAA0E,EAE+D,CAExD,WAEL,EAGPtE,EACU,MAAgB6J,CACT7J,8BAAiB,MAAAsE,EACjCmF,CAAW,WAAuBI,CAChC,GAAiC,MAC7B,CAGVN,CACOnF,YAC+BV,EAAA,KAAAlE,GAAA,mBAAA5H,IAAAvF,EAAAmN,EAAA,0BAAAnN,EAAA,aAAAuF,GAAA,KAAAvF,IAAA,GAQI,CANX,QAAAiS,EAE7B,CACA0G,GAAkB,QACVnX,CACJuQ,KAIJtB,EAAAI,GAAAJ,GAAA,OACAmI,EAAiB/G,IAAA,UAAAA,EACf9N,GAAiB,4BAEjByK,EAAiB,YACjB,SAAgB7F,CACRiG,IACJ,GAAAyC,EAAA,UAAEQ,mBAAQf,MAAYb,QAAWQ,eAAgB9G,KAGrDsG,KAkBU,GAAA7C,GACJG,OAAa/F,GACVyK,cAAC,KAAA8C,GAAA,YAAA8D,EAAA,CAAmC,EAAE,OAAAxK,EAAA,gBAAAyK,EAAA,OAAAC,KAC3CA,GAAA,KACFC,GAAA,GAAAD,GAAA,IAEO9G,IAAC,IAA6BgH,GAAA,yBAAAC,CAAA,EAAE,GAAAD,GAAA,KAAA1S,IAAA,QACrC,OAAAA,GAAA,wBAAAvG,GAAAuG,GAAA,cAAAvG,GAAA,IACF,GACFkF,GAAA,4BAGImM,iCAA6B,GAEzB8H,WAGiBF,GAAA,QAAA1S,IAAA,IACF0L,wCACjB,CAA4C,YAC9C,QACU,CACZ,CACF,CAGAxB,EAIAvL,GACAsJ,MACa,CACP,CACMI,OACJyC,SAGM,aAAAZ,EAAEsE,WAAM8D,YAAazL,OACnBwB,YAA2B,IAAAoK,KAAA,GACnC,EAESA,2CACF,iBAAA3H,EAAA,IAAA2H,IACL,CACEjE,QACA8D,yBAGA,EACEG,EACFrL,IACOoL,iBACR,gBAAArL,GAAA,YAAAA,EAAA,aACH0L,EACDC,GAAAD,CAAA,EACD,IAAAE,EAIEL,KACEK,EAAczH,WAAW,SAAc,UAAezE,cACxDmM,GACAD,EAAAhL,EAAA,CACApJ,gBACAA,OAGQ0E,KACFrD,UAAkB,GAAY,gBAAA6S,EAAA,CAChChL,aACA4G,SAAmB/C,2BAAI,IAAAuH,OAAiBF,EAAA,MAAAjL,EAAA,mBAAA+K,CAAA,CAAQ,CAClDlU,GAAA,2BAAAA,GACD,4BACDsJ,EAAA,WACFf,EAAA,CAEcwL,+BAAS5H,YAAiB,SAAA/C,CAAC,CAC3C,CAQA,OAAamL,EAAA,CACX5H,0EAEcpB,6BACdT,WACAC,KACA1C,oBAE4BvC,CAG9B,wBACI2C,oBAAuB,CAClB+L,MAEI,+BACUtM,cACSyL,CAG1B,YAGN,EACEO,aAAoBtI,UAEb6I,2BACT,KAAA3J,EACAoJ,kBACQxK,WAEJ0K,OACJ,QAAgBrJ,EAAA,IACF,cAAAA,EAAe2J,aAG3BL,EAAgC,QACf,KAAA3G,IAChB,CAEG,GAAAsE,EAAA,SACFoC,wBAAkBjL,EAASuL,YAAwB,WAAA3H,EAEtC,CAET,WACF,GACD,YACS,SAEVqH,iBACF,gBACF,QAAArJ,EACA/K,aAAiC,UACjCA,qBACAsJ,QAAoBzK,EAAA,eAGZoN,GAAAN,CAAA,EAAAA,GAEAlD,sBAAsBD,SAE5BY,8BAGFpJ,KAAO4S,GACP5S,cAAuC,gBACvCkJ,GACMrK,iBAAaA,CACnByK,wBAAkBsC,IAAA,WAAAb,EAAA,mBAAAa,IAAA,0BACpB,MAAAA,EACC,UAAAsG,EAAAW,EAAA,CACL,KAAA8B,GAAA/I,CAAA,EAAE0G,IAEFN,CAAA,CAAW,EAAAA,EAAA,UAAiBM,kBAEnB7H,QACA,SAAA5L,GAAA,CACA4N,GAAA5N,EAAA,aACMkO,8BAAE,qBAAAmF,EAAA,UAAiB,eAAC,SAAAA,EAAAmB,EAAA,IACrBhK,QAAY,CAChB,EACAyB,2FACK,cACP,SAAAoH,EAAAmB,EAAA,CACG,YACLuB,CAAyB,CACzBC,cACF,0BACe3C,EAAAmB,EAAA,CACG,YAClB,EAEFrB,IAAA,UACS,gBACFjF,0BAAE,IAAAmF,EAAA,UAAoC,eAAC,SAAAA,EAAAmB,EAAA,CAACf,WAE7C,CACO,EACA,IACLwC,CAAS/J,GACTkI,IAAsB,CACtB8B,OAAiB,CACThK,MACNkB,YAAsBc,EAAtBd,EAEExB,CAA8B,GACzB,QACLE,EACFlC,EACA,CAEEuM,GAAM,QAAsC,EAMlDC,CAAkB3C,WAEZ0C,CAXF,EAWwD,UAC5DhD,iBAAA,qBACO3I,IAAA,eACEuC,EACPmJ,YAAiB,CACDlW,IAChB,gBAAAoI,EACqCwB,cACjCyL,GAAA,CAAM5B,MAEV,KAAAzB,EAAsByB,IACpB,MAAA4C,CAAA,EAAAhB,EAAqB,WAEZ,WAEK/K,EAAA,yBAAOmJ,IACnB,MAAA4C,EAAA,QAAmB,GACb,EAEc5C,YACtB,MAAA4B,CAAA,aAAsBiB,GAAA,EAExBjD,iBAAA,wBAAAkD,GAAc,CAAS9C,mBACrB6C,GAAA,YAAAA,EAAA,4BAA4BA,GAAA,YAAAA,EAAA,kBAAC/E,GAE/B,CAAQnP,mBAAMkU,GAAA,YAAAA,EAAA,yBAAQ7C,GACpB6C,GAAA,YAAAA,EAAA,iCAAAA,GAAA,MAAAA,EAAA,YAAAE,GAA6BF,EAAA,UACtB,CACF,qBACC,WAAAnD,EAAA,OAEdE,MAACoD,oBACCC,SAAK5K,qBAEUoC,KACT,KAAA8C,CAAA,EAAAiE,EAAiB0B,GAAA3F,GAAA,YAAAA,EAAA,OAAAA,GAAA,YAAAA,EAAA,OAAAA,GAAA,YAAAA,EAAA,aACP9C,mBACR,SAAA1D,IAAA,UAAAnB,KAAA4C,EAAgB,oBAAA7J,GAAA,CAAC8L,sBACjB,OAAA0I,EAAAzG,CAAA,MAAAyG,EAAAzG,CAAA,EAAqB,YAAA/N,CAAA,GAEU,EAEjC6J,WACS,KACGE,GAAA0K,GAClBA,EAAA,QAAAC,EAAAC,QAAA5G,CAAA,CACA/H,CACA4O,CACQ,EAAA3N,GAAAsN,GAAAxG,CAAA,EAAE6B,aAAMiF,wBAAGZ,qBAAUhB,iBAC3B,gBACE,QAAa6B,EACXD,uBACAZ,aACAc,MAASrK,EAAA9M,EAAA,eACVoN,GAAAN,CAAA,CACH,CACA,OAAasK,SAAUC,CACzB,SAAAhE,EAAAmB,EAAA,CACA8C,WACMhB,EACkB,OAAAjD,EAAAW,EAAA,CAClBuD,sBAAgD,UAClD,CAAC,CACH,EACuB,KAAA/N,GAAA6J,EAAAmE,GAAA,CACnBD,OAAgD,WAAA9L,EACjD,cAAAD,GAKDgL,iBACF,uBAAA9K,EACF,KAAAlC,EAED8D,aAA2B,UACrBoG,QAAMrG,GAAA,MACRC,CACO,MAAAmK,EAAA,CAAEpO,MAAa4L,KACrB,MACAvC,OACkB,CAEduC,CACsB,GAAA9B,EAChBlH,OACNyL,+BACEvL,oBACQyK,wCACNA,cAAoBzD,EAAAwE,GAAA,CAClB,QAAmB,OACNvV,aACf,EACOwU,gBACT,MAAC,CACH,YAEEzK,EACE,aACF,KAAAyL,CAAC,IACHvE,EAAA,UAlBWsD,cAsBjBxD,MAAA,6BAAAyE,EAAA,cAAa,SAAAvE,EAAAW,EAAA,CAAiBP,KAC5BJ,OACO,MAAAnF,EAEIhC,IACa,QACtBgK,CACQhK,CACNkB,EAAsB,CACxB,EACD,SACDiG,GAAAwE,GAAA,CAAApE,mCACEpK,SAAA,CAAAgK,EAAA,SAAqC,qCAEvCA,SAAKA,EAAAyE,GAAA,CAAO,OAAmB,GAAsB,mBAAA3M,EAC/C,oBAAAH,EAGTxB,mBAEOyC,yCACNR,uBACAD,EACAG,OACAD,aACAlC,yBACsB9F,EAAAyF,GAAA,OACtB4O,EACE,GAAU5E,EAAA0E,GAAA,CACR,QAAgB,KAAKrO,MAAK,EAC1BkJ,SAAe,CAAAW,EAAAW,EAAA,CACV,aACLtB,OAAYW,EAAA,QACd,SAAA3P,EAAAyF,GAAA,aACF,GAGJgK,EAAA,EAAAhS,GAAA,4BAAAgS,EAAA0E,GAAA,CAAW,SAAArF,GAAwBiB,QACjCN,IAAA,CAAY6E,GAAA,GACT9D,EAEW,UAAAb,EAAA,cACW4E,gBACnB,WACgB,EAAA5E,EAAA,QACP,SAAA3P,EAAAyF,GAAA,MACL+O,CAAQ,CACV,EAAA/E,EAAA0E,GAAA,CACF,SAAArE,cACeoE,eAAK,WAClB,CACO,MAAAvE,EAAA,QACE,SAAA3P,EAAAyF,GAAA,KACe,CACnBsK,EAEE,GAAM,GAAAN,EAAYjF,6CAAE,IAAA0E,GAAA,UAAAO,EAAA,SAAK,uBAAC,UAAAE,EAAAyE,GAAA,CAAG,mBAAA3M,EAC5B,oBAAAH,EACRyI,mBAEkB,SAAAjJ,IAAA,WAAA8C,EAAA,QAAAtC,GAAA,EAAAxB,EAAwBiK,sBAC1C,GAAaJ,EAAAW,EAAA,CAA8BP,aACzB,IACR/P,EAAAyF,GAAA,OACNgC,GACAH,cACAsC,qCAMAnB,+BACD,KAEHkH,GAAK,KAAa,SAAIA,EAAAW,EAAA,CAAAP,cAAkC,IAAA/P,EAAAyF,GAAA,aAE1DgK,CAAS,QACQ,4BAAAE,EAAA,UACbkD,cACF,yCAAE9C,SAAAjB,GAEG,QAAM,KAAUwF,GACrB,GAAAvE,EAAgC,SAAQJ,EAAA,QAEzC,sBAEab,wBAERwF,OAAqB3E,EAAA8E,GAAA,CACvB,SAAA9E,EAAA,UAAEI,cAEIC,MAAM,iBAAgBnO,SAAKiO,GACjCH,QAAAZ,GAAAgB,SAAO/P,EAAEyF,GAAuB,YAGpCgK,IAASzP,EAAAyF,GAAA,MACGqK,EACDf,EAAkBgB,EAEtB,GAAM,GAAAjJ,IAAU6I,YAAA+E,GAAA,CAAA3E,SAAwB,GAAAJ,EAASgF,GAAA,eAAAjQ,EAC7C,OAGf+K,IAAA,YAAMO,EAAM,eAAoCd,uFAAiBa,YAC/DN,OAAA,OAAa,YAAgBM,gBACXxH,CAAA,IADWwH,eACX,OACdtI,cACAH,gBACAsC,oBAEc,CAIdnB,MAEFkH,OAAK,EAAMrT,EAAA,OAAQsY,EAAOnP,GAAgB1C,EAAA,EAAEsF,GAAG,8BAAA3J,GAAAqE,EAAA,CAC1C,EAWP,SACO+D,IAAA,cACC,oBACgB,MAAAlG,EAAAC,EAAAC,CAAA,KACtB6P,QAAekE,GAAA,CACbhC,OACF,SAAAhS,CAAA,CAAEkP,EAEkB6E,OAAK5U,EAAEyF,SAAsB,CAAI,MAAA7E,EAEtD,SAFYkU,IAAAhU,EAEMiU,WACjB,GAAAD,CACO,EAAAlU,CAAA,IACC+O,EAAA,SAAAqF,GAAA,MAAApU,EAAAC,EAAAC,CAAA,KACN4P,MAAU5B,aAERwF,UAAqB,CACvB,EAEA,OACQ3E,EAAA,UACN,MAAA/O,EACD,SAHDkU,IAAAhU,EAGC,GAAAA,CAAA,MAAAgU,CAAA,GAAAA,CACK,EAIRnF,EAAA,CAAAI,EACE,GACO,OACCJ,EAAA,eACNe,SAAUZ,SACDf,cAAkBgB,SAEtBvF,EAFsBuF,EAET6E,CAAsB,GAAI,UAGjD1O,EAIJY,CACe,WAEd6I,EAKFF,CACS,WAMJM,CArBW,CAuBF,CAAWA,EACajP,CAAM,EAE1C,GACO,GAAAuO,IACE9G,MACPiK,YACQlW,EAAA,SAAAA,EAAA,eAAEoC,MACRgK,EACAL,cAAqC3J,CACvC,MAAAkI,EAAA,SAAAC,EACsB,QAClB,KAAMkJ,GAEaxM,GACrB,EACE3C,gEACUC,UACZoU,EAAC7M,EAAA,QACD,IAAA6M,SACA,MACE,eAAAnY,EAAe8D,cAC+BkU,IAGjDhb,IACI,MAEHob,EAAmCpb,EAAA,QAAAgD,CAAA,EACjC8D,sCACUC,WACZsU,EAAC,mBAAAC,CAAA,SACDC,IAAkCvU,YAClCmU,EAAA,QACEA,EAAerU,8DAC+BkU,EADpBlU,cAElB,oBAEV,EACK,GAAAkN,IAEX6B,EAAA2F,GAAA,SAAahZ,GAAA,CAASoU,WAAsBpU,EAAA,eAAAuW,GAC5BrI,GACV,WAAA7E,EAAA4P,GAAA,CAAO,MAAA3O,EAAA,SAAAC,EACG2D,aACRqI,GAAA,KAAQ,kBAAA/E,IAAA,YAAAA,GAAA,2BAACtD,sBACP,IAAAyK,EAAA,YAAAtP,CAGF,eAAA7I,EAAC,aAAAC,CACD,EAACkY,EACLnb,EAAAmb,EAAA,MACDO,EAAA1b,EAAA,QAAAgD,CAAA,EAGP6S,EAAM6F,EAAA,mBAAAA,CAAA,YACYC,EAAA3b,EAAA,MAAAiD,CAAA,EACGT,EAAiB,mBAAAmZ,CAAA,SAChC5H,IAA0B6H,EAAAC,EAAAC,EAAAH,EAC5BR,EAAA,MAAAI,EACFJ,EAAA,eAAAA,EAAA,aAAAlY,EAAA4Y,EAAA,OAAAC,EAAA,OAAE7F,QAEW,EACXnJ,mCACAC,GAEEgH,YAA0B,CAC5B,QAAAvR,GAAA,cACmB+S,eACnBwG,GAA6B,GAE3B,EACM,SAAAlG,EAAAmG,GAAA,CAAEhZ,mBAAgBC,WAAa,IAAAyR,EACrC,KAAAF,EACA,SAAAyH,CACA,KAKMX,aAAwBY,EAAkB,CAChD,MAA0BpJ,GAAA,EAU1BqI,CACAA,YAKAA,OAAe,CACfA,qBACF,CACD,EAIHtF,EACEgB,MACMrU,EACFuW,kBACF,IAAAoD,EACF,IAAElG,EAEgBmG,GAAA,CAChBtP,OAEe,CACbiM,WACF,GAEAgD,SAA8B,EAC5B,GACI,MAAWM,EAAA,YAAA3H,EAAA,CACT,6BAAE1R,oBAAgBC,wDAAiBkY,MACzC,GACwBnb,EAAW,IAAA8P,EAAiB,CAC9C8L,OAKAD,OACAG,KAAkBtI,EAAA,KAGlB+H,GACJG,KAKFP,YAAiBI,KACjBJ,GAEAA,GAAemB,CAAA,GACfnB,mBAAuB,YAAvBA,eACF,QACDnX,EAAAmY,GAAA,YAAAA,EAAA,kBAAAnY,EAAA,KAAAmY,GAIHtG,KAEqBrT,CACfgY,WACF,EACF,CAAEvE,CAEa,IAEb8F,CAAW,CAAErH,EAAKF,GAAMyH,EACd5O,aACJyC,SACF2D,qBAAKvN,sBACH,iBAAA4J,EAAA,SAAA8G,EAAA,uBAAAjI,CAAA,EAAAnB,CAA0B,OAAAqI,EAAA,SAGzB,mBAAA0G,EAEH,OAAA5O,GAAA,YAAAA,EAAA,UACF,SAAAH,IAAA,QAAAA,EAAAsC,GAAA,EAEA,SAAA8G,EACMuF,aACA,MAAA9I,EAAA7Q,EAAA,aACF2Z,aAAqB,MAAAzI,EACfhD,8BAAE,KAAA8C,EAAA,UAAAA,EAAA,KAAkB,wBAAAA,CAAA,EAAC,QACf,YACX,IACK6I,IAAwBvM,EACZ,OAAA4D,EAAA,OAAAlG,EAAA,MAClBsF,GAAG0J,EAKChI,IAEJ,SACM8H,QAGF9I,qBACAgB,EACWC,GAEc9F,EAC1B0K,GAEH1K,SAAuC+E,CAAA,CACvCyI,EAEAtP,iBACAsP,CACSzL,YAAC+L,GAAAtB,EAAA,KAAAA,EAAA,OAAwB,YAAAvW,EACpC,aAAA8X,EAAA,aAAAC,EAEJ,aAAAC,CAAA,EAAEzB,EACH,GAEJuB,EAAA,oBACE,MAAAxZ,EAAAwZ,EAAAE,EAETC,EAAAjY,EAAA+X,EAAAzZ,EAAA,UAEAiY,EAAyB,aAAA0B,CACvBN,EACA5O,eACAH,QAEAoJ,MAAWkG,GADXhN,gCACW,OAAAtN,KAAA,iBACXmM,YACC,mBACD,eACE,KAEE4N,YACoC,MAElC/O,SACAA,CAIM6F,cAAiBA,4BACvB,OAAI,GAAQ,MAEwC,CAClDG,KACWgB,eACXC,CACAC,WAA6B,QACzBqI,GAAA,iHAAAC,EAAAC,EAAAjd,CAAA,SAAAgd,GAAA,MAAAA,EACS,OACbA,EAAA,eAAAE,KAAA,MAIF,IACEzJ,EAAKvN,oBACH,QAAAiX,CAAA,EAAAzQ,GAAA,EAAAc,CAA0B,MAAAV,EAGzB,SAAAC,CAAA,EAAAqQ,GACH,EACK,CAAApd,EAAAqd,CAAA,EAAAnQ,IAAAzO,EAAAya,EAAA,sBAAAza,EAAA,YACLkQ,CACS0K,gBAA6B,cAAAG,EACrC,KACH,EAEAhX,YAAiB,KACnB,EACD,GAAA8a,EAEL,EAAAC,EAEAC,MACErO,GAAe,KACTsO,GAAA1Q,EAAAD,CAAA,OAAA4Q,GAAA,CAAE9Y,aAAO8X,WAAcC,eAAcC,MAAa,MAAIzB,MACxDuB,EAAmCrO,EAAA,IAGrCsP,EAA8Bf,MAC9BzN,GAAevK,KACfuW,MAAwB0B,QAC1B,OAAAe,EAAA,UACFC,EAAArb,GAAA,QAEesb,MACE,IAAA7d,aAET8d,MAAmC,EACrBvb,EAAA,OAEnB,GADiBwb,EAAA,QAAAC,EACjBA,IAAA,IACOnB,WAAuB,SACjC,UACMW,IAAyC,cAGhCS,KACL,MAAUxG,IAAAjZ,GAAA+e,EAAA,sBAAA/e,GAAA,OAAAwf,EAAA,QACpB,GAEME,SACEzG,GAAA,UAAEuF,UAAoB,CACtBD,MACa,UAAAoB,EAEVpB,MACT,EAAAqB,EACOC,GAAA;AAAA,gDACTC,GAAAH,CAAA;AAAA,4BAE4BG,GAAgB7J,EAAA;AAAA,kBACpC6J,GAAAH,CAAA;AAAA,oBAAE3R,CAAiB,EACnB6R,GAAA,8CAAAL,CAAA,KAAAd,EAASpQ,CAAiB,YAE1B,SACJnC,0BACsB,SAAC,QAAA8M,GAAA,kBACL3T,EAAC,IAChBuZ,MACDC,CAKEC,SACNrO,IAAgB,WACdsO,cAEU,EAAAxd,CAACue,EACPhB,OAAsBO,aAEVvE,EAAA,CACZ3M,OACD,EAAAoR,EACA,OAEL,GACMD,KAAsB3P,GAAS,CAC/BsP,SAAiC,QACvB,eAMe/Y,EAAA4P,CAAA,GAAA5P,EAC3BiZ,OAAsB,GAEdnG,EAAA,QAAA1S,GAAA,QAAE/E,MAAK8E,QAAS/E,eAAW0E,cACjCsZ,kBAGEjZ,UAEa,QAAA0Z,CAEb,EAAAzZ,EACA0Z,GAAAC,GAAAC,EAAAJ,EAAA,EACF,GAAA9L,MAEiB;AAAA,oDAKsBmM,GAAanM,CAAA;AAAA;AAAA,oCAEjD6L,GAAA5H,CAAA;AAAA;AAAA;AAAA,6BAEwB0H;AAAAA,0DAAYE,GAAA7L,CAAA;AAAA;AAAA;AAAA,wBACR2L,CACnB,MAAAS,IAAArgB,GAAAggB,GAAA,YAAAA,EAAA,qBAAAhgB,GAAA,KAAAggB,EAAA,CAAA7X,GAAAmY,KAAAnY,IAAA,CAAAmY,GAAA,QAC4BR;AAAAA,oDAG/BA,GAAAS,EAAA;AAAA,+CACsBT,GAAAS,EAAA;AAAA,wBAAAF,GAAA,uBAAAG,GAAAH,EAAA;AAAA;AAAA,mBAG6B3B,EAAK,EAAA3I,IAAA,aAAO8J,IAAA,8CAAAL,CAAA,KAAAd,EAErDmB,CAEfY,WACEC,CACUpb,UAGdA,GAAA,UAAAua,GACF3E,GAAA,CAEMnF,QAAOkD,EAAA,SACN,SAAA3T,EAAA,CACA,EACF,CAEH,GACE,EACEyQ,uDACGxU,SACI,CACT,IAAAC,EACcuc,OACRxc,WACF,CACF,MAAA4E,EACAiI,MAAY,EAAEjI,WAAO4P,SAAM4K,eAAaxa,EAAA,IAAAA,CAAA,QAAGya,IACrC3H,kBAAgBlD,GACdnH,eAAezI,CACvBkV,GAAA,MAAAA,EAAW,CACHzR,qBACA,kBAAAgX,CAAA,EAEJ1I,SAEAlE,SACAC,8BACA8L,IACAC,gCACEzZ,KACE0Z,YAEN,KAAU,UACA,kBAAAW,CAAA,EAC0C,SAI3C7c,EAAA,gBAAAvC,CAAA,GAAA2E,CAAA,EAGoC,EAGpCgZ,EAAA,+CAAA0B,CAAA,EAAAC,EAAA/c,GAAA,aAAAvE,CAKD6gB,WAK4BP,GAD1BlB,EAAApf,EAAA,OAC0BsgB,WACLA,4BAAgB,UAIjC,GAAArF,EAAA,sBAAA7a,EAAA,CAId,GAEFuf,UAAyB,2CAAA2B,CAAA,EACfC,EAAA,KAAkDrC,cAAKS,EAAA,kDAAA4B,CAAA,EAAOC,EAAA,KAAA9B,EAAQ,YAEhF5Z,EAAiBua,wDAET,KACNa,YAA0BvB,EAChB7Z,wDACX,kDAAAub,CAAA,EAAA1B,EACF,sDAAA2B,CAAA,EACH3B,EACF,qDAAA4B,CAAA,EACF5B,EAAA,uDAAA6B,CAAA,EAOAH,CACQ,MAAErf,QAAKsE,qBAAK,GAAMG,OAClB,wBAAEE,cAAOya,cACf,EAAIpf,EAAa,wBACfuC,EAASoC,QAAgB,aAAeiY,EAAA,IACxC,CAEEra,GAEAyM,QAAiBkM,CAAA,CACH,YAAAuE,EACJrR,EAAA,GAAAsR,EACaN,MACpBO,GAAA3B,GAAA,WAAA0B,EACG,eACR,GAAAD,EAAA,WACFC,UAAwB,aACtBnd,EAASoC,QAAgB,MACzBnG,EAAAohB,GAAA,YAAAA,EAAU,SAAV,MAAAphB,EAAA,KAAAohB,GACErd,MACAyM,CACc,IAAA6Q,EAAAC,EACJL,EACaL,6BACpB,kBAAA1U,GAAAsT,EAAA,eAAArT,CAEL;AAAA,EACF8U,EAAO,aAAAK,EAAA,YACLvd,GAASoC,KAAW3E,EAAW,IACjCyf,EAAA,SAGclQ,OAKhB+P,GAAwBS,GAAA,aAChB,MAAAC,GAAAxhB,EAAAkhB,EAAA,sBAAAlhB,EAAA,cAAER,eAAM,iBAAMyG,oBACpB2Y,UAEA,GACQhf,uCAAY6hB,OAAejC,IAAW,SAAM,CAC9CzO,iBAA2ByO,CAAA,EACjCjB,GAAA,MAAAA,EAAA,SACFlD,GAAA,MAAAA,EAAA,CAEgBtK,4BAKhBgQ,WACE7B,GAGcnO,IAKhBiQ,OACE9B,yBAA6B,CAC/B,IAAAC,EAEgBpO,aAIlB,gCAEA,SAAa,CAAAqG,EAAA,YACX,sBACkBrG,2BAIAA,kBAIAA,iBAIAA,kBAIAA,WAIlB,SACF,aACG8N,GAELnO,MAEE,cACA,MAAenP,EACTmgB,cAEJ,MACQ,IAAAlgB,EAAE4c,QAAO,EAAI1B,EACH3L,EAAQzG,EAAwB,QAClD,GAAA9I,IAAA,WAAAuC,EAAA,SAAAA,EAAA,SAAA4d,GACD,IACDD,MACG,MAAAvb,EAEC8a,uBAE8C1f,WAAS,EACzB;AAAA,gBAC9B0f,OAEFC,kBAAwC,KAAAU,EAAA,GACxCV,QAAoBnQ,EAAU8Q,GAAAC,GAAAC,CAAA,EAAAH,GAAA,uCAC9BR,KAAgC,CAChCrd,EAAA,iBACF,MAAAie,CAAA,EAAAH,GAAA,iBACIR,mBACAC;AAAAA,EACJW,CAAsBlR,YACFA,eAClB7E,KAAoB3H,CAAA,EAClB4H,oBACG3L,EAAA,kBAAA0hB,GAAA,CACP,KAAsBnR,CACR,MAAkBmR,EAAA3d,EAAAqd,GAAA,OAAEP,sBAAOC,CAAiBD,MAAO7gB,EAAA,iCACpD8gB,CAEOvQ,MACpB,EAIIoR,YAGEX,EAAMN,QAA6BkB,YAAc,UAGvDZ,EACEa,QAAYte,GAAA,OACb,MACKxC,QACDA,EAAMwC,EACEyb,EAAAhf,EAAA,4BACL+d,GAAcmB,EACpB1B,GAAmBxd,CAAA,GACLR,EAAA8e,EAAA,gBAAA9e,EAAA,KAAA8e,EAAA/a,GAAAqd,EACJ5B,CAAA,EAAA2C,IACK5D,EAEf,OACC,aACE,YAIEY,EACA,SAAApb,GAAA,CACC,GAAAmd,EAAA,SAAyB1J,KAE/BJ,CACQ,UAAAnW,CAAA,EACS8C,EAAA,OACFmd,EAAA,kBAAAjgB,CACD,CACZqhB,CAAW,GACPlL,EAAA,OACJmL,IAAKrB,EACLsB,MAAK,oBAAI,cACL3D,OACJpE,IACK,GACElZ,SACPoX,GAAkB,CAEV,cAAAxM,EAAA,IAAE3K,UAAKhB,CACb,MAAAiiB,EADwB1e,8BAExB2e,EAAYvW,EAA0BpI,EAChC,OAAA+Z,EACI1G,EAAA,QAAEjR,qBAAO5B,YAETqd,UACN,qBAEM,SAAAc,CAAA,IAAAvW,CAAuByV,GAEnB,OAEN,eAAca,EAAAtW,EAAA,GACZpI,EACA,UAAAqT,EAAA,QAAa,CACb,SAAAsL,iBAA2BA,GAAoB,WAAAA,GAAA,kBAC/C,MAAAD,EAA2B,IAAAtW,CACpBwW,aACDT,gBACCU,UAA0B,GAG3BV,EACCS,CAAoC,SAC7CE,GAAAC,EAAAC,EAAA/Y,EAAAoU,EAAA,CACAJ,oBAAyB8E,CAAA,EACzBtiB,OAAqB,MAAAwJ,EAAAgZ,CAAU,EACjCC,EAAA,WAAA7E,EAAA4E,CAAA,EACF,gBAAAE,EAGA9U,WAAe,CACjB,CAEF,SAAA+U,IACsBpS,aACtB,SAAAoH,EACF,KAAAsG,EACA3C,sBAAgB,KACR,EAAEtb,iBAER,GACAoe,MACAZ,OACAc,GACAsC,OAC4B,CAAA7S,EAAAC,CAAA,EAAAC,EAAA,WAC9B2U,EAAAC,GAAA,mCACO,MAAAtN,GACE,GAAA3I,EACC,KAAA2H,CAEV,EAAAiE,EACAsK,KAAiB,IAAAvO,EAAA,oBAAAA,CAAA,EAAAiE,EAAA,KAAAjE,EAAAiE,EAAA,MACfuK,gBAAwBxS,MAChByS,EAAAD,EAAAE,GAAA,KAAExiB,kBAAgBT,CACxB0gB,iBACF,iBAAAjS,EACF,eAAAG,GAEFgI,mBACEqD,qBAAKyG,EACC,IACNsC,GAAY,GACZ,CAAAE,EAAAC,CAAA,EAAAlV,EAAA,IACW8U,EAElBxN,GAAA,qBAAA5G,GAAA4F,EAAA,KAAA5F,EAEuB,CAAkB,sBAAK2O,SAAU,UAAA/I,EAAA,KACjD6O,gBACAnB,CACN,EACY1M,GAAA,qBAAA3G,IAAA2F,EAAA,KAAA3F,IACS,sBAAqB,SAAE,UAAA2F,EAAA,KAC5C,eAAA3F,EACA,CACE,EAGS,KAfM,IAgBX,EACF,CAAAyU,EAAAC,CAAA,EAAArV,EAAA,IAAE+I,OAEFJ,CACEK,IACEiL,KAQKD,4BACP3N,EAAK3I,CAEPiL,KAAA,mBAAY,SAAWsL,oCAAiB,iBAAAzT,EACpC,MAAA4U,GAAA,YAAAA,EAAA,MAEV,OAAAA,GAAA,YAAAA,EAAA,MAEA,CAIE,EAEA,GAAAA,EAAkBE,EAAW3F,CAAsB,GAC5C,MAAA4F,EAAAC,CAAA,EAAAxV,EAAA,IAAEyU,QAAUD,SAAUe,GAAA,YAAAA,EAAA,QAAA3U,GAC/BsU,EAAA,CAEA,KAAyB,mBACvB3K,SACAb,oCACAsG,0CAC4B,MAAC,OAAAuF,GAAA,YAAAA,EAAA,OACZ,CAAC,CAEZ,GAAAA,EAAA3U,EAAAkU,CAAA,GAAExV,6BAAMC,qBAAiBkW,GAAA3C,GAAA9F,EAAA,KAC/B/K,GAAOnC,IAASC,CACV4U,GAAyDvK,EAAA,CACzD,GAAAA,GAAAqL,EAAA,GAAEnO,iBAAM3I,UAAI2H,QAASiE,MAC3B,OAAM/C,GAAMR,EACHV,UAGT3G,EAAY,gBAAE4K,iBAAY,QAGJuK,KAChB,aAAAY,CAAA,EACc,EAChBhV,KACAF,eACAG,wBACAC,mBACAC,oBACE,MAAC,iBACciJ,EAAC,CAEfmL,WACD,CAACH,CACL,KACkB,KAIT,MAAA1K,GACL9C,SAAMiD,EAAA,aAAA5B,EAAA,KACG,2BACSpB,CAChB7G,GACF,EAAAiI,EAAA,YACF,IAAAvH,EACF,MAAAgJ,IACkB,GAIT,KAAA4F,EAAA,YACC,CACN2F,MAASC,EAEPjV,CACF,WACF,CACF,EACO,MAAAiV,EAGWP,CACV,GAAM,QACQ,CAClBD,EACU,MAAAQ,EAED,YAEPpV,EACoBjF,GACZ6Z,EACV,2BACF,aAAC,KACH,iBACEA,WAAa5U,OAEjB,IAAoBgV,OACpBvT,SAAgByH,GAAA5J,IAAA,UACV,MAAkBA,IAAA,UAAmB,aACrCyV,iBACU,QAAAjgB,GAAA,CACVgS,KAAM,CACG,MAAA5P,CAAA,WAEPkJ,KACoBrF,EACCoU,CACvB,EACDkG,EAAA1U,EAAA,MACHc,GAAA,IACerB,cAEjB9J,GAAAvF,EAAAskB,EAAoBC,UAApB,YAAAvkB,EAAoBukB,YAApB,MAAAhf,EAAA,KAAAvF,EACA,EACMkkB,IAINxT,SAAgBd,EAAA,MACdsU,MACC,KAAcA,CAEjB,KAAOM,EACD3U,SACNa,IACMyT,UACAK,sBACFL,KAAQ3T,CACNX,aACI,eAAA4U,CACR,EAAAL,EACA,OAAaC,EAEb,CACEG,GAAU,SAERE,QAED,KAAStB,EACRlM,EAAW,EAAAyN,GAAAF,CAAA,CAAYjN,CACT,EACV,KAAsB,oBAExBJ,MAAUyB,eACPG,mBAA0BxB,SAAoB,OAAA4G,EAC7C,EAAAgG,EAGN,CACOvU,wBAEL4O,iBAEE,OAAA4F,EACOA,CAAE,YAAAjX,OAAA,CAAmB,EAAAW,EAAA,OAAA/D,EAAA,EAAC,EAAA+D,EAAA,OAAAqQ,EAAA,EACtBiG,6BAAE,GAAoB,KACtBA,wBAAE,UAAAO,GAAA,eAAAC,CAAmB,EAAAT,EAAC,OAAAC,EAGhB,CACF,YACD,QACD,EAAAM,GAAAC,EAAA,EACP,EAAAD,GAAAE,CAAA,CACJ1M,CACAV,CAA2C,CAG3CqE,CACQ,wBAAE3V,kBAAY3F,GACpB+jB,iBAAoBO,EAEtB,MAAA9a,GACS,OAAAoU,EAEb,EAAAgG,EAGEE,CACN5T,YACE,UAAAuS,EACEqB,KAA8BS,GAAAD,EAAA9a,GAAAoU,EAAA,EAChC,OAAAiG,EAGIW,CAEAC,YACE,QAAElP,eAAMqO,eAAYc,gBACd,GAAAnX,EAAA,OAAAkV,EAAA,CACa,CACf,EAAEkC,CAAWhW,IAAmBiV,sBACtCC,SAAO,CAAAjX,GAAA,UAE4B,GAAY,OAAA8J,EAAAgF,GAAA,CACjD,UAAAhF,EAAA,OACA,MAAyB,mBACjB,UAAAE,EAAA,aAAEyM,yBAAa5U,IAAkBjF,aAAOoU,KAAWgG,EACnD,SAAAgB,IAAA,QAAAhO,EAAA,OAAE8L,MAAUD,OAAcJ,WAMhCwB,mBAAO,aAAAgB,EAAA,cAAAC,CAAA,EAAAvhB,EAAA,OAAAqR,EAA0F4M,CAEhGuD,OAASvD,EAAasD,EAACE,MAAcxD,EAAgByD,OAASzD,CAE/D,CAAC,CAAI,EAAC,EAAAoD,IAAA,SAAAA,IAAA,OAAAhO,EAAA,SACR,IAAAnB,EAAA,qBACuB,GACf,SAAE2O,2BAAWxV,mBAAmBgV,qBACtCC,mBAAO,WAAAqB,EAAA,YAAAC,CAAA,EAAA5hB,EAAA,OAAA6hB,GAEPD,GAACE,EAAmBzW,CAAe,OAAAsW,EAAAC,EAAW,MAAAD,EAAC,OAAAC,CAAA,CACjD,CAEQ,IAAE3B,uBAAa3U,MAAkBrF,WAAOoU,UAAWgG,YACnD,oBAAElB,sBAAUD,cAAcJ,2BAMhCwB,qBAAO,SAAAjN,EAAAW,EAAA,CAAA3K,KAAA,IAAA0Y,IAAAzB,EAEN0B,CAAuBC,GAAchE,QAAgBiE,CAErD,EAAI,CAAC,KAAAvC,GAAAtM,EAAA,UACR,oBAC4B,cAE1BiN,wBAAOW,GAAA,SAAAA,GAAA,oBAAyDA,GAAA,QAAArH,GAAA,CAClE,KAAAsH,EAAAvB,CAAA,EACF,aACF,GAGElM,SACEN,EAAAa,EAAA,CAAW,aAAkBP,IAC3BJ,EAEW,IACM,QACb8O,CACF,EAECd,CACC,EACEe,CAAKlQ,GACD,CACJmQ,KAAehP,EAAA2F,GAAA,CACb,YAAoB,CACdmJ,EAAA,GAAEb,EAAcC,qBAAc,cACrB,oCACUA,eAChBD,eACCC,sBACT,KACHY,EAAA,GAEAd,EAEAe,SAAW/O,EAAAW,EAAA,CACA,SACN,IAAAsM,EAEG,CACRgC,WACE,CACM,EAAEX,EAAYC,uBAAkBnlB,QACtC,UACiB,MAAA6jB,EAEbra,CACQ2b,WACT,CACH,EACF,MAAAtB,EAGUpO,CAAa,WACvB,CAGNiB,EAAW,MAAAmN,EAEF,CACC,WACNlM,CACSmO,CAAS9O,IAEb,EAAM,GAAI6E,EAAGgI,sBAAE,UAAAjN,EAAA,6BAAQ,SAAAgO,IAAA,QAAAhO,EAAA,OAAC,IAAAnB,EAAG,OAEhC,EAACyN,IACD,SAAA0B,IAAA,OAAAhO,EAAA,SACO,IAAAnB,EACC,eACNkE,kBACe,QAAA/C,EAAA,SACb,MACE4N,WACF,OACAA,YACEzjB,mBAA2B,SACjB,CAAAmjB,GAAAxN,EAAA,UACX,UAAAkO,IAAA,wCAAAmB,EAAA,KAAArhB,GAAA,8BAAA0C,IAAAsP,EAAAwE,GAAA,CACH,QAAElE,OAEG,aAAM,EAAW6M,uBAAE,YAAO,EAAC,eAAG,kBAEtC,gBACG,WAAAjN,EAAA,UAGNA,cACiB,cACb8O,SAAkB9O,EAAAW,EAAA,CACpB,iBAEA,IAAQ,IAAAsM,EACNjN,CACO,WACC,CACS,CACb8O,EAAkB,CACpB,EAAE1O,SAEG,CAAAN,EAAA0E,GAAA,CAAM,SAAArN,IAAA,UAAO8V,0BAAEC,EAAA,QAAA3G,GAAA,MAAA0G,EAAQ,CAAG,WAEjC,GAGM,YACOA,2BAAE,UAAArI,EAAA,aAAwBA,EAAA,eAAAjH,CAAA,EAAC,MAAAyR,GAAA,YAAA5e,GAAA,CAC3Byc,qBAAE,OAAApF,KAAA,WAAAuH,GAAA,MAAwB,gBAAAA,GAAA,OAC1BnC,2BAAE1G,GAAA5Z,EAAA,QAAAsgB,EAAwB,CAAC,YACtB,QAEZ,GAAAtgB,EAAA,OAEN,CAAe,GACbsgB,EACGe,CACWnP,WAAS,EACjBmP,CACF,QAAYnP,CAAgBzH,EAAA,YAASjJ,GAAAvF,EAAAskB,EAAA,sBAAAtkB,EAAA,kBAAAuF,EAAA,KAAAvF,EACpB,CACjB,GAAyB,EACvB,UAAAoX,EAAAW,EAAA,CAEN,gBAAW,GAAA0G,OAAA,KAAAvH,EAAA,SAAY,SAErBA,KAAA,IACGkO,QAKa,GAAAhO,EAAA,0BACW4E,QACnB,SAAA5E,EAAAmB,EAAA,CACgB,YACP,GACL0D,CAAQ,CACV,IAAAwC,OAAA,MAAAvH,EAAA0E,GAAA,CACF,SAAArN,IAAA,UACM,aACGC,EAAA,WACA8V,EAAA,QAAA3G,GAAA,CACT8I,KACErP,EAA4B,CAAOI,WACtB,CAAY,EAAO6M,cAAE,6BAAM,MAAArI,EAAA,aAACA,EAAA,eAAAjH,CAAA,EAAG,MAAAqE,GAAA,SAAAqF,CAAA,GACpC+H,EAAA,YAAA5e,GAAAwR,GAAA,CACT,OAEQ,aACe,GACbhB,KAAM6G,OAAA,QACbzQ,KAAoB,MACpB8V,gBAA6BkC,EAAA,OACvBnC,gBAAE,OAAAtgB,EAAA,CAAA4Z,GAAA0G,EAAuC,CACnC,YACX,QAEkB,GAAAtgB,GAAA,MAAAA,EAAA,aAAAA,EAAA,YACb,CACIiY,CACD0K,EACCF,SAAwChY,EACpC,YACRwN,2DAEF,GACQ,EACR,UAAA5E,EAAAW,EAAA,CACAwM,gBAAmC,GACrCrN,UAAY,CACV9I,cAAe,CACfuP,WACW0G,mBACL,sBAAA/H,GAAAmC,CAAA,GAA6C,YAAC,EAAArH,EAAA,QAACiN,4BAC/C,KAAgC,KACtC,GAAAjN,EACQ,UACR5I,cACA8V,oBACF,aAAA4B,EACC,GACL,EAAE1O,aAEG,mBAAMJ,EAAAmB,EAAA,CAAW,GACrBkG,QACC,CAAAjH,CACE,MAGF,GAEA,CAAAA,EACE,KAAmC,EAEtC,CAGQ,SAAA+D,GAAA,CACe,KAAAkD,EAEpBjQ,OACA8V,WAA6B,QAAAxI,EAAA,KACvBuI,EAAE,WAAA7U,EAAA,cAAAD,EAAsC,cAAAG,EAAC,uBAAAD,CAAA,GACnC,MAGZ,EAAAkX,CACM,EAAA1Y,GAAA,EACI+N,CACD0K,UACCtN,aACN,SAAAwN,CAEE,EAAArZ,EAEEyO,gCAEF+B,gBACF,UAAA3G,EAAA,OACQ,qBACR,SAAA9F,EAAA,KAAAuV,EAAA3S,IAAAgD,EAAA,OACAqN,oBAAmC,UAAAnN,UACzB,CACVhJ,YACSiW,oBACP,SAAAlM,EAAA,UAAA1I,EAAA,YAAAkX,EACoC,CACnC,oBACH,EAAAzS,EACQ,CACR1F,CACA8V,CACF,OAAA7F,EAEJ,kBAAEjH,WAEG,QAAC0C,GAAK,CAAW,MACtB1C,OACE,EAAAzT,EAAA,OAAAuN,EAAA4C,GACA/N,EACA2V,EAAAvO,CAAA,GAAAmL,aACI4D,CAAqB,yCAAA5D,YACvBpH,EAAA,uBAAYA,EAAA,OAEN4C,EAAA,GAAC4H,EAAAvO,CAAA,GACD,SACF6J,EAAAW,EAAA,MAEX,SAGPX,IAAA,IACOuP,EACC,CAEJT,WACF,EACsB,CAAU1O,CAEhC,KAAAtD,CAAA,EAAkB,GAAAgD,EAAC,MACZ,OACH,eAAC,SACL,CAAAE,EAAA,eACD,SACJ,2BAER,SAAAe,GAAA7G,EAAA,QAAA9B,EACD,aAEN8B,EAAA,SAEcwK,EAAAvO,CAAA,CACZkR,EACAlR,aACA4K,uBACgB,mBAAC,UAAAf,EAAA,SACjB5H,gBACAD,UACAG,WACAD,aACC,MACK,QAAAuK,CAAA,EAAEhM,SAAiBT,EAAA,SAAAyM,EACnB8B,EAAAvO,CAAA,CAAE+D,EAASC,WAAWqV,YAAarZ,EAEzC,KACE,SAAY,mBAAqCiK,SAC/CJ,GAAAmB,EAAA,CAAW,kBACAvN,WAAawO,CACT,MAAAjI,GAAaiG,WAEpBsP,SAAQ/iB,GAAA,CACH,MACE8iB,SACP1O,SACW1I,cACAkX,MAAE,wBAAAne,EAAA,WAAArC,CAAA,IAAAA,GAAAuJ,GAAAvJ,GAAAoJ,CAAA,QAAApJ,EAAA4gB,CAAA,IAAA3P,EAAA,gBAAAjR,EAAgB,SAAA4gB,EAAA,CAAC,EAAA5gB,CAAA,GAAC,GAC/BsY,OACW,aACP,eACJ3C,WAAgB,UACR,cAAE3V,4CACRmL,YAAanL,CACb2V,MAAY,CACd,EAAE,SAEJ1E,EAAAmB,EAAA,CACExC,GAAK,UACC,CACNoC,CAAwC,GAE9B6O,EACRlL,CAQV,SAAWgE,GAAAmH,EAAA,CAAczP,iBACvBJ,WAAA,SAAA8P,EAAA,OACO,KAAAA,EAAA,mBACC,CACkC1X,YACzB2X,EAAA,CACb7V,aAAQ2F,GACR6E,OAAY,MAAAqL,EAAA3lB,CAAA,aACd,OAAA2lB,EAAA3lB,CAAA,EAIF,OAAa2lB,CAAA,CACX,SAAAC,GACO,SAAA3Z,EACImZ,KACTzO,EACA8B,gBACQ,EAAED,sBACRzM,MACAuO,GACF,EAAA7N,GAAA,EAAE,CAEJ,MAAAI,CAAA,EAAAsQ,GAA8B,EAEhCzH,GAAA1I,CAAA,EAAAC,EAAA,WAAOgJ,CAAM4P,EAAAC,CAAA,EAAA7Y,EAAA,IAAY+I,GACvB+P,EAAA,EAAA9Y,EAAA,KAAA+Y,EAAAC,CAAA,EAAAhZ,EAAA,GAAAiZ,EACA,MAAAC,GAAA,MAAAA,GAAA,MAAAA,EACSpW,eACP4G,sBACA8B,GACQsN,GAAA,CAAEphB,SACRoH,EACY,EACZiK,KAEchP,CAELrC,IACTqI,EACK,SAASuY,GACJ5gB,cACE,QAEX,MAAAkI,EAAA,yBACI,EAAAuZ,EACH,SAEVxQ,QAAA,GAAW,EAAcI,GACvB,EACEzB,EAAK4R,CAAA,EACLlQ,EAAM,UACNU,OACAC,EAAe,QACb0D,CAAY,KACd,EAEA+L,EAAAtG,GAAAuG,EAAA,KAAApX,GAAyB,KAAAoX,GACnB,EACL,CAACA,CAAA,SACHC,EAAAnY,IAETc,GAAA,KAESsX,YACPC,EAAaA,gBAIV9Q,UAAe,QACV+Q,EAASC,QAAExI,eAAsBoI,EAAA,qBACjCK,EAASC,QAAE1I,aAAsBoI,EAAA,sBAIjCO,MACAC,QACAC,GACJV,GAA+BS,CAcjB,EAEf9K,CAAMnC,CAAI,GACf,MAAAmN,EAAApY,GAAA,CAEA,QAAyBA,EAAA,KACvBiN,EAAW5R,CAAoB,EAC7B+B,GAAmC,EAEvCqF,GAAA,aAEA,UAAkC0U,CAAA,EAChCkB,GACED,EAAWC,CAAkBlnB,CACb,EAChB,CACF,kBACO2lB,0BACT,GAEA,MAAAwB,GAAsB/Y,IACpBnC,UAAgB,YAAC+Z,EAAAH,EAAA,WACAG,EAAA,GACjBlM,KAEM,gBAAEtN,8CAAiB4a,GACnBA,EAAA,gBAAEva,kBAAc,eACfE,OAASC,QAChB,CAAO6Y,CAGP,GAAM,CAEAK,GACA,eAAWlgB,GACf,iBAAsB,SACtB,GACsBsL,GAAA,UAClB0U,EAAGqB,IACAC,KAEPrB,EAAAJ,EAAA,UAGIS,gBACJ,MAAWc,EAAAD,GAAA,mCACXna,GACaoa,EAAA,gBACP,kBACF,eACE5N,OAAG4M,UAEM,GACX,CACAN,GACAI,kBACAlZ,iBAAoB,YAEpBA,QAAkB,CAClBJ,mBACF,cACF,SAAG,GAAAX,GAAA2J,EAAA,UACL,cAEMyQ,oBAENnX,QAAgBjD,EACD,SAAA2J,EAAAW,EAAA,CACX+P,SAEEC,OAGFA,WAEIA,CACFA,CACAA,EAAuDvgB,CACzD,EAAA4P,EAAA,UACF,SAAAA,EAAA,QACG,SAAArT,GAAA,OAEL2M,EAAU,eAAM,GACS1Q,EAAA6nB,EAAA,cAAA7nB,EAAA,KAAA6nB,EACrBC,EACF,SAAA1Q,EAAA,SACEkE,MAEEmN,YACEM,cACNzL,MAAsB,QACd,YAAA0L,EAGVlW,CAGU4V,WACe,CACnBD,EACF,QAAA1kB,GAAA,CAEF,MACkB,MAAAoC,CAAA,EAChB8iB,SAEJpB,EAAA1hB,CAAA,GAGA2M,aAEQ,MACA0U,kBACFC,qBACK,mBACLA,WACF,aAAAnM,GAAA,EACA9K,EACE,EACA,GAAA4G,EAAkB,QAChBwR,2BAA4B,UAAAxR,EAAA,UAChBuR,GAAA,MACH,iBAAApa,IAAA,kCACC8Y,EAAA,KAAAhX,EAAA6D,IAAA,CACT,MAAAgV,EAAAL,EAAAxY,EAAA,IACH,OAAA6G,EAAA,MACE,MAAAhD,IAAAsT,EAAA,cAEN,UAAApQ,EAAAC,GAAA,CACkB,iBAChB4R,UAEJ,aAAAC,YAIQ,gBACmB,EACrBzB,eACK,cACYJ,eACnB,aACiBoB,EAAApY,CAAA,CACMsY,EACH,SAAAvR,EAAAW,EAAA,CAChB6Q,KAA4B,OAChB,UACH,IAAAI,EAER,CACH,WACE,CAEN,EACkB,EAChBC,EAA0B,EAE9B5Y,EAAA,GAEA,CACE6G,CAAQ,GAAA3I,IAAA,UAAA6I,EAAA,OAAsB,0BACzB3J,MACY,UAAe,CAAuBA,wBAAQ+J,iBACnD0C,SAAK9C,EAAA,KAAO4R,0BAAE,GAAO,QAAC,IAAG,CAGnC,SAAAxR,GACE,CACEoB,QACE7U,WACA8jB,eAGF,EAAErQ,gBAEF,EACOuQ,mBACG,GACH,MACC,EAAAoB,CACKH,OAAE,CAAAza,EAAAC,CAAA,EAAAC,EAAA,WAAA2a,EAAAxZ,EAAA,IAAiB,CAAAyZ,EAAAC,EAAA,EAAA7a,EAAA,IAAC8a,EAAA9T,GAAA,IAAA3F,GAAA,6CAC/BgM,EAAgBlM,IACRc,GAAA,KAAEvK,uBAAY3F,CACpBqnB,IACF,MAAA9H,EAAAT,CAAA,QAAAN,GAAA1Q,EAAAD,CAAA,EAAA0Q,EACa,QAAAO,EAAAgK,GACDvJ,CAAA,EAAAvR,EACG,gBACJ,CAAAA,EACP,SAC+B,IACpC,GACG,GAAC,MAET4I,EAAA3B,GAAA,WACG4R,GACC,aACOsB,mDAGJtB,KACO6B,oBAAgC7Y,SAIlCoH,IAHJlS,GAAAvF,EAAAopB,EACE,UADF,YAAAppB,EACE,OADF,MAAAuF,EAAA,KAAAvF,EACE4f,GAEEnI,YAAa+P,CAAgChQ,OAE7CJ,CAACC,EAAY,MAEXhH,CACA6Y,kBACStJ,EAAA,cACG4J,EAEdpS,EAAA,eAAAwI,CAAA,IACO6J,EACC,SAAAD,cACS,EAAAC,GAEfD,CAAA,EAAEhS,KAEGkS,EAAM9Z,IAAA,CAAA+Z,EAAYC,CAAA,EAAAnb,EAAA,MAAAob,EAAQb,uBAAE,MAAA7iB,CAAA,EAAApC,EAAA,OAAK,GAAAoC,EAAA,CAAC,MAAA8S,GAAAjZ,EAAA+e,EAAA,sBAAA/e,EAAA,OAAAmG,EAAA,OAAG8G,EAAA,GACnC2c,IACP,IAAA3K,KAAA,QAAA6K,GAAAvkB,EAAAmkB,EAEP,UAFO,YAAAnkB,EAEP,WAFO,MAAAukB,EAAA,KAAAvkB,EAEP,UAGHqkB,EAAW,KACF,GAAAP,CAAO,GAAA3Y,GAAE,KACb4K,IACS+N,GAAA,MAAAA,EACd,SAAAQ,EAAW,CAAUrS,QACnBA,OACE,GACC,GAAC8D,EAEJuO,EAAAR,CAAA,SACCU,GAAAC,GAAApK,GAAA,CACJtC,GAAA,MAAAA,EAAAsC,GAETnS,GAAA,MAAAA,IAEA,eAA2B,KACzBY,qDACAC,sDACgB,IAAC2b,EAAA,OAAAC,EAAA,KACA,QAAAtK,CAAA,IACjBtE,aACC2O,IAAA,OAAAlmB,GAAA,gBAAAwB,GAAAvF,EAAAopB,EAAA,sBAAAppB,EAAA,mBAAAuF,EAAA,KAAAvF,EAAAmqB,KAAA,YAAApmB,EAAA,aACKkmB,IAAA,aAAKhc,GAAc,uCAAAgc,CAAA,CACzB,EACMb,OACArB,EAAeuB,IACfC,eAGAxK,YACNrO,EAAgB,gBACdlC,EAAoB,gBACPuZ,EAAA,uBAAAA,EAAA,qBACPA,EAAA,qBAAAA,EAAA,sBAGFhJ,MACAuK,SACA9a,yBAAoB,cAEpBA,eAAkB4I,EAAA,UAClBhJ,cACF,oBACC,QAAAX,WACA2J,EAAAW,EAAA,CAECqS,SAEJ,IAAkBjB,EAIlB,YAEavf,CACMmH,CACb,EACF0Y,cAAoB,CACpB,UAAAvS,EAAA,OACF,UAAAE,EAAA,KACI,SAACoS,EAAgBa,GACTzK,WAAoB,CAChC,CACA4J,OAAgBa,cAAoBjT,EAAA+E,GAAA,IAAAjF,EAAA,SACrC,+BACqB,OAAA5I,CAAA,CACpBkb,GAA0BC,CAC5B,EAAArS,EAAA,QACOoS,aACLH,iBAAa,UAEKzZ,EAAO,GACtB+Z,GACDE,GACH9lB,IAAM6b,EAAA,aACGzZ,EAAUpC,SAAEvD,WACT,IAAAunB,EACT,KAAgBhJ,SACP9R,cAET2c,CACc7Y,WACT,CACL6Y,EACF,QAAAC,EAEDR,aACH,MACA3Y,YAAgB,MACV4K,qBACK,mBAAU,WAAEnV,aAAOmV,MAAkB,EAAG,GACjD,EAAAlE,EAAA,QACEkE,IAAmBuO,EAEjBE,aACHnK,OAAU,MACTtC,MAAWsC,2CACD,SAAA+J,EAAA,IAAA/J,GAAAxI,EAAA,MAEVkT,4BACMf,cACIlZ,CACF6Z,qBAKqBlD,sBACzBuC,EACK,WACLA,EAEAA,eAMAA,CAA2BA,WAC7B,2BAGMlZ,cAAY,SAAA+G,EAAA,MAAoD,CACvE,iBAEFkG,SACHlG,EAAA,cAEwBA,EAAAmB,EAAA,CACR,WACd,EACEwP,EAEIA,kBAAwB,eAAAqC,CAAA,QAAAC,EAAAtK,CAAA,OAAAA,GAAA,MAAAA,EAAA,SAAA7I,EAAA,OAC1B6Q,MAAShX,oBACTgX,SAAiBvjB,UACnB,uBACF,UACG,aAAA2kB,EAGK,CAA4B,WAChC,CACa,EAAe,aAAAA,EAC1B/R,CAAW,WAAO+R,IAAEkB,CAAA,GAAAA,CAAA,GAAAjT,EAAAmT,GAAA,CAAO,OAAAxK,EAAC,SAAAgK,EAAA,CAAG,EAGnC7S,IAAA,CAAAM,CACE,CAAAA,EACE,CAAAA,CACE,OAAA+S,GAA2BC,GAAA,EAAC,OAAAzK,EAK5B,SAAAzC,CAAa,IAAe9F,CAAa,MAC1C,KAAAzJ,CAGD6K,OACE7U,GAAiB0mB,CAAA,EAAAhc,EAAAxB,EAAA,EACX2S,WAAiB9K,EACvB,OAAAoC,EAAW,WACK,UAAA6I,EAAA,QAAUJ,UAAYvI,EAAAsT,GAAA,CACtC,MAAA9K,EACF,aAAEpI,QAEF,cACOuQ,IACA,YAAA4C,GAAAvT,EAAA,eACM+R,6BAAE,YAAAsB,EAAA3V,EAAA7H,EAAA,WAAAmK,EAAAmB,EAAA,CAAc,YAAC,QAC5BuD,EAAS+N,qBACI,EACD,GACG,EACJ,GACPa,GAC+BF,GAAA,QAAA5K,EACpC,QAAAxH,EACI,SAAAwS,CAET,IAAMnQ,CAAKiP,MACRC,MACW,QACC3e,gBAAK4U,cACZ,KAAAiL,EAAgC,CAAqBrT,UACjC,wBAChBoI,0CACAxH,EAAerU,EAAA,wBACC+mB,EAAA,KAAAC,EAAA,KAAUpL,IAC1BqL,EAAA,iBAAAA,EACQ,sBACTF,EAAA,MAAAC,EAAA,UAACC,EAPWrL,IAShB,cAGHzI,EAAA,qBAA+BM,EAChB,+BACX,CAAqBA,CACnB,EACE,OAAAN,EAAA,wBAAyC,UACxC,iBAAAkB,EAOC,aAAWwS,EAAA,OAAAhL,EAAA,UAAmBpI,iBAC5B,QAAWyT,EAAA,SACR,CAAA/T,EAAA,oBACaiS,+CAAE,2CAAA/R,EAAA,OAAe,4BAAC,IAAAwI,EAAA,KAAAA,EAAA,cAAAA,EAClBuJ,qBAAE,2BAAQ,iBAAC,GACzB,EAAAyB,KAAeP,IAAQ,SAEzBjT,KAAiBA,EAAA,QACf2I,uBACUgK,GACV,EAGT,GAGFmB,GAAA,YACJ3N,GAAA,CAET,QAAA9P,EAAA,KAEM8c,EAA2BxK,gBAAQzC,CAAS,EAAM,kBAChD,MAAEvP,SAAoBod,CAC5B,EAAAld,GAAkB,EACZ0c,IAA2B7V,eACjC,CACEoC,EAAAkU,CAAA,EAAA3c,EAAA,IAAA+I,EACGuI,EAAa,MAGVH,aACehQ,EAAA,GACJ8Z,EAAU/J,QACrB,SAAA0L,EAAA,CAAE,OAAA5mB,CAIJ,cAEQzE,EAAAsrB,EAAA,gBAAAtrB,EAAA,QAAAwO,EACG4J,SAAatD,GAA2B0C,+BAEjD,WAFiDA,eAEjD,uBAAQzJ,QAA+B,IAAC,SAAc,OAEzD,IACM,MAAAzM,EAAA,CAEZ,QAAAwG,GAEK4iB,YAAoBF,MAAQ5K,WAAOxH,SAASwS,6BAAe,OAAAnmB,EACzDwmB,OAAkB,YAGtB,EACelnB,EAAgBwnB,oDAAc,oBAAAjqB,CAAA,GACjC,4BACJypB,oBAAoC,GACpCD,aAAaU,IAAoC,aAApCA,cAAoC,WACjDR,KACNxc,EAAazE,SAAYA,CACvBihB,OACAA,UACF,CACEA,KACAA,CAAkCta,GAC7B,YACW+a,6BAClB,MACF,MAAAC,EAAAnK,GAAA,KACF8J,EAAA,CAEA,QACE,CACO,GACK,KACVjT,gBACA,sBACAuT,MAAgBV,QAChBW,SAASX,kBAASzT,cAElBA,oBAEI,UACgBqU,SACRzU,EAAAW,EAAA,CAGVX,SACE7N,IAAU4hB,GAGJ,WACC,CACPW,CAAQ,EACC,GACT1U,EAAA,UACK,SAEPF,SAAA,KAAAnF,EAEEyF,SAAamI,IAAiB5b,EAAA,iBAEjCsnB,EAAA,CACK,QAEZ,CAAC,CAEqB,EACtB,SAAwB,CAAAjU,EAAA,aAAkBkU,EAAC,mBAAoB,IAAC,YAAAH,EACxD,CAAEpd,WAAMC,CAAiB,EACxBO,SAAmB,GACV6c,mBACVrZ,kBACAuZ,eAAkB,MAClBS,mBACArC,WAEN,QAAmBgC,CAAA,CAAEjnB,aAAU,aAC7B2J,MAAyB,iBAAE3J,OAAQ,WACzBsM,YACVvC,IAAW2c,EAEJ,CACC,WACI,CACX,CACD,CAAa,EACP,EACF,GAAAjU,EAAM5V,OAAQ,KACHwG,EACTkT,MAAGsQ,IAAanlB,gCACR,CAAAoI,IAAA,WAAA6I,EAAA,aACD8T,oBACC9T,EAAA,KACR3S,sBACAga,WAAqBlG,EAAA,CACvB,WACA,EAEE,EACkB,GAElBwF,IAAYkB,WAAQ,GAAAjf,EAAAiZ,GAAA,YAAAA,EAAA,aAAAjZ,EAAA,SAAAoX,EAAA,OACRrG,iBACdqa,WAAmBjP,GAAA,CACnB3N,SAAoB,EAEpBA,wBAAW,OAAXA,cAAkB,UAAA0I,EAAAgF,GAAA,CAClB9N,YAAe,MACjB,SAAA6K,EAAA,SAAA3L,GAAA,CACC,MACL,GAAAF,EAEgB,OAAA4e,UAEX,SAAAxO,CAECkO,IACM,CAAU,mBAAAO,EAAG,yBAAAC,EAClB,aAAAC,aAGG,EAAAH,EAAyBI,EAAAH,GAAA,MAAAA,EAAA,IAAAA,EAAAC,GAAA,MAAAA,EAAA,IAAAA,EAAAC,MAC7B,CACa,IAAAlW,GAAe,KAAAoW,GAAuB5e,QAAQ+J,QAC9C,EAAA4U,EAAOjB,mBAAE/M,EAAA,KAAO,MAAAkO,EAAA,UAAArW,EAAA,EAACsW,GAAAD,EAAA,OAAAA,EAAA,SAAG,IAAAE,EAGnCpV,GAAAiV,GAAA,CAAA7U,SACE,UAAA6U,EAAA,EACOta,uBACL6G,CACI6T,OAAerV,EAAA,MACP,SAAAA,EAAA,UAAU,cAAG,aACzB,MAEAA,OACOkU,KACA,EAAAoB,EACAC,EAAAC,IAAAC,EACM1B,qCAAE1d,IAAA6P,EAAA,CAAa,IAAAwP,EAAC,KAAAF,GAAA,wBACnB,SAAApP,GAAArD,CAAA,CACK,CACD,EACG,SAAAjD,EAAA,UACJ,OACP,iBAAAlN,EAAA,IAGN,EACO,UAAAkN,EAAA,WACC,UAAAsV,GAAApV,EAAA,UACD1P,SACC,kBACC,EAAA0P,EAAA,OACJ+T,eAAE,OAAA/M,EAAA,eAAkB,iBAAC,IAAAZ,EACxB,6BACE,OAAAzZ,IAAA,CAERA,GAAA,0CAAW2lB,EAAkC,EAAwB,CACtD,EAAAtS,EAAA,cACA,SAAAoG,GAAArD,CAAA,GACT,CAAS,EAAe3C,CACtB,EAAApK,CAAA,EAAiC,EAChC,EAAA8J,EAAA,KAGN3I,MAAY,aACA,YAAAub,EAAA7Q,EAAA,yBAAA6Q,EAAA,WAAA5S,EAAA,UAAUM,KACnBJ,SAAc,oBAAE,SAAA7I,IAAA,UAGnB0K,YAAwB,OACvBzB,EACE,CACGyB,aAAajO,aAAbiO,cAA0B,QAAAiS,EACnB,EAAE9d,EAAI4e,eAAQ7R,oBAAOqD,YAAalQ,cAClC,YACJ2e,EACAC,GACAC,6JACAO,cACF,MAAIV,cACJ,aAAqC/V,UAKjC,mBAAEA,GAAKoW,mDAAMriB,CAAOoU,EAAO,SAAIgO,WAC/B,WAAe7T,EAAA,CACjBvO,WACS,GACX,MAAAoN,EAAAW,EAAA,CACMuU,oBACAC,GACFC,GACJ,GACQO,kBAAcC,EAAU,OACfD,iBACjB,SAAA3V,EAAA,KACA,qBACE,CAAAI,CACE,GAAAjJ,IACO,SAAA6I,EAAA,wBAEG,SAAAA,EAAA,KAAEwV,yBAAK3W,EACb,EACMqW,GACAC,GACE,EACC","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","clone","__privateSet","__privateGet","input_get","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","i18nDuration","expirySeconds","Object","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","mem","RelativeTimeFormat","undefined","LF","ListFormat","CUSTOM_EMOJIS_COUNT","ADD_LABELS","media","id","customEmoji","gif","poll","Compose","onClose","replyToStatus","editStatus","draftStatus","standalone","hasOpener","i18n","t","_useLingui","rtf","lf","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","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","canClose","_t","hasValue","hasMediaAttachments","isSelf","hasOnlyAcct","confirmClose","hasIDMediaAttachments","beforeUnloadCopy","handleBeforeUnload","sameWithSource","getCharCount","updateCharCount","supportsCloseWatcher","useHotkeys","yes","addEventListener","capture","modals","hasModal","hasOnlyComposer","prevBackgroundDraft","count","escDownRef","ignoreEventWhen","useCloseWatcher","draftKey","getCurrentAccountNS","backgroundDraft","useInterval","db","handleItems","username","acct","i2","items","unsupportedFiles","_i18n","drafts","set","updatedAt","f","debug","error","files","clipboardData","max","file","alert","mediaFiles","allowedFiles","1","2","handleDragover","setShowMentionPicker","showEmoji2Picker","showGIFPicker","useMemo","contentTranslationHideLanguages","autoDetectedLanguages","topLanguages","restLanguages","commonB","type","size","url","codeA","commonA","codeB","onMinimize","saveUnsavedDraft","gifPickerDisabled","onPollButtonClick","setPoll","removeEventListener","addSubToolbarRef","setShowAddButton","useResizeObserver","showMentionPicker","scrollWidth","settings","push","_jsxs","sort","_jsx","AccountBlock","showPollButton","pollButtonDisabled","children","class","confirmText","passData","__STATES__","opener","composerState","Icon","openCompose","showAddButton","avatarStatic","disabled","onClick","Status","replyToStatusMonthsAgo","_Trans","formData","components","0","onKeyDown","onSubmit","description","params2","res","attachment","results","mediaPromises","hasNoDescriptions","params","removeNullUndefined","newStatus","saveStatus","i","e2","media_attributes","in_reply_to_id","statuses","visibilityIconsMap","opacity","pointerEvents","checked","onChange","icon","title","limit","action","setShowEmoji2Picker","setAutoDetectedLanguages","Textarea","ref","fileID","newAttachments","attachments","_2","j","performSearch","q","v1","resolve","v2","fetch","onTrigger","defaultSearchTerm","Poll","newPoll","onDescriptionChange","Menu2","open","MenuItem","FilePickerInput","onInput","setShowGIFPicker","body","zIndex","_Fragment","Loader","CharCountMeter","alt","localeCode2Text","commonText","composerGIFPicker","restSupportedLanguages","textarea","textBeforeMention","spaceAfterMention","textAfterMention","newText","Modal","CustomEmojisModal","textBeforeEmoji","textAfterEmoji","spaceBeforeEmoji","emojiShortcode","spaceAfterEmoji","onSelect","GIFPickerModal","alt_text","slice","theToast","showToast","blob","newMediaAttachments","hidden","then","autoResizeTextarea","offsetHeight","scrollHeight","clientHeight","height","visibleEmojis","__vitePreload","langs","detectAll","lang","_t2","api","setText","textareaProps","props","searcherRef","getCustomEmojis","r","hasTextExpanderRef","textExpanderRef","handleChange","_getCustomEmojis","searcher","textExpanderTextRef","text2","cacheKeyArg","detectLangs","shortcode","emoji","html","encodeHTML","emojis","history","displayNameWithEmoji","emojifyText","displayName","search","total","cur","name","shortenNumber","Promise","matched","v","more","handleValue","handleCommited","handleActivate","handleDeactivate","slowHighlightPerf","composeHighlightRef","useThrottledCallback","throttleHighlightText","start","end","useDebouncedCallback","dom","Event","resizeObserver","hasTextExpander","lastLine","bullet","postSpaces","anything","number","preSpaces","pos","debouncedAutoDetectLanguage","cloneNode","mark","spellCheck","rows","cols","charCount","leftChars","setRangeText","setSelectionRange","scaleDimension","matrix","matrixLimit","scalingFactor","newHeight","newWidth","MediaAttachment","supportsEdit","supports","onScroll","checkMaxError","configuration","getCurrentInstanceConfiguration","maxError","setMaxError","snapStates","imageMatrix","setImageMatrix","Math","videoMatrix","setVideoMatrix","debouncedOnDescriptionChange","timer","details","_t3","toastRef","setDescription","showModal","imageSizeLimit2","descTextarea","prettyBytes","videoSize","videoSizeLimit2","videoMatrixLimit2","videoMatrix2","maxErrorToast","maxErrorText","err","imageSize","suffixType","naturalWidth","naturalHeight","3","4","5","videoWidth","videoHeight","6","7","values","9","10","11","setShowModal","src","onLoad","onLoadedMetadata","onRemove","subtype","response","menuButton","append","_t4","multiple","option","required","label","splice","str","char","obj","MentionModal","accounts","setAccounts","setRelationshipsMap","selectedIndex","setSelectedIndex","loadRelationships","accounts2","term","debouncedLoadAccounts","loadAccounts","inputRef","filterShortcodes","searchTerm","aLower","a","bLower","b","aContains","bContains","bothStartWith","selectAccount","selectedAccount","listRef","selectedItem","relationshipsMap","relationships","socialAddress","_t5","enableOnFormTags","relationship","_t6","customEmojisList","customEmojis","setCustomEmojis","recentlyUsedCustomEmojis","emojisCat","othersCat","scrollableRef","matches","setMatches","onFind","_c","onSelectEmoji","useCallback","recentlyUsedCustomEmojis2","recentlyUsedEmojiIndex","emoji2","customEmojisCatList","category","queueMicrotask","CustomEmojisList","memo","setMax","CustomEmojiButton","showMore","showCode","parent","selfRect","rect","targetClassList","addEdges","GIFS_PER_PAGE","_t7","setResults","fetchGIFs","qRef","closest","currentTarget","remove","debouncedOnInput","onPointerEnter","onFocus","staticUrl","loading","currentOffset","images","fixed_height_small","fixed_height_downsampled","fixed_height","theImage","webp","urlObj","strippedURL","strippedWebP","preventDefault","original","theURL","mp4","url2","strippedURL2","webpObj","parse"],"ignoreList":[0,1,2,3,4],"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 let clone = CloneRegistry.get(input);\n if (!clone) {\n clone = new InputStyleCloneElement();\n clone.connect(input);\n CloneRegistry.set(input, clone);\n }\n return clone;\n }\n /**\n * Connect this instance to a target input element and insert this instance into the DOM in the correct location.\n *\n * NOTE: calling the static `for` method is nearly always preferable as it will reuse an existing clone if available.\n * However, if reusing clones is problematic (ie, if the clone needs to be mutated), a clone can be constructed\n * directly with `new InputStyleCloneElement()` and then bound to an input and inserted into the DOM with\n * `clone.connect(target)`.\n */\n connect(input) {\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 this.#usingInput((input) => {\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 }\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 // Can't use `usingInput` here since that could infinitely recurse\n const input = this.#input;\n if (input) {\n input.removeEventListener(\"input\", this.#onInput, { capture: true });\n CloneRegistry.delete(input);\n }\n }\n // --- private ---\n get #input() {\n return this.#inputRef?.deref();\n }\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.#input;\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 set keys(value) {\n this.setAttribute('keys', value);\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 { TextExpanderElement as default };\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 { msg, plural } from '@lingui/core/macro';\nimport { Trans, useLingui } from '@lingui/react/macro';\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';\n// import { detectAll } from 'tinyld/light';\nimport { uid } from 'uid/single';\nimport { useDebouncedCallback, useThrottledCallback } from 'use-debounce';\nimport useResizeObserver from 'use-resize-observer';\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 i18nDuration from '../utils/i18n-duration';\nimport isRTL from '../utils/is-rtl';\nimport localeMatch from '../utils/locale-match';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport mem from '../utils/mem';\nimport openCompose from '../utils/open-compose';\nimport pmem from '../utils/pmem';\nimport prettyBytes from '../utils/pretty-bytes';\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 300: i18nDuration(5, 'minute'),\n 1_800: i18nDuration(30, 'minute'),\n 3_600: i18nDuration(1, 'hour'),\n 21_600: i18nDuration(6, 'hour'),\n 86_400: i18nDuration(1, 'day'),\n 259_200: i18nDuration(3, 'day'),\n 604_800: i18nDuration(1, 'week'),\n};\nconst expirySeconds = Object.keys(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\n// const rtf = new Intl.RelativeTimeFormat();\nconst RTF = mem((locale) => new Intl.RelativeTimeFormat(locale || undefined));\nconst LF = mem((locale) => new Intl.ListFormat(locale || undefined));\n\nconst CUSTOM_EMOJIS_COUNT = 100;\n\nconst ADD_LABELS = {\n media: msg`Add media`,\n customEmoji: msg`Add custom emoji`,\n gif: msg`Add GIF`,\n poll: msg`Add poll`,\n};\n\nfunction Compose({\n onClose,\n replyToStatus,\n editStatus,\n draftStatus,\n standalone,\n hasOpener,\n}) {\n const { i18n, _, t } = useLingui();\n const rtf = RTF(i18n.locale);\n const lf = LF(i18n.locale);\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, // Beware: it can be undefined!\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'].toLowerCase()\n : visibility,\n );\n setLanguage(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\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(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\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'].toLowerCase());\n }\n if (prefs['posting:default:language']) {\n setLanguage(prefs['posting:default:language'].toLowerCase());\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(\n language ||\n prefs['posting:default:language']?.toLowerCase() ||\n DEFAULT_LANG,\n );\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 = t`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 const unsupportedFiles = [];\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 (\n supportedMimeTypes !== undefined &&\n !supportedMimeTypes.includes(file.type)\n ) {\n unsupportedFiles.push(file);\n } else {\n files.push(file);\n }\n }\n }\n if (unsupportedFiles.length > 0) {\n alert(\n plural(unsupportedFiles.length, {\n one: `File ${unsupportedFiles[0].name} is not supported.`,\n other: `Files ${lf.format(\n unsupportedFiles.map((f) => f.name),\n )} are not supported.`,\n }),\n );\n }\n if (files.length > 0 && mediaAttachments.length >= maxMediaAttachments) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\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 let allowedFiles = files;\n if (maxMediaAttachments !== undefined) {\n const max = maxMediaAttachments - mediaAttachments.length;\n allowedFiles = allowedFiles.slice(0, max);\n if (allowedFiles.length <= 0) {\n alert(\n plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\n );\n return;\n }\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 const gifPickerDisabled =\n uiState === 'loading' ||\n (maxMediaAttachments !== undefined &&\n mediaAttachments.length >= maxMediaAttachments) ||\n !!poll;\n\n // If maxOptions is not defined or defined and is greater than 1, show poll button\n const showPollButton = maxOptions == null || maxOptions > 1;\n const pollButtonDisabled =\n uiState === 'loading' || !!poll || !!mediaAttachments.length;\n const onPollButtonClick = () => {\n setPoll({\n options: ['', ''],\n expiresIn: 24 * 60 * 60, // 1 day\n multiple: false,\n });\n };\n\n const addSubToolbarRef = useRef();\n const [showAddButton, setShowAddButton] = useState(false);\n useResizeObserver({\n ref: addSubToolbarRef,\n box: 'border-box',\n onResize: ({ width }) => {\n // If scrollable, it's truncated\n const { scrollWidth } = addSubToolbarRef.current;\n const truncated = scrollWidth > width;\n const overTruncated = width < 84; // roughly two buttons width\n setShowAddButton(overTruncated || truncated);\n addSubToolbarRef.current.hidden = overTruncated;\n },\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(t`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 t`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 = t`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 {replyToStatusMonthsAgo > 0 ? (\n \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post (\n \n {rtf.format(-replyToStatusMonthsAgo, 'month')}\n \n )\n \n ) : (\n \n Replying to @\n {replyToStatus.account.acct || replyToStatus.account.username}\n ’s post\n \n )}\n
    \n
    \n )}\n {!!editStatus && (\n
    \n \n
    \n Editing source post\n
    \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(t`Poll must have at least 2 options`);\n return;\n }\n if (poll.options.some((option) => option === '')) {\n alert(t`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 t`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 || t`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 {(supports('@pleroma/local-visibility-post') ||\n supports('@akkoma/local-visibility-post')) && (\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] = {\n ...newAttachments[i],\n description: value,\n };\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 {showAddButton && (\n (\n \n \n \n )}\n >\n \n \n {_(ADD_LABELS.media)}\n \n {\n setShowEmoji2Picker(true);\n }}\n >\n {' '}\n {_(ADD_LABELS.customEmoji)}\n \n {!!states.settings.composerGIFPicker && (\n {\n setShowGIFPicker(true);\n }}\n >\n \n {_(ADD_LABELS.gif)}\n \n )}\n \n {_(ADD_LABELS.poll)}\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 {\n setShowGIFPicker(true);\n }}\n >\n \n \n )}\n {}\n {showPollButton && (\n <>\n \n \n \n \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 plural(maxMediaAttachments, {\n one: 'You can only attach up to 1 file.',\n other: 'You can only attach up to # files.',\n }),\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: t`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(t`Failed to download GIF`);\n }\n })();\n }}\n />\n \n )}\n
    \n );\n}\n\nfunction FilePickerInput({\n hidden,\n supportedMimeTypes,\n maxMediaAttachments,\n mediaAttachments,\n disabled = false,\n setMediaAttachments,\n}) {\n return (\n
    \n {showModal && (\n {\n setShowModal(false);\n }}\n >\n
    \n {\n setShowModal(false);\n }}\n >\n \n \n
    \n

    \n {\n {\n image: t`Edit image description`,\n video: t`Edit video description`,\n audio: t`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: t`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 e.message\n ? t`Failed to generate description: ${e.message}`\n : t`Failed to generate description`,\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 \n Generate description…\n \n )}\n \n {!!lang && lang !== 'en' && (\n {\n setUIState('loading');\n toastRef.current = showToast({\n text: t`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 t`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
    \n \n ({localeCode2Text(lang)}){' '}\n \n — experimental\n \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 { t } = useLingui();\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 { t } = useLingui();\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

    \n Error loading accounts\n

    \n
    \n ) : null}\n
    \n
    \n );\n}\n\nfunction CustomEmojisModal({\n masto,\n instance,\n onClose = () => {},\n onSelect = () => {},\n defaultSearchTerm,\n}) {\n const { t } = useLingui();\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 \n Custom emojis\n {' '}\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

    \n Error loading custom emojis\n

    \n
    \n )}\n {uiState === 'default' &&\n Object.entries(customEmojisCatList).map(\n ([category, emojis]) =>\n !!emojis?.length && (\n
    \n
    \n {{\n '--recent--': t`Recently used`,\n '--others--': t`Others`,\n }[category] || category}\n
    \n \n
    \n ),\n )}\n
    \n )}\n
    \n
    \n );\n}\n\nconst CustomEmojisList = memo(({ emojis, onSelect }) => {\n const { i18n } = useLingui();\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 {i18n.number(emojis.length - max)} 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 { i18n, t } = useLingui();\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 lang: i18n.locale || 'en',\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

    \n Type to search GIFs\n

    \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 \n Previous\n \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 \n Next\n {' '}\n \n \n )}\n

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

    No results

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

    \n Error loading GIFs\n

    \n
    \n )}\n
    \n
    \n );\n}\n\nexport default Compose;\n"],"file":"assets/compose-lJLfU2UC.js"} \ No newline at end of file diff --git a/assets/fuse-ljJAS_uA.js b/assets/fuse-ljJAS_uA.js new file mode 100644 index 0000000..85213b2 --- /dev/null +++ b/assets/fuse-ljJAS_uA.js @@ -0,0 +1,189 @@ +import{ad as ce,Q as Dt,d as o,h as K,q as Tt,A as O,_ as ke,y as tt,B as wo,r as At,ae as k,af as Da,e as Qr,ag as ir,ah as Oa,i as ot,P as _e,p as ns,ai as $a,aj as Na,ak as rs,O as os,k as $,M as qe,V as Lt,n as Fa,s as H,al as za,u as te,a as sr,x as bn,z as Va,am as Ha,T as D,an as is,ao as Ba,ap as ss,o as hr,v as as,g as Eo,aq as Ua,ar as Mt,as as ja,at as Ka,au as Bn,I as oe,c as kn,b as he,W as cs,av as Wa,aw as Za,ax as qa}from"./useTitle-2fhxq2KA.js";function Jr(){return Jr=Object.assign?Object.assign.bind():function(t){for(var e=1;e'),!0):e?t.some(function(n){return e.includes(n)})||t.includes("*"):!0}var rc=function(e,n,r){r===void 0&&(r=!1);var i=n.alt,a=n.meta,s=n.mod,c=n.shift,l=n.ctrl,u=n.keys,f=e.key,d=e.code,m=e.ctrlKey,h=e.metaKey,g=e.shiftKey,_=e.altKey,v=pe(d),w=f.toLowerCase();if(!(u!=null&&u.includes(v))&&!(u!=null&&u.includes(w))&&!["ctrl","control","unknown","meta","alt","shift","os"].includes(v))return!1;if(!r){if(i===!_&&w!=="alt"||c===!g&&w!=="shift")return!1;if(s){if(!h&&!m)return!1}else if(a===!h&&w!=="meta"&&w!=="os"||l===!m&&w!=="ctrl"&&w!=="control")return!1}return u&&u.length===1&&(u.includes(w)||u.includes(v))?!0:u?Xa(u):!u},oc=ce(void 0),ic=function(){return Dt(oc)};function hs(t,e){return t&&e&&typeof t=="object"&&typeof e=="object"?Object.keys(t).length===Object.keys(e).length&&Object.keys(t).reduce(function(n,r){return n&&hs(t[r],e[r])},!0):t===e}var sc=ce({hotkeys:[],enabledScopes:[],toggleScope:function(){},enableScope:function(){},disableScope:function(){}}),ac=function(){return Dt(sc)};function cc(t){var e=O(void 0);return hs(e.current,t)||(e.current=t),e.current}var ri=function(e){e.stopPropagation(),e.preventDefault(),e.stopImmediatePropagation()},lc=typeof window<"u"?ke:tt;function Fe(t,e,n,r){var i=K(null),a=i[0],s=i[1],c=O(!1),l=n instanceof Array?r instanceof Array?void 0:r:n,u=To(t)?t.join(l==null?void 0:l.splitKey):t,f=n instanceof Array?n:r instanceof Array?r:void 0,d=Tt(e,f??[]),m=O(d);f?m.current=d:m.current=e;var h=cc(l),g=ac(),_=g.enabledScopes,v=ic();return lc(function(){if(!((h==null?void 0:h.enabled)===!1||!nc(_,h==null?void 0:h.scopes))){var w=function(x,E){var L;if(E===void 0&&(E=!1),!(tc(x)&&!fs(x,h==null?void 0:h.enableOnFormTags))){if(a!==null){var M=a.getRootNode();if((M instanceof Document||M instanceof ShadowRoot)&&M.activeElement!==a&&!a.contains(M.activeElement)){ri(x);return}}(L=x.target)!=null&&L.isContentEditable&&!(h!=null&&h.enableOnContentEditable)||xr(u,h==null?void 0:h.splitKey).forEach(function(R){var S,I=Sr(R,h==null?void 0:h.combinationKey);if(rc(x,I,h==null?void 0:h.ignoreModifiers)||(S=I.keys)!=null&&S.includes("*")){if(h!=null&&h.ignoreEventWhen!=null&&h.ignoreEventWhen(x)||E&&c.current)return;if(Qa(x,I,h==null?void 0:h.preventDefault),!Ja(x,I,h==null?void 0:h.enabled)){ri(x);return}m.current(x,I),E||(c.current=!0)}})}},b=function(x){x.key!==void 0&&(us(pe(x.code)),((h==null?void 0:h.keydown)===void 0&&(h==null?void 0:h.keyup)!==!0||h!=null&&h.keydown)&&w(x))},T=function(x){x.key!==void 0&&(ds(pe(x.code)),c.current=!1,h!=null&&h.keyup&&w(x,!0))},A=a||(l==null?void 0:l.document)||document;return A.addEventListener("keyup",T),A.addEventListener("keydown",b),v&&xr(u,h==null?void 0:h.splitKey).forEach(function(p){return v.addHotkey(Sr(p,h==null?void 0:h.combinationKey,h==null?void 0:h.description))}),function(){A.removeEventListener("keyup",T),A.removeEventListener("keydown",b),v&&xr(u,h==null?void 0:h.splitKey).forEach(function(p){return v.removeHotkey(Sr(p,h==null?void 0:h.combinationKey,h==null?void 0:h.description))})}}},[a,u,h,_]),s}var tr={exports:{}};/*! + * Toastify js 1.12.0 + * https://github.com/apvarun/toastify-js + * @license MIT licensed + * + * Copyright (C) 2018 Varun A P + */var uc=tr.exports,oi;function dc(){return oi||(oi=1,function(t){(function(e,n){t.exports?t.exports=n():e.Toastify=n()})(uc,function(e){var n=function(s){return new n.lib.init(s)},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(s){return s||(s={}),this.options={},this.toastElement=null,this.options.text=s.text||n.defaults.text,this.options.node=s.node||n.defaults.node,this.options.duration=s.duration===0?0:s.duration||n.defaults.duration,this.options.selector=s.selector||n.defaults.selector,this.options.callback=s.callback||n.defaults.callback,this.options.destination=s.destination||n.defaults.destination,this.options.newWindow=s.newWindow||n.defaults.newWindow,this.options.close=s.close||n.defaults.close,this.options.gravity=s.gravity==="bottom"?"toastify-bottom":n.defaults.gravity,this.options.positionLeft=s.positionLeft||n.defaults.positionLeft,this.options.position=s.position||n.defaults.position,this.options.backgroundColor=s.backgroundColor||n.defaults.backgroundColor,this.options.avatar=s.avatar||n.defaults.avatar,this.options.className=s.className||n.defaults.className,this.options.stopOnFocus=s.stopOnFocus===void 0?n.defaults.stopOnFocus:s.stopOnFocus,this.options.onClick=s.onClick||n.defaults.onClick,this.options.offset=s.offset||n.defaults.offset,this.options.escapeMarkup=s.escapeMarkup!==void 0?s.escapeMarkup:n.defaults.escapeMarkup,this.options.ariaLive=s.ariaLive||n.defaults.ariaLive,this.options.style=s.style||n.defaults.style,s.backgroundColor&&(this.options.style.background=s.backgroundColor),this},buildToast:function(){if(!this.options)throw"Toastify is not initialized";var s=document.createElement("div");s.className="toastify on "+this.options.className,this.options.position?s.className+=" toastify-"+this.options.position:this.options.positionLeft===!0?(s.className+=" toastify-left",console.warn("Property `positionLeft` will be depreciated in further versions. Please use `position` instead.")):s.className+=" toastify-right",s.className+=" "+this.options.gravity,this.options.backgroundColor&&console.warn('DEPRECATION NOTICE: "backgroundColor" is being deprecated. Please use the "style.background" property.');for(var c in this.options.style)s.style[c]=this.options.style[c];if(this.options.ariaLive&&s.setAttribute("aria-live",this.options.ariaLive),this.options.node&&this.options.node.nodeType===Node.ELEMENT_NODE)s.appendChild(this.options.node);else if(this.options.escapeMarkup?s.innerText=this.options.text:s.innerHTML=this.options.text,this.options.avatar!==""){var l=document.createElement("img");l.src=this.options.avatar,l.className="toastify-avatar",this.options.position=="left"||this.options.positionLeft===!0?s.appendChild(l):s.insertAdjacentElement("afterbegin",l)}if(this.options.close===!0){var u=document.createElement("button");u.type="button",u.setAttribute("aria-label","Close"),u.className="toast-close",u.innerHTML="✖",u.addEventListener("click",(function(v){v.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?s.insertAdjacentElement("afterbegin",u):s.appendChild(u)}if(this.options.stopOnFocus&&this.options.duration>0){var d=this;s.addEventListener("mouseover",function(v){window.clearTimeout(s.timeOutValue)}),s.addEventListener("mouseleave",function(){s.timeOutValue=window.setTimeout(function(){d.removeElement(s)},d.options.duration)})}if(typeof this.options.destination<"u"&&s.addEventListener("click",(function(v){v.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"&&s.addEventListener("click",(function(v){v.stopPropagation(),this.options.onClick()}).bind(this)),typeof this.options.offset=="object"){var m=i("x",this.options),h=i("y",this.options),g=this.options.position=="left"?m:"-"+m,_=this.options.gravity=="toastify-top"?h:"-"+h;s.style.transform="translate("+g+","+_+")"}return s},showToast:function(){this.toastElement=this.buildToast();var s;if(typeof this.options.selector=="string"?s=document.getElementById(this.options.selector):this.options.selector instanceof HTMLElement||typeof ShadowRoot<"u"&&this.options.selector instanceof ShadowRoot?s=this.options.selector:s=document.body,!s)throw"Root element is not defined";var c=n.defaults.oldestFirst?s.firstChild:s.lastChild;return s.insertBefore(this.toastElement,c),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(s){s.className=s.className.replace(" on",""),window.setTimeout((function(){this.options.node&&this.options.node.parentNode&&this.options.node.parentNode.removeChild(this.options.node),s.parentNode&&s.parentNode.removeChild(s),this.options.callback.call(s),n.reposition()}).bind(this),400)}},n.reposition=function(){for(var s={top:15,bottom:15},c={top:15,bottom:15},l={top:15,bottom:15},u=document.getElementsByClassName("toastify"),f,d=0;d0?window.innerWidth:screen.width;g<=360?(u[d].style[f]=l[f]+"px",l[f]+=m+h):a(u[d],"toastify-left")===!0?(u[d].style[f]=s[f]+"px",s[f]+=m+h):(u[d].style[f]=c[f]+"px",c[f]+=m+h)}return this};function i(s,c){return c.offset[s]?isNaN(c.offset[s])?c.offset[s]:c.offset[s]+"px":"0px"}function a(s,c){return!s||typeof c!="string"?!1:!!(s.className&&s.className.trim().split(/\s+/gi).indexOf(c)>-1)}return n.lib.init.prototype=n.lib,n})}(tr)),tr.exports}var fc=dc();const hc=wo(fc);window._showToast=Ct;function Ct(t){typeof t=="string"&&(t={text:t});const{onClick:e,delay:n,...r}=t,i=hc({className:`${e||t.destination?"shiny-pill":""}`,gravity:"bottom",position:"center",...r,onClick:()=>{e==null||e(i)}});return n?setTimeout(()=>{i.showToast()},n):i.showToast(),i}function Zf(t,e,n,r){const i=O(t);tt(()=>{i.current=t},[t,n]),tt(()=>{!r||e===null||e===!1||i.current()},[r]),tt(()=>{if(e===null||e===!1)return;const s=setInterval(()=>i.current(),e);return()=>clearInterval(s)},[e])}function mc(t){const e=URL.parse("/compose/",window.location),{width:n,height:r}=window.screen,i=Math.max(0,(n-600)/2),a=Math.max(0,(r-450)/2),s=Math.min(n,600),c=Math.min(r,450),l=(t==null?void 0:t.uid)||Math.random(),u=window.open(e,"compose"+l,`width=${s},height=${c},left=${i},top=${a}`);return u?u.__COMPOSE__=t:alert(At._({id:"4S86wI"})),u}const pc=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);function gc(){if(pc){const t=document.createElement("input");t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.opacity="0",document.body.appendChild(t),t.focus(),setTimeout(()=>{document.body.removeChild(t)},500)}}const ms={x:()=>k(()=>import("./icons/close-line-YTE7hIJE.js"),[],import.meta.url),heart:()=>k(()=>import("./icons/heart-line-VwvWYh8h.js"),[],import.meta.url),bookmark:()=>k(()=>import("./icons/bookmark-line-D6jQ7QFs.js"),[],import.meta.url),"check-circle":()=>k(()=>import("./icons/check-circle-line-sE41WGxF.js"),[],import.meta.url),"x-circle":()=>k(()=>import("./icons/close-circle-line-qd3g541O.js"),[],import.meta.url),transfer:()=>k(()=>import("./icons/transfer-4-line-Q9QJoxz3.js"),[],import.meta.url),rocket:()=>k(()=>import("./icons/rocket-line-rZbVYYCZ.js"),[],import.meta.url),"arrow-left":{module:()=>k(()=>import("./icons/arrow-left-line-_YC6-XGG.js"),[],import.meta.url),rtl:!0},"arrow-right":{module:()=>k(()=>import("./icons/arrow-right-line-PypiEqpu.js"),[],import.meta.url),rtl:!0},"arrow-up":()=>k(()=>import("./icons/arrow-up-line-fcuKqhVE.js"),[],import.meta.url),"arrow-down":()=>k(()=>import("./icons/arrow-down-line-0TRJUP_K.js"),[],import.meta.url),earth:()=>k(()=>import("./icons/earth-line-t1Um8wpQ.js"),[],import.meta.url),lock:()=>k(()=>import("./icons/lock-line-0jNHqZpm.js"),[],import.meta.url),unlock:()=>k(()=>import("./icons/unlock-line-w3piJMVb.js"),[],import.meta.url),"eye-close":()=>k(()=>import("./icons/eye-close-line-lBiePPv9.js"),[],import.meta.url),"eye-open":()=>k(()=>import("./icons/eye-2-line-vz_Kw-rK.js"),[],import.meta.url),message:()=>k(()=>import("./icons/mail-line-5XLS6FEo.js"),[],import.meta.url),comment:{module:()=>k(()=>import("./icons/chat-3-line-F0xcdpXY.js"),[],import.meta.url),rtl:!0},comment2:{module:()=>k(()=>import("./icons/comment-2-line-xEXuT-Ip.js"),[],import.meta.url),rtl:!0},home:()=>k(()=>import("./icons/home-3-line-qJiZhXUH.js"),[],import.meta.url),notification:()=>k(()=>import("./icons/notification-line-olNPLtgS.js"),[],import.meta.url),follow:()=>k(()=>import("./icons/user-follow-line-k_GCWTtp.js"),[],import.meta.url),"follow-add":()=>k(()=>import("./icons/user-add-line-zzW9OULB.js"),[],import.meta.url),poll:[()=>k(()=>import("./icons/chart-bar-line-5r_DfN2w.js"),[],import.meta.url),"90deg"],pencil:()=>k(()=>import("./icons/pencil-line-bKXqElLR.js"),[],import.meta.url),quill:()=>k(()=>import("./icons/quill-pen-line-h_5-FsGz.js"),[],import.meta.url),at:()=>k(()=>import("./icons/at-line-9vJS_Hnl.js"),[],import.meta.url),attachment:()=>k(()=>import("./icons/attachment-line-C2PUa1Ke.js"),[],import.meta.url),upload:()=>k(()=>import("./icons/upload-3-line-Qsjvubiw.js"),[],import.meta.url),gear:()=>k(()=>import("./icons/settings-3-line-kt4MSpRv.js"),[],import.meta.url),more:()=>k(()=>import("./icons/more-3-line-wUD-Yhmj.js"),[],import.meta.url),more2:()=>k(()=>import("./icons/more-1-fill-je1-slyh.js"),[],import.meta.url),external:{module:()=>k(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rtl:!0},popout:{module:()=>k(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rtl:!0},popin:{module:()=>k(()=>import("./icons/external-link-line-8nOOkmFu.js"),[],import.meta.url),rotate:"180deg",rtl:!0},plus:()=>k(()=>import("./icons/add-circle-line--O-MfyNy.js"),[],import.meta.url),"chevron-left":{module:()=>k(()=>import("./icons/left-line-Jck0yVmC.js"),[],import.meta.url),rtl:!0},"chevron-right":{module:()=>k(()=>import("./icons/right-line-7VBoqLdz.js"),[],import.meta.url),rtl:!0},"chevron-down":()=>k(()=>import("./icons/down-line-9PeS5YhF.js"),[],import.meta.url),reply:{module:()=>k(()=>import("./icons/share-forward-line-4jL-2Q4u.js"),[],import.meta.url),rotate:"180deg",flip:"horizontal",rtl:!0},thread:()=>k(()=>import("./icons/route-line-2YYy3958.js"),[],import.meta.url),group:{module:()=>k(()=>import("./icons/group-line-JvhJklhQ.js"),[],import.meta.url),rtl:!0},bot:()=>k(()=>import("./icons/android-2-line-uPwvVubH.js"),[],import.meta.url),menu:()=>k(()=>import("./icons/rows-4-line-SxGPYpTa.js"),[],import.meta.url),list:{module:()=>k(()=>import("./icons/list-check-line-qNqx9Mm4.js"),[],import.meta.url),rtl:!0},search:()=>k(()=>import("./icons/search-2-line-G39AynEw.js"),[],import.meta.url),hashtag:()=>k(()=>import("./icons/hashtag-line-SS3QMu1R.js"),[],import.meta.url),info:()=>k(()=>import("./icons/information-line-8SOch6cR.js"),[],import.meta.url),shortcut:()=>k(()=>import("./icons/lightning-line-JMYUlCZM.js"),[],import.meta.url),user:()=>k(()=>import("./icons/user-4-line-zT_bpOrS.js"),[],import.meta.url),following:()=>k(()=>import("./icons/walk-line-CF7a5s4t.js"),[],import.meta.url),pin:()=>k(()=>import("./icons/pin-line-ULyRQyWZ.js"),[],import.meta.url),unpin:[()=>k(()=>import("./icons/pin-line-ULyRQyWZ.js"),[],import.meta.url),"180deg"],bus:()=>k(()=>import("./icons/bus-2-line-XuQdDZ_w.js"),[],import.meta.url),link:()=>k(()=>import("./icons/link-2-line-BUqp1EwN.js"),[],import.meta.url),history:()=>k(()=>import("./icons/history-line-yoG7K8wL.js"),[],import.meta.url),share:()=>k(()=>import("./icons/share-2-line-PYo-zN94.js"),[],import.meta.url),sparkles:()=>k(()=>import("./icons/sparkles-line-wjZWGZ1a.js"),[],import.meta.url),sparkles2:()=>k(()=>import("./icons/sparkles-2-line-g2FqdZ0R.js"),[],import.meta.url),exit:{module:()=>k(()=>import("./icons/exit-line-l-1uUgI7.js"),[],import.meta.url),rtl:!0},translate:()=>k(()=>import("./icons/translate-line-HpDtlqS2.js"),[],import.meta.url),play:()=>k(()=>import("./icons/play-fill-Ey-zv2eL.js"),[],import.meta.url),trash:()=>k(()=>import("./icons/delete-2-line-pjUduCFs.js"),[],import.meta.url),mute:{module:()=>k(()=>import("./icons/volume-mute-line-WthBoXru.js"),[],import.meta.url),rtl:!0},unmute:{module:()=>k(()=>import("./icons/volume-line-PZujbN8h.js"),[],import.meta.url),rtl:!0},block:()=>k(()=>import("./icons/forbid-circle-line-3FxopGoP.js"),[],import.meta.url),unblock:[()=>k(()=>import("./icons/forbid-circle-line-3FxopGoP.js"),[],import.meta.url),"180deg"],flag:()=>k(()=>import("./icons/flag-1-line-xvcg7G7Q.js"),[],import.meta.url),time:()=>k(()=>import("./icons/time-line-ThP0kTRr.js"),[],import.meta.url),refresh:()=>k(()=>import("./icons/refresh-2-line-t42qqclb.js"),[],import.meta.url),emoji2:()=>k(()=>import("./icons/emoji-2-line--uNVc2IC.js"),[],import.meta.url),filter:()=>k(()=>import("./icons/filter-2-line-KyjbFYlO.js"),[],import.meta.url),filters:()=>k(()=>import("./icons/filter-line-1KEfnWDm.js"),[],import.meta.url),chart:()=>k(()=>import("./icons/chart-line-line-pHaLt6yC.js"),[],import.meta.url),react:()=>k(()=>import("./icons/react-line-YfZPqZem.js"),[],import.meta.url),layout4:{module:()=>k(()=>import("./icons/layout-4-line-FOdnyEcZ.js"),[],import.meta.url),rtl:!0},layout5:()=>k(()=>import("./icons/layout-5-line-9Kks7dle.js"),[],import.meta.url),announce:{module:()=>k(()=>import("./icons/announcement-line-MSlAmDH1.js"),[],import.meta.url),rtl:!0},alert:()=>k(()=>import("./icons/alert-line-zyc6hy8V.js"),[],import.meta.url),round:()=>k(()=>import("./icons/round-fill-a0rplSmV.js"),[],import.meta.url),"arrow-up-circle":()=>k(()=>import("./icons/arrow-up-circle-line-e3kZqEZN.js"),[],import.meta.url),"arrow-down-circle":()=>k(()=>import("./icons/arrow-down-circle-line-mpqFtRtO.js"),[],import.meta.url),clipboard:{module:()=>k(()=>import("./icons/clipboard-line-9F_Yeo71.js"),[],import.meta.url),rtl:!0},"account-edit":()=>k(()=>import("./icons/user-edit-line-9VnWCh0X.js"),[],import.meta.url),"account-warning":()=>k(()=>import("./icons/user-warning-line-gL3RGb1N.js"),[],import.meta.url),keyboard:()=>k(()=>import("./icons/keyboard-line-10AZQcVH.js"),[],import.meta.url),cloud:()=>k(()=>import("./icons/cloud-line-abe0HgFS.js"),[],import.meta.url),month:{module:()=>k(()=>import("./icons/calendar-month-line-VoXZVWAe.js"),[],import.meta.url),rtl:!0},media:()=>k(()=>import("./icons/photo-album-line--GdJqjfq.js"),[],import.meta.url),speak:()=>k(()=>import("./icons/radar-line-ndI8IhOG.js"),[],import.meta.url),building:()=>k(()=>import("./icons/building-5-line-ew7lu83B.js"),[],import.meta.url),history2:{module:()=>k(()=>import("./icons/history-2-line-3yIVzoWo.js"),[],import.meta.url),rtl:!0},document:()=>k(()=>import("./icons/document-line--D6ooZg1.js"),[],import.meta.url),"arrows-right":{module:()=>k(()=>import("./icons/arrows-right-line-HF4HILdT.js"),[],import.meta.url),rtl:!0},code:()=>k(()=>import("./icons/code-line-h4RWLaak.js"),[],import.meta.url),copy:()=>k(()=>import("./icons/copy-2-line-mPSDKieb.js"),[],import.meta.url),quote:{module:()=>k(()=>import("./icons/quote-left-line-NQzeELMO.js"),[],import.meta.url),rtl:!0},settings:()=>k(()=>import("./icons/settings-6-line-ZgCBilgF.js"),[],import.meta.url),"heart-break":()=>k(()=>import("./icons/heart-crack-line-P3DoKfTT.js"),[],import.meta.url),"user-x":()=>k(()=>import("./icons/user-x-line-zIdph-gu.js"),[],import.meta.url),minimize:()=>k(()=>import("./icons/arrows-down-line-ovOF9r0o.js"),[],import.meta.url),celebrate:()=>k(()=>import("./icons/celebrate-line-2j4SZgI5.js"),[],import.meta.url)},vc={s:12,m:16,l:20,xl:24,xxl:32},ii={},_c=Da(function({width:t,height:e,body:n,rotate:r,flip:i}){return o("svg",{viewBox:`0 0 ${t} ${e}`,dangerouslySetInnerHTML:{__html:n},style:{transform:`${r?`rotate(${r})`:""} ${i?"scaleX(-1)":""}`}})},{isShallowEqual:!0,maxSize:Object.keys(ms).length,matchesArg:(t,e)=>t.icon===e.icon&&t.body===e.body});function P({icon:t,size:e="m",alt:n,title:r,class:i="",style:a={}}){if(!t)return null;const s=vc[e];let c=ms[t];if(!c)return null;let l,u,f=!1;Array.isArray(c)?[c,l,u]=c:typeof c=="object"&&({rotate:l,flip:u,rtl:f}=c,c=c.module);const[d,m]=K(ii[t]),h=O(t);return tt(()=>{d&&h.current===t||((async()=>{const g=await c();m(g.default),ii[t]=g.default})(),h.current=t)},[t]),o("span",{class:`icon ${i} ${f?"rtl-flip":""}`,title:r||n,style:{width:`${s}px`,height:`${s}px`,...a},"data-icon":t,children:d&&o(_c,{icon:t,width:d.width,height:d.height,body:d.body,rotate:l,flip:u})})}function yc(t,e=[]){!t||typeof t!="function"||tt(()=>{const n=new CloseWatcher;return n.addEventListener("close",t),()=>{n.destroy()}},e)}const bc=window.CloseWatcher?yc:()=>{},wc=document.getElementById("modal-container");function si(){return getComputedStyle(document.documentElement).getPropertyValue("--backdrop-theme-color")}function to({children:t,onClose:e,onClick:n,class:r,minimized:i}){if(!t)return null;const a=O();tt(()=>{let d=setTimeout(()=>{var h;const m=(h=a.current)==null?void 0:h.querySelector('[tabindex="-1"]');m&&m.focus()},100);return()=>clearTimeout(d)},[]);const s=window.CloseWatcher,c=Fe("esc",()=>{setTimeout(()=>{e==null||e()},0)},{enabled:!s&&!!e,keydown:!1,keyup:!0},[e]);bc(e,[e]),tt(()=>{const d=document.querySelectorAll(".deck-container");if(i){const m=d[d.length-1];m&&m.tabIndex===-1&&m.focus()}else t?d.forEach(m=>{m.setAttribute("inert","")}):d.forEach(m=>{m.removeAttribute("inert")});return()=>{d.forEach(m=>{m.removeAttribute("inert")})}},[t,i]);const l=O(),u=O();ke(()=>{if(t&&!i)if(Qr.local.get("theme")){const m=si();l.current=document.querySelector('meta[name="theme-color"][data-theme-setting="manual"]'),l.current&&(u.current=l.current.content,l.current.content=m)}else{const m=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",h=si();l.current=document.querySelector(`meta[name="theme-color"][media*="${m}"]`),l.current&&(u.current=l.current.content,l.current.content=h)}else l.current&&u.current&&(l.current.content=u.current);return()=>{l.current&&u.current&&(l.current.content=u.current)}},[t,i]);const f=o("div",{ref:d=>{var m;a.current=d,c(((m=d==null?void 0:d.querySelector)==null?void 0:m.call(d,'[tabindex="-1"]'))||d)},className:r,onClick:d=>{n==null||n(d),d.target===d.currentTarget&&(e==null||e(d))},tabIndex:i?0:"-1",inert:i,onFocus:d=>{var m,h;try{if(d.target===d.currentTarget){const g=(m=a.current)==null?void 0:m.querySelector('[tabindex="-1"]'),_=!!g&&((h=getComputedStyle(g))==null?void 0:h.pointerEvents)!=="none";g&&_&&g.focus()}}catch{}},children:t});return ir(f,wc)}const xo=t=>!!t&&t[0]==="o",eo=Oa,wn=(t,e)=>t===!0||!!(t&&t[e]),Vt=(t,e)=>typeof t=="function"?t(e):t,Ec="_szhsinMenu",Tc=t=>t[Ec];const Ge=(t,e)=>(e&&Object.keys(e).forEach(n=>{const r=t[n],i=e[n];typeof i=="function"&&r?t[n]=(...a)=>{i(...a),r(...a)}:t[n]=i}),t),xc=t=>{if(typeof t!="string")return{top:0,right:0,bottom:0,left:0};const e=t.trim().split(/\s+/,4).map(parseFloat),n=isNaN(e[0])?0:e[0],r=isNaN(e[1])?n:e[1];return{top:n,right:r,bottom:isNaN(e[2])?n:e[2],left:isNaN(e[3])?r:e[3]}},kr=t=>{for(;t;){if(t=t.parentNode,!t||t===document.body||!t.parentNode)return;const{overflow:e,overflowX:n,overflowY:r}=getComputedStyle(t);if(/auto|scroll|overlay|hidden/.test(e+r+n))return t}};function mr(t,e){return{"aria-disabled":t||void 0,tabIndex:e?0:-1}}function ai(t,e){for(let n=0;not(()=>{const i=e?`${t}__${e}`:t;let a=i;n&&Object.keys(n).forEach(c=>{const l=n[c];l&&(a+=` ${i}--${l===!0?c:`${c}-${l}`}`)});let s=typeof r=="function"?r(n):r;return typeof s=="string"&&(s=s.trim(),s&&(a+=` ${s}`)),a},[t,e,n,r]),Sc="szh-menu-container",Qt="szh-menu";const kc="arrow",So="item",Ac="divider",Ic="header",Cc="group",Lc="submenu";const ps=ce(),ko=ce({}),ar=ce({}),Ao=ce({}),Rc=ce({}),pr=ce({}),Pt=Object.freeze({ENTER:"Enter",ESC:"Escape",SPACE:" ",HOME:"Home",END:"End",LEFT:"ArrowLeft",RIGHT:"ArrowRight",UP:"ArrowUp",DOWN:"ArrowDown"}),wt=Object.freeze({RESET:0,SET:1,UNSET:2,INCREASE:3,DECREASE:4,FIRST:5,LAST:6,SET_INDEX:7}),En=Object.freeze({CLICK:"click",CANCEL:"cancel",BLUR:"blur",SCROLL:"scroll"}),Ve=Object.freeze({FIRST:"first",LAST:"last"}),Mc=Object.freeze({entering:"opening",entered:"open",exiting:"closing",exited:"closed"}),ci="absolute",Io="none",Co="menuitem",no={preventScroll:!0};const Pc=({className:t,containerRef:e,containerProps:n,children:r,isOpen:i,theming:a,transition:s,onClose:c})=>{const l=wn(s,"item");return o("div",{...Ge({onKeyDown:({key:d})=>{switch(d){case Pt.ESC:Vt(c,{key:d,reason:En.CANCEL});break}},onBlur:d=>{i&&!d.currentTarget.contains(d.relatedTarget)&&Vt(c,{reason:En.BLUR})}},n),className:Jt({block:Sc,modifiers:ot(()=>({theme:a,itemTransition:l}),[a,l]),className:t}),style:{position:"absolute",...n==null?void 0:n.style},ref:e,children:r})},Dc=()=>{let t,e=0;return{toggle:n=>{n?e++:e--,e=Math.max(e,0)},on:(n,r,i)=>{e?t||(t=setTimeout(()=>{t=0,r()},n)):i==null||i()},off:()=>{t&&(clearTimeout(t),t=0)}}},Oc=t=>{const[e,n]=K(),i=O({items:[],hoverIndex:-1,sorted:!1}).current,a=Tt((c,l)=>{const{items:u}=i;if(!c)i.items=[];else if(l)u.push(c);else{const f=u.indexOf(c);f>-1&&(u.splice(f,1),c.contains(document.activeElement)&&(t.current.focus(no),n()))}i.hoverIndex=-1,i.sorted=!1},[i,t]),s=Tt((c,l,u)=>{const{items:f,hoverIndex:d}=i,m=()=>{if(i.sorted)return;const _=t.current.querySelectorAll(".szh-menu__item");f.sort((v,w)=>ai(_,v)-ai(_,w)),i.sorted=!0};let h=-1,g;switch(c){case wt.RESET:break;case wt.SET:g=l;break;case wt.UNSET:g=_=>_===l?void 0:_;break;case wt.FIRST:m(),h=0,g=f[h];break;case wt.LAST:m(),h=f.length-1,g=f[h];break;case wt.SET_INDEX:m(),h=u,g=f[h];break;case wt.INCREASE:m(),h=d,h<0&&(h=f.indexOf(l)),h++,h>=f.length&&(h=0),g=f[h];break;case wt.DECREASE:m(),h=d,h<0&&(h=f.indexOf(l)),h--,h<0&&(h=f.length-1),g=f[h];break;default:}g||(h=-1),n(g),i.hoverIndex=h},[t,i]);return{hoverItem:e,dispatch:s,updateItems:a}},li=(t,e)=>Math.round(t)===e?t:e,gs=t=>{const e=t.getBoundingClientRect();return e.width=li(e.width,t.offsetWidth),e.height=li(e.height,t.offsetHeight),e},$c=(t,e,n,r)=>{const i=gs(e.current),a=t.current.getBoundingClientRect(),s=n===window?{left:0,top:0,right:document.documentElement.clientWidth,bottom:window.innerHeight}:n.getBoundingClientRect(),c=xc(r),l=g=>g+a.left-s.left-c.left,u=g=>g+a.left+i.width-s.right+c.right,f=g=>g+a.top-s.top-c.top,d=g=>g+a.top+i.height-s.bottom+c.bottom;return{menuRect:i,containerRect:a,getLeftOverflow:l,getRightOverflow:u,getTopOverflow:f,getBottomOverflow:d,confineHorizontally:g=>{let _=l(g);if(_<0)g-=_;else{const v=u(g);v>0&&(g-=v,_=l(g),_<0&&(g-=_))}return g},confineVertically:g=>{let _=f(g);if(_<0)g-=_;else{const v=d(g);v>0&&(g-=v,_=f(g),_<0&&(g-=_))}return g}}},Nc=({arrowRef:t,menuY:e,anchorRect:n,containerRect:r,menuRect:i})=>{let a=n.top-r.top-e+n.height/2;const s=t.current.offsetHeight*1.25;return a=Math.max(s,a),a=Math.min(a,i.height-s),a},Fc=({anchorRect:t,containerRect:e,menuRect:n,placeLeftorRightY:r,placeLeftX:i,placeRightX:a,getLeftOverflow:s,getRightOverflow:c,confineHorizontally:l,confineVertically:u,arrowRef:f,arrow:d,direction:m,position:h})=>{let g=m,_=r;h!=="initial"&&(_=u(_),h==="anchor"&&(_=Math.min(_,t.bottom-e.top),_=Math.max(_,t.top-e.top-n.height)));let v,w,b;return g==="left"?(v=i,h!=="initial"&&(w=s(v),w<0&&(b=c(a),(b<=0||-w>b)&&(v=a,g="right")))):(v=a,h!=="initial"&&(b=c(v),b>0&&(w=s(i),(w>=0||-w{let a=n.left-r.left-e+n.width/2;const s=t.current.offsetWidth*1.25;return a=Math.max(s,a),a=Math.min(a,i.width-s),a},Vc=({anchorRect:t,containerRect:e,menuRect:n,placeToporBottomX:r,placeTopY:i,placeBottomY:a,getTopOverflow:s,getBottomOverflow:c,confineHorizontally:l,confineVertically:u,arrowRef:f,arrow:d,direction:m,position:h})=>{let g=m==="top"?"top":"bottom",_=r;h!=="initial"&&(_=l(_),h==="anchor"&&(_=Math.min(_,t.right-e.left),_=Math.max(_,t.left-e.left-n.width)));let v,w,b;return g==="top"?(v=i,h!=="initial"&&(w=s(v),w<0&&(b=c(a),(b<=0||-w>b)&&(v=a,g="bottom")))):(v=a,h!=="initial"&&(b=c(v),b>0&&(w=s(i),(w>=0||-w{const{menuRect:u,containerRect:f}=l,d=n==="left"||n==="right";let m=d?r:i,h=d?i:r;if(t){const p=c.current;d?m+=p.offsetWidth:h+=p.offsetHeight}const g=s.left-f.left-u.width-m,_=s.right-f.left+m,v=s.top-f.top-u.height-h,w=s.bottom-f.top+h;let b,T;e==="end"?(b=s.right-f.left-u.width,T=s.bottom-f.top-u.height):e==="center"?(b=s.left-f.left-(u.width-s.width)/2,T=s.top-f.top-(u.height-s.height)/2):(b=s.left-f.left,T=s.top-f.top),b+=m,T+=h;const A={...l,anchorRect:s,placeLeftX:g,placeRightX:_,placeLeftorRightY:T,placeTopY:v,placeBottomY:w,placeToporBottomX:b,arrowRef:c,arrow:t,direction:n,position:a};switch(n){case"left":case"right":return Fc(A);case"top":case"bottom":default:return Vc(A)}},He=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?ke:tt;function ui(t,e){typeof t=="function"?t(e):t.current=e}const Ye=(t,e)=>ot(()=>t?e?n=>{ui(t,n),ui(e,n)}:t:e,[t,e]),di=-9999,vs=({ariaLabel:t,menuClassName:e,menuStyle:n,arrow:r,arrowProps:i={},anchorPoint:a,anchorRef:s,containerRef:c,containerProps:l,externalRef:u,parentScrollingRef:f,align:d="start",direction:m="bottom",position:h="auto",overflow:g="visible",setDownOverflow:_,repositionFlag:v,captureFocus:w=!0,state:b,endTransition:T,isDisabled:A,menuItemFocus:p,gap:x=0,shift:E=0,children:L,onClose:M,focusProps:R,...S})=>{const[I,N]=K({x:di,y:di}),[W,B]=K({}),[X,it]=K(),[rt,Q]=K(m),[Y]=K(Dc),[pt,ht]=ns(Z=>Z+1,1),{transition:V,boundingBoxRef:st,boundingBoxPadding:ut,rootMenuRef:Rt,rootAnchorRef:gt,scrollNodesRef:Nt,reposition:It,viewScroll:bt,submenuCloseDelay:Ft}=Dt(pr),{submenuCtx:xt,reposSubmenu:F=v}=Dt(ar),G=O(),ue=O(),ee=O(!1),{hoverItem:et,dispatch:z,updateItems:J}=Oc(G),U=xo(b),yt=wn(V,"open"),at=wn(V,"close"),vt=Nt.current,nt=Z=>{switch(Z.key){case Pt.HOME:z(wt.FIRST);break;case Pt.END:z(wt.LAST);break;case Pt.UP:z(wt.DECREASE,et);break;case Pt.DOWN:z(wt.INCREASE,et);break;case Pt.SPACE:Z.target&&Z.target.className.indexOf(Qt)!==-1&&Z.preventDefault();return;default:return}Z.preventDefault(),Z.stopPropagation()},Ut=()=>{b==="closing"&&it(),Vt(T)},In=Z=>{Z.stopPropagation(),Y.on(Ft,()=>{z(wt.RESET),G.current.focus(no)})},mt=Z=>{Z.target===Z.currentTarget&&Y.off()},dt=Tt(Z=>{var Wt;const St=s?(Wt=s.current)==null?void 0:Wt.getBoundingClientRect():a?{left:a.x,right:a.x,top:a.y,bottom:a.y,width:0,height:0}:null;if(!St)return;vt.menu||(vt.menu=(st?st.current:kr(Rt.current))||window);const kt=$c(c,G,vt.menu,ut);let{arrowX:$t,arrowY:ft,x:be,y:fe,computedDirection:Le}=Hc({arrow:r,align:d,direction:m,gap:x,shift:E,position:h,anchorRect:St,arrowRef:ue,positionHelpers:kt});const{menuRect:Ln}=kt,Je=Ln.height;if(!Z&&g!=="visible"){const{getTopOverflow:Rn,getBottomOverflow:Kt}=kt;let Zt,tn;const en=Kt(fe);if(en>0)Zt=Je-en,tn=en;else{const ct=Rn(fe);ct<0&&(Zt=Je+ct,tn=0-ct,Zt>=0&&(fe-=ct))}Zt>=0&&it({height:Zt,overflowAmt:tn})}r&&B({x:$t,y:ft}),N({x:be,y:fe}),Q(Le)},[r,d,ut,m,x,E,h,g,a,s,c,st,Rt,vt]);He(()=>{U&&(dt(),ee.current&&ht()),ee.current=U},[U,dt,F]),He(()=>{X&&!_&&(G.current.scrollTop=0)},[X,_]),He(()=>J,[J]),tt(()=>{let{menu:Z}=vt;if(!U||!Z)return;if(Z=Z.addEventListener?Z:window,!vt.anchors){vt.anchors=[];let ft=kr(gt&>.current);for(;ft&&ft!==Z;)vt.anchors.push(ft),ft=kr(ft)}let St=bt;if(vt.anchors.length&&St==="initial"&&(St="auto"),St==="initial")return;const kt=()=>{St==="auto"?eo(()=>dt(!0)):Vt(M,{reason:En.SCROLL})},$t=vt.anchors.concat(bt!=="initial"?Z:[]);return $t.forEach(ft=>ft.addEventListener("scroll",kt)),()=>$t.forEach(ft=>ft.removeEventListener("scroll",kt))},[gt,vt,U,M,bt,dt]);const jt=!!X&&X.overflowAmt>0;tt(()=>{if(jt||!U||!f)return;const Z=()=>eo(dt),St=f.current;return St.addEventListener("scroll",Z),()=>St.removeEventListener("scroll",Z)},[U,jt,f,dt]),tt(()=>{if(!U||typeof ResizeObserver!="function"||It==="initial")return;const Z=[],St=new ResizeObserver(ft=>ft.forEach(({target:be})=>{Z.indexOf(be)<0?Z.push(be):$a(()=>{dt(),ht()})})),kt={box:"border-box"};St.observe(G.current,kt);const $t=s==null?void 0:s.current;return $t&&St.observe($t,kt),()=>St.disconnect()},[U,It,s,dt]),tt(()=>{if(!U){z(wt.RESET),at||it();return}const{position:Z,alwaysUpdate:St}=p||{},kt=()=>{Z===Ve.FIRST?z(wt.FIRST):Z===Ve.LAST?z(wt.LAST):Z>=-1&&z(wt.SET_INDEX,void 0,Z)};if(St)kt();else if(w){const $t=setTimeout(()=>{const ft=G.current;ft&&!ft.contains(document.activeElement)&&(ft.focus(no),kt())},yt?170:100);return()=>clearTimeout($t)}},[U,yt,at,w,p,z]);const Ot=ot(()=>({isParentOpen:U,submenuCtx:Y,dispatch:z,updateItems:J}),[U,Y,z,J]);let qt,Ie;X&&(_?Ie=X.overflowAmt:qt=X.height);const Ce=ot(()=>({reposSubmenu:pt,submenuCtx:Y,overflow:g,overflowAmt:Ie,parentMenuRef:G,parentDir:rt}),[pt,Y,g,Ie,rt]),Xe=qt>=0?{maxHeight:qt,overflow:g}:void 0,Cn=ot(()=>({state:b,align:d,dir:rt}),[b,d,rt]),_t=ot(()=>({dir:rt}),[rt]),Qe=Jt({block:Qt,element:kc,modifiers:_t,className:i.className}),de=o("ul",{role:"menu","aria-label":t,...mr(A),...Ge({onPointerEnter:xt==null?void 0:xt.off,onPointerMove:In,onPointerLeave:mt,onKeyDown:nt,onAnimationEnd:Ut},S),ref:Ye(u,G),className:Jt({block:Qt,modifiers:Cn,className:e}),style:{...n,...Xe,margin:0,display:b==="closed"?"none":void 0,position:ci,left:I.x,top:I.y},children:[r&&o("li",{"aria-hidden":!0,...i,className:Qe,style:{display:"block",position:ci,left:W.x,top:W.y,...i.style},ref:ue}),o(ar.Provider,{value:Ce,children:o(ko.Provider,{value:Ot,children:o(ps.Provider,{value:et,children:Vt(L,Cn)})})})]});return l?o(Pc,{...l,isOpen:U,children:de}):de},_s=_e(function({"aria-label":e,className:n,containerProps:r,initialMounted:i,unmountOnClose:a,transition:s,transitionTimeout:c,boundingBoxRef:l,boundingBoxPadding:u,reposition:f="auto",submenuOpenDelay:d=300,submenuCloseDelay:m=150,viewScroll:h="initial",portal:g,theming:_,onItemClick:v,...w},b){const T=O(null),A=O({}),{anchorRef:p,state:x,onClose:E}=w,L=ot(()=>({initialMounted:i,unmountOnClose:a,transition:s,transitionTimeout:c,boundingBoxRef:l,boundingBoxPadding:u,rootMenuRef:T,rootAnchorRef:p,scrollNodesRef:A,reposition:f,viewScroll:h,submenuOpenDelay:d,submenuCloseDelay:m}),[i,a,s,c,p,l,u,f,h,d,m]),M=ot(()=>({handleClick(S,I){S.stopPropagation||Vt(v,S);let N=S.keepOpen;N===void 0&&(N=I&&S.key===Pt.SPACE),N||Vt(E,{value:S.value,key:S.key,reason:En.CLICK})},handleClose(S){Vt(E,{key:S,reason:En.CLICK})}}),[v,E]);if(!x)return null;const R=o(pr.Provider,{value:L,children:o(Ao.Provider,{value:M,children:o(vs,{...w,ariaLabel:e||"Menu",externalRef:b,containerRef:T,containerProps:{className:n,containerRef:T,containerProps:r,theming:_,transition:s,onClose:E}})})});return g===!0&&typeof document<"u"?ir(R,document.body):g?g.target?ir(R,g.target):g.stablePosition?null:R:R}),ro=0,oo=1,cr=2,lr=3,ur=4,Bc=5,ys=6,Uc=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],bs=t=>({_s:t,status:Uc[t],isEnter:tur}),io=t=>t?ys:Bc,jc=(t,e)=>{switch(t){case oo:case ro:return cr;case ur:case lr:return io(e)}},Kc=t=>typeof t=="object"?[t.enter,t.exit]:[t,t],Wc=(t,e)=>setTimeout(()=>{isNaN(document.body.offsetTop)||t(e+1)},0),fi=(t,e,n,r,i)=>{clearTimeout(r.current);const a=bs(t);e(a),n.current=a,i&&i({current:a})},Zc=({enter:t=!0,exit:e=!0,preEnter:n,preExit:r,timeout:i,initialEntered:a,mountOnEnter:s,unmountOnExit:c,onStateChange:l}={})=>{const[u,f]=K(()=>bs(a?cr:io(s))),d=O(u),m=O(),[h,g]=Kc(i),_=Tt(()=>{const w=jc(d.current._s,c);w&&fi(w,f,d,m,l)},[l,c]),v=Tt(w=>{const b=A=>{switch(fi(A,f,d,m,l),A){case oo:h>=0&&(m.current=setTimeout(_,h));break;case ur:g>=0&&(m.current=setTimeout(_,g));break;case ro:case lr:m.current=Wc(b,A);break}},T=d.current.isEnter;typeof w!="boolean"&&(w=!T),w?!T&&b(t?n?ro:oo:cr):T&&b(e?r?lr:ur:io(c))},[_,l,t,e,n,r,h,g,c]);return tt(()=>()=>clearTimeout(m.current),[]),[u,v,_]};const qc=({initialOpen:t,initialMounted:e,unmountOnClose:n,transition:r,transitionTimeout:i=500,onMenuChange:a}={})=>{const s=wn(r,"open"),c=wn(r,"close"),[{status:l},u,f]=Zc({initialEntered:t,mountOnEnter:!e,unmountOnExit:n,timeout:i,enter:s,exit:c,onStateChange:Tt(({current:{isEnter:d,isResolved:m}})=>{!a||d&&s&&m||!d&&c&&m||a({open:d})},[a,s,c])});return[{state:Mc[l],endTransition:f},u]},ws=t=>{const[e,n]=qc(t),[r,i]=K(),a=(s,c)=>{i({position:s,alwaysUpdate:c}),n(!0)};return[{menuItemFocus:r,...e},n,a]},Gc=(t,e)=>{const[n]=K({});return{onMouseDown:()=>{n.v=t&&t!=="closed"},onClick:r=>n.v?n.v=!1:e(!0,r)}},Yc=parseInt(Na)<19,Xc=_e(function({"aria-label":e,captureFocus:n,initialOpen:r,menuButton:i,instanceRef:a,onMenuChange:s,...c},l){const[u,f,d]=ws({...c,onMenuChange:s}),{state:m}=u,h=xo(m),g=O(null),_=Gc(m,(p,x)=>d(x.detail?void 0:Ve.FIRST)),v=Tt(p=>{f(!1),p.key&&g.current.focus()},[f]),w=p=>{switch(p.key){case Pt.UP:d(Ve.LAST);break;case Pt.DOWN:d(Ve.FIRST);break;default:return}p.preventDefault()},b=Vt(i,{open:h});if(!b||!b.type)throw new Error("Menu requires a menuButton prop.");const T={...Ge({onKeyDown:w,..._},b.props),ref:Ye(Yc?b.ref:b.props.ref,g)};Tc(b.type)==="MenuButton"&&(T.isOpen=h);const A=rs(b,T);return os(a,()=>({openMenu:d,closeMenu:()=>f(!1)})),o($,{children:[A,o(_s,{...c,...u,"aria-label":e||(typeof b.props.children=="string"?b.props.children:"Menu"),anchorRef:g,ref:l,onClose:v})]})}),Lo=(t,e)=>{const n=qe(e),r=_e((i,a)=>{const s=O(null);return o(n,{...i,itemRef:s,externalRef:a,isHovering:Dt(ps)===s.current})});return r.displayName=`WithHovering(${t})`,r},Es=(t,e,n)=>{He(()=>{if(t)return;const r=e.current;return n(r,!0),()=>{n(r)}},[t,e,n])},Qc=Lo("SubMenu",function({"aria-label":e,className:n,disabled:r,direction:i,label:a,openTrigger:s,onMenuChange:c,isHovering:l,instanceRef:u,itemRef:f,captureFocus:d,repositionFlag:m,itemProps:h={},...g}){const _=Dt(pr),{rootMenuRef:v,submenuOpenDelay:w,submenuCloseDelay:b}=_,{parentMenuRef:T,parentDir:A,overflow:p}=Dt(ar),{isParentOpen:x,submenuCtx:E,dispatch:L,updateItems:M}=Dt(ko),R=p!=="visible",[S,I,N]=ws({..._,onMenuChange:c}),{state:W}=S,B=!!r,X=xo(W),it=O(null),[rt]=K({v:0}),Q=()=>{E.off(),rt.v&&(clearTimeout(rt.v),rt.v=0)},Y=(...F)=>{Q(),pt(),!B&&N(...F)},pt=()=>!l&&!B&&L(wt.SET,f.current),ht=F=>{pt(),s||(rt.v=setTimeout(()=>eo(Y),Math.max(F,0)))},V=F=>{B||(F.stopPropagation(),!(rt.v||X)&&E.on(b,()=>ht(w-b),()=>ht(w)))},st=()=>{Q(),X||L(wt.UNSET,f.current)},ut=F=>{if(l)switch(F.key){case Pt.ENTER:F.preventDefault();case Pt.SPACE:case Pt.RIGHT:s!=="none"&&Y(Ve.FIRST)}},Rt=F=>{let G=!1;switch(F.key){case Pt.LEFT:X&&(f.current.focus(),I(!1),G=!0);break;case Pt.RIGHT:X||(G=!0);break}G&&(F.preventDefault(),F.stopPropagation())};Es(B,f,M),tt(()=>E.toggle(X),[E,X]),tt(()=>()=>clearTimeout(rt.v),[rt]),tt(()=>{l&&x?f.current.focus():I(!1)},[l,x,I,f]),os(u,()=>({openMenu:(...F)=>{x&&Y(...F)},closeMenu:()=>{X&&(f.current.focus(),I(!1))}}));const gt=ot(()=>({open:X,hover:l,disabled:B,submenu:!0}),[X,l,B]),{ref:Nt,className:It,...bt}=h,Ft=Ge({onPointerEnter:E.off,onPointerMove:V,onPointerLeave:st,onKeyDown:ut,onClick:()=>s!=="none"&&Y()},bt),xt=()=>{const F=o(vs,{...g,...S,ariaLabel:e||(typeof a=="string"?a:"Submenu"),anchorRef:f,containerRef:R?v:it,direction:i||(A==="right"||A==="left"?A:"right"),parentScrollingRef:R&&T,isDisabled:B}),G=v.current;return R&&G?ir(F,G):F};return o("li",{className:Jt({block:Qt,element:Lc,className:n}),style:{position:"relative"},role:Io,ref:it,onKeyDown:Rt,children:[o("div",{role:Co,"aria-haspopup":!0,"aria-expanded":X,...mr(B,l),...Ft,ref:Ye(Nt,f),className:Jt({block:Qt,element:So,modifiers:gt,className:It}),children:ot(()=>Vt(a,gt),[a,gt])}),W&&xt()]})}),Ts=(t,e,n,r)=>{const{submenuCloseDelay:i}=Dt(pr),{isParentOpen:a,submenuCtx:s,dispatch:c,updateItems:l}=Dt(ko),u=()=>{!n&&!r&&c(wt.SET,t.current)},f=()=>{!r&&c(wt.UNSET,t.current)},d=g=>{n&&!g.currentTarget.contains(g.relatedTarget)&&f()},m=g=>{r||(g.stopPropagation(),s.on(i,u,u))},h=(g,_)=>{s.off(),!_&&f()};return Es(r,t,l),tt(()=>{n&&a&&e.current&&e.current.focus()},[e,n,a]),{setHover:u,onBlur:d,onPointerMove:m,onPointerLeave:h}},Et=Lo("MenuItem",function({className:e,value:n,href:r,type:i,checked:a,disabled:s,children:c,onClick:l,isHovering:u,itemRef:f,externalRef:d,...m}){const h=!!s,{setHover:g,..._}=Ts(f,f,u,h),v=Dt(Ao),w=Dt(Rc),b=i==="radio",T=i==="checkbox",A=!!r&&!h&&!b&&!T,p=b?w.value===n:T?!!a:!1,x=S=>{if(h){S.stopPropagation(),S.preventDefault();return}const I={value:n,syntheticEvent:S};S.key!==void 0&&(I.key=S.key),T&&(I.checked=!p),b&&(I.name=w.name),Vt(l,I),b&&Vt(w.onRadioChange,I),v.handleClick(I,T||b)},E=S=>{if(u)switch(S.key){case Pt.ENTER:S.preventDefault();case Pt.SPACE:A?f.current.click():x(S)}},L=ot(()=>({type:i,disabled:h,hover:u,checked:p,anchor:A}),[i,h,u,p,A]),M=Ge({..._,onPointerDown:g,onKeyDown:E,onClick:x},m),R={role:b?"menuitemradio":T?"menuitemcheckbox":Co,"aria-checked":b||T?p:void 0,...mr(h,u),...M,ref:Ye(d,f),className:Jt({block:Qt,element:So,modifiers:L,className:e}),children:ot(()=>Vt(c,L),[c,L])};return A?o("li",{role:Io,children:o("a",{href:r,...R})}):o("li",{...R})}),Jc=Lo("FocusableItem",function({className:e,disabled:n,children:r,isHovering:i,itemRef:a,externalRef:s,...c}){const l=!!n,u=O(null),{setHover:f,onPointerLeave:d,...m}=Ts(a,u,i,l),{handleClose:h}=Dt(Ao),g=ot(()=>({disabled:l,hover:i,focusable:!0}),[l,i]),_=ot(()=>Vt(r,{...g,ref:u,closeMenu:h}),[r,g,h]),v=Ge({...m,onPointerLeave:w=>d(w,!0),onFocus:f},c);return o("li",{role:Co,...mr(l),...v,ref:Ye(s,a),className:Jt({block:Qt,element:So,modifiers:g,className:e}),children:_})}),an=qe(_e(function({className:e,...n},r){return o("li",{role:"separator",...n,ref:r,className:Jt({block:Qt,element:Ac,className:e})})})),qf=qe(_e(function({className:e,...n},r){return o("li",{role:Io,...n,ref:r,className:Jt({block:Qt,element:Ic,className:e})})})),Gf=_e(function({className:e,style:n,takeOverflow:r,...i},a){const s=O(null),[c,l]=K(),{overflow:u,overflowAmt:f}=Dt(ar);return He(()=>{let d;r&&f>=0&&(d=gs(s.current).height-f,d<0&&(d=0)),l(d>=0?{maxHeight:d,overflow:u}:void 0)},[r,u,f]),He(()=>{c&&(s.current.scrollTop=0)},[c]),o("div",{...i,ref:Ye(a,s),className:Jt({block:Qt,element:Cc,className:e}),style:{...n,...c}})});const hi={s:16,m:20,l:24,xl:32,xxl:50,xxxl:64},cn={},fn=window.OffscreenCanvas?new OffscreenCanvas(1,1):document.createElement("canvas"),er=fn.getContext("2d",{willReadFrequently:!0});er.imageSmoothingEnabled=!1;const tl=/missing\.png$/;function el({url:t,size:e,alt:n="",squircle:r,...i}){e=hi[e]||e||hi.m;const a=O(),s=tl.test(t);return o("span",{ref:a,class:`avatar ${r?"squircle":""} ${cn[t]?"has-alpha":""}`,style:{width:e,height:e},title:n,...i,children:!!t&&o("img",{src:t,width:e,height:e,alt:n,loading:"lazy",decoding:"async",fetchPriority:"low",crossOrigin:cn[t]===void 0&&!s?"anonymous":void 0,onError:c=>{c.target.crossOrigin&&(c.target.crossOrigin=null,c.target.src=t)},onLoad:c=>{a.current&&(a.current.dataset.loaded=!0),cn[t]===void 0&&(s||setTimeout(()=>{try{const{width:l,height:u}=c.target;fn.width!==l&&(fn.width=l),fn.height!==u&&(fn.height=u),er.drawImage(c.target,0,0);const f=er.getImageData(0,0,l,u),d=f.data.filter((m,h)=>h%4===3&&m<=128).length/(f.data.length/4)>.1;d&&a.current.classList.add("has-alpha"),cn[t]=d,er.clearRect(0,0,l,u)}catch{cn[t]=!1}},1))}})})}const ie=Lt(el),Ue=_e((t,e)=>{var c;let n;try{n=Fa()}catch{}let r=(location.hash||"").replace(/^#/,"").trim();r===""&&(r="/");const{to:i,...a}=t;if(r&&r!=="/"&&r.includes("?")){const l=URL.parse(r,location.origin);if((c=l==null?void 0:l.searchParams)!=null&&c.size){const u=Array.from(l.searchParams.entries()).map(([f,d])=>`${f}=${encodeURIComponent(d)}`).join("&");r=l.pathname+"?"+u}}const s=r===i||decodeURIComponent(r)===i;return o("a",{ref:e,href:`#${i}`,...a,class:`${t.class||""} ${s?"is-active":""}`,onClick:l=>{var u,f,d;(f=(u=l.currentTarget)==null?void 0:u.parentNode)!=null&&f.closest("a")&&l.stopPropagation(),n&&(H.prevLocation=n),(d=t.onClick)==null||d.call(t,l)}})});let so=!1;const nl=new MutationObserver(t=>{t.forEach(e=>{if(e.type==="attributes"){const{dir:n}=e.target;n==="rtl"?so=!0:so=!1}})});nl.observe(document.documentElement,{attributes:!0,attributeFilter:["dir"]});function ao(){return so}const rl=document.documentElement,Un=getComputedStyle(rl),ol=8;let xs=[0,0,0,0];function Ss(){const t=Un.getPropertyValue("--sai-top"),e=Un.getPropertyValue("--sai-right"),n=Un.getPropertyValue("--sai-bottom"),r=Un.getPropertyValue("--sai-left");xs=[Math.max(0,parseInt(t,10)),Math.max(0,parseInt(e,10)),Math.max(0,parseInt(n,10)),Math.max(0,parseInt(r,10))]}requestAnimationFrame(Ss);function ks(t=[]){return xs.map((n,r)=>(n||ol)+(t[r]||0)).join(" ")}CSS.supports("top: env(safe-area-inset-top)")&&window.addEventListener("resize",Ss,{passive:!0});function il(){const[t,e]=K({width:null,height:null});return ke(()=>{const n=()=>{e({width:window.innerWidth,height:window.innerHeight})};return n(),window.addEventListener("resize",n,{passive:!0}),()=>{window.removeEventListener("resize",n)}},[]),t}function As(t){const{containerProps:e,instanceRef:n,align:r}=t,i=il(),a=n!=null&&n.current?n:O(),s=ao()?r==="end"?"start":r==="start"?"end":r:r;return o(Xc,{boundingBoxPadding:ks(),repositionFlag:`${i.width}x${i.height}`,unmountOnClose:!0,...t,align:s,instanceRef:a,containerProps:{onClick:c=>{var l,u,f;c.target===c.currentTarget&&((u=(l=a.current)==null?void 0:l.closeMenu)==null||u.call(l)),(f=e==null?void 0:e.onClick)==null||f.call(e,c)},...e}})}function sl(t){const e=O();return o(Qc,{...t,instanceRef:e,itemProps:{onPointerMove:n=>{var r,i;n.pointerType==="touch"&&((i=(r=e.current)==null?void 0:r.openMenu)==null||i.call(r))},onPointerLeave:n=>{var r,i;n.pointerType==="touch"&&((i=(r=e.current)==null?void 0:r.openMenu)==null||i.call(r))},...t.itemProps}})}function Ar({subMenu:t=!1,confirm:e=!0,confirmLabel:n,menuItemClassName:r,menuFooter:i,menuExtras:a,...s}){const{children:c,onClick:l,...u}=s;return e?o(t?sl:As,{openTrigger:"clickOnly",direction:"bottom",overflow:"auto",gap:-8,shift:8,menuClassName:"menu-emphasized",...u,menuButton:t?void 0:c,label:t?c:void 0,children:[o(Et,{className:r,onClick:l,children:n}),a,i]}):t?o(Et,{...s}):l?za(c,{onClick:l}):c}function mi(t){const{className:e,disabled:n,...r}=t;return o(Jc,{className:e,disabled:n,children:({ref:i,closeMenu:a})=>o(Ue,{...r,ref:i,onClick:({detail:s})=>a(s===0?"Enter":void 0)})})}function co({staticUrl:t,alt:e,url:n}){return o("picture",{children:[t&&o("source",{srcset:t,media:"(prefers-reduced-motion: reduce)"}),o("img",{src:n,alt:e,class:"shortcode-emoji emoji",width:"16",height:"16",loading:"lazy",decoding:"async",fetchPriority:"low"},e||n)]})}const al=Lt(t=>new RegExp(`:(${t.join("|")}):`,"g"));function cl({text:t,emojis:e}){if(!t)return"";if(!(e!=null&&e.length)||t.indexOf(":")===-1)return t;const n=al(e.map(i=>i.shortcode));return t.split(n).map((i,a)=>{const s=e.find(c=>c.shortcode===i);if(s){const{url:c,staticUrl:l}=s;return o(co,{staticUrl:l,alt:i,url:c},i+"-"+a)}return i})}const je=Lt(cl),ll=Lt(t=>{const e={sensitivity:"base"};try{return new Intl.Collator(t||void 0,e)}catch{return new Intl.Collator(void 0,e)}}),ul=/([^@]+)(@.+)/i,dl=/(\:(\w|\+|\-)+\:)(?=|[\!\.\?]|$)/g,fl=/\s+/g,hl=/[^a-z0-9@\.]/gi;function ml({account:t,instance:e,showAvatar:n,showAcct:r,short:i,external:a,onClick:s}){const{i18n:c}=te(),{acct:l,avatar:u,avatarStatic:f,id:d,url:m,displayName:h,emojis:g,bot:_,username:v}=t,[w,b,T]=l.match(ul)||[,l];e||(e=sr().instance);const A=v.toLowerCase().trim(),p=(h||"").toLowerCase().trim(),x=p.replace(dl,"").replace(fl,""),E=x.replace(hl,""),L=!i&&(A===p||A===x||A===E||ll(c.locale).compare(A,x)===0)||E===l.toLowerCase();return o("a",{class:`name-text ${r?"show-acct":""} ${i?"short":""}`,href:m,target:a?"_blank":null,title:h?`${h} (${T?"":"@"}${l})`:`${T?"":"@"}${l}`,onClick:M=>{if(!a&&!M.shiftKey){if(M.preventDefault(),M.stopPropagation(),s)return s(M);if(M.metaKey||M.ctrlKey||M.shiftKey||M.which===2){const R=`#/${e}/a/${d}`;window.open(R,"_blank");return}H.showAccount={account:t,instance:e}}},children:[n&&o($,{children:[o(ie,{url:f||u,squircle:_})," "]}),h&&!i?o($,{children:[o("b",{dir:"auto",children:o(je,{text:h,emojis:g})}),!r&&!L&&o($,{children:[" ",o("i",{class:"bidi-isolate",children:["@",v]})]})]}):i?o("i",{children:v}):o("b",{children:v}),r&&o($,{children:[o("br",{}),o("i",{class:"bidi-isolate",children:[T?"":"@",b,!!T&&o("span",{class:"ib",children:T})]})]})]})}const ve=Lt(ml),jn={"zh-YUE":"YUE",zh_HANT:"zh-Hant"},Ir=Lt(t=>new Intl.DisplayNames(t||void 0,{type:"language"}));function pl(t){let e,n;typeof t=="object"&&({code:t,locale:e,fallback:n}=t);try{const r=Ir(e||At.locale).of(t);if(r!==t)return r;if(!n){const i=Ir(t).of(t);if(i!==t)return i}return n||""}catch{if(jn[t])try{const i=Ir(jn[e]||e||At.locale).of(jn[t]);return i!==jn[t]?i:n||""}catch{}return n||""}}const ln=Lt(pl);function pi(t){if(t instanceof Date)return!isNaN(t.getTime());{const e=new Date(t);return!isNaN(e.getTime())}}const gl=Lt(()=>new Intl.DateTimeFormat().resolvedOptions().locale),gi=Lt((t,e={})=>{const n=t.replace(/-[a-z]+$/i,""),r=bn([n],[gl()],t);try{return new Intl.DateTimeFormat(r,e)}catch{}try{return new Intl.DateTimeFormat(t,e)}catch{}return new Intl.DateTimeFormat(void 0,e)}),vl=Lt(t=>new Intl.RelativeTimeFormat(t||void 0)),Ke=60,We=60*Ke,lo=24*We,_l=t=>{const e=vl(At.locale),n=(t.getTime()-Date.now())/1e3,r=Math.abs(n);return r{const e=(Date.now()-t.getTime())/1e3;return el+1,0),i=ot(()=>new Date(t),[t]),[a,s,c]=ot(()=>{if(!pi(i))return[""+t,"",""];let l;if(e==="micro"){const u=new Date;(u.getTime()-i.getTime())/1e3/lo<=1?l=yl(i):u.getFullYear()===i.getFullYear()?l=gi(At.locale,{year:void 0,month:"short",day:"numeric"}).format(i):l=gi(At.locale,{dateStyle:"short"}).format(i)}return l||(l=_l(i)),[l,i.toISOString(),i.toLocaleString()]},[i,e,n]);return tt(()=>{if(!pi(i))return;let l,u;function f(){u=requestAnimationFrame(()=>{r(),d()})}function d(){const m=(Date.now()-i.getTime())/1e3;m{clearTimeout(l),cancelAnimationFrame(u)}},[]),o("time",{datetime:s,title:c,children:a})}const bl=[{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"}],wl=Lt(()=>[new Intl.DateTimeFormat().resolvedOptions().locale,...navigator.languages]),El=()=>bn(wl(),bl.map(t=>t.code.replace("_","-")),"en");function Is(t=!1){if(t){const{contentTranslationTargetLanguage:e}=H.settings;if(e)return e}return El()}const vi=["byte","kilobyte","megabyte","gigabyte","terabyte","petabyte"];function Yf(t){const e=Math.min(Math.floor(Math.log2(t)/10),vi.length-1),n=t/1024**e;return At.number(n,{style:"unit",unit:vi[e],unitDisplay:"narrow",maximumFractionDigits:0})}const Tl=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,dr=t=>{if(typeof t!="string")throw new TypeError("Invalid argument expected string");const e=t.match(Tl);if(!e)throw new Error(`Invalid argument not valid semver ('${t}' received)`);return e.shift(),e},_i=t=>t==="*"||t==="x"||t==="X",yi=t=>{const e=parseInt(t,10);return isNaN(e)?t:e},xl=(t,e)=>typeof t!=typeof e?[String(t),String(e)]:[t,e],Sl=(t,e)=>{if(_i(t)||_i(e))return 0;const[n,r]=xl(yi(t),yi(e));return n>r?1:n{for(let n=0;n{const n=dr(t),r=dr(e),i=n.pop(),a=r.pop(),s=ze(n,r);return s!==0?s:i&&a?ze(i.split("."),a.split(".")):i||a?i?-1:1:0},Al=(t,e,n)=>{Il(n);const r=kl(t,e);return Cs[n].includes(r)},Cs={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},bi=Object.keys(Cs),Il=t=>{if(typeof t!="string")throw new TypeError(`Invalid operator type, expected string but got ${typeof t}`);if(bi.indexOf(t)===-1)throw new Error(`Invalid operator, expected one of ${bi.join("|")}`)},nr=(t,e)=>{if(e=e.replace(/([><=]+)\s+/g,"$1"),e.includes("||"))return e.split("||").some(v=>nr(t,v));if(e.includes(" - ")){const[v,w]=e.split(" - ",2);return nr(t,`>=${v} <=${w}`)}else if(e.includes(" "))return e.trim().replace(/\s{2,}/g," ").split(" ").every(v=>nr(t,v));const n=e.match(/^([<>=~^]+)/),r=n?n[1]:"=";if(r!=="^"&&r!=="~")return Al(t,e,r);const[i,a,s,,c]=dr(t),[l,u,f,,d]=dr(e),m=[i,a,s],h=[l,u??"x",f??"x"];if(d&&(!c||ze(m,h)!==0||ze(c.split("."),d.split("."))===-1))return!1;const g=h.findIndex(v=>v!=="0")+1,_=r==="~"?2:g>1?g:1;return!(ze(m.slice(0,_),h.slice(0,_))!==0||ze(m.slice(_),h.slice(_))===-1)};const Cl={"@mastodon/edit-media-attributes":">=4.1","@mastodon/list-exclusive":">=4.2","@gotosocial/list-exclusive":">=0.17","@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","@mastodon/annual-report":"~4.4 || >=4.4"},Cr=/pixelfed/i,ne=/^(?!.*pixelfed).*$/i,Ll=/pleroma/i,Rl=/akkoma/i;const wi={"@mastodon/lists":ne,"@mastodon/filters":ne,"@mastodon/mentions":ne,"@mastodon/trending-hashtags":ne,"@mastodon/trending-links":ne,"@mastodon/post-bookmark":ne,"@mastodon/post-edit":ne,"@mastodon/profile-edit":ne,"@mastodon/profile-private-note":ne,"@pixelfed/trending":Cr,"@pixelfed/home-include-reblogs":Cr,"@pixelfed/global-feed":Cr,"@pleroma/local-visibility-post":Ll,"@akkoma/local-visibility-post":Rl},Kn={};function Wn(t){var e,n;try{let{version:r,domain:i}=Va(),a=((n=(e=Ha())==null?void 0:e.software)==null?void 0:n.name)||"mastodon";a==="hometown"&&(a="mastodon");const s=`${i}-${t}`;if(Kn[s])return Kn[s];if(wi[t])return Kn[s]=wi[t].test(r);const c=Cl[t];if(!c)return!1;const u=t.match(/^@([a-z]+)\//)[1]===a.toLowerCase();return Kn[s]=u&&nr(r,c,{includePrerelease:!0,loose:!0})}catch{return!1}}const Be=2147483647,Gt=36,Ro=1,Tn=26,Ml=38,Pl=700,Ls=72,Rs=128,Ms="-",Dl=/^xn--/,Ol=/[^\0-\x7F]/,$l=/[\x2E\u3002\uFF0E\uFF61]/g,Nl={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Lr=Gt-Ro,Yt=Math.floor,Rr=String.fromCharCode;function me(t){throw new RangeError(Nl[t])}function Fl(t,e){const n=[];let r=t.length;for(;r--;)n[r]=e(t[r]);return n}function Ps(t,e){const n=t.split("@");let r="";n.length>1&&(r=n[0]+"@",t=n[1]),t=t.replace($l,".");const i=t.split("."),a=Fl(i,e).join(".");return r+a}function Ds(t){const e=[];let n=0;const r=t.length;for(;n=55296&&i<=56319&&nString.fromCodePoint(...t),Vl=function(t){return t>=48&&t<58?26+(t-48):t>=65&&t<91?t-65:t>=97&&t<123?t-97:Gt},Ei=function(t,e){return t+22+75*(t<26)-((e!=0)<<5)},Os=function(t,e,n){let r=0;for(t=n?Yt(t/Pl):t>>1,t+=Yt(t/e);t>Lr*Tn>>1;r+=Gt)t=Yt(t/Lr);return Yt(r+(Lr+1)*t/(t+Ml))},$s=function(t){const e=[],n=t.length;let r=0,i=Rs,a=Ls,s=t.lastIndexOf(Ms);s<0&&(s=0);for(let c=0;c=128&&me("not-basic"),e.push(t.charCodeAt(c));for(let c=s>0?s+1:0;c=n&&me("invalid-input");const m=Vl(t.charCodeAt(c++));m>=Gt&&me("invalid-input"),m>Yt((Be-r)/f)&&me("overflow"),r+=m*f;const h=d<=a?Ro:d>=a+Tn?Tn:d-a;if(mYt(Be/g)&&me("overflow"),f*=g}const u=e.length+1;a=Os(r-l,u,l==0),Yt(r/u)>Be-i&&me("overflow"),i+=Yt(r/u),r%=u,e.splice(r++,0,i)}return String.fromCodePoint(...e)},Ns=function(t){const e=[];t=Ds(t);const n=t.length;let r=Rs,i=0,a=Ls;for(const l of t)l<128&&e.push(Rr(l));const s=e.length;let c=s;for(s&&e.push(Ms);c=r&&fYt((Be-i)/u)&&me("overflow"),i+=(l-r)*u,r=l;for(const f of t)if(fBe&&me("overflow"),f===r){let d=i;for(let m=Gt;;m+=Gt){const h=m<=a?Ro:m>=a+Tn?Tn:m-a;if(d{const{shortcode:r,staticUrl:i,url:a}=n;t=t.replace(new RegExp(`:${r}:`,"g"),`:${r}:`)}),t):""}const De=document.createElement("div"),Ul=["u-url","mention","hashtag"],jl=/[&<>]/g;function Mr(t){return t.replace(jl,e=>({"&":"&","<":"<",">":">"})[e])}const Kl=/{}}=e;let a=t;const s=ru(a,r),c=Kl.test(a),l=a.includes("```");if(c){const f=s.querySelectorAll('a:not([target="_blank"])');for(const m of f)m.setAttribute("target","_blank");const d=s.querySelectorAll("a[class]");for(const m of d)for(const h of m.classList)Ul.includes(h)||m.classList.remove(h)}if(c){const f=s.querySelectorAll("a[href]");for(const d of f)Wl.test(d.textContent.trim())&&(d.classList.add("has-url-text"),cu(d))}if(c){const f=s.querySelectorAll("a[href]"),d=[];for(const m of f){const h=m.innerText.trim(),g=m.querySelector("*");if(Zl.test(h)){const[_,v,w]=h.split("@");g||(!d.some(([b])=>b===v)||d.some(([b,T])=>b===v&&T===w)?(m.innerHTML=`@${v}`,d.push([v,w])):m.innerHTML=`@${v}@${w}`),m.classList.add("mention")}ql.test(h)&&(g||(m.innerHTML=`#${h.slice(1)}`),m.classList.add("mention","hashtag"))}}let u;if(a.includes(":")&&(n!=null&&n.length)){u=Dr(s);for(const f of u){let d=Mr(f.nodeValue);d=uo(d,n),De.innerHTML=d,f.replaceWith(...De.childNodes)}}if(l){const f=[...s.querySelectorAll("p")].filter(d=>Gl.test(d.innerText.trim()));for(const d of f){const m=document.createElement("pre");for(const h of d.querySelectorAll("br"))h.replaceWith(` +`);m.innerHTML=`${d.innerHTML.trim()}`,d.replaceWith(m)}}if(l){const d=[...s.querySelectorAll("p")].filter(m=>Yl.test(m.innerText));for(const m of d){const h=[m];let g=!1,_=m;for(;_.nextElementSibling;){const v=_.nextElementSibling;if(v&&v.tagName==="P")if(Xl.test(v.innerText)){h.push(v),g=!0;break}else h.push(v);else break;_=v}if(g){const v=document.createElement("pre");for(const b of h)for(const T of b.querySelectorAll("br"))T.replaceWith(` +`);const w=h.map(b=>b.innerHTML).join(` + +`);v.innerHTML=`${w}`,m.replaceWith(v);for(const b of h)b.remove()}}}if(a.includes("`")){u=Dr(s);for(const f of u){let d=Mr(f.nodeValue);Ql.test(d)&&(d=d.replaceAll(nu,"$1")),De.innerHTML=d,f.replaceWith(...De.childNodes)}}if(Jl.test(a)){u=Dr(s,{rejectFilter:["A"]});for(const f of u){let d=Mr(f.nodeValue);tu.test(d)&&(d=d.replaceAll(eu,'$1')),De.innerHTML=d,f.replaceWith(...De.childNodes)}}if(a.includes("#")){let f=null;const d=[...s.querySelectorAll("p")].filter((m,h)=>{let g=0;for(let _=0;_3||g>1&&f&&h===f+1)return f=h,!0});if(d!=null&&d.length)for(const m of d)m.classList.add("hashtag-stuffing"),m.title=m.innerText}if(a.includes("i(s)),r?s:s.innerHTML}const zs=Lt(ou),iu=["STYLE","IMG","VIDEO","AUDIO","AREA","MAP","TRACK","EMBED","IFRAME","OBJECT","PICTURE","PORTAL","SOURCE","SVG","MATH","CANVAS","NOSCRIPT","SCRIPT","INPUT","OPTION","TEXTAREA","SLOT","TEMPLATE"],su=Object.fromEntries(iu.map(t=>[t,!0])),au=/^(https?:\/\/(www\.)?|xmpp:)/,Pr=30;function cu(t){var e;if(!(!t||(e=t.querySelector)!=null&&e.call(t,"*")))try{const n=t.innerText.trim(),r=(n.match(au)||[])[0]||"";if(!r)return;const i=n.slice(r.length,r.length+Pr),a=n.slice(r.length+Pr),s=n.slice(r.length).length>Pr;t.innerHTML=`${i}`}catch{}}function Dr(t,e={}){var s;const n=[],r=Object.assign({},su,(s=e.rejectFilter)==null?void 0:s.reduce((c,l)=>(c[l]=!0,c),{})),i=document.createTreeWalker(t,NodeFilter.SHOW_TEXT,{acceptNode(c){return r[c.parentNode.nodeName]?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}},!1);let a;for(;a=i.nextNode();)n.push(a);return n}const Oe=document.createElement("div");function lu(t,e){if(!t)return"";const{preProcess:n}=e||{};return Oe.innerHTML=t.replace(/<\/p>/g,`

    + +`).replace(/<\/li>/g,` +`),Oe.querySelectorAll("br").forEach(r=>{r.replaceWith(` +`)}),n==null||n(Oe),Oe.querySelectorAll(".invisible").forEach(r=>{r.remove()}),Oe.querySelectorAll(".ellipsis").forEach(r=>{r.append("...")}),Oe.innerText.replace(/[\r\n]{3,}/g,` + +`).trim()}const gr=Lt(lu);function uu(t){const{mentions:e=[],instance:n,previewMode:r,statusURL:i}=t||{};return a=>{var f,d;let{target:s}=a;if(s=s.closest("a"),!s||a.metaKey||a.ctrlKey||a.shiftKey||a.altKey||a.which===2)return;const c=(f=s.previousSibling)==null?void 0:f.textContent,l=c==null?void 0:c.endsWith("@"),u=s.innerText.startsWith("@");if((s.classList.contains("u-url")||s.classList.contains("mention"))&&u||l&&!u){const m=(s.querySelector("span")||s).innerText.trim(),h=m.replace(/^@/,""),g=s.getAttribute("href"),_=e.find(v=>v.url===g)||e.find(v=>v.acct===h||v.username===h);if(_)a.preventDefault(),a.stopPropagation(),H.showAccount={account:_.acct,instance:n};else if(!/^http/i.test(m)){a.preventDefault(),a.stopPropagation();const v=s.getAttribute("href");H.showAccount={account:v,instance:n}}}else if(!r){const m=c==null?void 0:c.endsWith("#");if(s.classList.contains("hashtag")||m){a.preventDefault(),a.stopPropagation();const h=s.innerText.replace(/^#/,"").trim(),g=n?`#/${n}/t/${h}`:`#/t/${h}`;location.hash=g}else(d=H.unfurledLinks[s.href])!=null&&d.url&&i!==s.href&&(a.preventDefault(),a.stopPropagation(),H.prevLocation={pathname:location.hash.replace(/^#/,"")},location.hash=`#${H.unfurledLinks[s.href].url}`)}}}function Xf(t,e){return()=>At.number(t,{style:"unit",unit:e,unitDisplay:"long"})}const du=Lt(()=>new Intl.DateTimeFormat().resolvedOptions().locale),fu=t=>{const{locale:e,dateYear:n,hideTime:r,formatOpts:i,forceOpts:a}=t||{},s=e.replace(/-[a-z]+$/i,""),c=bn([s],[du],e),l=new Date().getFullYear(),u=a||{year:n===l?void 0:"numeric",month:"short",day:"numeric",hour:r?void 0:"numeric",minute:r?void 0:"numeric",...i};try{return Intl.DateTimeFormat(c,u)}catch{}try{return Intl.DateTimeFormat(e,u)}catch{}return Intl.DateTimeFormat(void 0,u)},hu=Lt(fu);function xn(t,e){return t instanceof Date||(t=new Date(t)),hu({dateYear:t.getFullYear(),locale:At.locale,...e}).format(t)}function re(t){try{return At.number(t,{notation:"compact",roundingMode:"floor"})}catch{return t}}const Ti=5e3;function Zn(t){if(t||(t=!0),H.showCompose){H.composerState.minimized?Ct({duration:Ti,text:At._({id:"/4fHR1"})}):Ct({duration:Ti,text:At._({id:"vvl08N"})});return}gc(),H.showCompose=t}function Qf({skeleton:t,account:e,avatarSize:n="xl",useAvatarStatic:r=!1,instance:i,external:a,internal:s,onClick:c,showActivity:l=!1,showStats:u=!1,accountInstance:f,hideDisplayName:d=!1,relationship:m={},excludeRelationshipAttrs:h=[]}){const{_:g}=te();if(t)return o("div",{class:"account-block skeleton",children:[o(ie,{size:n}),o("span",{children:[o("b",{children:"████████"}),o("br",{}),o("span",{class:"account-block-acct",children:"██████"})]})]});if(!e)return null;const{id:_,acct:v,avatar:w,avatarStatic:b,displayName:T,username:A,emojis:p,url:x,statusesCount:E,lastStatusAt:L,bot:M,fields:R,note:S,group:I,followersCount:N,createdAt:W,locked:B}=e;let[X,it,rt]=v.match(/([^@]+)(@.+)/i)||[,v];f&&(rt=`@${f}`);const Q=R==null?void 0:R.find(ht=>!!ht.verifiedAt&&!!ht.value),Y={};for(const ht in m)h.includes(ht)||(Y[ht]=m[ht]);const pt=Y.following||Y.followedBy||Y.requested;return o("a",{class:"account-block",href:x,target:a?"_blank":null,title:rt?v:`@${v}`,onClick:ht=>{if(!a){if(ht.preventDefault(),c)return c(ht);s?location.hash=`/${i}/a/${_}`:H.showAccount={account:e,instance:i}}},children:[o("div",{class:"avatar-container",children:o(ie,{url:r?b:w||b,size:n,squircle:M})}),o("span",{class:"account-block-content",children:[!d&&o($,{children:T?o("b",{children:o(je,{text:T,emojis:p})}):o("b",{children:A})})," ",o("span",{class:"account-block-acct bidi-isolate",children:[rt?"":"@",it,o("wbr",{}),rt,B&&o($,{children:[" ",o(P,{icon:"lock",size:"s",alt:g({id:"G2fuEb"})})]})]}),l&&o("div",{class:"account-block-stats",children:[o(D,{id:"ajzDof",values:{0:re(E)}}),!!L&&o($,{children:[" ","·"," ",o(D,{id:"f8bJ3C",values:{0:xn(L,{hideTime:!0})}})]})]}),u&&o("div",{class:"account-block-stats",children:[M&&o($,{children:o("span",{class:"tag collapsed",children:[o(P,{icon:"bot"})," ",o(D,{id:"9Vdq+j"})]})}),!!I&&o($,{children:o("span",{class:"tag collapsed",children:[o(P,{icon:"group"})," ",o(D,{id:"L8fEEm"})]})}),pt&&o("div",{class:"shazam-container-horizontal",children:o("div",{class:"shazam-container-inner",children:Y.following&&Y.followedBy?o("span",{class:"tag minimal",children:o(D,{id:"7oRLbi"})}):Y.requested?o("span",{class:"tag minimal",children:o(D,{id:"Yx0Ud8"})}):Y.following?o("span",{class:"tag minimal",children:o(D,{id:"y6sq5j"})}):Y.followedBy?o("span",{class:"tag minimal",children:o(D,{id:"p3UO/y"})}):null})},m.id),!!N&&o("span",{class:"ib",children:o(D,{id:"Mn1E9C",values:{followersCount:N}})}),!!Q&&o("span",{class:"verified-field",children:[o(P,{icon:"check-circle",size:"s",alt:g({id:"QDEWii"})})," ",o("span",{dangerouslySetInnerHTML:{__html:zs(Q.value,{emojis:p})}})]}),!M&&!I&&!pt&&!N&&!Q&&!!W&&o("span",{class:"created-at",children:o(D,{id:"PCcEFZ",values:{0:xn(W,{hideTime:!0})},components:{0:o("time",{datetime:W})}})})]})]})]})}var Or={},$r,xi;function mu(){if(xi)return $r;xi=1;function t(e,n){typeof n=="boolean"&&(n={forever:n}),this._originalTimeouts=JSON.parse(JSON.stringify(e)),this._timeouts=e,this._options=n||{},this._maxRetryTime=n&&n.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))}return $r=t,t.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)},t.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null},t.prototype.retry=function(e){if(this._timeout&&clearTimeout(this._timeout),!e)return!1;var n=new Date().getTime();if(e&&n-this._operationStart>=this._maxRetryTime)return this._errors.push(e),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var r=this._timeouts.shift();if(r===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),r=this._cachedTimeouts.slice(-1);else return!1;var i=this;return this._timer=setTimeout(function(){i._attempts++,i._operationTimeoutCb&&(i._timeout=setTimeout(function(){i._operationTimeoutCb(i._attempts)},i._operationTimeout),i._options.unref&&i._timeout.unref()),i._fn(i._attempts)},r),this._options.unref&&this._timer.unref(),!0},t.prototype.attempt=function(e,n){this._fn=e,n&&(n.timeout&&(this._operationTimeout=n.timeout),n.cb&&(this._operationTimeoutCb=n.cb));var r=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){r._operationTimeoutCb()},r._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)},t.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)},t.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)},t.prototype.start=t.prototype.try,t.prototype.errors=function(){return this._errors},t.prototype.attempts=function(){return this._attempts},t.prototype.mainError=function(){if(this._errors.length===0)return null;for(var e={},n=null,r=0,i=0;i=r&&(n=a,r=c)}return n},$r}var Si;function pu(){return Si||(Si=1,function(t){var e=mu();t.operation=function(n){var r=t.timeouts(n);return new e(r,{forever:n&&(n.forever||n.retries===1/0),unref:n&&n.unref,maxRetryTime:n&&n.maxRetryTime})},t.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 i in n)r[i]=n[i];if(r.minTimeout>r.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var a=[],s=0;syu.call(t)==="[object Error]",wu=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 Eu(t){return t&&bu(t)&&t.name==="TypeError"&&typeof t.message=="string"?t.message==="Load failed"?t.stack===void 0:wu.has(t.message):!1}class Tu extends Error{constructor(e){super(),e instanceof Error?(this.originalError=e,{message:e}=e):(this.originalError=new Error(e),this.originalError.stack=this.stack),this.name="AbortError",this.message=e}}const Ai=(t,e,n)=>{const r=n.retries-(e-1);return t.attemptNumber=e,t.retriesLeft=r,t};async function xu(t,e){return new Promise((n,r)=>{e={...e},e.onFailedAttempt??(e.onFailedAttempt=()=>{}),e.shouldRetry??(e.shouldRetry=()=>!0),e.retries??(e.retries=10);const i=_u.operation(e),a=()=>{var c;i.stop(),r((c=e.signal)==null?void 0:c.reason)};e.signal&&!e.signal.aborted&&e.signal.addEventListener("abort",a,{once:!0});const s=()=>{var c;(c=e.signal)==null||c.removeEventListener("abort",a),i.stop()};i.attempt(async c=>{try{const l=await t(c);s(),n(l)}catch(l){try{if(!(l instanceof Error))throw new TypeError(`Non-error was thrown: "${l}". You should only throw errors.`);if(l instanceof Tu)throw l.originalError;if(l instanceof TypeError&&!Eu(l))throw l;if(Ai(l,c,e),await e.shouldRetry(l)||(i.stop(),r(l)),await e.onFailedAttempt(l),!i.retry(l))throw i.mainError()}catch(u){Ai(u,c,e),s(),r(u)}}})})}const Su=[{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 ku=Object.defineProperty,Au=(t,e,n)=>e in t?ku(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,qn=(t,e,n)=>Au(t,typeof e!="symbol"?e+"":e,n),fo=new Map,Gn=new WeakMap,Ii=0,Iu=void 0;function Cu(t){return t?(Gn.has(t)||(Ii+=1,Gn.set(t,Ii.toString())),Gn.get(t)):"0"}function Lu(t){return Object.keys(t).sort().filter(e=>t[e]!==void 0).map(e=>`${e}_${e==="root"?Cu(t.root):t[e]}`).toString()}function Ru(t){const e=Lu(t);let n=fo.get(e);if(!n){const r=new Map;let i;const a=new IntersectionObserver(s=>{s.forEach(c=>{var l;const u=c.isIntersecting&&i.some(f=>c.intersectionRatio>=f);t.trackVisibility&&typeof c.isVisible>"u"&&(c.isVisible=u),(l=r.get(c.target))==null||l.forEach(f=>{f(u,c)})})},t);i=a.thresholds||(Array.isArray(t.threshold)?t.threshold:[t.threshold||0]),n={id:e,observer:a,elements:r},fo.set(e,n)}return n}function Vs(t,e,n={},r=Iu){if(typeof window.IntersectionObserver>"u"&&r!==void 0){const l=t.getBoundingClientRect();return e(r,{isIntersecting:r,target:t,intersectionRatio:typeof n.threshold=="number"?n.threshold:0,time:0,boundingClientRect:l,intersectionRect:l,rootBounds:l}),()=>{}}const{id:i,observer:a,elements:s}=Ru(n),c=s.get(t)||[];return s.has(t)||s.set(t,c),c.push(e),a.observe(t),function(){c.splice(c.indexOf(e),1),c.length===0&&(s.delete(t),a.unobserve(t)),s.size===0&&(a.disconnect(),fo.delete(i))}}function Mu(t){return typeof t.children!="function"}var Jf=class extends is{constructor(t){super(t),qn(this,"node",null),qn(this,"_unobserveCb",null),qn(this,"handleNode",e=>{this.node&&(this.unobserve(),!e&&!this.props.triggerOnce&&!this.props.skip&&this.setState({inView:!!this.props.initialInView,entry:void 0})),this.node=e||null,this.observeNode()}),qn(this,"handleChange",(e,n)=>{e&&this.props.triggerOnce&&this.unobserve(),Mu(this.props)||this.setState({inView:e,entry:n}),this.props.onChange&&this.props.onChange(e,n)}),this.state={inView:!!t.initialInView,entry:void 0}}componentDidMount(){this.unobserve(),this.observeNode()}componentDidUpdate(t){(t.rootMargin!==this.props.rootMargin||t.root!==this.props.root||t.threshold!==this.props.threshold||t.skip!==this.props.skip||t.trackVisibility!==this.props.trackVisibility||t.delay!==this.props.delay)&&(this.unobserve(),this.observeNode())}componentWillUnmount(){this.unobserve()}observeNode(){if(!this.node||this.props.skip)return;const{threshold:t,root:e,rootMargin:n,trackVisibility:r,delay:i,fallbackInView:a}=this.props;this._unobserveCb=Vs(this.node,this.handleChange,{threshold:t,root:e,rootMargin:n,trackVisibility:r,delay:i},a)}unobserve(){this._unobserveCb&&(this._unobserveCb(),this._unobserveCb=null)}render(){const{children:t}=this.props;if(typeof t=="function"){const{inView:h,entry:g}=this.state;return t({inView:h,entry:g,ref:this.handleNode})}const{as:e,triggerOnce:n,threshold:r,root:i,rootMargin:a,onChange:s,skip:c,trackVisibility:l,delay:u,initialInView:f,fallbackInView:d,...m}=this.props;return Ba(e||"div",{ref:this.handleNode,...m},t)}};function Pu({threshold:t,delay:e,trackVisibility:n,rootMargin:r,root:i,triggerOnce:a,skip:s,initialInView:c,fallbackInView:l,onChange:u}={}){var f;const[d,m]=K(null),h=O(u),[g,_]=K({inView:!!c,entry:void 0});h.current=u,tt(()=>{if(s||!d)return;let T;return T=Vs(d,(A,p)=>{_({inView:A,entry:p}),h.current&&h.current(A,p),p.isIntersecting&&a&&T&&(T(),T=void 0)},{root:i,rootMargin:r,threshold:t,trackVisibility:n,delay:e},l),()=>{T&&T()}},[Array.isArray(t)?t.toString():t,d,i,r,a,s,n,l,e]);const v=(f=g.entry)==null?void 0:f.target,w=O(void 0);!d&&v&&!a&&!s&&w.current!==v&&(w.current=v,_({inView:!!c,entry:void 0}));const b=[m,g.inView,g.entry];return b.ref=b[0],b.inView=b[1],b.entry=b[2],b}const Ci=48,Fr={};function Hs({id:t,children:e}){const n=O(),r=!!Fr[t],[i,a]=K(!1),[s,c]=K(r||!1),{ref:l}=Pu({root:null,rootMargin:`-${Ci}px 0px 0px 0px`,trackVisibility:!0,delay:1e3,onChange:u=>{u&&(a(!0),t&&(Fr[t]=!0))},triggerOnce:!0,skip:s||i});return tt(()=>{if(!n.current)return;const u=n.current.getBoundingClientRect();u.bottom>Ci&&(u.top{let i=gn[zr];return fetch(`https://${i}/api/v1/${e}/${n}/${encodeURIComponent(t)}`).then(a=>{if(!a.ok)throw new Error(a.statusText);return a.json()}).then(a=>{var s;return{provider:"lingva",content:a.translation,detectedSourceLanguage:(s=a.info)==null?void 0:s.detectedSource,info:a.info}})},{retries:3,onFailedAttempt:i=>{zr=(zr+1)%gn.length}})}const Bs=1e3*60*60,Us=hr($u,{maxAge:Bs}),Nu=hr(Ou(Us),{maxAge:Bs});function Fu({forceTranslate:t,sourceLanguage:e,onTranslate:n,text:r="",mini:i,autoDetected:a}){const{_:s}=te(),c=Is(!0),[l,u]=K("default"),[f,d]=K(null),[m,h]=K(null),[g,_]=K(null),v=O(),w=e?ln(e):null,b=ln(c),T=O("auto");n||(n=i?Nu:Us);const A=async()=>{var p,x;u("loading");try{const{content:E,detectedSourceLanguage:L,provider:M,error:R,...S}=await n(r,T.current,c);if(E){if(L){const I=ln(L);_(I)}if(M==="lingva"){const I=(x=(p=S==null?void 0:S.info)==null?void 0:p.pronunciation)==null?void 0:x.query;I&&d(I)}h(E),u("default"),!i&&E.trim()!==r.trim()&&(v.current.open=!0,v.current.scrollIntoView({behavior:"smooth",block:"nearest"}))}else u("error")}catch{u("error")}};return tt(()=>{t&&A()},[t]),i?m&&m.trim()!==r.trim()&&g!==b?o(Hs,{children:o("div",{class:"status-translation-block-mini",children:[o(P,{icon:"translate",alt:s({id:"zVJKbG",values:{sourceLangText:w}})}),o("output",{lang:c,dir:"auto",title:f||"",children:m})]})}):null:o("div",{class:"status-translation-block",onClick:p=>{p.preventDefault()},children:o("details",{ref:v,children:[o("summary",{children:o("button",{type:"button",onClick:async p=>{p.preventDefault(),p.stopPropagation(),v.current.open=!v.current.open,l!=="loading"&&(m||A())},children:[o(P,{icon:"translate"})," ",o("span",{children:s(l==="loading"?{id:"Zxkt/v"}:e&&w&&!g?a?{id:"R20Yf9",values:{sourceLangText:w}}:{id:"h8zDAI",values:{sourceLangText:w}}:{id:"pi8x/S"})})]})}),o("div",{class:"translated-block",children:[o("div",{class:"translation-info insignificant",children:[o("select",{class:"translated-source-select",disabled:l==="loading",onChange:p=>{T.current=p.target.value,A()},children:Su.map(p=>{const x=ln({code:p.code,fallback:p.name}),E=ln({code:p.code,locale:p.code}),L=x!==E;return o("option",{value:p.code,children:p.code==="auto"?s({id:"Bze3gr",values:{0:g??"…"}}):L?`${E} - ${x}`:E})})})," ",o("span",{children:["→ ",b]}),o(as,{abrupt:!0,hidden:l!=="loading"})]}),l==="error"?o("p",{class:"ui-state",children:o(D,{id:"m5LihO"})}):!!m&&o($,{children:[o("output",{class:"translated-content",lang:c,dir:"auto",children:m}),!!f&&o("output",{class:"translated-pronunciation-content",tabIndex:-1,onClick:p=>{p.target.classList.toggle("expand")},children:f})]})]})]})})}const zu=gn!=null&&gn.length?Fu:()=>null;function le(t){return new Promise((e,n)=>{t.oncomplete=t.onsuccess=()=>e(t.result),t.onabort=t.onerror=()=>n(t.error)})}function js(t,e){const n=indexedDB.open(t);n.onupgradeneeded=()=>n.result.createObjectStore(e);const r=le(n);return(i,a)=>r.then(s=>a(s.transaction(e,i).objectStore(e)))}let Vr;function Ae(){return Vr||(Vr=js("keyval-store","keyval")),Vr}function Vu(t,e=Ae()){return e("readonly",n=>le(n.get(t)))}function Hu(t,e,n=Ae()){return n("readwrite",r=>(r.put(e,t),le(r.transaction)))}function Bu(t,e=Ae()){return e("readonly",n=>Promise.all(t.map(r=>le(n.get(r)))))}function Uu(t,e=Ae()){return e("readwrite",n=>(n.delete(t),le(n.transaction)))}function ju(t,e=Ae()){return e("readwrite",n=>(t.forEach(r=>n.delete(r)),le(n.transaction)))}function Ku(t=Ae()){return t("readwrite",e=>(e.clear(),le(e.transaction)))}function Wu(t,e){return t.openCursor().onsuccess=function(){this.result&&(e(this.result),this.result.continue())},le(t.transaction)}function Zu(t=Ae()){return t("readonly",e=>{if(e.getAllKeys)return le(e.getAllKeys());const n=[];return Wu(e,r=>n.push(r.key)).then(()=>n)})}function Ri(t,e){const n=js(t,e);return{set:(r,i)=>Hu(r,i,n),get:r=>Vu(r,n),getMany:r=>Bu(r,n),del:r=>Uu(r,n),delMany:r=>ju(r,n),clear:()=>Ku(n),keys:()=>Zu(n)}}const th={drafts:Ri("drafts-db","drafts-store"),catchup:Ri("catchup-db","catchup-store")};async function eh(t,e={}){if(!(t!=null&&t.length))return;const{masto:n}=sr(),r=Eo(),i=t.reduce((a,s)=>(!a.includes(s.id)&&!e[s.id]&&s.id!==r&&a.push(s.id),a),[]);if(!i.length)return null;try{return(await n.v1.accounts.relationships.fetch({id:i})).reduce((c,l)=>(c[l.id]=l,c),{})}catch{return null}}class zt extends HTMLElement{constructor(){super(),this.isIframeLoaded=!1,this.setupDom()}static get observedAttributes(){return["videoid","playlistid","videoplay","videotitle"]}connectedCallback(){this.addEventListener("pointerover",()=>zt.warmConnections(this),{once:!0}),this.addEventListener("click",()=>this.addIframe())}get videoId(){return encodeURIComponent(this.getAttribute("videoid")||"")}set videoId(e){this.setAttribute("videoid",e)}get playlistId(){return encodeURIComponent(this.getAttribute("playlistid")||"")}set playlistId(e){this.setAttribute("playlistid",e)}get videoTitle(){return this.getAttribute("videotitle")||"Video"}set videoTitle(e){this.setAttribute("videotitle",e)}get videoPlay(){return this.getAttribute("videoplay")||"Play"}set videoPlay(e){this.setAttribute("videoplay",e)}get videoStartAt(){return this.getAttribute("videoStartAt")||"0"}get autoLoad(){return this.hasAttribute("autoload")}get autoPause(){return this.hasAttribute("autopause")}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(e){this.setAttribute("params",e)}setupDom(){const e=this.attachShadow({mode:"open"});let n="";window.liteYouTubeNonce&&(n=`nonce="${window.liteYouTubeNonce}"`),e.innerHTML=` + +
    + + + + + + + + +
    + `,this.domRefFrame=e.querySelector("#frame"),this.domRefImg={fallback:e.querySelector("#fallbackPlaceholder"),webp:e.querySelector("#webpPlaceholder"),jpeg:e.querySelector("#jpegPlaceholder")},this.domRefPlayButton=e.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.autoPause)&&this.initIntersectionObserver()}attributeChangedCallback(e,n,r){n!==r&&(this.setupComponent(),this.domRefFrame.classList.contains("activated")&&(this.domRefFrame.classList.remove("activated"),this.shadowRoot.querySelector("iframe").remove(),this.isIframeLoaded=!1))}addIframe(e=!1){if(!this.isIframeLoaded){let n=e?0:1;const r=this.noCookie?"-nocookie":"";let i;this.playlistId?i=`?listType=playlist&list=${this.playlistId}&`:i=`${this.videoId}?`,this.autoPause&&(this.params="enablejsapi=1"),this.isYouTubeShort()&&(this.params=`loop=1&mute=1&modestbranding=1&playsinline=1&rel=0&enablejsapi=1&playlist=${this.videoId}`,n=1);const a=` +`;this.domRefFrame.insertAdjacentHTML("beforeend",a),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,i;const e=`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=e,this.domRefImg.jpeg.srcset=n,this.domRefImg.fallback.src=n,this.domRefImg.fallback.setAttribute("aria-label",`${this.videoPlay}: ${this.videoTitle}`),(i=(r=this.domRefImg)==null?void 0:r.fallback)==null||i.setAttribute("alt",`${this.videoPlay}: ${this.videoTitle}`)}initIntersectionObserver(){const e={root:null,rootMargin:"0px",threshold:0};new IntersectionObserver((r,i)=>{r.forEach(a=>{a.isIntersecting&&!this.isIframeLoaded&&(zt.warmConnections(this),this.addIframe(!0),i.unobserve(this))})},e).observe(this),this.autoPause&&new IntersectionObserver((i,a)=>{i.forEach(s=>{var c,l;s.intersectionRatio!==1&&((l=(c=this.shadowRoot.querySelector("iframe"))==null?void 0:c.contentWindow)==null||l.postMessage('{"event":"command","func":"pauseVideo","args":""}',"*"))})},{threshold:1}).observe(this)}attemptShortAutoPlay(){this.isYouTubeShort()&&setTimeout(()=>{var e,n;(n=(e=this.shadowRoot.querySelector("iframe"))==null?void 0:e.contentWindow)==null||n.postMessage('{"event":"command","func":"playVideo","args":""}',"*")},2e3)}isYouTubeShort(){return this.getAttribute("short")===""&&window.matchMedia("(max-width: 40em)").matches}static addPrefetch(e,n){const r=document.createElement("link");r.rel=e,r.href=n,r.crossOrigin="true",document.head.append(r)}static warmConnections(e){zt.isPreconnected||window.liteYouTubeIsPreconnected||(zt.addPrefetch("preconnect","https://i.ytimg.com/"),zt.addPrefetch("preconnect","https://s.ytimg.com"),e.noCookie?zt.addPrefetch("preconnect","https://www.youtube-nocookie.com"):(zt.addPrefetch("preconnect","https://www.youtube.com"),zt.addPrefetch("preconnect","https://www.google.com"),zt.addPrefetch("preconnect","https://googleads.g.doubleclick.net"),zt.addPrefetch("preconnect","https://static.doubleclick.net")),zt.isPreconnected=!0,window.liteYouTubeIsPreconnected=!0)}}zt.isPreconnected=!1;customElements.define("lite-youtube",zt);const Ks=new Uint8Array(128);for(let t=0;t<83;t++)Ks["0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~".charCodeAt(t)]=t;const rr=(t,e,n)=>{let r=0;for(;et>10.31475?Ws(t/qs+.052132,2.4):t/Zs,Hr=t=>~~(t>1227e-8?qs*Ws(t,.416666)-13.025:t*Zs+1),vn=t=>(t<0?-1:1)*t*t,Mi=t=>{for(t+=Sn/2;t>Sn;)t-=qu;const e=1.27323954*t-.405284735*vn(t);return .225*(vn(e)-e)+e};function Mo(t){const e=rr(t,2,6);return[e>>16,e>>8&255,e&255]}function Yu(t,e,n,r){const i=rr(t,0,1),a=i%9+1,s=~~(i/9)+1,c=a*s;let l=0,u=0,f=0,d=0,m=0,h=0,g=0,_=0,v=0,w=0,b=0,T=0;const A=(rr(t,1,2)+1)/13446*(r|1),p=new Float64Array(c*3),x=Mo(t);for(l=0;l<3;l++)p[l]=Gu(x[l]);for(l=1;l{const r=n.char||" ",i=n.count||2;let a=0;const s=[];return e.reverse().reduce((c,l)=>{s.length&&a&&s[a]&&s[a]===l.substring(1,s[a].length+1)&&(s.splice(a,1),a--);const f=[`${r.repeat(a?a*i:0)}${l}`,...c];return l.substring(0,2)==="n.trim().replace(/(^(\s|\t)+|(( |\t)+)$)/gm,"");return Ur={mergeAttributesWithElements:n=>{const r=t(n).split(` +`),i=[];let a="";for(let s=0;s")){i.push(`${a}${c.slice(0,-2)} />`),a="";continue}if(c.endsWith(">")){i.push(`${a}${c.startsWith(">")||c.startsWith("<")?"":" "}${c}`),a="";continue}a+=a.length?` ${c}`:c}return i},removeEmptyLines:t},Ur}var jr,Oi;function Ju(){if(Oi)return jr;Oi=1;const t=Xu(),{mergeAttributesWithElements:e}=Qu();return jr=(r,i={})=>{const a=e(r);return t(a,i)},jr}var td=Ju();const ed=wo(td);var hn=(t=>(t.Mouse="mouse",t.Touch="touch",t.Pointer="pointer",t))(hn||{}),mn=(t=>(t.CancelledByMovement="cancelled-by-movement",t.CancelledByRelease="cancelled-by-release",t.CancelledOutsideElement="cancelled-outside-element",t))(mn||{});const Gs=()=>typeof window=="object"?(window==null?void 0:window.PointerEvent)??null:null,nd=()=>typeof window=="object"?(window==null?void 0:window.TouchEvent)??null:null;function Ys(t){const{nativeEvent:e}=t,n=nd();return n&&e instanceof n||"touches"in t}function Xs(t){const e=Gs();return t.nativeEvent instanceof MouseEvent&&!(e&&t.nativeEvent instanceof e)}function Qs(t){const{nativeEvent:e}=t;if(!e)return!1;const n=Gs();return n&&e instanceof n||"pointerId"in e}function $i(t){return Xs(t)||Ys(t)||Qs(t)}function Ni(t){return Ys(t)?{x:t.touches[0].pageX,y:t.touches[0].pageY}:Xs(t)||Qs(t)?{x:t.pageX,y:t.pageY}:null}function rd(t){return{target:t.target,currentTarget:t.currentTarget,nativeEvent:t,persist:()=>{}}}function Js(t,{threshold:e=400,captureEvent:n=!1,detect:r=hn.Pointer,cancelOnMovement:i=!1,cancelOutsideElement:a=!0,filterEvents:s,onStart:c,onMove:l,onFinish:u,onCancel:f}={}){const d=O(!1),m=O(!1),h=O(),g=O(),_=O(t),v=O(null),w=Tt(p=>x=>{m.current||$i(x)&&(s!==void 0&&!s(x)||(n&&x.persist(),c==null||c(x,{context:p}),v.current=Ni(x),m.current=!0,h.current=x.currentTarget,g.current=setTimeout(()=>{_.current&&(_.current(x,{context:p}),d.current=!0)},e)))},[n,s,c,e]),b=Tt(p=>(x,E)=>{$i(x)&&m.current&&(v.current=null,n&&x.persist(),d.current?u==null||u(x,{context:p}):m.current&&(f==null||f(x,{context:p,reason:E??mn.CancelledByRelease})),d.current=!1,m.current=!1,g.current!==void 0&&clearTimeout(g.current))},[n,u,f]),T=Tt(p=>x=>{if(l==null||l(x,{context:p}),i!==!1&&v.current){const E=Ni(x);if(E){const L=i===!0?25:i,M={x:Math.abs(E.x-v.current.x),y:Math.abs(E.y-v.current.y)};(M.x>L||M.y>L)&&b(p)(x,mn.CancelledByMovement)}}},[b,i,l]),A=Tt(p=>{if(t===null)return{};switch(r){case hn.Mouse:{const x={onMouseDown:w(p),onMouseMove:T(p),onMouseUp:b(p)};return a&&(x.onMouseLeave=E=>{b(p)(E,mn.CancelledOutsideElement)}),x}case hn.Touch:return{onTouchStart:w(p),onTouchMove:T(p),onTouchEnd:b(p)};case hn.Pointer:{const x={onPointerDown:w(p),onPointerMove:T(p),onPointerUp:b(p)};return a&&(x.onPointerLeave=E=>b(p)(E,mn.CancelledOutsideElement)),x}}},[t,b,a,r,T,w]);return tt(()=>{if(!window)return;function p(x){const E=rd(x);b()(E)}return window.addEventListener("mouseup",p),window.addEventListener("touchend",p),window.addEventListener("pointerup",p),()=>{window.removeEventListener("mouseup",p),window.removeEventListener("touchend",p),window.removeEventListener("pointerup",p)}},[b]),tt(()=>()=>{g.current!==void 0&&clearTimeout(g.current)},[]),tt(()=>{_.current=t},[t]),A}function od({poll:t,lang:e,readOnly:n,refresh:r=()=>{},votePoll:i=()=>{}}){const{_:a}=te(),[s,c]=K("default"),{expired:l,expiresAt:u,id:f,multiple:d,options:m,ownVotes:h,voted:g,votersCount:_,votesCount:v,emojis:w}=t,b=!!u&&new Date(u),T=d?_:v;let A=0;T<=1e3?A=0:T<=1e4?A=1:T<=1e5&&(A=2);const[p,x]=K(!1),E=m.every(L=>L.votesCount!==null);return o("div",{lang:e,dir:"auto",class:`poll ${n?"read-only":""} ${s==="loading"?"loading":""}`,children:[p&&E||g||l?o($,{children:[o("div",{class:"poll-options",children:m.map((L,M)=>{const{title:R,votesCount:S}=L,I=T?S/T:0,N=I?I.toLocaleString(At.locale||void 0,{style:"percent",maximumFractionDigits:A}):"0%",W=S>0&&S===Math.max(...m.map(B=>B.votesCount));return o("div",{class:`poll-option poll-result ${W?"poll-option-leading":""}`,style:{"--percentage":`${I*100}%`},children:[o("div",{class:"poll-option-title",children:[o("span",{children:o(je,{text:R,emojis:w})}),g&&h.includes(M)&&o($,{children:[" ",o(P,{icon:"check-circle",alt:a({id:"IeO7us"})})]})]}),o("div",{class:"poll-option-votes",title:At._({id:"+syLpm",values:{optionVotesCount:S}}),children:N})]},`${M}-${R}-${S}`)})}),!l&&!g&&o("button",{class:"poll-vote-button plain2",disabled:s==="loading",onClick:L=>{L.preventDefault(),x(!1)},children:[o(P,{icon:"arrow-left",size:"s"})," ",o(D,{id:"L96xSt"})]})]}):o("form",{onSubmit:async L=>{L.preventDefault();const M=L.target,R=new FormData(M),S=[];R.forEach((I,N)=>{N==="poll"&&S.push(I)}),S.length&&(c("loading"),await i(S),c("default"))},children:[o("div",{class:"poll-options",children:m.map((L,M)=>{const{title:R}=L;return o("div",{class:"poll-option",children:o("label",{class:"poll-label",children:[o("input",{type:d?"checkbox":"radio",name:"poll",value:M,disabled:s==="loading",readOnly:n}),o("span",{class:"poll-option-title",children:o(je,{text:R,emojis:w})})]})})})}),!n&&o("button",{class:"poll-vote-button",type:"submit",disabled:s==="loading",children:o(D,{id:"lQXQKs"})})]}),o("p",{class:"poll-meta",children:[!l&&!n&&o("button",{type:"button",class:"plain small",disabled:s==="loading",onClick:L=>{L.preventDefault(),c("loading"),(async()=>(await r(),c("default")))()},title:a({id:"lCF0wC"}),children:o(P,{icon:"refresh",alt:a({id:"lCF0wC"})})}),!g&&!l&&!n&&E&&o("button",{type:"button",class:"plain small",disabled:s==="loading",onClick:L=>{L.preventDefault(),x(!p)},title:a(p?{id:"L96xSt"}:{id:"zCjei3"}),children:[o(P,{icon:p?"eye-open":"eye-close",alt:a(p?{id:"L96xSt"}:{id:"zCjei3"})})," "]}),!l&&!n&&" ",o(D,{id:"k7v0Rh",values:{0:re(v),1:re(v),votesCount:v},components:{0:o("span",{title:v}),1:o("span",{title:v})}}),!!_&&_!==v&&o($,{children:[" ","•"," ",o(D,{id:"jf1i1L",values:{0:re(_),1:re(_),votersCount:_},components:{0:o("span",{title:_}),1:o("span",{title:_})}})]})," ","•"," ",l?b?o(D,{id:"5LwCCI",components:{0:o(se,{datetime:b})}}):a({id:"237hSL"}):b?o(D,{id:"ooHDPY",components:{0:o(se,{datetime:b})}}):a({id:"O2tNG0"})]})]})}const ta=ce();function id(t,e){if(!(t!=null&&t.length))return!1;const n=t.filter(a=>{const{filter:s}=a,c=s.context.includes(e);return c?s.expiresAt?new Date(s.expiresAt)>new Date:c:!1});if(!n.length)return!1;if(n.some(a=>a.filter.filterAction==="hide"))return{action:"hide"};if(n.some(a=>a.filter.filterAction==="warn")){const a=n.map(s=>s.filter.title);return{action:"warn",titles:a,titlesStr:a.join(" • ")}}return!1}const Po=Lt(id);function sd(t,e,n){var s;const{filtered:r}=t;if(!(r!=null&&r.length)||n&&((s=t.account)==null?void 0:s.id)===n)return!0;const a=Po(r,e);return a?a.action!=="hide":!0}function nh(t,e){if(!(t!=null&&t.length))return[];if(!e)return t;const n=Eo();return t.filter(r=>sd(r,e,n))}const Kr=document.createElement("div");function Wr(t){return t?(Kr.innerHTML=t,Kr.querySelectorAll(".invisible").forEach(e=>{e.remove()}),Kr.innerText.length):0}const pn="speechSynthesis"in window;function Fi(t,e){if(pn)try{speechSynthesis.speaking&&speechSynthesis.cancel();const n=new SpeechSynthesisUtterance(t);e&&(n.lang=e),speechSynthesis.speak(n)}catch(n){alert(n)}}function ea(t){var s;const{spoilerText:e,content:n,poll:r,mediaAttachments:i}=t;let a="";return e!=null&&e.trim()?a+=e:a+=gr(n),a=a.trim(),(s=r==null?void 0:r.options)!=null&&s.length&&(a+=` + +📊: +${r.options.map(c=>`${r.multiple?"▪️":"•"} ${c.title}`).join(` +`)}`),i!=null&&i.length&&(a+=" "+i.map(c=>({image:"🖼️",gifv:"🎞️",video:"📹",audio:"🎵",unknown:""})[c.type]||"").join("")),a}function ad(t,e,n){var r=this,i=O(null),a=O(0),s=O(null),c=O([]),l=O(),u=O(),f=O(t),d=O(!0);f.current=t;var m=typeof window<"u",h=!e&&e!==0&&m;if(typeof t!="function")throw new TypeError("Expected a function");e=+e||0;var g=!!(n=n||{}).leading,_=!("trailing"in n)||!!n.trailing,v="maxWait"in n,w="debounceOnServer"in n&&!!n.debounceOnServer,b=v?Math.max(+n.maxWait||0,e):null;tt(function(){return d.current=!0,function(){d.current=!1}},[]);var T=ot(function(){var A=function(R){var S=c.current,I=l.current;return c.current=l.current=null,a.current=R,u.current=f.current.apply(I,S)},p=function(R,S){h&&cancelAnimationFrame(s.current),s.current=h?requestAnimationFrame(R):setTimeout(R,S)},x=function(R){if(!d.current)return!1;var S=R-i.current;return!i.current||S>=e||S<0||v&&R-a.current>=b},E=function(R){return s.current=null,_&&c.current?A(R):(c.current=l.current=null,u.current)},L=function R(){var S=Date.now();if(x(S))return E(S);if(d.current){var I=e-(S-i.current),N=v?Math.min(I,b-(S-a.current)):I;p(R,N)}},M=function(){if(m||w){var R=Date.now(),S=x(R);if(c.current=[].slice.call(arguments),l.current=r,i.current=R,S){if(!s.current&&d.current)return a.current=i.current,p(L,e),g?A(i.current):u.current;if(v)return p(L,e),A(i.current)}return s.current||p(L,e),u.current}};return M.cancel=function(){s.current&&(h?cancelAnimationFrame(s.current):clearTimeout(s.current)),a.current=0,c.current=i.current=l.current=s.current=null},M.isPending=function(){return!!s.current},M.flush=function(){return s.current?E(Date.now()):u.current},M},[g,v,e,b,_,h,m,w]);return T}function cd(t,e,n){var r=n===void 0?{}:n,i=r.leading,a=r.trailing;return ad(t,e,{maxWait:e,leading:i===void 0||i,trailing:a===void 0||a})}function ld(t,e){var n=O(null),r=O(null);r.current=e;var i=O(null);tt(function(){a()});var a=Tt(function(){var s=i.current,c=r.current,l=s||(c?c instanceof Element?c:c.current:null);n.current&&n.current.element===l&&n.current.subscriber===t||(n.current&&n.current.cleanup&&n.current.cleanup(),n.current={element:l,subscriber:t,cleanup:l?t(l):void 0})},[t]);return tt(function(){return function(){n.current&&n.current.cleanup&&(n.current.cleanup(),n.current=null)}},[]),Tt(function(s){i.current=s,a()},[a])}function zi(t,e,n){return t[e]?t[e][0]?t[e][0][n]:t[e][n]:e==="contentBoxSize"?t.contentRect[n==="inlineSize"?"width":"height"]:void 0}function ud(t){t===void 0&&(t={});var e=t.onResize,n=O(void 0);n.current=e;var r=t.round||Math.round,i=O(),a=K({width:void 0,height:void 0}),s=a[0],c=a[1],l=O(!1);tt(function(){return l.current=!1,function(){l.current=!0}},[]);var u=O({width:void 0,height:void 0}),f=ld(Tt(function(d){return(!i.current||i.current.box!==t.box||i.current.round!==r)&&(i.current={box:t.box,round:r,instance:new ResizeObserver(function(m){var h=m[0],g=t.box==="border-box"?"borderBoxSize":t.box==="device-pixel-content-box"?"devicePixelContentBoxSize":"contentBoxSize",_=zi(h,g,"inlineSize"),v=zi(h,g,"blockSize"),w=_?r(_):void 0,b=v?r(v):void 0;if(u.current.width!==w||u.current.height!==b){var T={width:w,height:b};u.current.width=w,u.current.height=b,n.current?n.current(T):l.current||c(T)}})}),i.current.instance.observe(d,{box:t.box}),function(){i.current&&i.current.instance.unobserve(d)}},[t.box,r]),t.ref);return ot(function(){return{ref:f,width:s.width,height:s.height}},[f,s.width,s.height])}function or({className:t="truncated"}={}){const e=O(),n=cd(({height:r})=>{if(e.current){const{scrollHeight:i}=e.current;let a=i>r;if(a){const{height:s,maxHeight:c}=getComputedStyle(e.current),l=parseInt(c||s,10);a=i>l}e.current.classList.toggle(t,a)}},300);return ud({ref:e,box:"border-box",onResize:n}),e}const _n={public:"earth",unlisted:"group",private:"lock",direct:"message",local:"building"};var na="kvfysmfp",ra="ufhsfnkm",dd=".".concat(na,"{overflow:hidden;touch-action:none}.").concat(ra,"{transform-origin: 0 0}"),fd=typeof window>"u",hd=function(){return!fd&&("ontouchstart"in window||navigator.maxTouchPoints>0)};var md=function(t){var e=t.x,n=t.y,r=t.scale;return"scale3d(".concat(r,",").concat(r,", 1) translate3d(").concat(e,"px, ").concat(n,"px, 0)")};var pd=Math.min,gd=Math.max;function Vi(t){var e=t.containerDimension,n=t.childDimension,r=t.padding,i=t.centerContained,a=n-e;return a+2*r<=0&&i?[a/2,a/2]:[pd(a+r,0)-r,gd(0,a+r)]}var Hi=function(t,e){return e?"".concat(t," ").concat(e):t},Yn=Math.abs,vd=Math.min,_d=Math.sqrt,oa=typeof window>"u",yd=oa?!1:/(Mac)/i.test(navigator.platform),$e=function(t){return t==="drag"},un=function(t){return t==="zoom"},bd=function(t){return yd&&t.ctrlKey},dn=function(t){t.stopPropagation(),t.preventDefault()},Bi=function(t,e){var n=t.x-e.x,r=t.y-e.y;return _d(n*n+r*r)},wd=function(t,e){var n=Bi(t[0],t[1]),r=Bi(e[0],e[1]);return r/n},Ed=function(t,e){return t>e-.01&&te?e:n},kd=function(t){return!(t.ctrlKey||t.metaKey)},Ad=function(t){if(t){var e=t.offsetWidth,n=t.offsetHeight;if(e&&n)return{width:e,height:n};var r=getComputedStyle(t),i=parseFloat(r.width),a=parseFloat(r.height);if(a&&i)return{width:i,height:a}}return{width:0,height:0}},Id=function(t,e){return{x:e.x-t.x,y:e.y-t.y}},Cd=function(t,e){return t.x===e.x&&t.y===e.y},Te=function(){},Qn={x:0,y:0},ji=function(t){Ua(e,t);function e(){var n=t!==null&&t.apply(this,arguments)||this;return n._prevDragMovePoint=null,n._containerObserver=null,n._fingers=0,n._firstMove=!0,n._initialOffset=Mt({},Qn),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=Mt({},Qn),n._startOffset=Mt({},Qn),n._startTouches=null,n._updatePlaned=!1,n._wheelTimeOut=null,n._zoomFactor=1,n._initialZoomFactor=1,n._draggingPoint=Mt({},Qn),n._ignoreNextClick=!1,n._containerRef=ja(),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&&(un(n._interaction)||$e(n._interaction)&&(n._startOffset.x!==n._offset.x||n._startOffset.y!==n._offset.y))&&dn(r),$e(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&&dn(r),n._startOffset=Mt({},n._offset),n._startTouches=Xn(r.touches)):(un(n._interaction)?n._startTouches&&n._startTouches.length===2&&r.touches.length===2&&n._handleZoom(r,wd(n._startTouches,Xn(r.touches))):$e(n._interaction)&&n._handleDrag(r),n._interaction&&(dn(r),n._update())),n._firstMove=!1)}),n._handlerWheel=function(r){if(!n.props.shouldInterceptWheel(r)){dn(r);var i=r.pageX,a=r.pageY,s=r.deltaY,c=r.deltaMode,l=1;(bd(r)||c===1)&&(l=15);var u={touches:[{pageX:i,pageY:a}]},f=n._getOffsetByFirstTouch(u),d=s*l;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 e.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)},e.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},e.prototype._resetInertia=function(){this._velocity=null,this._prevDragMovePoint=null},e.prototype._realizeInertia=function(){var n=this,r=this.props,i=r.inertiaFriction,a=r.inertia;if(!(!a||!this._velocity)){var s=this._velocity,c=s.x,l=s.y;if(c||l){this._stopAnimation(),this._resetInertia();var u=function(){if(c*=i,l*=i,!c&&!l)return n._stopAnimation();var f=Mt({},n._offset);if(n._addOffset({x:c,y:l}),n._offset=n._sanitizeOffset(n._offset),Cd(f,n._offset))return n._stopAnimation();n._update({isAnimation:!0})};this._animate(u,{duration:9999})}}},e.prototype._collectInertia=function(n){var r=n.touches;if(this.props.inertia){var i=Xn(r)[0],a=this._prevDragMovePoint;a&&(this._velocity=Id(i,a)),this._prevDragMovePoint=i}},e.prototype._handleDragEnd=function(){this.props.onDragEnd(),this._end(),this._realizeInertia()},e.prototype._handleZoomStart=function(){this.props.onZoomStart(),this._stopAnimation(),this._lastScale=1,this._nthZoom=0,this._lastZoomCenter=null,this._hasInteraction=!0},e.prototype._handleZoom=function(n,r){var i=Sd(this._getOffsetTouches(n)),a=r/this._lastScale;this._lastScale=r,this._nthZoom+=1,this._nthZoom>3&&(this._scale(a,i),this._drag(i,this._lastZoomCenter),this.props.enforceBoundsDuringZoom&&(this._offset=this._sanitizeOffset(this._offset))),this._lastZoomCenter=i},e.prototype._handleZoomEnd=function(){this.props.onZoomEnd(),this._end()},e.prototype._handleDoubleTap=function(n){var r=this;if(!(this._hasInteraction||this.props.tapZoomFactor===0)){var i=this.props.doubleTapZoomOutOnMaxScale&&this._zoomFactor===this.props.maxZoom||this.props.doubleTapToggleZoom&&this._zoomFactor>1;this.props.onDoubleTap(),this._ignoreNextClick=!0;var a=this._zoomFactor+this.props.tapZoomFactor,s=this._zoomFactor,c=function(u){r._scaleTo(s+u*(a-s),l)},l=this._getOffsetByFirstTouch(n);this._isDoubleTap=!0,s>a&&(l=this._getCurrentZoomCenter()),i?this._zoomOutAnimation():this._animate(c)}},e.prototype._computeInitialOffset=function(){var n=this._getContainerRect(),r=this._getChildSize(),i=r.width,a=r.height,s=-Yn(i*this._getInitialZoomFactor()-n.width)/2,c=-Yn(a*this._getInitialZoomFactor()-n.height)/2;this._initialOffset={x:s,y:c}},e.prototype._resetOffset=function(){this._offset=Mt({},this._initialOffset)},e.prototype._setupOffsets=function(){this.props.setOffsetsOnce&&this._isOffsetsSet||(this._isOffsetsSet=!0,this._computeInitialOffset(),this._resetOffset())},e.prototype._sanitizeOffset=function(n){var r=this._getContainerRect(),i=this._getChildSize(),a=i.width,s=i.height,c=a*this._getInitialZoomFactor()*this._zoomFactor,l=s*this._getInitialZoomFactor()*this._zoomFactor,u=Vi({containerDimension:r.width,childDimension:c,padding:this.props.horizontalPadding,centerContained:this.props.centerContained}),f=u[0],d=u[1],m=Vi({containerDimension:r.height,childDimension:l,padding:this.props.verticalPadding,centerContained:this.props.centerContained}),h=m[0],g=m[1];return{x:Zr(f,d,n.x),y:Zr(h,g,n.y)}},e.prototype.alignCenter=function(n){var r=this,i=Mt({duration:250,animated:!0},n),a=i.x,s=i.y,c=i.scale,l=i.animated,u=i.duration,f=a*this._initialZoomFactor,d=s*this._initialZoomFactor,m=this._zoomFactor,h=Mt({},this._offset),g=this._getContainerRect(),_={x:g.width/2,y:g.height/2};if(this._zoomFactor=1,this._offset={x:-(_.x-f),y:-(_.y-d)},this._scaleTo(c,_),this._stopAnimation(),!l)return this._update();var v=this._zoomFactor-m,w={x:this._offset.x-h.x,y:this._offset.y-h.y};this._zoomFactor=m,this._offset=Mt({},h);var b=function(T){var A=h.x+w.x*T,p=h.y+w.y*T;r._zoomFactor=m+v*T,r._offset=r._sanitizeOffset({x:A,y:p}),r._update()};this._animate(b,{callback:function(){return r._sanitize()},duration:u})},e.prototype.scaleTo=function(n){var r=this,i=Mt({duration:250,animated:!0},n),a=i.x,s=i.y,c=i.scale,l=i.animated,u=i.duration,f=this._zoomFactor,d=Mt({},this._offset);if(this._zoomFactor=1,this._offset={x:0,y:0},this._scaleTo(c,{x:a,y:s}),this._stopAnimation(),!l)return this._update();var m=this._zoomFactor-f,h={x:this._offset.x-d.x,y:this._offset.y-d.y};this._zoomFactor=f,this._offset=Mt({},d);var g=function(_){var v=d.x+h.x*_,w=d.y+h.y*_;r._zoomFactor=f+m*_,r._offset={x:v,y:w},r._update()};this._animate(g,{callback:function(){return r._sanitize()},duration:u})},e.prototype._scaleTo=function(n,r){this._scale(n/this._zoomFactor,r),this._offset=this._sanitizeOffset(this._offset)},e.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()},e.prototype._scaleZoomFactor=function(n){var r=this._zoomFactor;return this._zoomFactor*=n,this._zoomFactor=Zr(this.props.minZoom,this.props.maxZoom,this._zoomFactor),this._zoomFactor/r},e.prototype._canDrag=function(){return this.props.draggableUnZoomed||!Ed(this._zoomFactor,1)},e.prototype._drag=function(n,r){if(r){var i=-(n.y-r.y),a=-(n.x-r.x);this.props.lockDragAxis?Yn(a)>Yn(i)?this._addOffset({x:a,y:0}):this._addOffset({y:i,x:0}):this._addOffset({x:a,y:i}),this.props.onDragUpdate()}},e.prototype._virtualDrag=function(n,r){if(r){var i=-(n.y-r.y),a=-(n.x-r.x);this._draggingPoint={x:a+this._draggingPoint.x,y:i+this._draggingPoint.y}}},e.prototype._addOffset=function(n){var r=this._offset,i=r.x,a=r.y;this._offset={x:i+n.x,y:a+n.y}},e.prototype._sanitize=function(){this._zoomFactor=u?(n(1),i._stopAnimation(),l(),i._update()):(m=c(m),n(m),i._update({isAnimation:!0}),requestAnimationFrame(f))}};this._inAnimation=!0,requestAnimationFrame(f)},e.prototype._stopAnimation=function(){this._inAnimation=!1},e.prototype._end=function(){this._hasInteraction=!1,this._sanitize(),this._update()},e.prototype._getContainerRect=function(){var n=this._containerRef.current;return n.getBoundingClientRect()},e.prototype._getChildSize=function(){var n=this._containerRef.current;return Ad(n==null?void 0:n.firstElementChild)},e.prototype._updateInitialZoomFactor=function(){var n=this._getContainerRect(),r=this._getChildSize(),i=n.width/r.width,a=n.height/r.height;this._initialZoomFactor=vd(i,a)},e.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(i){var a=i[0],s=i[1],c=i[2];(c||r).addEventListener(a,s,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(i){return i.addEventListener("load",n._onResize)})},e.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(i){var a=i[0],s=i[1],c=i[2];(c||r).removeEventListener(a,s,!0)}),Array.from(r.querySelectorAll("img")).forEach(function(i){return i.removeEventListener("load",n._onResize)})},e.prototype._update=function(n){var r=this;if(!this._updatePlaned){var i=function(){var a=r._getInitialZoomFactor()*r._zoomFactor,s=-r._offset.x/a,c=-r._offset.y/a;r.props.onUpdate({scale:a,x:s,y:c})};if(n!=null&&n.isAnimation)return i();this._updatePlaned=!0,requestAnimationFrame(function(){r._updatePlaned=!1,i()})}},e.prototype._handlerIfEnable=function(n){var r=this;return function(){for(var i=[],a=0;ar?n-r:r-n},e.prototype._enoughToDrag=function(){return this._distanceBetweenNumbers(this._startOffset.x,this._draggingPoint.x)>5||this._distanceBetweenNumbers(this._startOffset.y,this._draggingPoint.y)>5},e.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)},e.prototype._detectDoubleTap=function(n){var r=new Date().getTime();this._fingers>1&&(this._lastTouchStart=0),r-this._lastTouchStart<300?(dn(n),this._handleDoubleTap(n),un(this._interaction)?this._handleZoomEnd():$e(this._interaction)&&this._handleDragEnd()):this._isDoubleTap=!1,this._fingers===1&&(this._lastTouchStart=r)},e.prototype.simulate=function(n){var r=this;return function(i){var a=i.pageX,s=i.pageY,c=i.type,l=c==="mouseup",u=c==="mousedown";u&&(i.preventDefault(),r._listenMouseMove=!0),r._listenMouseMove&&(i.touches=l?[]:[{pageX:a,pageY:s}],n(i)),l&&(r._listenMouseMove=!1)}},e.prototype.componentDidMount=function(){this._bindEvents(),this._update()},e.prototype.componentWillUnmount=function(){this._stopAnimation(),this._unSubscribe()},e.prototype.render=function(){var n=this.props,r=n.children,i=n.containerProps,a=Ka.only(r),s=i||{};return Bn.createElement(Bn.Fragment,null,Bn.createElement("style",null,dd),Bn.createElement("div",Mt({},s,{ref:this._containerRef,className:Hi(na,s.className)}),rs(a,{className:Hi(ra,a.props.className)})))},e.defaultProps={animationDuration:250,draggableUnZoomed:!0,enforceBoundsDuringZoom:!1,centerContained:!1,enabled:!0,inertia:!0,inertiaFriction:.96,horizontalPadding:0,isTouch:hd,lockDragAxis:!1,maxZoom:5,minZoom:.5,onDoubleTap:Te,onDragEnd:Te,onDragStart:Te,onDragUpdate:Te,onZoomEnd:Te,onZoomStart:Te,onZoomUpdate:Te,setOffsetsOnce:!1,shouldInterceptWheel:kd,shouldCancelHandledTouchEndEvents:!1,tapZoomFactor:1,verticalPadding:0,wheelScaleFactor:1500,zoomOutFactor:1.3,doubleTapZoomOutOnMaxScale:!1,doubleTapToggleZoom:!1,_document:oa?null:window.document},e}(is);if(0)var rh,oh,ih,sh,ah,ch,lh;function qr(t){if(!t)return;let e=Math.floor(t/3600),n=Math.floor(t%3600/60),r=Math.round(t%60);return e===0?`${n}:${r.toString().padStart(2,"0")}`:`${e}:${n.toString().padStart(2,"0")}:${r.toString().padStart(2,"0")}`}const Ld=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),Rd="ALT",Gr=t=>{const{_:e}=te(),{alt:n,lang:r,index:i,...a}=t;return!n||!n.trim()?null:o("button",{type:"button",class:"alt-badge clickable",...a,onClick:s=>{s.stopPropagation(),s.preventDefault(),H.showMediaAlt={alt:n,lang:r}},title:e({id:"5gfDMm"}),children:[Rd,!!i&&o("sup",{children:i})]})},Md=140,Pd=280,ia=Lt(t=>t!=null&&t.length?t.length>Md||/[\n\r].*[\n\r]/.test(t.trim()):!1);function Dd({class:t="",media:e,to:n,lang:r,showOriginal:i,autoAnimate:a,showCaption:s,allowLongerCaption:c,altIndex:l,checkAspectRatio:u=!0,onClick:f=()=>{}}){let{blurhash:d,description:m,meta:h,previewRemoteUrl:g,previewUrl:_,remoteUrl:v,url:w,type:b}=e;/no\-preview\./i.test(_)&&(_=null);const{original:T={},small:A,focus:p}=h||{},x=i?T==null?void 0:T.width:(A==null?void 0:A.width)||(T==null?void 0:T.width),E=i?T==null?void 0:T.height:(A==null?void 0:A.height)||(T==null?void 0:T.height),L=i?w:_||w,M=i?v:g||v,R=x&&E,S=R?x>E?"landscape":"portrait":null,I=d?Mo(d):null,N=O();let W;if(p){const et=(p.x+1)/2*100,z=(1-p.y)/2*100;W=`${et.toFixed(0)}% ${z.toFixed(0)}%`}const B=O(),X=Tt(({x:et,y:z,scale:J})=>{const{current:U}=B;if(U){const yt=md({x:et,y:z,scale:J});J===1?U.style.removeProperty("transform"):U.style.setProperty("transform",yt),U.closest(".media-zoom").style.touchAction=J<=1.01?"pan-x":""}},[]),[it,rt]=K(!1),Q={enabled:it,draggableUnZoomed:!1,inertiaFriction:.9,tapZoomFactor:2,doubleTapToggleZoom:!0,containerProps:{className:"media-zoom",style:{overflow:"visible"}},onUpdate:X},Y=ot(()=>n?et=>o(Ue,{to:n,...et}):"div",[n]),pt=M?Od(M):null,ht=b==="unknown"&&pt&&/\.(mp4|m4r|m4v|mov|webm)$/i.test(pt.pathname),V=b==="unknown"&&pt&&/\.(mp3|ogg|wav|m4a|m4p|m4b)$/i.test(pt.pathname),st=b==="image"||b==="unknown"&&_&&!ht&&!V,ut=O(),[Rt,gt]=K(!1);ke(()=>{if(!st||!i||!ut.current)return;const{offsetWidth:et,offsetHeight:z}=ut.current,J=x{const{children:z,...J}=et;return o("figure",{...J,children:[z,o("figcaption",{class:"media-caption",lang:r,dir:"auto",onClick:U=>{U.preventDefault(),U.stopPropagation(),H.showMediaAlt={alt:m,lang:r}},children:m})]})}:$,[ue,ee]=K(void 0);if(st)return Q.containerProps.style.display="inherit",ke(()=>{Ld&&i&&(async()=>{try{await fetch(L,{mode:"no-cors"}),B.current.src=L}catch{}})()},[L]),o(G,{children:o(Y,{ref:ut,class:`media media-image ${t}`,onClick:f,"data-orientation":S,"data-has-alt":!F||void 0,"data-has-natural-aspect-ratio":ue||void 0,style:i?{backgroundImage:`url(${_})`,backgroundSize:Rt?`${x}px ${E}px`:void 0,...bt}:Ft,children:i?o(ji,{...Q,children:o("img",{ref:B,src:L,alt:m,width:x,height:E,"data-orientation":S,loading:"eager",decoding:"sync",onLoad:et=>{et.target.closest(".media-image").style.backgroundImage="",et.target.closest(".media-zoom").style.display="",rt(!0)},onError:et=>{const{src:z}=et.target;z===L&&M&&L!==M&&(et.target.src=M)}})}):o($,{children:[o("img",{src:L,alt:F?"":m,width:x,height:E,"data-orientation":S,loading:"lazy",style:{objectPosition:W||"center","--anim-duration":`${Math.min(Math.max(Math.max(x,E)/100,5),120)}s`},onLoad:et=>{et.target.dataset.loaded=!0;const z=et.target.closest(".media");if(!R&&z){const{naturalWidth:J,naturalHeight:U}=et.target;z.dataset.orientation=J>U?"landscape":"portrait",z.style.setProperty("--width",`${J}px`),z.style.setProperty("--height",`${U}px`),z.style.aspectRatio=`${J}/${U}`}if(u&&z){const{clientWidth:J,clientHeight:U,naturalWidth:yt,naturalHeight:at}=et.target;if(J&&U&&yt&&at)if(yt<88||at<88)z.dataset.hasSmallDimension=!0;else{const nt=at*J/yt;Math.abs(nt-U)<5&&ee(!0)}}},onError:et=>{const{src:z}=et.target;z===L&&L!==M&&(et.target.src=M)}}),!F&&o(Gr,{alt:m,lang:r,index:l})]})})});if(b==="gifv"||b==="video"||ht){const et=T.duration>0,z=T.duration<31,J=b==="gifv"&&z,U=T.duration<61,yt=qr(T.duration),at=!i&&!a&&J,vt=!i&&a&&J,nt=T.duration>5,Ut=` + + `,In=` + + `;return o(G,{children:o(Y,{class:`media ${t} media-${J?"gif":"video"} ${vt?"media-contain":""} ${at?"media-hover-animate":""}`,"data-orientation":S,"data-formatted-duration":i?void 0:yt,"data-label":J&&!i&&!vt?"GIF":void 0,"data-has-alt":!F||void 0,style:!i&&Ft,onClick:mt=>{if(at)try{N.current.pause()}catch{}f(mt)},onMouseEnter:()=>{if(at)try{N.current.play()}catch{}},onMouseLeave:()=>{if(at)try{N.current.pause()}catch{}},onFocus:()=>{if(at)try{N.current.play()}catch{}},onBlur:()=>{if(at)try{N.current.pause()}catch{}},children:[i||vt?J&&i?o(ji,{...Q,enabled:!0,children:o("div",{ref:B,dangerouslySetInnerHTML:{__html:Ut}})}):J?o("div",{class:"video-container",dangerouslySetInnerHTML:{__html:Ut}}):o("div",{class:"video-container",dangerouslySetInnerHTML:{__html:In}}):J?o("video",{ref:N,src:w,poster:_,width:x,height:E,"data-orientation":S,preload:"auto",playsinline:!0,loop:!0,muted:!0,onTimeUpdate:nt?mt=>{const{target:dt}=mt,jt=dt==null?void 0:dt.closest(".media-gif");if(jt){const Ot=dt.currentTime/dt.duration*100;jt.style.setProperty("--progress",`${Ot}%`)}}:void 0}):o($,{children:[_?o("img",{src:_,alt:F?"":m,width:x,height:E,"data-orientation":S,loading:"lazy",decoding:"async",onLoad:mt=>{if(!R){const dt=mt.target.closest(".media");if(dt){const{naturalHeight:jt,naturalWidth:Ot}=mt.target;dt.dataset.orientation=Ot>jt?"landscape":"portrait",dt.style.setProperty("--width",`${Ot}px`),dt.style.setProperty("--height",`${jt}px`),dt.style.aspectRatio=`${Ot}/${jt}`}}}}):o("video",{src:w+"#t=0.1",width:x,height:E,"data-orientation":S,preload:"metadata",muted:!0,disablePictureInPicture:!0,onLoadedMetadata:mt=>{if(!et){const{duration:dt}=mt.target;if(dt){const jt=qr(dt),Ot=mt.target.closest(".media-video");Ot&&(Ot.dataset.formattedDuration=jt)}}}}),o("div",{class:"media-play",children:o(P,{icon:"play",size:"xl",alt:"▶"})})]}),!i&&!F&&o(Gr,{alt:m,lang:r,index:l})]})})}else if(b==="audio"||V){const et=qr(T.duration);return o(G,{children:o(Y,{class:`media media-audio ${t}`,"data-formatted-duration":i?void 0:et,"data-has-alt":!F||void 0,onClick:f,style:!i&&Ft,children:[i?o("audio",{src:v||w,preload:"none",controls:!0,autoPlay:!0}):_?o("img",{src:_,alt:F?"":m,width:x,height:E,"data-orientation":S,loading:"lazy",onError:z=>{var J,U;try{(U=(J=z.target)==null?void 0:J.remove)==null||U.call(J)}catch{}}}):null,!i&&o($,{children:[o("div",{class:"media-play",children:o(P,{icon:"play",size:"xl",alt:"▶"})}),!F&&o(Gr,{alt:m,lang:r,index:l})]})]})})}}function Od(t){return URL.parse(t,location.origin)}const ho=qe(Dd,(t,e)=>{const n=t.media||{},r=e.media||{};return(n==null?void 0:n.id)===(r==null?void 0:r.id)&&n.url===r.url&&t.to===e.to&&t.class===e.class}),$d=280,Nd=140,Fd=ss({limit:1,interval:1e3});function zd(t,e){return e.v1.accounts.$select(t).fetch()}const Vd=hr(Fd(zd)),Se={public:{id:"7d1a0d"},local:{id:"d5zxa4"},unlisted:{id:"WDcQq9"},private:{id:"o34OrG"},direct:{id:"IV4QaU"}},Hd=window.ontouchstart!==void 0&&/iPad|iPhone|iPod/.test(navigator.userAgent),Bd=new Intl.RelativeTimeFormat,Ki=80;function Ud(t){var e;return(e=t==null?void 0:t.options)!=null&&e.length?`📊: +${t.options.map(n=>`- ${n.title}${n.votesCount>=0?` (${n.votesCount})`:""}`).join(` +`)}`:""}function Yr(t){const{spoilerText:e,content:n,poll:r}=t;return(e?`${e} + +`:"")+gr(n)+Ud(r)}function sa(t=[],e=document){for(const n of t)try{return e.querySelectorAll(n)}catch{}return[]}function jd(t){return!t||(t=t.trim(),!t)?!1:!!gr(t,{preProcess:n=>{for(const r of sa([".mention, pre, code, a:has(.invisible)",".mention, pre, code"],n))r.remove()}})}function Kd(t){return gr(t,{preProcess:e=>{for(const n of sa([".mention, .hashtag, pre, code, a:has(.invisible)",".mention, .hashtag, pre, code"],e))n.remove();for(const n of e.querySelectorAll("a")){const r=n.innerText.trim();(r.startsWith("https://")||r.startsWith("http://"))&&n.remove()}}})}const Wd=/^http/i,Wi=({post:t,instance:e,previewMode:n})=>{const{content:r,emojis:i,language:a,mentions:s,url:c}=t,l=O();return ke(()=>{if(!l.current)return;const u=zs(r,{emojis:i,returnDOM:!0});for(const f of u.querySelectorAll('a.u-url[target="_blank"]'))Wd.test(f.innerText.trim())||f.removeAttribute("target");l.current.replaceChildren(u.cloneNode(!0))},[r,i.length]),o("div",{ref:l,lang:a,dir:"auto",class:"inner-content",onClick:uu({mentions:s,instance:e,previewMode:n,statusURL:c})})},Zd={s:"small",m:"medium",l:"large"},qd=hr(async t=>{const{detectAll:e}=await k(async()=>{const{detectAll:i}=await import("./tinyld-light-tbgyvj3S.js");return{detectAll:i}},[],import.meta.url);if(t=t==null?void 0:t.trim(),(t==null?void 0:t.length)>500)return null;const r=e(t)[0];return r!=null&&r.lang&&(r==null?void 0:r.accuracy)>.5?r.lang:null}),yn={id:"8fZueG"},mo={},Zi=(t,e=[])=>{if(!t)return!1;const n=Is(!0),r=t!==n&&!bn([t],[n])&&!e.find(i=>t===i||bn([t],[i]));return mo[t+e]=!0,r};function Ze({statusID:t,status:e,instance:n,size:r="m",contentTextWeight:i,readOnly:a,enableCommentHint:s,withinContext:c,skeleton:l,enableTranslate:u,forceTranslate:f,previewMode:d,onMediaClick:m,quoted:h,onStatusLinkClick:g=()=>{},showFollowedTags:_,allowContextMenu:v,showActionsBar:w,showReplyParent:b,mediaFirst:T}){var Jo,ti,ei,ni;const{_:A,_:p}=te();if(l)return o("div",{class:`status skeleton ${T?"status-media-first small":""}`,children:[!T&&o(ie,{size:"xxl"}),o("div",{class:"container",children:[o("div",{class:"meta",children:[(r==="s"||T)&&o(ie,{size:"m"})," ███ ████████"]}),o("div",{class:"content-container",children:[T&&o("div",{class:"media-first-container"}),o("div",{class:`content ${T?"media-first-content":""}`,children:o("p",{children:"████ ████████"})})]})]})]});const{masto:x,instance:E,authenticated:L}=sr({instance:n}),{instance:M}=sr(),R=E===M;let S=oe(t||(e==null?void 0:e.id),E);const I=kn(H);if(e||(e=I.statuses[S]||I.statuses[t],S=oe(e==null?void 0:e.id,E)),!e)return null;const{account:{acct:N,avatar:W,avatarStatic:B,id:X,url:it,displayName:rt,username:Q,emojis:Y,bot:pt,group:ht},id:V,repliesCount:st,reblogged:ut,reblogsCount:Rt,favourited:gt,favouritesCount:Nt,bookmarked:It,poll:bt,muted:Ft,sensitive:xt,spoilerText:F,visibility:G,language:ue,editedAt:ee,filtered:et,card:z,createdAt:J,inReplyToId:U,inReplyToAccountId:yt,content:at,mentions:vt,mediaAttachments:nt,reblog:Ut,uri:In,url:mt,emojis:dt,tags:jt,pinned:Ot,_deleted:qt,_pinned:Ie,emojiReactions:Ce}=e,[Xe,Cn]=K(null);tt(()=>{if(!at||ue||Xe)return;let y;return y=setTimeout(async()=>{let C=await qd(Kd(at));Cn(C)},1e3),()=>clearTimeout(y)},[at,ue]);const _t=ue||Xe,Qe=!!(nt!=null&&nt.length);T&&Qe&&(r="s");const de=ot(()=>Eo(),[]),Z=ot(()=>de&&de===X,[X,de]),St=Dt(ta),kt=!Z&&!a&&!d&&Po(et,St);if((kt==null?void 0:kt.action)==="hide")return null;const $t=y=>{y.shiftKey};if(r!=="l"&&kt)return o(rf,{status:e,filterInfo:kt,instance:E,containerProps:{onMouseEnter:$t},showFollowedTags:!0,quoted:h});const ft=new Date(J),be=new Date(ee);let fe=vt==null?void 0:vt.find(y=>y.id===yt);!fe&&yt===V&&(fe={url:it,username:Q,displayName:rt});const[Le,Ln]=K(fe);if(!c&&!Le&&yt){const y=H.accounts[yt];y?Ln(y):Vd(yt,x).then(C=>{Ln(C),H.accounts[C.id]=C}).catch(C=>{})}const Je=yt===de||(vt==null?void 0:vt.find(y=>y.id===de)),Wt=ot(()=>!!(Qr.account.get("preferences")||{})["reading:expand:spoilers"],[]),Rn=ot(()=>{var C;return((C=(Qr.account.get("preferences")||{})["reading:expand:media"])==null?void 0:C.toLowerCase())||"default"},[]),Kt=d||Wt||!!I.spoilers[V],Zt=d||Rn==="show_all"||!!I.spoilersMedia[V];if(Ut)return ht?o("div",{"data-state-post-id":S,class:"status-group",onMouseEnter:$t,children:[o("div",{class:"status-pre-meta",children:[o(P,{icon:"group",size:"l",alt:p({id:"L8fEEm"})})," ",o(ve,{account:e.account,instance:E,showAvatar:!0})]}),o(Ze,{status:t?null:Ut,statusID:t?Ut.id:null,instance:E,size:r,contentTextWeight:i,readOnly:a,mediaFirst:T})]}):o("div",{"data-state-post-id":S,class:"status-reblog",onMouseEnter:$t,children:[o("div",{class:"status-pre-meta",children:[o(P,{icon:"rocket",size:"l"})," ",o(D,{id:"DlhB4J",components:{0:o(ve,{account:e.account,instance:E,showAvatar:!0}),1:o("span",{})}})]}),o(Ze,{status:t?null:Ut,statusID:t?Ut.id:null,instance:E,size:r,contentTextWeight:i,readOnly:a,enableCommentHint:!0,mediaFirst:T})]});const tn=Tt(({children:y})=>o("div",{"data-state-post-id":S,class:"status-followed-tags",onMouseEnter:$t,children:[o("div",{class:"status-pre-meta",children:[o(P,{icon:"hashtag",size:"l"})," ",I.statusFollowedTags[S].slice(0,3).map(C=>o(Ue,{to:E?`/${E}/t/${C}`:`/t/${C}`,class:"status-followed-tag-item",children:C},C))]}),y]}),[S,E,I.statusFollowedTags[S]]),en=_&&((Jo=I.statusFollowedTags[S])!=null&&Jo.length)?tn:$,ct=r==="l",[vr,_a]=K(f),{contentTranslation:_r,contentTranslationAutoInline:Oo}=I.settings;_r||(u=!1);const $o=ot(()=>{if(!_r||!Oo||a||c&&!ct||d||F||xt||bt||z||nt!=null&&nt.length)return!1;const y=Wr(at);return y>0&&y<=Nd},[_r,Oo,a,c,ct,d,F,xt,bt,z,nt,at]),[yr,Mn]=K(!1),[ya,br]=K(!1),No=or(),Fo=or(),ba=or(),Re=O(null),Pn=p({id:"7jyUKe"}),zo=Tt(()=>Math.max(Math.round((F.length+Wr(at))/140)||1,1),[F,at]),Vo=xn(ft),Ho=ee&&xn(be);let nn=L&&G!=="direct"&&G!=="private";G==="private"&&Z&&(nn=!0);const Dn=y=>{var C;if(!R||!L)return alert(Pn);(y!=null&&y.shiftKey||(C=y==null?void 0:y.syntheticEvent)!=null&&C.shiftKey)&&mc({replyToStatus:e})||Zn({replyToStatus:e})},wa=ot(()=>nt.some(y=>{var C,q;return!((q=(C=y.description)==null?void 0:C.trim)!=null&&q.call(C))}),[nt]),Bo=ot(()=>Math.floor((new Date-ft)/(1e3*60*60*24*30)),[ft]),wr=async()=>{if(!R||!L)return alert(Pn),!1;try{if(H.statuses[S]={...e,reblogged:!ut,reblogsCount:Rt+(ut?-1:1)},ut){const y=await x.v1.statuses.$select(V).unreblog();he(y,E)}else{const y=await x.v1.statuses.$select(V).reblog();he(y,E)}return!0}catch{return H.statuses[S]=e,!1}},Uo=async()=>{if(!R||!L)return alert(Pn),!1;try{if(H.statuses[S]={...e,favourited:!gt,favouritesCount:Nt+(gt?-1:1)},gt){const y=await x.v1.statuses.$select(V).unfavourite();he(y,E)}else{const y=await x.v1.statuses.$select(V).favourite();he(y,E)}return!0}catch{return H.statuses[S]=e,!1}},Er=async()=>{try{const y=await Uo();!ct&&y&&Ct(p(gt?{id:"sZvpIt",values:{0:Q||N}}:{id:"QB/n+J",values:{1:Q||N}}))}catch{}},jo=async()=>{if(Wn("@mastodon/post-bookmark")){if(!R||!L)return alert(Pn),!1;try{if(H.statuses[S]={...e,bookmarked:!It},It){const y=await x.v1.statuses.$select(V).unbookmark();he(y,E)}else{const y=await x.v1.statuses.$select(V).bookmark();he(y,E)}return!0}catch{return H.statuses[S]=e,!1}}},Ko=async()=>{try{const y=await jo();!ct&&y&&Ct(p(It?{id:"+Q6x2B",values:{2:Q||N}}:{id:"cQEDZY",values:{3:Q||N}}))}catch{}},rn=I.settings.contentTranslationHideLanguages||[],[Me,Ea]=K(mo[_t+rn]?Zi(_t,rn):!1);tt(()=>{if(!_t||Me||mo[_t+rn])return;let y=setTimeout(()=>{const C=Zi(_t,rn);C&&Ea(C)},1);return()=>clearTimeout(y)},[_t,Me,rn]);const Wo=O(),Zo=O();async function Ta(y){var lt,Ht,Pe,Tr;y&&(Wo.current=x.v1.statuses.$select(t).rebloggedBy.list({limit:Ki}),Zo.current=x.v1.statuses.$select(t).favouritedBy.list({limit:Ki}));const[{value:C},{value:q}]=await Promise.allSettled([Wo.current.next(),Zo.current.next()]);if((lt=C.value)!=null&<.length||(Ht=q.value)!=null&&Ht.length){const we=[];return(Pe=C.value)!=null&&Pe.length&&we.push(...C.value.map(Ee=>(Ee._types=["reblog"],Ee))),(Tr=q.value)!=null&&Tr.length&&we.push(...q.value.map(Ee=>(Ee._types=["favourite"],Ee))),{value:we,done:C.done&&q.done}}return{value:[],done:!0}}const xa=O(),qo=["public","unlisted"].includes(G),Sa=["public","unlisted","private"].includes(G),Go=wa&&!ut?o("div",{class:"footer",children:[o(P,{icon:"alert"}),o(D,{id:"MB+wJL"})]}):Bo>=3&&o("div",{class:"footer",children:[o(P,{icon:"info"}),o("span",{children:o(D,{id:"dBme/4",values:{0:Bd.format(-Bo,"month")},components:{0:o("strong",{})}})})]}),Yo=o($,{children:[!ct&&R&&o($,{children:o("div",{class:"menu-control-group-horizontal status-menu",children:[o(Et,{onClick:Dn,children:[o(P,{icon:"comment"}),o("span",{children:st>0?re(st):p({id:"ImOQa9"})})]}),o(Ar,{subMenu:!0,confirmLabel:o($,{children:[o(P,{icon:"rocket"}),o("span",{children:p(ut?{id:"QzzGsY"}:{id:"kulphB"})})]}),className:`menu-reblog ${ut?"checked":""}`,menuExtras:o(Et,{onClick:()=>{Zn({draftStatus:{status:` +${mt}`}})},children:[o(P,{icon:"quote"}),o("span",{children:o(D,{id:"ZhhOwV"})})]}),menuFooter:Go,disabled:!nn,onClick:async()=>{try{const y=await wr();!ct&&y&&Ct(p(ut?{id:"BgT3ls",values:{4:Q||N}}:{id:"iSYdyi",values:{5:Q||N}}))}catch{}},children:[o(P,{icon:"rocket"}),o("span",{children:Rt>0?re(Rt):p(ut?{id:"QzzGsY"}:{id:"PiVIlD"})})]}),o(Et,{onClick:Er,className:`menu-favourite ${gt?"checked":""}`,children:[o(P,{icon:"heart"}),o("span",{children:Nt>0?re(Nt):p(gt?{id:"OcUmcH"}:{id:"W9FRBT"})})]}),Wn("@mastodon/post-bookmark")&&o(Et,{onClick:Ko,className:`menu-bookmark ${It?"checked":""}`,children:[o(P,{icon:"bookmark"}),o("span",{children:p(It?{id:"q8EQYI"}:{id:"PZlHt8"})})]})]})}),!ct&&R&&(ct||w)&&o(an,{}),(ct||w)&&o($,{children:o(Et,{onClick:()=>{H.showGenericAccounts={heading:p({id:"+XOeb+"}),fetchAccounts:Ta,instance:E,showReactions:!0,postID:S}},children:[o(P,{icon:"react"}),o("span",{children:o(D,{id:"+XOeb+"})})]})}),!T&&o($,{children:[(u||!_t||Me)&&o(an,{}),u?o("div",{class:pn?"menu-horizontal":"",children:[o(Et,{disabled:vr,onClick:()=>{_a(!0)},children:[o(P,{icon:"translate"}),o("span",{children:o(D,{id:"pi8x/S"})})]}),pn&&o(Et,{onClick:()=>{const y=Yr(e);y&&Fi(y,_t)},children:[o(P,{icon:"speak"}),o("span",{children:o(D,{id:"yIBLq8"})})]})]}):(!_t||Me)&&o("div",{class:pn?"menu-horizontal":"",children:[o(mi,{to:`${E?`/${E}`:""}/s/${V}?translate=1`,children:[o(P,{icon:"translate"}),o("span",{children:o(D,{id:"pi8x/S"})})]}),pn&&o(Et,{onClick:()=>{const y=Yr(e);y&&Fi(y,_t)},children:[o(P,{icon:"speak"}),o("span",{children:o(D,{id:"yIBLq8"})})]})]})]}),(!ct&&R||u||!_t||Me)&&o(an,{}),!ct&&o($,{children:o(mi,{to:E?`/${E}/s/${V}`:`/s/${V}`,onClick:y=>{g(y,e)},children:[o(P,{icon:"arrows-right"}),o("small",{children:[o(D,{id:"8MkSAW",values:{0:Q||N},components:{0:o("span",{class:"bidi-isolate"})}}),o("br",{}),o("span",{class:"more-insignificant",children:[A(Se[G])," • ",Vo]})]})]})}),!!ee&&o($,{children:o(Et,{onClick:()=>{Mn(V)},children:[o(P,{icon:"history"}),o("small",{children:[o(D,{id:"QL+7Jw"}),o("br",{}),o("span",{class:"more-insignificant",children:o(D,{id:"DuJJm9",values:{editedDateText:Ho}})})]})]})}),o(Et,{href:mt,target:"_blank",children:[o(P,{icon:"external"}),o("small",{class:"menu-double-lines",style:{maxWidth:"16em"},children:ef(mt)})]}),o("div",{class:"menu-horizontal",children:[o(Et,{onClick:()=>{try{navigator.clipboard.writeText(mt),Ct(p({id:"edWbV6"}))}catch{Ct(p({id:"W1ewR0"}))}},children:[o(P,{icon:"link"}),o("span",{children:o(D,{id:"he3ygx"})})]}),qo&&(navigator==null?void 0:navigator.share)&&((ti=navigator==null?void 0:navigator.canShare)==null?void 0:ti.call(navigator,{url:mt}))&&o(Et,{onClick:()=>{try{navigator.share({url:mt})}catch{alert(p({id:"TtG3Uh"}))}},children:[o(P,{icon:"share"}),o("span",{children:o(D,{id:"LFKLqp"})})]})]}),qo&&ct&&o(Et,{onClick:()=>{br(!0)},children:[o(P,{icon:"code"}),o("span",{children:o(D,{id:"jdVwsS"})})]}),(Z||Je)&&o(an,{}),(Z||Je)&&o(Et,{onClick:async()=>{try{const y=await x.v1.statuses.$select(V)[Ft?"unmute":"mute"]();he(y,E),Ct(p(Ft?{id:"Pm+5jw"}:{id:"ywB7JM"}))}catch{Ct(p(Ft?{id:"c6jxNY"}:{id:"8SN9kN"}))}},children:Ft?o($,{children:[o(P,{icon:"unmute"}),o("span",{children:o(D,{id:"i51zUR"})})]}):o($,{children:[o(P,{icon:"mute"}),o("span",{children:o(D,{id:"OiUYO5"})})]})}),Z&&Sa&&o(Et,{onClick:async()=>{try{const y=await x.v1.statuses.$select(V)[Ot?"unpin":"pin"]();he(y,E),Ct(p(Ot?{id:"Yx809+"}:{id:"S6P6E+"}))}catch{Ct(p(Ot?{id:"A6cs15"}:{id:"vgUfWO"}))}},children:Ot?o($,{children:[o(P,{icon:"unpin"}),o("span",{children:o(D,{id:"XQMQZw"})})]}):o($,{children:[o(P,{icon:"pin"}),o("span",{children:o(D,{id:"lfHLsx"})})]})}),Z&&o("div",{class:"menu-horizontal",children:[Wn("@mastodon/post-edit")&&o(Et,{onClick:()=>{Zn({editStatus:e})},children:[o(P,{icon:"pencil"}),o("span",{children:o(D,{id:"ePK91l"})})]}),ct&&o(Ar,{subMenu:!0,confirmLabel:o($,{children:[o(P,{icon:"trash"}),o("span",{children:o(D,{id:"FbPNuJ"})})]}),itemProps:{className:"danger"},menuItemClassName:"danger",onClick:()=>{(async()=>{try{await x.v1.statuses.$select(V).remove();const y=cs(V,E);y._deleted=!0,Ct(p({id:"KiyvHV"}))}catch{Ct(p({id:"Yb6p2q"}))}})()},children:[o(P,{icon:"trash"}),o("span",{children:o(D,{id:"Jb6/SB"})})]})]}),!Z&&ct&&o($,{children:[o(an,{}),o(Et,{className:"danger",onClick:()=>{H.showReportModal={account:e.account,post:e}},children:[o(P,{icon:"flag"}),o("span",{children:o(D,{id:"7PQAMY"})})]})]})]}),Xo=O(),[On,on]=K(!1),[$n,Nn]=K({}),Fn=v||!ct&&!d&&!qt&&!h,ka=Js(Hd&&Fn?y=>{var Ht;if(y.pointerType==="mouse")return;const{clientX:C,clientY:q}=((Ht=y.touches)==null?void 0:Ht[0])||y,lt=y.target.closest("a");lt&&Re.current.contains(lt)&&!lt.getAttribute("href").startsWith("#")||(y.preventDefault(),Nn({anchorPoint:{x:C,y:q},direction:"right"}),on(!0))}:null,{threshold:600,captureEvent:!0,detect:"touch",cancelOnMovement:2}),zn=!a&&!d&&!h,Aa=Fe("r, shift+r",Dn,{enabled:zn}),Ia=Fe("f, l",Er,{enabled:zn}),Ca=Fe("d",Ko,{enabled:zn}),La=Fe("shift+b",()=>{(async()=>{try{const y=await wr();!ct&&y&&Ct(p(ut?{id:"G3tPNv",values:{6:Q||N}}:{id:"r8jwY4",values:{7:Q||N}}))}catch{}})()},{enabled:zn&&nn}),Ra=Fe("x",y=>{const C=document.activeElement.closest(".status-link, .status-focus");if(C){const q=C.querySelector(".spoiler-button:not(.spoiling)");if(q)y.stopPropagation(),q.click();else{const lt=C.querySelector(".spoiler-media-button:not(.spoiling)");lt&&(y.stopPropagation(),lt.click())}}}),Vn=nt.slice(0,ct?void 0:4),Hn=nt.length>1&&Vn.some(y=>!!y.description&&!ia(y.description)),Ma=ot(()=>{if(!Hn)return null;const y=[];return Vn.forEach((C,q)=>{if(!C.description)return;const lt=y.findIndex(Ht=>Ht.media.description===C.description);lt===-1?y.push({media:C,indices:[q]}):y[lt].indices.push(q)}),y.map(({media:C,indices:q})=>o("div",{"data-caption-index":q.map(lt=>lt+1).join(" "),onClick:lt=>{lt.preventDefault(),lt.stopPropagation(),H.showMediaAlt={alt:C.description,lang:_t}},title:C.description,children:[o("sup",{children:q.map(lt=>lt+1).join(" ")})," ",C.description]},C.id))},[Hn,Vn,_t]),sn=ot(()=>{var y;return!!U&&yt===((y=e.account)==null?void 0:y.id)||!!I.statusThreadNumber[S]},[U,yt,(ei=e.account)==null?void 0:ei.id,I.statusThreadNumber[S]]),Pa=ot(()=>s&&!sn&&!c&&!U&&G==="public"&&st>0,[s,sn,c,U,st,G]),Qo=ot(()=>{if(z||bt||xt||F||nt!=null&&nt.length||sn||c||U||st<=0||!/[???︖❓❔⁇⁈⁉¿‽؟]/.test(at))return!1;const q=Wr(at);if(q>0&&q<=$d)return!0},[z,bt,xt,F,nt,Ut,sn,c,U,st,at]);return o(en,{children:[b&&!!(U&&yt)&&o(nf,{sKey:S}),o("article",{"data-state-post-id":S,ref:y=>{var q;Re.current=y;const C=((q=y==null?void 0:y.closest)==null?void 0:q.call(y,".timeline-item, .timeline-item-alt, .status-link, .status-focus"))||y;Aa(C),Ia(C),Ca(C),La(C),Ra(C)},tabindex:"-1",class:`status ${!c&&U&&Le?"status-reply-to":""} visibility-${G} ${Ie?"status-pinned":""} ${Zd[r]} ${qt?"status-deleted":""} ${h?"status-card":""} ${On?"status-menu-open":""} ${T&&Qe?"status-media-first":""}`,onMouseEnter:$t,onContextMenu:y=>{var lt,Ht;if(!Fn||y.metaKey)return;const C=y.target.closest("a");if(C&&Re.current.contains(C)&&!C.getAttribute("href").startsWith("#"))return;const q=(lt=window.getSelection)==null?void 0:lt.call(window);if(q.toString().length>0){const{anchorNode:Pe}=q;if((Ht=Re.current)!=null&&Ht.contains(Pe))return}y.preventDefault(),Nn({anchorPoint:{x:y.clientX,y:y.clientY},direction:"right"}),on(!0)},...Fn?ka():{},children:[Fn&&o(_s,{ref:Xo,state:On?"open":void 0,...$n,onClose:y=>{var C,q,lt;on(!1),(y==null?void 0:y.reason)==="click"&&((lt=(q=(C=Re.current)==null?void 0:C.closest("[tabindex]"))==null?void 0:q.focus)==null||lt.call(q))},portal:{target:document.body},containerProps:{style:{zIndex:1001},onClick:()=>{var y,C;(C=(y=Xo.current)==null?void 0:y.closeMenu)==null||C.call(y)}},overflow:"auto",boundingBoxPadding:ks(),unmountOnClose:!0,children:Yo}),w&&r!=="l"&&!d&&!a&&!qt&&!h&&o("div",{class:`status-actions ${On==="actions-bar"?"open":""}`,ref:xa,children:[o(Ne,{size:"s",title:p({id:"ImOQa9"}),alt:p({id:"ImOQa9"}),class:"reply-button",icon:"comment",iconSize:"m",onClick:Dn}),o(Ne,{size:"s",checked:gt,title:[p({id:"W9FRBT"}),p({id:"OcUmcH"})],alt:[p({id:"W9FRBT"}),p({id:"8ab1sR"})],class:"favourite-button",icon:"heart",iconSize:"m",count:Nt,onClick:Er}),o("button",{type:"button",title:p({id:"2FYpfJ"}),class:"plain more-button",onClick:y=>{y.preventDefault(),y.stopPropagation(),Nn({anchorRef:{current:y.currentTarget},align:"start",direction:"left",gap:0,shift:-8}),on("actions-bar")},children:o(P,{icon:"more2",size:"m",alt:p({id:"2FYpfJ"})})})]}),r!=="l"&&o("div",{class:"status-badge",children:[ut&&o(P,{class:"reblog",icon:"rocket",size:"s",alt:p({id:"b7T5Zj"})}),gt&&o(P,{class:"favourite",icon:"heart",size:"s",alt:p({id:"8ab1sR"})}),It&&o(P,{class:"bookmark",icon:"bookmark",size:"s",alt:p({id:"1C/9Sa"})}),Ie&&o(P,{class:"pin",icon:"pin",size:"s",alt:p({id:"kNiQp6"})})]}),r!=="s"&&o("a",{href:it,tabindex:"-1",title:`@${N}`,onClick:y=>{y.preventDefault(),y.stopPropagation(),H.showAccount={account:e.account,instance:E}},children:o(ie,{url:B||W,size:"xxl",squircle:pt})}),o("div",{class:"container",children:[o("div",{class:"meta",children:[o("span",{class:"meta-name",children:o(ve,{account:e.account,instance:E,showAvatar:r==="s",showAcct:ct})})," ",r!=="l"&&(qt?o("span",{class:"status-deleted-tag",children:o(D,{id:"vGjmyl"})}):mt&&!d&&!a&&!h?o(Ue,{to:E?`/${E}/s/${V}`:`/s/${V}`,onClick:y=>{y.metaKey||y.ctrlKey||y.shiftKey||y.altKey||y.which===2||(y.preventDefault(),y.stopPropagation(),g==null||g(y,e),Nn({anchorRef:{current:y.currentTarget},align:"end",direction:"bottom",gap:4}),on(!0))},class:`time ${On&&($n!=null&&$n.anchorRef)?"is-open":""}`,children:[Pa&&!Qo?o(P,{icon:"comment2",size:"s",alt:At._({id:"RXmXDR",values:{repliesCount:st}})}):G!=="public"&&G!=="direct"&&o(P,{icon:_n[G],alt:A(Se[G]),size:"s"})," ",o(se,{datetime:ft,format:"micro"}),!d&&!a&&o(P,{icon:"more2",class:"more",alt:p({id:"2FYpfJ"})})]}):o("span",{class:"time",children:[G!=="public"&&G!=="direct"&&o($,{children:[o(P,{icon:_n[G],alt:A(Se[G]),size:"s"})," "]}),o(se,{datetime:ft,format:"micro"})]}))]}),G==="direct"&&o($,{children:[o("div",{class:"status-direct-badge",children:o(D,{id:"IV4QaU"})})," "]}),!c&&o($,{children:sn?o("div",{class:"status-thread-badge",children:[o(P,{icon:"thread",size:"s"}),o(D,{id:"lQ8zCz",values:{0:I.statusThreadNumber[S]?` ${I.statusThreadNumber[S]}/X`:""}})]}):!!U&&!!Le&&(!!F||!vt.find(y=>y.id===yt))&&o("div",{class:"status-reply-badge",children:[o(P,{icon:"reply"})," ",o(ve,{account:Le,instance:E,short:!0})]})}),o("div",{class:`content-container ${F||xt?"has-spoiler":""} ${Kt?"show-spoiler":""} ${Zt?"show-media":""}`,"data-content-text-weight":i?zo():null,style:(ct||i)&&{"--content-text-weight":zo()},children:T&&Qe?o($,{children:[(!!F||!!xt)&&!Wt&&o($,{children:[!!F&&o("span",{class:"spoiler-content media-first-spoiler-content",lang:_t,dir:"auto",ref:No,"data-read-more":A(yn),children:[o(je,{text:F,emojis:dt})," "]}),o("button",{class:`light spoiler-button media-first-spoiler-button ${Kt?"spoiling":""}`,type:"button",onClick:y=>{y.preventDefault(),y.stopPropagation(),Kt?(delete H.spoilers[V],Wt||delete H.spoilersMedia[V]):(H.spoilers[V]=!0,Wt||(H.spoilersMedia[V]=!0))},children:[o(P,{icon:Kt?"eye-open":"eye-close"})," ",p(Kt?{id:"6lGV3K"}:{id:"lqBX03"})]})]}),o(Yd,{mediaAttachments:nt,language:_t,postID:V,instance:E}),!!at&&o("div",{class:"media-first-content content",ref:Fo,children:o(Wi,{post:e,instance:E,previewMode:d})})]}):o($,{children:[!!F&&o($,{children:[o("div",{class:"content spoiler-content",lang:_t,dir:"auto",ref:No,"data-read-more":A(yn),children:o("p",{children:o(je,{text:F,emojis:dt})})}),Wt||d?o("div",{class:"spoiler-divider",children:[o(P,{icon:"eye-open"})," ",o(D,{id:"gnKo7f"})]}):o("button",{class:`light spoiler-button ${Kt?"spoiling":""}`,type:"button",onClick:y=>{y.preventDefault(),y.stopPropagation(),Kt?(delete H.spoilers[V],Wt||delete H.spoilersMedia[V]):(H.spoilers[V]=!0,Wt||(H.spoilersMedia[V]=!0))},children:[o(P,{icon:Kt?"eye-open":"eye-close"})," ",p(Kt?{id:"6lGV3K"}:{id:"lqBX03"})]})]}),!!at&&o("div",{class:"content",ref:Fo,"data-read-more":A(yn),inert:F&&!Kt?!0:void 0,children:[o(Wi,{post:e,instance:E,previewMode:d}),o(of,{id:V,instance:E,level:h})]}),!!bt&&o(od,{lang:_t,poll:bt,readOnly:a||!R||!L,onUpdate:y=>{H.statuses[S].poll=y},refresh:()=>x.v1.polls.$select(bt.id).fetch().then(y=>{H.statuses[S].poll=y}).catch(y=>{}),votePoll:y=>x.v1.polls.$select(bt.id).votes.create({choices:y}).then(C=>{H.statuses[S].poll=C}).catch(C=>{})}),((u||$o)&&jd(at)&&Me||vr)&&o(zu,{forceTranslate:vr||$o,mini:!ct&&!c,sourceLanguage:_t,autoDetected:Xe,text:Yr(e)}),!d&&xt&&!!nt.length&&Rn!=="show_all"&&o("button",{class:`plain spoiler-media-button ${Zt?"spoiling":""}`,type:"button",hidden:!Wt&&!!F,onClick:y=>{y.preventDefault(),y.stopPropagation(),Zt?delete H.spoilersMedia[V]:H.spoilersMedia[V]=!0},children:[o(P,{icon:Zt?"eye-open":"eye-close"})," ",p(Zt?{id:"6lGV3K"}:{id:"9ZCilh"})]}),!!nt.length&&(nt.length>1&&(ct||c&&r==="m")?o("div",{class:"media-large-container",children:nt.map((y,C)=>o("div",{class:"media-container media-eq1",children:o(ho,{media:y,autoAnimate:!0,showCaption:!0,allowLongerCaption:!at,lang:_t,to:`/${E}/s/${V}?${c?"media":"media-only"}=${C+1}`,onClick:m?q=>m(q,C,y,e):void 0})},y.id))}):o(Gd,{lang:_t,enabled:Hn,captionChildren:Ma,children:o("div",{ref:ba,class:`media-container media-eq${nt.length} ${nt.length>2?"media-gt2":""} ${nt.length>4?"media-gt4":""}`,children:Vn.map((y,C)=>o(ho,{media:y,autoAnimate:ct,showCaption:nt.length===1,allowLongerCaption:!at&&nt.length===1,lang:_t,altIndex:Hn&&!!y.description&&C+1,to:`/${E}/s/${V}?${c?"media":"media-only"}=${C+1}`,onClick:m?q=>{m(q,C,y,e)}:void 0,checkAspectRatio:nt.length===1},y.id))})})),!!z&&/^https/i.test(z==null?void 0:z.url)&&!xt&&!F&&!bt&&!nt.length&&!I.statusQuotes[S]&&o(Qd,{card:z,selfReferential:(z==null?void 0:z.url)===e.url||(z==null?void 0:z.url)===e.uri,selfAuthor:(ni=z==null?void 0:z.authors)==null?void 0:ni.some(y=>{var C;return((C=y.account)==null?void 0:C.url)===it}),instance:M})]})}),!ct&&Qo&&o("div",{class:"content-comment-hint insignificant",children:[o(P,{icon:"comment2",alt:p({id:"N8UzTV"})})," ",st]}),ct&&o($,{children:[o("div",{class:"extra-meta",children:qt?o("span",{class:"status-deleted-tag",children:o(D,{id:"vGjmyl"})}):o($,{children:[o("span",{children:A(Se[G])})," •"," ",o("a",{href:mt,target:"_blank",rel:"noopener",children:[new Date().getTime()-ft.getTime()<864e5&&o($,{children:[o(se,{datetime:ft,format:"micro"})," ","‒"," "]}),o("time",{class:"created",datetime:ft.toISOString(),title:ft.toLocaleString(),children:Vo})]}),ee&&o($,{children:[" ","• ",o(P,{icon:"pencil",alt:p({id:"MRZxAn"})})," ",o("time",{tabIndex:"0",class:"edited",datetime:be.toISOString(),onClick:()=>{Mn(V)},children:Ho})]})]})}),!!(Ce!=null&&Ce.length)&&o("div",{class:"emoji-reactions",children:Ce.map(y=>{const{name:C,count:q,me:lt,url:Ht,staticUrl:Pe}=y;if(Ht)return o("span",{class:`emoji-reaction tag ${lt?"":"insignificant"}`,children:[o(co,{alt:C,url:Ht,staticUrl:Pe})," ",q]});if(/^:.+?:$/.test(C)){const we=dt.find(Ee=>Ee.shortcode===C.replace(/^:/,"").replace(/:$/,""));if(we)return o("span",{class:`emoji-reaction tag ${lt?"":"insignificant"}`,children:[o(co,{alt:C,url:we.url,staticUrl:we.staticUrl})," ",q]})}return o("span",{class:`emoji-reaction tag ${lt?"":"insignificant"}`,children:[C," ",q]})})}),o("div",{class:`actions ${qt?"disabled":""}`,children:[o("div",{class:"action has-count",children:o(Ne,{title:p({id:"ImOQa9"}),alt:p({id:"VbyRUy"}),class:"reply-button",icon:"comment",count:st,onClick:Dn})}),o("div",{class:"action has-count",children:o(Ar,{disabled:!nn,onClick:wr,confirmLabel:o($,{children:[o(P,{icon:"rocket"}),o("span",{children:p(ut?{id:"QzzGsY"}:{id:"kulphB"})})]}),menuExtras:o(Et,{onClick:()=>{Zn({draftStatus:{status:` +${mt}`}})},children:[o(P,{icon:"quote"}),o("span",{children:o(D,{id:"ZhhOwV"})})]}),menuFooter:Go,children:o(Ne,{checked:ut,title:[p({id:"kulphB"}),p({id:"QzzGsY"})],alt:[p({id:"kulphB"}),p({id:"b7T5Zj"})],class:"reblog-button",icon:"rocket",count:Rt,disabled:!nn})})}),o("div",{class:"action has-count",children:o(Ne,{checked:gt,title:[p({id:"W9FRBT"}),p({id:"OcUmcH"})],alt:[p({id:"W9FRBT"}),p({id:"8ab1sR"})],class:"favourite-button",icon:"heart",count:Nt,onClick:Uo})}),Wn("@mastodon/post-bookmark")&&o("div",{class:"action",children:o(Ne,{checked:It,title:[p({id:"PZlHt8"}),p({id:"q8EQYI"})],alt:[p({id:"PZlHt8"}),p({id:"1C/9Sa"})],class:"bookmark-button",icon:"bookmark",onClick:jo})}),o(As,{portal:{target:document.querySelector(".status-deck")||document.body},align:"end",gap:4,overflow:"auto",viewScroll:"close",menuButton:o("div",{class:"action",children:o("button",{type:"button",title:p({id:"2FYpfJ"}),class:"plain more-button",children:o(P,{icon:"more",size:"l",alt:p({id:"2FYpfJ"})})})}),children:Yo})]})]})]}),!!yr&&o(to,{onClick:y=>{y.target===y.currentTarget&&Mn(!1)},children:o(Jd,{statusID:yr,instance:E,fetchStatusHistory:()=>x.v1.statuses.$select(yr).history.list(),onClose:()=>{var y;Mn(!1),(y=Re.current)==null||y.focus()}})}),!!ya&&o(to,{onClick:y=>{y.target===y.currentTarget&&br(!1)},children:o(tf,{post:e,instance:E,onClose:()=>{br(!1)}})})]})]})}function Gd(t){const{enabled:e,children:n,lang:r,captionChildren:i}=t;return!e||!i?n:o("figure",{class:"media-figure-multiple",children:[n,o("figcaption",{lang:r,dir:"auto",children:i})]})}function Yd(t){const{mediaAttachments:e,language:n,postID:r,instance:i}=t,a=e.length>1,s=O(),[c,l]=K(0);return tt(()=>{let u=()=>{const{clientWidth:f,scrollLeft:d}=s.current,m=Math.round(Math.abs(d)/f);l(m)};return s.current&&s.current.addEventListener("scroll",u,{passive:!0}),()=>{s.current&&s.current.removeEventListener("scroll",u)}},[]),o($,{children:[o("div",{class:"media-first-container",children:[o("div",{class:"media-first-carousel",ref:s,children:e.map((u,f)=>o("div",{class:"media-first-item",children:o(ho,{media:u,lang:n,to:`/${i}/s/${r}?media=${f+1}`})},u.id))}),a&&o("div",{class:"media-carousel-controls",children:[o("div",{class:"carousel-indexer",children:[c+1,"/",e.length]}),o("label",{class:"media-carousel-button",children:o("button",{type:"button",class:"carousel-button",hidden:c===0,onClick:u=>{u.preventDefault(),u.stopPropagation(),s.current.focus(),s.current.scrollTo({left:s.current.clientWidth*(c-1)*(ao()?-1:1),behavior:"smooth"})},children:o(P,{icon:"arrow-left"})})}),o("label",{class:"media-carousel-button",children:o("button",{type:"button",class:"carousel-button",hidden:c===e.length-1,onClick:u=>{u.preventDefault(),u.stopPropagation(),s.current.focus(),s.current.scrollTo({left:s.current.clientWidth*(c+1)*(ao()?-1:1),behavior:"smooth"})},children:o(P,{icon:"arrow-right"})})})]})]}),a&&o("div",{class:"media-carousel-dots",style:{"--dots-count":e.length},children:e.map((u,f)=>o("span",{class:`carousel-dot ${f===c?"active":""}`},u.id))})]})}function qi(t){return Fs.toUnicode(URL.parse(t).hostname.replace(/^www\./,"").replace(/\/$/,""))}function Gi(t){return["x.com","twitter.com","threads.net","bsky.app"].includes(t)}function Xd({authors:t,hidden:e,children:n}){var i,a;if(e||!((a=(i=t==null?void 0:t[0])==null?void 0:i.account)!=null&&a.id))return n;const r=t[0].account;return o("div",{class:"card-byline",children:[n,o("div",{class:"card-byline-author",children:[o(P,{icon:"link",size:"s"})," ",o("small",{children:o(D,{id:"4LHHK6",components:{0:o(ve,{account:r,showAvatar:!0})}})})]})]})}function Qd({card:t,selfReferential:e,selfAuthor:n,instance:r}){var X;const i=kn(H),{blurhash:a,title:s,description:c,html:l,providerName:u,providerUrl:f,authorName:d,authorUrl:m,width:h,height:g,image:_,imageDescription:v,url:w,type:b,embedUrl:T,language:A,publishedAt:p,authors:x}=t,E=s||u||d,M=h/g>=1.2?"large":"",[R,S]=K(null);if(tt(()=>{E&&_&&!e&&Wa(w)&&Za(r,w).then(it=>{if(!it)return;const{id:rt,url:Q}=it;S("#"+Q)})},[E,_,e]),i.unfurledLinks[w])return null;const I=/`;\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(this);\n this.addIframe(true);\n observer.unobserve(this);\n }\n });\n }, options);\n observer.observe(this);\n if (this.autoPause) {\n const windowPause = new IntersectionObserver((e, o) => {\n e.forEach(entry => {\n if (entry.intersectionRatio !== 1) {\n this.shadowRoot\n .querySelector('iframe')\n ?.contentWindow?.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n }\n });\n }, { threshold: 1 });\n windowPause.observe(this);\n }\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(context) {\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 if (!context.noCookie) {\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 }\n else {\n LiteYTEmbed.addPrefetch('preconnect', 'https://www.youtube-nocookie.com');\n }\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 { i18n } from '@lingui/core';\nimport { plural } from '@lingui/core/macro';\nimport { Plural, Trans, useLingui } from '@lingui/react/macro';\nimport { 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 { t } = useLingui();\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 = multiple ? 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 ratio = pollVotesCount\n ? optionVotesCount / pollVotesCount\n : 0;\n const percentage = ratio\n ? ratio.toLocaleString(i18n.locale || undefined, {\n style: 'percent',\n maximumFractionDigits: roundPrecision,\n })\n : '0%';\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={t`Refresh`}\n >\n \n \n )}\n {!voted && !expired && !readOnly && optionsHaveVoteCounts && (\n {\n e.preventDefault();\n setShowResults(!showResults);\n }}\n title={showResults ? t`Hide results` : t`Show results`}\n >\n {' '}\n \n )}\n {!expired && !readOnly && ' '}\n \n {shortenNumber(votesCount)} vote\n \n }\n other={\n \n {shortenNumber(votesCount)} votes\n \n }\n />\n {!!votersCount && votersCount !== votesCount && (\n <>\n {' '}\n •{' '}\n \n {shortenNumber(votersCount)}{' '}\n voter\n \n }\n other={\n \n {shortenNumber(votersCount)}{' '}\n voters\n \n }\n />\n \n )}{' '}\n •{' '}\n {expired ? (\n !!expiresAtDate ? (\n \n Ended \n \n ) : (\n t`Ended`\n )\n ) : !!expiresAtDate ? (\n \n Ending \n \n ) : (\n t`Ending`\n )}\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,useState 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(n,t,a){var o=a&&a.equalityFn||i,f=r(n),l=e({})[1],v=c(u(function(r){f.current=r,l({})},[l]),t,a),m=r(n);return o(m.current,n)||(v(n),m.current=n),[f.current,v]}function o(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{a as useDebounce,c as useDebouncedCallback,o 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 local: 'building',\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 { useLingui } from '@lingui/react/macro';\nimport { 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 { t } = useLingui();\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={t`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 checkAspectRatio = true,\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 (checkAspectRatio && $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 { msg, plural } from '@lingui/core/macro';\nimport { Trans, useLingui } from '@lingui/react/macro';\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 { forwardRef, memo } from 'preact/compat';\nimport {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport punycode from 'punycode/';\nimport { useHotkeys } from 'react-hotkeys-hook';\n// import { 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 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: msg`Public`,\n local: msg`Local`,\n unlisted: msg`Unlisted`,\n private: msg`Followers only`,\n direct: msg`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\nfunction forgivingQSA(selectors = [], dom = document) {\n // Run QSA for list of selectors\n // If a selector return invalid selector error, try the next one\n for (const selector of selectors) {\n try {\n return dom.querySelectorAll(selector);\n } catch (e) {}\n }\n return [];\n}\n\nfunction isTranslateble(content) {\n if (!content) return false;\n content = content.trim();\n if (!content) return false;\n const text = getHTMLText(content, {\n preProcess: (dom) => {\n // Remove .mention, pre, code, a:has(.invisible)\n for (const a of forgivingQSA(\n ['.mention, pre, code, a:has(.invisible)', '.mention, pre, code'],\n dom,\n )) {\n a.remove();\n }\n },\n });\n return !!text;\n}\n\nfunction getHTMLTextForDetectLang(content) {\n return 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 for (const a of forgivingQSA(\n [\n '.mention, .hashtag, pre, code, a:has(.invisible)',\n '.mention, .hashtag, pre, code',\n ],\n dom,\n )) {\n a.remove();\n }\n\n // Remove links that contains text that starts with https?://\n for (const a of dom.querySelectorAll('a')) {\n const text = a.innerText.trim();\n if (text.startsWith('https://') || text.startsWith('http://')) {\n a.remove();\n }\n }\n },\n });\n}\n\nconst HTTP_REGEX = /^http/i;\nconst PostContent =\n /*memo(*/\n ({ post, instance, previewMode }) => {\n const { content, emojis, language, mentions, url } = post;\n\n const divRef = useRef();\n useLayoutEffect(() => {\n if (!divRef.current) return;\n const dom = enhanceContent(content, {\n emojis,\n returnDOM: true,\n });\n // Remove target=\"_blank\" from links\n for (const a of dom.querySelectorAll('a.u-url[target=\"_blank\"]')) {\n if (!HTTP_REGEX.test(a.innerText.trim())) {\n a.removeAttribute('target');\n }\n }\n divRef.current.replaceChildren(dom.cloneNode(true));\n }, [content, emojis.length]);\n\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 = pmem(async (text) => {\n const { detectAll } = await import('tinyld/light');\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\nconst readMoreText = msg`Read more →`;\n\n// All this work just to make sure this only lazy-run once\n// Because first run is slow due to intl-localematcher\nconst DIFFERENT_LANG_CHECK = {};\nconst checkDifferentLanguage = (\n language,\n contentTranslationHideLanguages = [],\n) => {\n if (!language) return false;\n const targetLanguage = getTranslateTargetLanguage(true);\n const different =\n language !== targetLanguage &&\n !localeMatch([language], [targetLanguage]) &&\n !contentTranslationHideLanguages.find(\n (l) => language === l || localeMatch([language], [l]),\n );\n DIFFERENT_LANG_CHECK[language + contentTranslationHideLanguages] = true;\n return different;\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 const { _, t } = useLingui();\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 if (languageAutoDetected) return;\n let timer;\n timer = setTimeout(async () => {\n let detected = await detectLang(getHTMLTextForDetectLang(content));\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']?.toLowerCase() || '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 {' '}\n boosted\n \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\n const statusRef = useRef(null);\n\n const unauthInteractionErrorMessage = t`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 ? t`Unliked @${username || acct}'s post`\n : t`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 ? t`Unbookmarked @${username || acct}'s post`\n : t`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 const contentTranslationHideLanguages =\n snapStates.settings.contentTranslationHideLanguages || [];\n const [differentLanguage, setDifferentLanguage] = useState(\n DIFFERENT_LANG_CHECK[language + contentTranslationHideLanguages]\n ? checkDifferentLanguage(language, contentTranslationHideLanguages)\n : false,\n );\n useEffect(() => {\n if (\n !language ||\n differentLanguage ||\n DIFFERENT_LANG_CHECK[language + contentTranslationHideLanguages]\n ) {\n return;\n }\n let timeout = setTimeout(() => {\n const different = checkDifferentLanguage(\n language,\n contentTranslationHideLanguages,\n );\n if (different) setDifferentLanguage(different);\n }, 1);\n return () => clearTimeout(timeout);\n }, [language, differentLanguage, contentTranslationHideLanguages]);\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 menuFooter =\n mediaNoDesc && !reblogged ? (\n
    \n \n Some media have no descriptions.\n
    \n ) : (\n statusMonthsAgo >= 3 && (\n
    \n \n \n \n Old post ({rtf.format(-statusMonthsAgo, 'month')}\n )\n \n \n
    \n )\n );\n const StatusMenuItems = (\n <>\n {!isSizeLarge && sameInstance && (\n <>\n
    \n \n \n \n {repliesCount > 0 ? shortenNumber(repliesCount) : t`Reply`}\n \n \n \n \n {reblogged ? t`Unboost` : t`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 \n Quote\n \n \n }\n menuFooter={menuFooter}\n disabled={!canBoost}\n onClick={async () => {\n try {\n const done = await confirmBoostStatus();\n if (!isSizeLarge && done) {\n showToast(\n reblogged\n ? t`Unboosted @${username || acct}'s post`\n : t`Boosted @${username || acct}'s post`,\n );\n }\n } catch (e) {}\n }}\n >\n \n \n {reblogsCount > 0\n ? shortenNumber(reblogsCount)\n : reblogged\n ? t`Unboost`\n : t`Boost…`}\n \n \n \n \n \n {favouritesCount > 0\n ? shortenNumber(favouritesCount)\n : favourited\n ? t`Unlike`\n : t`Like`}\n \n \n {supports('@mastodon/post-bookmark') && (\n \n \n {bookmarked ? t`Unbookmark` : t`Bookmark`}\n \n )}\n
    \n \n )}\n {!isSizeLarge && sameInstance && (isSizeLarge || showActionsBar) && (\n \n )}\n {(isSizeLarge || showActionsBar) && (\n <>\n {\n states.showGenericAccounts = {\n heading: t`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 \n Translate\n \n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n \n Speak\n \n \n )}\n
    \n ) : (\n (!language || differentLanguage) && (\n
    \n \n \n \n Translate\n \n \n {supportsTTS && (\n {\n const postText = getPostText(status);\n if (postText) {\n speak(postText, language);\n }\n }}\n >\n \n \n Speak\n \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 \n View post by{' '}\n @{username || acct}\n \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 \n Edited: {editedDateText}\n \n
    \n \n \n )}\n \n \n \n {nicePostURL(url)}\n \n \n
    \n {\n // Copy url to clipboard\n try {\n navigator.clipboard.writeText(url);\n showToast(t`Link copied`);\n } catch (e) {\n console.error(e);\n showToast(t`Unable to copy link`);\n }\n }}\n >\n \n \n Copy\n \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(t`Sharing doesn't seem to work.`);\n }\n }}\n >\n \n \n Share…\n \n \n )}\n
    \n {isPublic && isSizeLarge && (\n {\n setShowEmbed(true);\n }}\n >\n \n \n Embed post\n \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(\n muted ? t`Conversation unmuted` : t`Conversation muted`,\n );\n } catch (e) {\n console.error(e);\n showToast(\n muted\n ? t`Unable to unmute conversation`\n : t`Unable to mute conversation`,\n );\n }\n }}\n >\n {muted ? (\n <>\n \n \n Unmute conversation\n \n \n ) : (\n <>\n \n \n Mute conversation\n \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 ? t`Post unpinned from profile`\n : t`Post pinned to profile`,\n );\n } catch (e) {\n console.error(e);\n showToast(\n pinned ? t`Unable to unpin post` : t`Unable to pin post`,\n );\n }\n }}\n >\n {pinned ? (\n <>\n \n \n Unpin from profile\n \n \n ) : (\n <>\n \n \n Pin to profile\n \n \n )}\n \n )}\n {isSelf && (\n
    \n {supports('@mastodon/post-edit') && (\n {\n showCompose({\n editStatus: status,\n });\n }}\n >\n \n \n Edit\n \n \n )}\n {isSizeLarge && (\n \n \n \n Delete this post?\n \n \n }\n itemProps={{\n className: 'danger',\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(t`Post deleted`);\n } catch (e) {\n console.error(e);\n showToast(t`Unable to delete post`);\n }\n })();\n // }\n }}\n >\n \n \n Delete…\n \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 \n Report post…\n \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 ? t`Unboosted @${username || acct}'s post`\n : t`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(nodeRef);\n fRef(nodeRef);\n dRef(nodeRef);\n bRef(nodeRef);\n xRef(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 \n )}\n {favourited && (\n \n )}\n {bookmarked && (\n \n )}\n {_pinned && (\n \n )}\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 \n Deleted\n \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
    \n Private mention\n
    {' '}\n \n )}\n {!withinContext && (\n <>\n {isThread ? (\n
    \n \n \n Thread\n {snapStates.statusThreadNumber[sKey]\n ? ` ${snapStates.statusThreadNumber[sKey]}/X`\n : ''}\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 ? t`Show less` : t`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 ? t`Show less` : t`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 isTranslateble(content) &&\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 Byline({ authors, hidden, children }) {\n if (hidden) return children;\n if (!authors?.[0]?.account?.id) return children;\n const author = authors[0].account;\n\n return (\n \n );\n}\n\nfunction Card({ card, selfReferential, selfAuthor, 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 authors,\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 = /