diff --git a/assets/compose-Cvq_Pe8Z.js b/assets/compose-qZBynDN_.js similarity index 88% rename from assets/compose-Cvq_Pe8Z.js rename to assets/compose-qZBynDN_.js index a41b760..124e43e 100644 --- a/assets/compose-Cvq_Pe8Z.js +++ b/assets/compose-qZBynDN_.js @@ -1,2 +1,2 @@ -import{W as u,G as p}from"./useTitle-qcvAjFcD.js";import{h as w,p as f,a as e,K as m}from"./vendor-jabuMAqb.js";window.opener&&(console=window.opener.console);function S(){var s,a;const[t,i]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:d}=window.__COMPOSE__||{};return u(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),f(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(p,{editStatus:n,replyToStatus:o,draftStatus:d,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:l=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,l(),i("closed")}catch{}}})}m(e(S,{}),document.getElementById("app-standalone")); -//# sourceMappingURL=compose-Cvq_Pe8Z.js.map +import{W as u,G as p}from"./useTitle-60DQEO3r.js";import{h as w,p as f,a as e,K as m}from"./vendor-jabuMAqb.js";window.opener&&(console=window.opener.console);function S(){var s,a;const[t,i]=w("default"),{editStatus:n,replyToStatus:o,draftStatus:d}=window.__COMPOSE__||{};return u(n?"Editing source status":o?`Replying to @${((s=o.account)==null?void 0:s.acct)||((a=o.account)==null?void 0:a.username)}`:"Compose"),f(()=>{if(t==="closed"){try{window.opener.focus()}catch{}window.close()}},[t]),t==="closed"?e("div",{class:"box",children:[e("p",{children:"You may close this page now."}),e("p",{children:e("button",{onClick:()=>{window.close()},children:"Close window"})})]}):e(p,{editStatus:n,replyToStatus:o,draftStatus:d,standalone:!0,hasOpener:window.opener,onClose:c=>{const{newStatus:r,fn:l=()=>{}}=c||{};try{r&&window.opener.__STATES__.reloadStatusPage++,l(),i("closed")}catch{}}})}m(e(S,{}),document.getElementById("app-standalone")); +//# sourceMappingURL=compose-qZBynDN_.js.map diff --git a/assets/compose-Cvq_Pe8Z.js.map b/assets/compose-qZBynDN_.js.map similarity index 97% rename from assets/compose-Cvq_Pe8Z.js.map rename to assets/compose-qZBynDN_.js.map index 124d2c4..eefe7d8 100644 --- a/assets/compose-Cvq_Pe8Z.js.map +++ b/assets/compose-qZBynDN_.js.map @@ -1 +1 @@ -{"version":3,"file":"compose-Cvq_Pe8Z.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\n\nimport './app.css';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport Compose from './components/compose';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
\n

You may close this page now.

\n

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

\n
\n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"gHAUIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GAsBzE,OAnBEH,EAAAA,EACI,wBACAC,EACC,kBACCA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SACvD,GACD,SACN,EAEAC,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOc,aACJ,CAAC,CACbf,OAAOgB,MAAM,CACf,CAAA,EACC,CAACZ,CAAO,CAAC,EAERA,IAAY,SAEZa,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbrB,OAAOgB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITjB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAa,UAAU,OAAA,OACVC,WAAkBtB,OAEV,UAAAuB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGrB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNsB,EAAAP,EAAAjB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file +{"version":3,"file":"compose-qZBynDN_.js","sources":["../../src/compose.jsx"],"sourcesContent":["import './index.css';\n\nimport './app.css';\n\nimport { render } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\n\nimport Compose from './components/compose';\nimport useTitle from './utils/useTitle';\n\nif (window.opener) {\n console = window.opener.console;\n}\n\nfunction App() {\n const [uiState, setUIState] = useState('default');\n\n const { editStatus, replyToStatus, draftStatus } = window.__COMPOSE__ || {};\n\n useTitle(\n editStatus\n ? 'Editing source status'\n : replyToStatus\n ? `Replying to @${\n replyToStatus.account?.acct || replyToStatus.account?.username\n }`\n : 'Compose',\n );\n\n useEffect(() => {\n if (uiState === 'closed') {\n try {\n // Focus parent window\n window.opener.focus();\n } catch (e) {}\n window.close();\n }\n }, [uiState]);\n\n if (uiState === 'closed') {\n return (\n
\n

You may close this page now.

\n

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

\n
\n );\n }\n\n console.debug('OPEN COMPOSE');\n\n return (\n {\n const { newStatus, fn = () => {} } = results || {};\n try {\n if (newStatus) {\n window.opener.__STATES__.reloadStatusPage++;\n }\n fn();\n setUIState('closed');\n } catch (e) {}\n }}\n />\n );\n}\n\nrender(, document.getElementById('app-standalone'));\n"],"names":["window","opener","console","App","uiState","setUIState","useState","editStatus","replyToStatus","draftStatus","__COMPOSE__","account","acct","username","useEffect","focus","close","_jsxs","class","children","_jsx","onClick","standalone","hasOpener","newStatus","results","fn","render"],"mappings":"gHAUIA,OAAOC,SACTC,QAAUF,OAAOC,OAAOC,SAG1B,SAASC,GAAM,SACb,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAS,SAAS,EAE1C,CAAEC,WAAAA,EAAYC,cAAAA,EAAeC,YAAAA,CAAAA,EAAgBT,OAAOU,aAAe,GAsBzE,OAnBEH,EAAAA,EACI,wBACAC,EACC,kBACCA,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBI,SAAQJ,EAAAA,EAAcG,UAAdH,YAAAA,EAAuBK,SACvD,GACD,SACN,EAEAC,EAAU,IAAM,CACd,GAAIV,IAAY,SAAU,CACpB,GAAA,CAEFJ,OAAOC,OAAOc,aACJ,CAAC,CACbf,OAAOgB,MAAM,CACf,CAAA,EACC,CAACZ,CAAO,CAAC,EAERA,IAAY,SAEZa,EAAA,MAAA,CAAKC,MAAM,MAAKC,UACdC,EAAA,IAAA,CAAAD,SAAG,8BAAA,CAA+B,EAClCC,EAAA,IAAA,CAAAD,SACEC,EAAA,SAAA,CACEC,QAASA,IAAM,CACbrB,OAAOgB,MAAM,CACf,EAAEG,SACH,cAAA,CAEO,CAAA,CACP,CAAC,CAAA,CACD,EAITjB,IAA4B,CAE5B,WAAAK,EAEIA,cAAAA,EACAC,YAAAA,EACAC,WAAAA,GACAa,UAAU,OAAA,OACVC,WAAkBtB,OAEV,UAAAuB,EAAEA,GAAAA,EAAAA,IAAAA,EAAsB,EAACC,GAAA,CAAA,EAAE,GAAIA,CACjCD,GACF,OAAe,OAAA,WAAA,mBAEfE,IACGrB,EAAA,QAAA,CACHA,MAAAA,EACW,CAAA,CACf,CAAA,CAGNsB,EAAAP,EAAAjB,EAAA,CAAA,CAAA,EAAA,SAAA,eAAA,gBAAA,CAAA"} \ No newline at end of file diff --git a/assets/main-93nxKW6L.js b/assets/main-9vVntYq7.js similarity index 99% rename from assets/main-93nxKW6L.js rename to assets/main-9vVntYq7.js index 26d1e0c..e1c85fc 100644 --- a/assets/main-93nxKW6L.js +++ b/assets/main-9vVntYq7.js @@ -1,4 +1,4 @@ -import{s as k,a as z,b as Ae,u as _n,c as pe,o as ms,I as w,M as Ce,d as se,A as et,N as It,e as Fe,f as Be,L as ee,g as at,h as En,l as gs,t as Qt,R as $t,i as bs,p as tt,j as He,k as Pn,m as Pt,E as Nn,n as Ue,q as Ke,r as ys,v as Ie,w as en,T as Dn,x as ht,y as Un,z as tn,B as ws,C as vs,D as Fn,F as Ee,G as Ss,S as Me,H as ks,J as Is,K as Ge,O as On,P as Nt,Q as Ts,U as rt,V as Bn,W as _e,X as zn,Y as Cs,Z as $s,_ as xs,$ as gt,a0 as As,a1 as nn,a2 as Ls,a3 as sn,a4 as on}from"./useTitle-qcvAjFcD.js";import{_ as D,p as B,h as $,u as Re,w as ze,a as e,b as Se,g as A,s as xt,c as Ht,M as oe,d as De,e as lt,F as he,T as Ve,S as Ms,I as je,y as Je,f as qn,l as an,i as Hn,j as Vn,k as qe,A as Rs,N as _s,m as Es,q as Ps,J as Ns,C as Gn,n as Ds,o as nt,r as jn,t as Us,v as Fs,x as Os,z as pt,B as Yn,D as cn,E as Bs,R as Vt,G as Te,H as zs,K as qs}from"./vendor-jabuMAqb.js";function ct(t=()=>{},n=[]){const i=D(t);B(()=>{i.current=t},[n]),B(()=>{const o=()=>{const a=document.hidden||document.visibilityState==="hidden";i.current(!a)};return document.addEventListener("visibilitychange",o),()=>document.removeEventListener("visibilitychange",o)},[])}const Hs=1e3*3,Vs=15e3,Gs=ze(function({isLoggedIn:n}){const[i,o]=$(!0);ct(o);const a=async(l,c,d)=>{var h;if(k.notificationsLast){const r=l.v1.notifications.list({limit:1,sinceId:k.notificationsLast.id}),{value:p}=await r.next();if(p!=null&&p.length)if(d)k.notificationsShowNew=!0;else{let f;try{const b=await l.v1.markers.fetch({timeline:"notifications"});f=(h=b==null?void 0:b.notifications)==null?void 0:h.lastReadId}catch{}f?k.notificationsShowNew=p[0].id!==f:k.notificationsShowNew=!0}}};B(()=>{let l,c;if(n&&i){const{masto:d,streaming:h,instance:r}=z();(async()=>{await a(d,r);let p=!1;h&&(c=setTimeout(()=>{(async()=>{try{p=!0,l=h.user.notification.subscribe();for await(const f of l){if(!l||!i)break;f.event==="notification"&&Ae(f.payload,r,{skipThreading:!0}),k.notificationsShowNew=!0}}catch{p=!1}p||(c=setInterval(()=>{a(d,r,!0)},Vs))})()},Hs))})()}return()=>{var d;(d=l==null?void 0:l.unsubscribe)==null||d.call(l),l=null,clearTimeout(c),clearInterval(c)}},[i,n]);const s=D(),u=()=>{s.current=Date.now(),fetch("./version.json").then(l=>l.json()).then(l=>{l&&(k.appVersion=l)}).catch(l=>{})};return _n(u,i&&1e3*60*30),ct(l=>{l&&(s.current?Date.now()-s.current>1e3*60*60&&u():u())}),Re("shift+alt+k",()=>{const l=k.settings.cloakMode;k.settings.cloakMode=!l,pe({text:`Cloak mode ${l?"disabled":"enabled"}`})}),null});function js(){function t(n){n.shiftKey?ms()||(k.showCompose=!0):k.showCompose=!0}return Re("c, shift+c",t,{ignoreEventWhen:n=>!!document.querySelector("#modal-container > *")}),e("button",{type:"button",id:"compose-button",onClick:t,children:e(w,{icon:"quill",size:"xl",alt:"Compose"})})}const Ys=ze(function(){const n=Se(k);function i(){k.showKeyboardShortcutsHelp=!1}return Re("?, shift+?",o=>{k.showKeyboardShortcutsHelp=!0},{ignoreEventWhen:o=>!!document.querySelector("#modal-container > *")}),!!n.showKeyboardShortcutsHelp&&e(Ce,{class:"light",onClose:i,children:e("div",{id:"keyboard-shortcuts-help-container",class:"sheet",tabindex:"-1",children:[e("button",{type:"button",class:"sheet-close",onClick:i,children:e(w,{icon:"x"})}),e("header",{children:e("h2",{children:"Keyboard shortcuts"})}),e("main",{children:e("table",{children:[{action:"Keyboard shortcuts help",keys:e("kbd",{children:"?"})},{action:"Next post",keys:e("kbd",{children:"j"})},{action:"Previous post",keys:e("kbd",{children:"k"})},{action:"Skip carousel to next post",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"j"})]})},{action:"Skip carousel to previous post",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"k"})]})},{action:"Open post details",keys:e(A,{children:[e("kbd",{children:"Enter"})," or ",e("kbd",{children:"o"})]})},{action:e(A,{children:["Expand content warning or",e("br",{}),"toggle expanded/collapsed thread"]}),keys:e("kbd",{children:"x"})},{action:"Close post or dialogs",keys:e(A,{children:[e("kbd",{children:"Esc"})," or ",e("kbd",{children:"Backspace"})]})},{action:"Focus column in multi-column mode",keys:e(A,{children:[e("kbd",{children:"1"})," to ",e("kbd",{children:"9"})]})},{action:"Compose new post",keys:e("kbd",{children:"c"})},{action:"Compose new post (new window)",className:"insignificant",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"c"})]})},{action:"Send post",keys:e(A,{children:[e("kbd",{children:"Ctrl"})," + ",e("kbd",{children:"Enter"})," or ",e("kbd",{children:"⌘"})," +"," ",e("kbd",{children:"Enter"})]})},{action:"Search",keys:e("kbd",{children:"/"})},{action:"Reply",keys:e("kbd",{children:"r"})},{action:"Reply (new window)",className:"insignificant",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"r"})]})},{action:"Like (favourite)",keys:e(A,{children:[e("kbd",{children:"l"})," or ",e("kbd",{children:"f"})]})},{action:"Boost",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"b"})]})},{action:"Bookmark",keys:e("kbd",{children:"d"})},{action:"Toggle Cloak mode",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"Alt"})," + ",e("kbd",{children:"k"})]})}].map(({action:o,className:a,keys:s})=>e("tr",{children:[e("th",{class:a,children:o}),e("td",{children:s})]},o))})})]})})});function Ws({onClose:t}){const{masto:n}=z(),i=se.local.getJSON("accounts"),o=se.session.get("currentAccount"),a=i.length>1,[s,u]=xt(c=>c+1,0),[l]=Ht();return e("div",{id:"accounts-container",class:"sheet",tabIndex:"-1",children:[!!t&&e("button",{type:"button",class:"sheet-close",onClick:t,children:e(w,{icon:"x"})}),e("header",{class:"header-grid",children:e("h2",{children:"Accounts"})}),e("main",{children:e("section",{children:[e("ul",{class:"accounts-list",ref:l,children:i.map((c,d)=>{const h=c.info.id===o,r=d===0;return e("li",{children:[e("div",{children:[a&&e("span",{class:`current ${h?"is-current":""}`,children:e(w,{icon:"check-circle",alt:"Current"})}),e(et,{url:c.info.avatarStatic,size:"xxl",onDblClick:async()=>{if(h)try{const p=await n.v1.accounts.$select(c.info.id).fetch();c.info=p,se.local.setJSON("accounts",i),u()}catch{}}}),e(It,{account:a?{...c.info,acct:/@/.test(c.info.acct)?c.info.acct:`${c.info.acct}@${c.instanceURL}`}:c.info,showAcct:!0,onClick:()=>{h?k.showAccount=`${c.info.username}@${c.instanceURL}`:(se.session.set("currentAccount",c.info.id),location.reload())}})]}),e("div",{class:"actions",children:[r&&a&&e(A,{children:[e("span",{class:"tag",children:"Default"})," "]}),e(Fe,{align:"end",menuButton:e("button",{type:"button",title:"More",class:"plain more-button",children:e(w,{icon:"more",size:"l",alt:"More"})}),children:[e(oe,{onClick:()=>{k.showAccount=`${c.info.username}@${c.instanceURL}`},children:[e(w,{icon:"user"}),e("span",{children:"View profile…"})]}),e(De,{}),a&&e(oe,{disabled:r,onClick:()=>{i.splice(d,1),i.unshift(c),se.local.setJSON("accounts",i),u()},children:[e(w,{icon:"check-circle"}),e("span",{children:"Set as default"})]}),e(Be,{subMenu:!0,confirmLabel:e(A,{children:[e(w,{icon:"exit"}),e("span",{children:["Log out @",c.info.acct,"?"]})]}),disabled:!h,menuItemClassName:"danger",onClick:()=>{i.splice(d,1),se.local.setJSON("accounts",i),location.href=location.pathname||"/"},children:[e(w,{icon:"exit"}),e("span",{children:"Log out…"})]})]})]})]},c.info.id)})}),e("p",{children:e(ee,{to:"/login",class:"button plain2",onClick:t,children:[e(w,{icon:"plus"})," ",e("span",{children:"Add an existing account"})]})}),a&&e("p",{children:e("small",{children:["Note: ",e("i",{children:"Default"})," account will always be used for first load. Switched accounts will persist during the session."]})})]})})]})}const Gt="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20fill-rule='evenodd'%20stroke-linejoin='round'%20stroke-miterlimit='2'%20clip-rule='evenodd'%20viewBox='0%200%2064%2064'%3e%3cpath%20fill='none'%20d='M0%200h63.994v63.994H0z'/%3e%3cpath%20fill='%23a4bff7'%20d='M37.774%2011.471c14.639%203.752%2019.034%2016.557%2015.889%2031.304-.696%203.261-2.563%206.661-6.356%208.693-3.204%201.717-8.07%202.537-15.338.55l-9.634-2.404C11.651%2046.992%208.378%2038.733%2010.027%2031.823c3.627-15.201%2015.543-23.48%2027.747-20.352Z'/%3e%3cpath%20fill='%23d8e7fe'%20d='M36.76%2015.429c12.289%203.15%2015.547%2014.114%2012.907%2026.493-.947%204.44-4.937%209.365-16.664%206.143l-9.684-2.417c-7.854-1.923-10.53-7.8-9.318-12.877%203.016-12.639%2012.611-19.943%2022.759-17.342Z'/%3e%3cpath%20fill='%236081e6'%20d='M27.471%2024.991c-1.457-.698-7.229%203.213-7.663%208.926-.182%202.39%204.55%203.237%205.071-.169.725-4.743%203.715-8.218%202.592-8.757Zm10.746%202.005c-2.083.327-.382%205.901-.595%2010.727-.123%202.8%204.388%203.464%204.703%202.011%201.098-5.073-2.066-13.058-4.108-12.738Z'/%3e%3c/svg%3e";function rn(t){const{masto:n}=z();return n.v1.push.subscription.create(t)}function Ks(){const{masto:t}=z();return t.v1.push.subscription.fetch()}function Zs(t){const{masto:n}=z();return n.v1.push.subscription.update(t)}function Js(){const{masto:t}=z();return t.v1.push.subscription.remove()}function At(){return"serviceWorker"in navigator&&"PushManager"in window}function Xs(){return navigator.serviceWorker.getRegistration()}async function jt(){const t=await Xs(),n=t?await t.pushManager.getSubscription():void 0;return{registration:t,subscription:n}}function Wn(t){const n="=".repeat((4-t.length%4)%4),i=`${t}${n}`.replace(/-/g,"+").replace(/_/g,"/"),o=window.atob(i),a=new Uint8Array(o.length);for(let s=0;s{f.preventDefault();const g=new FormData(o.current).get("theme"),v=document.documentElement;if(g==="auto"){v.classList.remove("is-light","is-dark");const m=document.querySelector('meta[data-theme-setting="manual"]');m&&(m.name=""),document.querySelectorAll('meta[data-theme-setting="auto"]').forEach(S=>{S.name="theme-color"})}else{v.classList.toggle("is-light",g==="light"),v.classList.toggle("is-dark",g==="dark");const m=document.querySelector('meta[data-theme-setting="manual"]');m&&(m.name="theme-color",m.content=g==="light"?m.dataset.themeLightColor:m.dataset.themeDarkColor),document.querySelectorAll('meta[data-theme-setting="auto"]').forEach(S=>{S.name=""})}document.querySelector('meta[name="color-scheme"]').setAttribute("content",g==="auto"?"dark light":g),g==="auto"?se.local.del("theme"):se.local.set("theme",g)},children:e("div",{class:"radio-group",children:[e("label",{children:[e("input",{type:"radio",name:"theme",value:"light",defaultChecked:i==="light"}),e("span",{children:"Light"})]}),e("label",{children:[e("input",{type:"radio",name:"theme",value:"dark",defaultChecked:i==="dark"}),e("span",{children:"Dark"})]}),e("label",{children:[e("input",{type:"radio",name:"theme",value:"auto",defaultChecked:i!=="light"&&i!=="dark"}),e("span",{children:"Auto"})]})]})})})]}),e("li",{children:[e("div",{children:e("label",{children:"Text size"})}),e("div",{class:"range-group",children:[e("span",{style:{fontSize:Qe[0]},children:"A"})," ",e("input",{type:"range",min:Qe[0],max:Qe[Qe.length-1],step:"1",value:l,list:"sizes",onChange:f=>{const b=parseInt(f.target.value,10);document.documentElement.style.setProperty("--text-size",`${b}px`),b===un?se.local.del("textSize"):se.local.set("textSize",f.target.value)}})," ",e("span",{style:{fontSize:Qe[Qe.length-1]},children:"A"}),e("datalist",{id:"sizes",children:Qe.map(f=>e("option",{value:f}))})]})]})]})}),r&&e(A,{children:[e("h3",{children:"Posting"}),e("section",{children:e("ul",{children:e("li",{children:[e("div",{children:e("label",{for:"posting-privacy-field",children:["Default visibility"," ",e(w,{icon:"cloud",alt:"Synced",class:"synced-icon"})]})}),e("div",{children:e("select",{id:"posting-privacy-field",value:c["posting:default:visibility"]||"public",onChange:f=>{const{value:b}=f.target;(async()=>{try{await h.v1.accounts.updateCredentials({source:{privacy:b}}),d({...c,"posting:default:visibility":b}),se.account.set("preferences",{...c,"posting:default:visibility":b})}catch{alert("Failed to update posting privacy")}})()},children:[e("option",{value:"public",children:"Public"}),e("option",{value:"unlisted",children:"Unlisted"}),e("option",{value:"private",children:"Followers only"})]})})]})})}),e("p",{class:"section-postnote",children:[e(w,{icon:"cloud",alt:"Synced",class:"synced-icon"})," ",e("small",{children:["Synced to your instance server's settings."," ",e("a",{href:`https://${p}/`,target:"_blank",rel:"noopener noreferrer",children:["Go to your instance (",p,") for more settings."]})]})]})]}),e("h3",{children:"Experiments"}),e("section",{children:e("ul",{children:[e("li",{children:e("label",{children:[e("input",{type:"checkbox",checked:n.settings.autoRefresh,onChange:f=>{k.settings.autoRefresh=f.target.checked}})," ","Auto refresh timeline posts"]})}),e("li",{children:e("label",{children:[e("input",{type:"checkbox",checked:n.settings.boostsCarousel,onChange:f=>{k.settings.boostsCarousel=f.target.checked}})," ","Boosts carousel"]})}),e("li",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.contentTranslation,onChange:f=>{const{checked:b}=f.target;k.settings.contentTranslation=b,b||(k.settings.contentTranslationTargetLanguage=null)}})," ","Post translation"]}),e("div",{class:`sub-section ${n.settings.contentTranslation?"":"more-insignificant"}`,children:[e("div",{children:e("label",{children:["Translate to"," ",e("select",{value:a||"",disabled:!n.settings.contentTranslation,onChange:f=>{k.settings.contentTranslationTargetLanguage=f.target.value||null},children:[e("option",{value:"",children:["System language (",u,")"]}),e("option",{disabled:!0,children:"──────────"}),Qt.map(f=>e("option",{value:f.code,children:f.name}))]})]})}),e("hr",{}),e("p",{class:"checkbox-fieldset",children:['Hide "Translate" button for',n.settings.contentTranslationHideLanguages.length>0&&e(A,{children:[" ","(",n.settings.contentTranslationHideLanguages.length,")"]}),":",e("div",{class:"checkbox-fields",children:Qt.map(f=>e("label",{children:[e("input",{type:"checkbox",checked:n.settings.contentTranslationHideLanguages.includes(f.code),onChange:b=>{const{checked:g}=b.target;g?k.settings.contentTranslationHideLanguages.push(f.code):k.settings.contentTranslationHideLanguages=n.settings.contentTranslationHideLanguages.filter(v=>v!==f.code)}})," ",f.name]}))})]}),e("p",{class:"insignificant",children:e("small",{children:["Note: This feature uses external translation services, powered by"," ",e("a",{href:"https://github.com/cheeaun/lingva-api",target:"_blank",rel:"noopener noreferrer",children:"Lingva API"})," ","&"," ",e("a",{href:"https://github.com/thedaviddelta/lingva-translate",target:"_blank",rel:"noopener noreferrer",children:"Lingva Translate"}),"."]})}),e("hr",{}),e("div",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.contentTranslationAutoInline,disabled:!n.settings.contentTranslation,onChange:f=>{k.settings.contentTranslationAutoInline=f.target.checked}})," ","Auto inline translation"]}),e("p",{class:"insignificant",children:e("small",{children:["Automatically show translation for posts in timeline. Only works for ",e("b",{children:"short"})," posts without content warning, media and poll."]})})]})]})]}),!!ni&&e("li",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.mediaAltGenerator,onChange:f=>{k.settings.mediaAltGenerator=f.target.checked}})," ","Image description generator"," ",e(w,{icon:"sparkles2",class:"more-insignificant"})]}),e("div",{class:"sub-section insignificant",children:e("small",{children:"Only for new images while composing new posts."})}),e("div",{class:"sub-section insignificant",children:e("small",{children:["Note: This feature uses external AI service, powered by"," ",e("a",{href:"https://github.com/cheeaun/img-alt-api",target:"_blank",rel:"noopener noreferrer",children:"img-alt-api"}),". May not work well. Only for images and in English."]})})]}),e("li",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.cloakMode,onChange:f=>{k.settings.cloakMode=f.target.checked}})," ","Cloak mode"," ",e("span",{class:"insignificant",children:["(",e("samp",{children:"Text"})," → ",e("samp",{children:"████"}),")"]})]}),e("div",{class:"sub-section insignificant",children:e("small",{children:"Replace text as blocks, useful when taking screenshots, for privacy reasons."})})]}),r&&e("li",{children:e("button",{type:"button",class:"light",onClick:()=>{k.showDrafts=!0,k.showSettings=!1},children:"Unsent drafts"})})]})}),r&&e(ii,{onClose:t}),e("h3",{children:"About"}),e("section",{children:[e("div",{style:{display:"flex",flexWrap:"wrap",gap:8,lineHeight:1.25,alignItems:"center",marginTop:8},children:[e("img",{src:Gt,alt:"",width:"64",height:"64",style:{aspectRatio:"1/1",verticalAlign:"middle",background:"#b7cdf9",borderRadius:12}}),e("div",{children:[e("b",{children:"Phanpy"})," ",e("a",{href:"https://hachyderm.io/@phanpy",rel:"noopener noreferrer",onClick:f=>{f.preventDefault(),k.showAccount="phanpy@hachyderm.io"},children:"@phanpy"}),e("br",{}),e("a",{href:"https://github.com/cheeaun/phanpy",target:"_blank",rel:"noopener noreferrer",children:"Built"})," ","by"," ",e("a",{href:"https://mastodon.social/@cheeaun",rel:"noopener noreferrer",onClick:f=>{f.preventDefault(),k.showAccount="cheeaun@mastodon.social"},children:"@cheeaun"})]})]}),e("p",{children:[e("a",{href:"https://github.com/sponsors/cheeaun",target:"_blank",rel:"noopener noreferrer",children:"Sponsor"})," ","·"," ",e("a",{href:"https://www.buymeacoffee.com/cheeaun",target:"_blank",rel:"noopener noreferrer",children:"Donate"})," ","·"," ",e("a",{href:ti,target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"})]}),e("p",{children:[hn&&e(A,{children:[e("span",{class:"insignificant",children:"Site:"})," ",hn.replace(/https?:\/\//g,"").replace(/\/$/,""),e("br",{})]}),e("span",{class:"insignificant",children:"Version:"})," ",e("input",{type:"text",class:"version-string",readOnly:!0,size:"18",value:`${"2024-01-05T02:16:32.524Z".slice(0,10).replace(/-/g,".")}.adf0b35`,onClick:f=>{f.target.select();try{navigator.clipboard.writeText(f.target.value),pe("Version string copied")}catch{pe("Unable to copy version string")}}})," ",e("span",{class:"ib insignificant",children:["(",e("a",{href:"https://github.com/cheeaun/phanpy/commit/adf0b35",target:"_blank",rel:"noopener noreferrer",children:e($t,{datetime:new Date("2024-01-05T02:16:32.524Z")})}),")"]})]})]})]})]})}function ii({onClose:t}){if(!At())return null;const{instance:n}=z(),[i,o]=$("default"),a=D(),[s,u]=$(!1),[l,c]=$(!1),d=D();B(()=>{(async()=>{o("loading");try{const{subscription:r,backendSubscription:p}=await Qs();if(p!=null&&p.policy&&p.policy!=="none"){u(!0);const{alerts:f,policy:b}=p;d.current=b;const{elements:g}=a.current,v=g.namedItem(b);v&&(v.value=b),Object.keys(f).forEach(m=>{const y=g.namedItem(m);(y==null?void 0:y.type)==="checkbox"&&(y.checked=!0)})}o("default")}catch(r){/outside.*authorized/i.test(r.message)?c(!0):alert((r==null?void 0:r.message)||r),o("error")}})()},[]);const h=i==="loading";return e("form",{ref:a,onChange:()=>{const r=Object.fromEntries(new FormData(a.current)),p=!!r["policy-allow"],f={policy:r.policy,data:{alerts:{mention:!!r.mention,favourite:!!r.favourite,reblog:!!r.reblog,follow:!!r.follow,follow_request:!!r.followRequest,poll:!!r.poll,update:!!r.update,status:!!r.status}}};let b=0;Object.keys(f.data.alerts).forEach(v=>{f.data.alerts[v]?b++:delete f.data.alerts[v]});const g=d.current!==f.policy;p&&b>0?g?dn().then(()=>{ln(f)}).catch(v=>{alert("Failed to update subscription. Please try again.")}):ln(f).catch(v=>{alert("Failed to update subscription. Please try again.")}):dn().catch(v=>{alert("Failed to remove subscription. Please try again.")})},children:[e("h3",{children:"Push Notifications (beta)"}),e("section",{children:e("ul",{children:e("li",{children:[e("label",{children:[e("input",{type:"checkbox",disabled:h||l,name:"policy-allow",checked:s,onChange:async r=>{const{checked:p}=r.target;if(p){const f=await Notification.requestPermission();f==="granted"?u(!0):(u(!1),f==="denied"&&alert("Push notifications are blocked. Please enable them in your browser settings."))}else u(!1)}})," ","Allow from"," ",e("select",{name:"policy",disabled:h||l||!s,children:[{value:"all",label:"anyone"},{value:"followed",label:"people I follow"},{value:"follower",label:"followers"}].map(r=>e("option",{value:r.value,children:r.label}))})]}),e("div",{class:"shazam-container no-animation",style:{width:"100%"},hidden:!s,children:e("div",{class:"shazam-container-inner",children:e("div",{class:"sub-section",children:e("ul",{children:[{value:"mention",label:"Mentions"},{value:"favourite",label:"Likes"},{value:"reblog",label:"Boosts"},{value:"follow",label:"Follows"},{value:"followRequest",label:"Follow requests"},{value:"poll",label:"Polls"},{value:"update",label:"Post edits"},{value:"status",label:"New posts"}].map(r=>e("li",{children:e("label",{children:[e("input",{type:"checkbox",name:r.value})," ",r.label]})}))})})})}),l&&e("div",{class:"sub-section",children:e("p",{children:["Push permission was not granted since your last login. You'll need to"," ",e(ee,{to:`/login?instance=${n}`,onClick:t,children:[e("b",{children:"log in"})," again to grant push permission"]}),"."]})})]})})}),e("p",{class:"section-postnote",children:e("small",{children:["NOTE: Push notifications only work for ",e("b",{children:"one account"}),"."]})})]})}const Dt=()=>{let t=setTimeout(()=>{if(!document.getElementById("columns")){const i=document.querySelectorAll("#modal-container > *");if(i!=null&&i.length){const u=i[i.length-1],l=u.querySelector('[tabindex="-1"]')||u;if(l){l.focus();return}}if(document.querySelector(".deck-backdrop"))return;const a=document.querySelectorAll(".deck-container"),s=a[a.length-1];s&&s.tabIndex===-1&&s.focus()}},100);return()=>clearTimeout(t)};function Kn(t){if(!t)return;const n=lt(),i=D(n.pathname);B(()=>{i.current&&n.pathname!==i.current&&(t==null||t())},[n.pathname,t])}function Yt({list:t,onClose:n}){const{masto:i}=z(),[o,a]=$("default"),s=!!t,u=D(),l=D(),c=D();B(()=>{s&&(u.current.value=t.title,l.current.value=t.repliesPolicy,c.current&&(c.current.checked=t.exclusive))},[s]);const d=bs("@mastodon/list-exclusive");return e("div",{class:"sheet",children:[!!n&&e("button",{type:"button",class:"sheet-close",onClick:n,children:e(w,{icon:"x"})})," ",e("header",{children:e("h2",{children:s?"Edit list":"New list"})}),e("main",{children:e("form",{class:"list-form",onSubmit:h=>{h.preventDefault();const r=new FormData(h.target),p=r.get("title"),f=r.get("replies_policy"),b=r.get("exclusive")==="on";a("loading"),(async()=>{try{let g;s?g=await i.v1.lists.$select(t.id).update({title:p,replies_policy:f,exclusive:b}):g=await i.v1.lists.create({title:p,replies_policy:f,exclusive:b}),a("default"),n==null||n({state:"success",list:g})}catch{a("error"),alert(s?"Unable to edit list.":"Unable to create list.")}})()},children:[e("div",{class:"list-form-row",children:e("label",{for:"list-title",children:["Name"," ",e("input",{ref:u,type:"text",id:"list-title",name:"title",required:!0,disabled:o==="loading",dir:"auto"})]})}),e("div",{class:"list-form-row",children:e("select",{ref:l,name:"replies_policy",required:!0,disabled:o==="loading",children:[e("option",{value:"list",children:"Show replies to list members"}),e("option",{value:"followed",children:"Show replies to people I follow"}),e("option",{value:"none",children:"Don't show replies"})]})}),d&&e("div",{class:"list-form-row",children:e("label",{class:"label-block",children:[e("input",{ref:c,type:"checkbox",name:"exclusive",disabled:o==="loading"})," ","Hide posts on this list from Home/Following"]})}),e("div",{class:"list-form-footer",children:[e("button",{type:"submit",disabled:o==="loading",children:s?"Save":"Create"}),s&&e(Be,{disabled:o==="loading",align:"end",menuItemClassName:"danger",confirmLabel:"Delete this list?",onClick:()=>{a("loading"),(async()=>{try{await i.v1.lists.$select(t.id).remove(),a("default"),n==null||n({state:"deleted"})}catch{a("error"),alert("Unable to delete list.")}})()},children:e("button",{type:"button",class:"light danger",disabled:o==="loading",children:"Delete…"})})]})]})})]})}const oi=[60*5,60*30,60*60,60*60*6,60*60*24,60*60*24*3,60*60*24*7,0],fn={0:"Forever",300:"5 minutes",1800:"30 minutes",3600:"1 hour",21600:"6 hours",86400:"1 day",259200:"3 days",604800:"1 week"},pn=80,Zn=1e3*60*10;function ai(t,n){return n.v1.accounts.familiarFollowers.fetch({id:[t]})}const ci=tt(ai,{maxAge:Zn});async function ri(t,n){const i=n.v1.accounts.$select(t).statuses.list({limit:20}).next(),{value:o}=await i,a={total:o.length,originals:0,replies:0,boosts:0};return o.forEach(s=>{s.reblog?a.boosts++:s.inReplyToId&&s.inReplyToAccountId!==s.account.id?a.replies++:a.originals++}),o.length&&(a.daysSinceLastPost=Math.ceil((Date.now()-new Date(o[o.length-1].createdAt))/864e5)),a}const li=tt(ri,{maxAge:Zn});function Jn({account:t,fetchAccount:n=()=>{},standalone:i,instance:o,authenticated:a}){const{masto:s}=z({instance:o}),{masto:u,instance:l}=z(),[c,d]=$("default"),h=typeof t=="string",[r,p]=$(h?null:t),f=he(()=>o===l,[o,l]);B(()=>{if(!h){p(t);return}d("loading"),(async()=>{try{const q=await n();k.accounts[`${q.id}@${o}`]=q,p(q),d("default")}catch{p(null),d("error")}})()},[h,t,n]);const{acct:b,avatar:g,avatarStatic:v,bot:m,createdAt:y,displayName:S,emojis:I,fields:T,followersCount:x,followingCount:L,group:N,id:O,lastStatusAt:U,locked:P,note:M,statusesCount:C,url:_,username:F,memorial:Y,moved:te,roles:W}=r||{};let ke=!1,{header:re,headerStatic:X}=r||{};(!re||/missing\.png$/.test(re))&&g&&!/missing\.png$/.test(g)&&(re=g,ke=!0,v&&!/missing\.png$/.test(v)&&(X=v));const E=he(()=>O===se.session.get("currentAccount"),[O]);B(()=>{const q=!!(r!=null&&r.id&&(r!=null&&r.username)&&(r!=null&&r.acct)&&(r!=null&&r.avatar)&&(r!=null&&r.avatarStatic)&&(r!=null&&r.displayName)&&(r!=null&&r.url));if(E&&o&&q){const ge=se.local.getJSON("accounts");let be=!1;ge.forEach(ue=>{ue.info.id===r.id&&ue.instanceURL===o&&(ue.info=r,be=!0)}),be&&se.local.setJSON("accounts",ge)}},[E,r,o]);const j=he(()=>_?new URL(_).hostname:null,[_]),[ne,le]=$([]),H=D(),ae=D([]);async function Q(q){(q||!H.current)&&(H.current=s.v1.accounts.$select(O).followers.list({limit:pn}));const ge=await H.current.next();if(E||!f)return ge;const{value:be}=ge;let ue=[];if(q){const xe=await s.v1.accounts.familiarFollowers.fetch({id:[O]});ae.current=xe[0].accounts,ue=[...ae.current,...be.filter(Pe=>!ae.current.some(Ne=>Ne.id===Pe.id))]}else be!=null&&be.length&&(ue=be.filter(xe=>!ae.current.some(Pe=>Pe.id===xe.id)));return{...ge,value:ue}}const ye=D();async function V(q){return(q||!ye.current)&&(ye.current=s.v1.accounts.$select(O).following.list({limit:pn})),await ye.current.next()}const Z=i?"div":ee,ce=o?`/${o}/a/${O}`:`/a/${O}`,[fe,me]=$([]),[de,R]=$(),[G,K]=$("default"),ie=!!(de!=null&&de.total),we=async q=>{try{const ge=await ci(q,u);me(ge[0].accounts.slice(0,di))}catch{}},Le=async()=>{if(O){K("loading");try{const q=await li(O,s);R(q),K("default")}catch{K("error")}}},$e=Ve(({relationship:q,currentID:ge})=>{q.following||(we(ge),!i&&C>0&&Le())},[i,O,C]);return e("div",{tabIndex:"-1",class:`account-container ${c==="loading"?"skeleton":""}`,style:{"--header-color-1":ne[0],"--header-color-2":ne[1],"--header-color-3":ne[2],"--header-color-4":ne[3]},children:[c==="error"&&e("div",{class:"ui-state",children:[e("p",{children:"Unable to load account."}),e("p",{children:e("a",{href:h?t:_,target:"_blank",rel:"noopener noreferrer",children:["Go to account page ",e(w,{icon:"external"})]})})]}),c==="loading"?e(A,{children:[e("header",{children:e(He,{avatarSize:"xxxl",skeleton:!0})}),e("main",{children:[e("div",{class:"note",children:[e("p",{children:"███████ ████ ████"}),e("p",{children:"████ ████████ ██████ █████████ ████ ██"})]}),e("div",{class:"account-metadata-box",children:[e("div",{class:"profile-metadata",children:[e("div",{class:"profile-field",children:[e("b",{class:"more-insignificant",children:"███"}),e("p",{children:"██████"})]}),e("div",{class:"profile-field",children:[e("b",{class:"more-insignificant",children:"████"}),e("p",{children:"███████████"})]})]}),e("div",{class:"stats",children:[e("div",{children:[e("span",{children:"██"})," Followers"]}),e("div",{children:[e("span",{children:"██"})," Following"]}),e("div",{children:[e("span",{children:"██"})," Posts"]})]})]}),e("div",{class:"actions",children:[e("span",{}),e("span",{class:"buttons",children:e("button",{type:"button",title:"More",class:"plain",disabled:!0,children:e(w,{icon:"more",size:"l",alt:"More"})})})]})]})]}):r&&e(A,{children:[!!te&&e("div",{class:"account-moved",children:[e("p",{children:[e("b",{children:S})," has indicated that their new account is now:"]}),e(He,{account:te,instance:o,onClick:q=>{q.stopPropagation(),k.showAccount=te}})]}),!!re&&!/missing\.png$/.test(re)&&e("img",{src:re,alt:"",class:`header-banner ${ke?"header-is-avatar":""}`,onError:q=>{q.target.crossOrigin?q.target.src!==X?q.target.src=X:(q.target.removeAttribute("crossorigin"),q.target.src=re):q.target.src!==X?q.target.src=X:q.target.remove()},crossOrigin:"anonymous",onLoad:q=>{q.target.classList.add("loaded");try{const ge=document.createElement("canvas"),be=ge.getContext("2d",{willReadFrequently:!0});ge.width=q.target.width,ge.height=q.target.height,be.drawImage(q.target,0,0);const ue=10,Pe=[be.getImageData(0,0,ue,ue).data,be.getImageData(q.target.width-ue,0,ue,ue).data,be.getImageData(0,q.target.height-ue,ue,ue).data,be.getImageData(q.target.width-ue,q.target.height-ue,ue,ue).data].map(Ne=>{let st=0,Oe=0,We=0,Xe=0;for(let ve=0;ve{const[st,Oe,We,Xe]=hi(Ne);return`rgba(${st}, ${Oe}, ${We}, ${Xe})`});le(Pe)}catch{}}}),e("header",{children:e(He,{account:r,instance:o,avatarSize:"xxxl",external:i,internal:!i})}),e("div",{class:"faux-header-bg","aria-hidden":"true"}),e("main",{children:[!!Y&&e("span",{class:"tag",children:"In Memoriam"}),!!m&&e("span",{class:"tag",children:[e(w,{icon:"bot"})," Automated"]}),!!N&&e("span",{class:"tag",children:[e(w,{icon:"group"})," Group"]}),W==null?void 0:W.map(q=>e("span",{class:"tag",children:[q.name,!!j&&e(A,{children:[" ",e("span",{class:"more-insignificant",children:j})]})]})),e("div",{class:"note",dir:"auto",onClick:Pn({instance:l}),dangerouslySetInnerHTML:{__html:Pt(M,{emojis:I})}}),e("div",{class:"account-metadata-box",children:[(T==null?void 0:T.length)>0&&e("div",{class:"profile-metadata",children:T.map(({name:q,value:ge,verifiedAt:be},ue)=>e("div",{class:`profile-field ${be?"profile-verified":""}`,dir:"auto",children:[e("b",{children:[e(Nn,{text:q,emojis:I})," ",!!be&&e(w,{icon:"check-circle",size:"s"})]}),e("p",{dangerouslySetInnerHTML:{__html:Pt(ge,{emojis:I})}})]},q+ue))}),e("div",{class:"stats",children:[e(Z,{tabIndex:0,to:ce,onClick:()=>{setTimeout(()=>{k.showGenericAccounts={heading:"Followers",fetchAccounts:Q,instance:o,excludeRelationshipAttrs:E?["followedBy"]:[]}},0)},children:[!!fe.length&&e("span",{class:"shazam-container-horizontal",children:e("span",{class:"shazam-container-inner stats-avatars-bunch",children:fe.map(q=>e(et,{url:q.avatarStatic,size:"s",alt:`${q.displayName} @${q.acct}`,squircle:q==null?void 0:q.bot}))})}),e("span",{title:x,children:Ue(x)})," ","Followers"]}),e(Z,{class:"insignificant",tabIndex:0,to:ce,onClick:()=>{setTimeout(()=>{k.showGenericAccounts={heading:"Following",fetchAccounts:V,instance:o,excludeRelationshipAttrs:E?["following"]:[]}},0)},children:[e("span",{title:L,children:Ue(L)})," ","Following",e("br",{})]}),e(Z,{class:"insignificant",to:ce,children:[e("span",{title:C,children:Ue(C)})," ","Posts"]}),!!y&&e("div",{class:"insignificant",children:["Joined"," ",e("time",{datetime:y,children:Ke(y,{hideTime:!0})})]})]})]}),!!de&&e(Z,{to:ce,class:"account-metadata-box",children:e("div",{class:"shazam-container",children:e("div",{class:"shazam-container-inner",children:ie?e("div",{class:"posting-stats",title:`${Math.round(de.originals/de.total*100)}% original posts, ${Math.round(de.replies/de.total*100)}% replies, ${Math.round(de.boosts/de.total*100)}% boosts`,children:[e("div",{children:de.daysSinceLastPost<365?`Last ${de.total} post${de.total>1?"s":""} in the past +import{s as k,a as z,b as Ae,u as _n,c as pe,o as ms,I as w,M as Ce,d as se,A as et,N as It,e as Fe,f as Be,L as ee,g as at,h as En,l as gs,t as Qt,R as $t,i as bs,p as tt,j as He,k as Pn,m as Pt,E as Nn,n as Ue,q as Ke,r as ys,v as Ie,w as en,T as Dn,x as ht,y as Un,z as tn,B as ws,C as vs,D as Fn,F as Ee,G as Ss,S as Me,H as ks,J as Is,K as Ge,O as On,P as Nt,Q as Ts,U as rt,V as Bn,W as _e,X as zn,Y as Cs,Z as $s,_ as xs,$ as gt,a0 as As,a1 as nn,a2 as Ls,a3 as sn,a4 as on}from"./useTitle-60DQEO3r.js";import{_ as D,p as B,h as $,u as Re,w as ze,a as e,b as Se,g as A,s as xt,c as Ht,M as oe,d as De,e as lt,F as he,T as Ve,S as Ms,I as je,y as Je,f as qn,l as an,i as Hn,j as Vn,k as qe,A as Rs,N as _s,m as Es,q as Ps,J as Ns,C as Gn,n as Ds,o as nt,r as jn,t as Us,v as Fs,x as Os,z as pt,B as Yn,D as cn,E as Bs,R as Vt,G as Te,H as zs,K as qs}from"./vendor-jabuMAqb.js";function ct(t=()=>{},n=[]){const i=D(t);B(()=>{i.current=t},[n]),B(()=>{const o=()=>{const a=document.hidden||document.visibilityState==="hidden";i.current(!a)};return document.addEventListener("visibilitychange",o),()=>document.removeEventListener("visibilitychange",o)},[])}const Hs=1e3*3,Vs=15e3,Gs=ze(function({isLoggedIn:n}){const[i,o]=$(!0);ct(o);const a=async(l,c,d)=>{var h;if(k.notificationsLast){const r=l.v1.notifications.list({limit:1,sinceId:k.notificationsLast.id}),{value:p}=await r.next();if(p!=null&&p.length)if(d)k.notificationsShowNew=!0;else{let f;try{const b=await l.v1.markers.fetch({timeline:"notifications"});f=(h=b==null?void 0:b.notifications)==null?void 0:h.lastReadId}catch{}f?k.notificationsShowNew=p[0].id!==f:k.notificationsShowNew=!0}}};B(()=>{let l,c;if(n&&i){const{masto:d,streaming:h,instance:r}=z();(async()=>{await a(d,r);let p=!1;h&&(c=setTimeout(()=>{(async()=>{try{p=!0,l=h.user.notification.subscribe();for await(const f of l){if(!l||!i)break;f.event==="notification"&&Ae(f.payload,r,{skipThreading:!0}),k.notificationsShowNew=!0}}catch{p=!1}p||(c=setInterval(()=>{a(d,r,!0)},Vs))})()},Hs))})()}return()=>{var d;(d=l==null?void 0:l.unsubscribe)==null||d.call(l),l=null,clearTimeout(c),clearInterval(c)}},[i,n]);const s=D(),u=()=>{s.current=Date.now(),fetch("./version.json").then(l=>l.json()).then(l=>{l&&(k.appVersion=l)}).catch(l=>{})};return _n(u,i&&1e3*60*30),ct(l=>{l&&(s.current?Date.now()-s.current>1e3*60*60&&u():u())}),Re("shift+alt+k",()=>{const l=k.settings.cloakMode;k.settings.cloakMode=!l,pe({text:`Cloak mode ${l?"disabled":"enabled"}`})}),null});function js(){function t(n){n.shiftKey?ms()||(k.showCompose=!0):k.showCompose=!0}return Re("c, shift+c",t,{ignoreEventWhen:n=>!!document.querySelector("#modal-container > *")}),e("button",{type:"button",id:"compose-button",onClick:t,children:e(w,{icon:"quill",size:"xl",alt:"Compose"})})}const Ys=ze(function(){const n=Se(k);function i(){k.showKeyboardShortcutsHelp=!1}return Re("?, shift+?",o=>{k.showKeyboardShortcutsHelp=!0},{ignoreEventWhen:o=>!!document.querySelector("#modal-container > *")}),!!n.showKeyboardShortcutsHelp&&e(Ce,{class:"light",onClose:i,children:e("div",{id:"keyboard-shortcuts-help-container",class:"sheet",tabindex:"-1",children:[e("button",{type:"button",class:"sheet-close",onClick:i,children:e(w,{icon:"x"})}),e("header",{children:e("h2",{children:"Keyboard shortcuts"})}),e("main",{children:e("table",{children:[{action:"Keyboard shortcuts help",keys:e("kbd",{children:"?"})},{action:"Next post",keys:e("kbd",{children:"j"})},{action:"Previous post",keys:e("kbd",{children:"k"})},{action:"Skip carousel to next post",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"j"})]})},{action:"Skip carousel to previous post",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"k"})]})},{action:"Open post details",keys:e(A,{children:[e("kbd",{children:"Enter"})," or ",e("kbd",{children:"o"})]})},{action:e(A,{children:["Expand content warning or",e("br",{}),"toggle expanded/collapsed thread"]}),keys:e("kbd",{children:"x"})},{action:"Close post or dialogs",keys:e(A,{children:[e("kbd",{children:"Esc"})," or ",e("kbd",{children:"Backspace"})]})},{action:"Focus column in multi-column mode",keys:e(A,{children:[e("kbd",{children:"1"})," to ",e("kbd",{children:"9"})]})},{action:"Compose new post",keys:e("kbd",{children:"c"})},{action:"Compose new post (new window)",className:"insignificant",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"c"})]})},{action:"Send post",keys:e(A,{children:[e("kbd",{children:"Ctrl"})," + ",e("kbd",{children:"Enter"})," or ",e("kbd",{children:"⌘"})," +"," ",e("kbd",{children:"Enter"})]})},{action:"Search",keys:e("kbd",{children:"/"})},{action:"Reply",keys:e("kbd",{children:"r"})},{action:"Reply (new window)",className:"insignificant",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"r"})]})},{action:"Like (favourite)",keys:e(A,{children:[e("kbd",{children:"l"})," or ",e("kbd",{children:"f"})]})},{action:"Boost",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"b"})]})},{action:"Bookmark",keys:e("kbd",{children:"d"})},{action:"Toggle Cloak mode",keys:e(A,{children:[e("kbd",{children:"Shift"})," + ",e("kbd",{children:"Alt"})," + ",e("kbd",{children:"k"})]})}].map(({action:o,className:a,keys:s})=>e("tr",{children:[e("th",{class:a,children:o}),e("td",{children:s})]},o))})})]})})});function Ws({onClose:t}){const{masto:n}=z(),i=se.local.getJSON("accounts"),o=se.session.get("currentAccount"),a=i.length>1,[s,u]=xt(c=>c+1,0),[l]=Ht();return e("div",{id:"accounts-container",class:"sheet",tabIndex:"-1",children:[!!t&&e("button",{type:"button",class:"sheet-close",onClick:t,children:e(w,{icon:"x"})}),e("header",{class:"header-grid",children:e("h2",{children:"Accounts"})}),e("main",{children:e("section",{children:[e("ul",{class:"accounts-list",ref:l,children:i.map((c,d)=>{const h=c.info.id===o,r=d===0;return e("li",{children:[e("div",{children:[a&&e("span",{class:`current ${h?"is-current":""}`,children:e(w,{icon:"check-circle",alt:"Current"})}),e(et,{url:c.info.avatarStatic,size:"xxl",onDblClick:async()=>{if(h)try{const p=await n.v1.accounts.$select(c.info.id).fetch();c.info=p,se.local.setJSON("accounts",i),u()}catch{}}}),e(It,{account:a?{...c.info,acct:/@/.test(c.info.acct)?c.info.acct:`${c.info.acct}@${c.instanceURL}`}:c.info,showAcct:!0,onClick:()=>{h?k.showAccount=`${c.info.username}@${c.instanceURL}`:(se.session.set("currentAccount",c.info.id),location.reload())}})]}),e("div",{class:"actions",children:[r&&a&&e(A,{children:[e("span",{class:"tag",children:"Default"})," "]}),e(Fe,{align:"end",menuButton:e("button",{type:"button",title:"More",class:"plain more-button",children:e(w,{icon:"more",size:"l",alt:"More"})}),children:[e(oe,{onClick:()=>{k.showAccount=`${c.info.username}@${c.instanceURL}`},children:[e(w,{icon:"user"}),e("span",{children:"View profile…"})]}),e(De,{}),a&&e(oe,{disabled:r,onClick:()=>{i.splice(d,1),i.unshift(c),se.local.setJSON("accounts",i),u()},children:[e(w,{icon:"check-circle"}),e("span",{children:"Set as default"})]}),e(Be,{subMenu:!0,confirmLabel:e(A,{children:[e(w,{icon:"exit"}),e("span",{children:["Log out @",c.info.acct,"?"]})]}),disabled:!h,menuItemClassName:"danger",onClick:()=>{i.splice(d,1),se.local.setJSON("accounts",i),location.href=location.pathname||"/"},children:[e(w,{icon:"exit"}),e("span",{children:"Log out…"})]})]})]})]},c.info.id)})}),e("p",{children:e(ee,{to:"/login",class:"button plain2",onClick:t,children:[e(w,{icon:"plus"})," ",e("span",{children:"Add an existing account"})]})}),a&&e("p",{children:e("small",{children:["Note: ",e("i",{children:"Default"})," account will always be used for first load. Switched accounts will persist during the session."]})})]})})]})}const Gt="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20fill-rule='evenodd'%20stroke-linejoin='round'%20stroke-miterlimit='2'%20clip-rule='evenodd'%20viewBox='0%200%2064%2064'%3e%3cpath%20fill='none'%20d='M0%200h63.994v63.994H0z'/%3e%3cpath%20fill='%23a4bff7'%20d='M37.774%2011.471c14.639%203.752%2019.034%2016.557%2015.889%2031.304-.696%203.261-2.563%206.661-6.356%208.693-3.204%201.717-8.07%202.537-15.338.55l-9.634-2.404C11.651%2046.992%208.378%2038.733%2010.027%2031.823c3.627-15.201%2015.543-23.48%2027.747-20.352Z'/%3e%3cpath%20fill='%23d8e7fe'%20d='M36.76%2015.429c12.289%203.15%2015.547%2014.114%2012.907%2026.493-.947%204.44-4.937%209.365-16.664%206.143l-9.684-2.417c-7.854-1.923-10.53-7.8-9.318-12.877%203.016-12.639%2012.611-19.943%2022.759-17.342Z'/%3e%3cpath%20fill='%236081e6'%20d='M27.471%2024.991c-1.457-.698-7.229%203.213-7.663%208.926-.182%202.39%204.55%203.237%205.071-.169.725-4.743%203.715-8.218%202.592-8.757Zm10.746%202.005c-2.083.327-.382%205.901-.595%2010.727-.123%202.8%204.388%203.464%204.703%202.011%201.098-5.073-2.066-13.058-4.108-12.738Z'/%3e%3c/svg%3e";function rn(t){const{masto:n}=z();return n.v1.push.subscription.create(t)}function Ks(){const{masto:t}=z();return t.v1.push.subscription.fetch()}function Zs(t){const{masto:n}=z();return n.v1.push.subscription.update(t)}function Js(){const{masto:t}=z();return t.v1.push.subscription.remove()}function At(){return"serviceWorker"in navigator&&"PushManager"in window}function Xs(){return navigator.serviceWorker.getRegistration()}async function jt(){const t=await Xs(),n=t?await t.pushManager.getSubscription():void 0;return{registration:t,subscription:n}}function Wn(t){const n="=".repeat((4-t.length%4)%4),i=`${t}${n}`.replace(/-/g,"+").replace(/_/g,"/"),o=window.atob(i),a=new Uint8Array(o.length);for(let s=0;s{f.preventDefault();const g=new FormData(o.current).get("theme"),v=document.documentElement;if(g==="auto"){v.classList.remove("is-light","is-dark");const m=document.querySelector('meta[data-theme-setting="manual"]');m&&(m.name=""),document.querySelectorAll('meta[data-theme-setting="auto"]').forEach(S=>{S.name="theme-color"})}else{v.classList.toggle("is-light",g==="light"),v.classList.toggle("is-dark",g==="dark");const m=document.querySelector('meta[data-theme-setting="manual"]');m&&(m.name="theme-color",m.content=g==="light"?m.dataset.themeLightColor:m.dataset.themeDarkColor),document.querySelectorAll('meta[data-theme-setting="auto"]').forEach(S=>{S.name=""})}document.querySelector('meta[name="color-scheme"]').setAttribute("content",g==="auto"?"dark light":g),g==="auto"?se.local.del("theme"):se.local.set("theme",g)},children:e("div",{class:"radio-group",children:[e("label",{children:[e("input",{type:"radio",name:"theme",value:"light",defaultChecked:i==="light"}),e("span",{children:"Light"})]}),e("label",{children:[e("input",{type:"radio",name:"theme",value:"dark",defaultChecked:i==="dark"}),e("span",{children:"Dark"})]}),e("label",{children:[e("input",{type:"radio",name:"theme",value:"auto",defaultChecked:i!=="light"&&i!=="dark"}),e("span",{children:"Auto"})]})]})})})]}),e("li",{children:[e("div",{children:e("label",{children:"Text size"})}),e("div",{class:"range-group",children:[e("span",{style:{fontSize:Qe[0]},children:"A"})," ",e("input",{type:"range",min:Qe[0],max:Qe[Qe.length-1],step:"1",value:l,list:"sizes",onChange:f=>{const b=parseInt(f.target.value,10);document.documentElement.style.setProperty("--text-size",`${b}px`),b===un?se.local.del("textSize"):se.local.set("textSize",f.target.value)}})," ",e("span",{style:{fontSize:Qe[Qe.length-1]},children:"A"}),e("datalist",{id:"sizes",children:Qe.map(f=>e("option",{value:f}))})]})]})]})}),r&&e(A,{children:[e("h3",{children:"Posting"}),e("section",{children:e("ul",{children:e("li",{children:[e("div",{children:e("label",{for:"posting-privacy-field",children:["Default visibility"," ",e(w,{icon:"cloud",alt:"Synced",class:"synced-icon"})]})}),e("div",{children:e("select",{id:"posting-privacy-field",value:c["posting:default:visibility"]||"public",onChange:f=>{const{value:b}=f.target;(async()=>{try{await h.v1.accounts.updateCredentials({source:{privacy:b}}),d({...c,"posting:default:visibility":b}),se.account.set("preferences",{...c,"posting:default:visibility":b})}catch{alert("Failed to update posting privacy")}})()},children:[e("option",{value:"public",children:"Public"}),e("option",{value:"unlisted",children:"Unlisted"}),e("option",{value:"private",children:"Followers only"})]})})]})})}),e("p",{class:"section-postnote",children:[e(w,{icon:"cloud",alt:"Synced",class:"synced-icon"})," ",e("small",{children:["Synced to your instance server's settings."," ",e("a",{href:`https://${p}/`,target:"_blank",rel:"noopener noreferrer",children:["Go to your instance (",p,") for more settings."]})]})]})]}),e("h3",{children:"Experiments"}),e("section",{children:e("ul",{children:[e("li",{children:e("label",{children:[e("input",{type:"checkbox",checked:n.settings.autoRefresh,onChange:f=>{k.settings.autoRefresh=f.target.checked}})," ","Auto refresh timeline posts"]})}),e("li",{children:e("label",{children:[e("input",{type:"checkbox",checked:n.settings.boostsCarousel,onChange:f=>{k.settings.boostsCarousel=f.target.checked}})," ","Boosts carousel"]})}),e("li",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.contentTranslation,onChange:f=>{const{checked:b}=f.target;k.settings.contentTranslation=b,b||(k.settings.contentTranslationTargetLanguage=null)}})," ","Post translation"]}),e("div",{class:`sub-section ${n.settings.contentTranslation?"":"more-insignificant"}`,children:[e("div",{children:e("label",{children:["Translate to"," ",e("select",{value:a||"",disabled:!n.settings.contentTranslation,onChange:f=>{k.settings.contentTranslationTargetLanguage=f.target.value||null},children:[e("option",{value:"",children:["System language (",u,")"]}),e("option",{disabled:!0,children:"──────────"}),Qt.map(f=>e("option",{value:f.code,children:f.name}))]})]})}),e("hr",{}),e("p",{class:"checkbox-fieldset",children:['Hide "Translate" button for',n.settings.contentTranslationHideLanguages.length>0&&e(A,{children:[" ","(",n.settings.contentTranslationHideLanguages.length,")"]}),":",e("div",{class:"checkbox-fields",children:Qt.map(f=>e("label",{children:[e("input",{type:"checkbox",checked:n.settings.contentTranslationHideLanguages.includes(f.code),onChange:b=>{const{checked:g}=b.target;g?k.settings.contentTranslationHideLanguages.push(f.code):k.settings.contentTranslationHideLanguages=n.settings.contentTranslationHideLanguages.filter(v=>v!==f.code)}})," ",f.name]}))})]}),e("p",{class:"insignificant",children:e("small",{children:["Note: This feature uses external translation services, powered by"," ",e("a",{href:"https://github.com/cheeaun/lingva-api",target:"_blank",rel:"noopener noreferrer",children:"Lingva API"})," ","&"," ",e("a",{href:"https://github.com/thedaviddelta/lingva-translate",target:"_blank",rel:"noopener noreferrer",children:"Lingva Translate"}),"."]})}),e("hr",{}),e("div",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.contentTranslationAutoInline,disabled:!n.settings.contentTranslation,onChange:f=>{k.settings.contentTranslationAutoInline=f.target.checked}})," ","Auto inline translation"]}),e("p",{class:"insignificant",children:e("small",{children:["Automatically show translation for posts in timeline. Only works for ",e("b",{children:"short"})," posts without content warning, media and poll."]})})]})]})]}),!!ni&&e("li",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.mediaAltGenerator,onChange:f=>{k.settings.mediaAltGenerator=f.target.checked}})," ","Image description generator"," ",e(w,{icon:"sparkles2",class:"more-insignificant"})]}),e("div",{class:"sub-section insignificant",children:e("small",{children:"Only for new images while composing new posts."})}),e("div",{class:"sub-section insignificant",children:e("small",{children:["Note: This feature uses external AI service, powered by"," ",e("a",{href:"https://github.com/cheeaun/img-alt-api",target:"_blank",rel:"noopener noreferrer",children:"img-alt-api"}),". May not work well. Only for images and in English."]})})]}),e("li",{children:[e("label",{children:[e("input",{type:"checkbox",checked:n.settings.cloakMode,onChange:f=>{k.settings.cloakMode=f.target.checked}})," ","Cloak mode"," ",e("span",{class:"insignificant",children:["(",e("samp",{children:"Text"})," → ",e("samp",{children:"████"}),")"]})]}),e("div",{class:"sub-section insignificant",children:e("small",{children:"Replace text as blocks, useful when taking screenshots, for privacy reasons."})})]}),r&&e("li",{children:e("button",{type:"button",class:"light",onClick:()=>{k.showDrafts=!0,k.showSettings=!1},children:"Unsent drafts"})})]})}),r&&e(ii,{onClose:t}),e("h3",{children:"About"}),e("section",{children:[e("div",{style:{display:"flex",flexWrap:"wrap",gap:8,lineHeight:1.25,alignItems:"center",marginTop:8},children:[e("img",{src:Gt,alt:"",width:"64",height:"64",style:{aspectRatio:"1/1",verticalAlign:"middle",background:"#b7cdf9",borderRadius:12}}),e("div",{children:[e("b",{children:"Phanpy"})," ",e("a",{href:"https://hachyderm.io/@phanpy",rel:"noopener noreferrer",onClick:f=>{f.preventDefault(),k.showAccount="phanpy@hachyderm.io"},children:"@phanpy"}),e("br",{}),e("a",{href:"https://github.com/cheeaun/phanpy",target:"_blank",rel:"noopener noreferrer",children:"Built"})," ","by"," ",e("a",{href:"https://mastodon.social/@cheeaun",rel:"noopener noreferrer",onClick:f=>{f.preventDefault(),k.showAccount="cheeaun@mastodon.social"},children:"@cheeaun"})]})]}),e("p",{children:[e("a",{href:"https://github.com/sponsors/cheeaun",target:"_blank",rel:"noopener noreferrer",children:"Sponsor"})," ","·"," ",e("a",{href:"https://www.buymeacoffee.com/cheeaun",target:"_blank",rel:"noopener noreferrer",children:"Donate"})," ","·"," ",e("a",{href:ti,target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"})]}),e("p",{children:[hn&&e(A,{children:[e("span",{class:"insignificant",children:"Site:"})," ",hn.replace(/https?:\/\//g,"").replace(/\/$/,""),e("br",{})]}),e("span",{class:"insignificant",children:"Version:"})," ",e("input",{type:"text",class:"version-string",readOnly:!0,size:"18",value:`${"2024-01-05T19:24:44.622Z".slice(0,10).replace(/-/g,".")}.32c53b8`,onClick:f=>{f.target.select();try{navigator.clipboard.writeText(f.target.value),pe("Version string copied")}catch{pe("Unable to copy version string")}}})," ",e("span",{class:"ib insignificant",children:["(",e("a",{href:"https://github.com/cheeaun/phanpy/commit/32c53b8",target:"_blank",rel:"noopener noreferrer",children:e($t,{datetime:new Date("2024-01-05T19:24:44.622Z")})}),")"]})]})]})]})]})}function ii({onClose:t}){if(!At())return null;const{instance:n}=z(),[i,o]=$("default"),a=D(),[s,u]=$(!1),[l,c]=$(!1),d=D();B(()=>{(async()=>{o("loading");try{const{subscription:r,backendSubscription:p}=await Qs();if(p!=null&&p.policy&&p.policy!=="none"){u(!0);const{alerts:f,policy:b}=p;d.current=b;const{elements:g}=a.current,v=g.namedItem(b);v&&(v.value=b),Object.keys(f).forEach(m=>{const y=g.namedItem(m);(y==null?void 0:y.type)==="checkbox"&&(y.checked=!0)})}o("default")}catch(r){/outside.*authorized/i.test(r.message)?c(!0):alert((r==null?void 0:r.message)||r),o("error")}})()},[]);const h=i==="loading";return e("form",{ref:a,onChange:()=>{const r=Object.fromEntries(new FormData(a.current)),p=!!r["policy-allow"],f={policy:r.policy,data:{alerts:{mention:!!r.mention,favourite:!!r.favourite,reblog:!!r.reblog,follow:!!r.follow,follow_request:!!r.followRequest,poll:!!r.poll,update:!!r.update,status:!!r.status}}};let b=0;Object.keys(f.data.alerts).forEach(v=>{f.data.alerts[v]?b++:delete f.data.alerts[v]});const g=d.current!==f.policy;p&&b>0?g?dn().then(()=>{ln(f)}).catch(v=>{alert("Failed to update subscription. Please try again.")}):ln(f).catch(v=>{alert("Failed to update subscription. Please try again.")}):dn().catch(v=>{alert("Failed to remove subscription. Please try again.")})},children:[e("h3",{children:"Push Notifications (beta)"}),e("section",{children:e("ul",{children:e("li",{children:[e("label",{children:[e("input",{type:"checkbox",disabled:h||l,name:"policy-allow",checked:s,onChange:async r=>{const{checked:p}=r.target;if(p){const f=await Notification.requestPermission();f==="granted"?u(!0):(u(!1),f==="denied"&&alert("Push notifications are blocked. Please enable them in your browser settings."))}else u(!1)}})," ","Allow from"," ",e("select",{name:"policy",disabled:h||l||!s,children:[{value:"all",label:"anyone"},{value:"followed",label:"people I follow"},{value:"follower",label:"followers"}].map(r=>e("option",{value:r.value,children:r.label}))})]}),e("div",{class:"shazam-container no-animation",style:{width:"100%"},hidden:!s,children:e("div",{class:"shazam-container-inner",children:e("div",{class:"sub-section",children:e("ul",{children:[{value:"mention",label:"Mentions"},{value:"favourite",label:"Likes"},{value:"reblog",label:"Boosts"},{value:"follow",label:"Follows"},{value:"followRequest",label:"Follow requests"},{value:"poll",label:"Polls"},{value:"update",label:"Post edits"},{value:"status",label:"New posts"}].map(r=>e("li",{children:e("label",{children:[e("input",{type:"checkbox",name:r.value})," ",r.label]})}))})})})}),l&&e("div",{class:"sub-section",children:e("p",{children:["Push permission was not granted since your last login. You'll need to"," ",e(ee,{to:`/login?instance=${n}`,onClick:t,children:[e("b",{children:"log in"})," again to grant push permission"]}),"."]})})]})})}),e("p",{class:"section-postnote",children:e("small",{children:["NOTE: Push notifications only work for ",e("b",{children:"one account"}),"."]})})]})}const Dt=()=>{let t=setTimeout(()=>{if(!document.getElementById("columns")){const i=document.querySelectorAll("#modal-container > *");if(i!=null&&i.length){const u=i[i.length-1],l=u.querySelector('[tabindex="-1"]')||u;if(l){l.focus();return}}if(document.querySelector(".deck-backdrop"))return;const a=document.querySelectorAll(".deck-container"),s=a[a.length-1];s&&s.tabIndex===-1&&s.focus()}},100);return()=>clearTimeout(t)};function Kn(t){if(!t)return;const n=lt(),i=D(n.pathname);B(()=>{i.current&&n.pathname!==i.current&&(t==null||t())},[n.pathname,t])}function Yt({list:t,onClose:n}){const{masto:i}=z(),[o,a]=$("default"),s=!!t,u=D(),l=D(),c=D();B(()=>{s&&(u.current.value=t.title,l.current.value=t.repliesPolicy,c.current&&(c.current.checked=t.exclusive))},[s]);const d=bs("@mastodon/list-exclusive");return e("div",{class:"sheet",children:[!!n&&e("button",{type:"button",class:"sheet-close",onClick:n,children:e(w,{icon:"x"})})," ",e("header",{children:e("h2",{children:s?"Edit list":"New list"})}),e("main",{children:e("form",{class:"list-form",onSubmit:h=>{h.preventDefault();const r=new FormData(h.target),p=r.get("title"),f=r.get("replies_policy"),b=r.get("exclusive")==="on";a("loading"),(async()=>{try{let g;s?g=await i.v1.lists.$select(t.id).update({title:p,replies_policy:f,exclusive:b}):g=await i.v1.lists.create({title:p,replies_policy:f,exclusive:b}),a("default"),n==null||n({state:"success",list:g})}catch{a("error"),alert(s?"Unable to edit list.":"Unable to create list.")}})()},children:[e("div",{class:"list-form-row",children:e("label",{for:"list-title",children:["Name"," ",e("input",{ref:u,type:"text",id:"list-title",name:"title",required:!0,disabled:o==="loading",dir:"auto"})]})}),e("div",{class:"list-form-row",children:e("select",{ref:l,name:"replies_policy",required:!0,disabled:o==="loading",children:[e("option",{value:"list",children:"Show replies to list members"}),e("option",{value:"followed",children:"Show replies to people I follow"}),e("option",{value:"none",children:"Don't show replies"})]})}),d&&e("div",{class:"list-form-row",children:e("label",{class:"label-block",children:[e("input",{ref:c,type:"checkbox",name:"exclusive",disabled:o==="loading"})," ","Hide posts on this list from Home/Following"]})}),e("div",{class:"list-form-footer",children:[e("button",{type:"submit",disabled:o==="loading",children:s?"Save":"Create"}),s&&e(Be,{disabled:o==="loading",align:"end",menuItemClassName:"danger",confirmLabel:"Delete this list?",onClick:()=>{a("loading"),(async()=>{try{await i.v1.lists.$select(t.id).remove(),a("default"),n==null||n({state:"deleted"})}catch{a("error"),alert("Unable to delete list.")}})()},children:e("button",{type:"button",class:"light danger",disabled:o==="loading",children:"Delete…"})})]})]})})]})}const oi=[60*5,60*30,60*60,60*60*6,60*60*24,60*60*24*3,60*60*24*7,0],fn={0:"Forever",300:"5 minutes",1800:"30 minutes",3600:"1 hour",21600:"6 hours",86400:"1 day",259200:"3 days",604800:"1 week"},pn=80,Zn=1e3*60*10;function ai(t,n){return n.v1.accounts.familiarFollowers.fetch({id:[t]})}const ci=tt(ai,{maxAge:Zn});async function ri(t,n){const i=n.v1.accounts.$select(t).statuses.list({limit:20}).next(),{value:o}=await i,a={total:o.length,originals:0,replies:0,boosts:0};return o.forEach(s=>{s.reblog?a.boosts++:s.inReplyToId&&s.inReplyToAccountId!==s.account.id?a.replies++:a.originals++}),o.length&&(a.daysSinceLastPost=Math.ceil((Date.now()-new Date(o[o.length-1].createdAt))/864e5)),a}const li=tt(ri,{maxAge:Zn});function Jn({account:t,fetchAccount:n=()=>{},standalone:i,instance:o,authenticated:a}){const{masto:s}=z({instance:o}),{masto:u,instance:l}=z(),[c,d]=$("default"),h=typeof t=="string",[r,p]=$(h?null:t),f=he(()=>o===l,[o,l]);B(()=>{if(!h){p(t);return}d("loading"),(async()=>{try{const q=await n();k.accounts[`${q.id}@${o}`]=q,p(q),d("default")}catch{p(null),d("error")}})()},[h,t,n]);const{acct:b,avatar:g,avatarStatic:v,bot:m,createdAt:y,displayName:S,emojis:I,fields:T,followersCount:x,followingCount:L,group:N,id:O,lastStatusAt:U,locked:P,note:M,statusesCount:C,url:_,username:F,memorial:Y,moved:te,roles:W}=r||{};let ke=!1,{header:re,headerStatic:X}=r||{};(!re||/missing\.png$/.test(re))&&g&&!/missing\.png$/.test(g)&&(re=g,ke=!0,v&&!/missing\.png$/.test(v)&&(X=v));const E=he(()=>O===se.session.get("currentAccount"),[O]);B(()=>{const q=!!(r!=null&&r.id&&(r!=null&&r.username)&&(r!=null&&r.acct)&&(r!=null&&r.avatar)&&(r!=null&&r.avatarStatic)&&(r!=null&&r.displayName)&&(r!=null&&r.url));if(E&&o&&q){const ge=se.local.getJSON("accounts");let be=!1;ge.forEach(ue=>{ue.info.id===r.id&&ue.instanceURL===o&&(ue.info=r,be=!0)}),be&&se.local.setJSON("accounts",ge)}},[E,r,o]);const j=he(()=>_?new URL(_).hostname:null,[_]),[ne,le]=$([]),H=D(),ae=D([]);async function Q(q){(q||!H.current)&&(H.current=s.v1.accounts.$select(O).followers.list({limit:pn}));const ge=await H.current.next();if(E||!f)return ge;const{value:be}=ge;let ue=[];if(q){const xe=await s.v1.accounts.familiarFollowers.fetch({id:[O]});ae.current=xe[0].accounts,ue=[...ae.current,...be.filter(Pe=>!ae.current.some(Ne=>Ne.id===Pe.id))]}else be!=null&&be.length&&(ue=be.filter(xe=>!ae.current.some(Pe=>Pe.id===xe.id)));return{...ge,value:ue}}const ye=D();async function V(q){return(q||!ye.current)&&(ye.current=s.v1.accounts.$select(O).following.list({limit:pn})),await ye.current.next()}const Z=i?"div":ee,ce=o?`/${o}/a/${O}`:`/a/${O}`,[fe,me]=$([]),[de,R]=$(),[G,K]=$("default"),ie=!!(de!=null&&de.total),we=async q=>{try{const ge=await ci(q,u);me(ge[0].accounts.slice(0,di))}catch{}},Le=async()=>{if(O){K("loading");try{const q=await li(O,s);R(q),K("default")}catch{K("error")}}},$e=Ve(({relationship:q,currentID:ge})=>{q.following||(we(ge),!i&&C>0&&Le())},[i,O,C]);return e("div",{tabIndex:"-1",class:`account-container ${c==="loading"?"skeleton":""}`,style:{"--header-color-1":ne[0],"--header-color-2":ne[1],"--header-color-3":ne[2],"--header-color-4":ne[3]},children:[c==="error"&&e("div",{class:"ui-state",children:[e("p",{children:"Unable to load account."}),e("p",{children:e("a",{href:h?t:_,target:"_blank",rel:"noopener noreferrer",children:["Go to account page ",e(w,{icon:"external"})]})})]}),c==="loading"?e(A,{children:[e("header",{children:e(He,{avatarSize:"xxxl",skeleton:!0})}),e("main",{children:[e("div",{class:"note",children:[e("p",{children:"███████ ████ ████"}),e("p",{children:"████ ████████ ██████ █████████ ████ ██"})]}),e("div",{class:"account-metadata-box",children:[e("div",{class:"profile-metadata",children:[e("div",{class:"profile-field",children:[e("b",{class:"more-insignificant",children:"███"}),e("p",{children:"██████"})]}),e("div",{class:"profile-field",children:[e("b",{class:"more-insignificant",children:"████"}),e("p",{children:"███████████"})]})]}),e("div",{class:"stats",children:[e("div",{children:[e("span",{children:"██"})," Followers"]}),e("div",{children:[e("span",{children:"██"})," Following"]}),e("div",{children:[e("span",{children:"██"})," Posts"]})]})]}),e("div",{class:"actions",children:[e("span",{}),e("span",{class:"buttons",children:e("button",{type:"button",title:"More",class:"plain",disabled:!0,children:e(w,{icon:"more",size:"l",alt:"More"})})})]})]})]}):r&&e(A,{children:[!!te&&e("div",{class:"account-moved",children:[e("p",{children:[e("b",{children:S})," has indicated that their new account is now:"]}),e(He,{account:te,instance:o,onClick:q=>{q.stopPropagation(),k.showAccount=te}})]}),!!re&&!/missing\.png$/.test(re)&&e("img",{src:re,alt:"",class:`header-banner ${ke?"header-is-avatar":""}`,onError:q=>{q.target.crossOrigin?q.target.src!==X?q.target.src=X:(q.target.removeAttribute("crossorigin"),q.target.src=re):q.target.src!==X?q.target.src=X:q.target.remove()},crossOrigin:"anonymous",onLoad:q=>{q.target.classList.add("loaded");try{const ge=document.createElement("canvas"),be=ge.getContext("2d",{willReadFrequently:!0});ge.width=q.target.width,ge.height=q.target.height,be.drawImage(q.target,0,0);const ue=10,Pe=[be.getImageData(0,0,ue,ue).data,be.getImageData(q.target.width-ue,0,ue,ue).data,be.getImageData(0,q.target.height-ue,ue,ue).data,be.getImageData(q.target.width-ue,q.target.height-ue,ue,ue).data].map(Ne=>{let st=0,Oe=0,We=0,Xe=0;for(let ve=0;ve{const[st,Oe,We,Xe]=hi(Ne);return`rgba(${st}, ${Oe}, ${We}, ${Xe})`});le(Pe)}catch{}}}),e("header",{children:e(He,{account:r,instance:o,avatarSize:"xxxl",external:i,internal:!i})}),e("div",{class:"faux-header-bg","aria-hidden":"true"}),e("main",{children:[!!Y&&e("span",{class:"tag",children:"In Memoriam"}),!!m&&e("span",{class:"tag",children:[e(w,{icon:"bot"})," Automated"]}),!!N&&e("span",{class:"tag",children:[e(w,{icon:"group"})," Group"]}),W==null?void 0:W.map(q=>e("span",{class:"tag",children:[q.name,!!j&&e(A,{children:[" ",e("span",{class:"more-insignificant",children:j})]})]})),e("div",{class:"note",dir:"auto",onClick:Pn({instance:l}),dangerouslySetInnerHTML:{__html:Pt(M,{emojis:I})}}),e("div",{class:"account-metadata-box",children:[(T==null?void 0:T.length)>0&&e("div",{class:"profile-metadata",children:T.map(({name:q,value:ge,verifiedAt:be},ue)=>e("div",{class:`profile-field ${be?"profile-verified":""}`,dir:"auto",children:[e("b",{children:[e(Nn,{text:q,emojis:I})," ",!!be&&e(w,{icon:"check-circle",size:"s"})]}),e("p",{dangerouslySetInnerHTML:{__html:Pt(ge,{emojis:I})}})]},q+ue))}),e("div",{class:"stats",children:[e(Z,{tabIndex:0,to:ce,onClick:()=>{setTimeout(()=>{k.showGenericAccounts={heading:"Followers",fetchAccounts:Q,instance:o,excludeRelationshipAttrs:E?["followedBy"]:[]}},0)},children:[!!fe.length&&e("span",{class:"shazam-container-horizontal",children:e("span",{class:"shazam-container-inner stats-avatars-bunch",children:fe.map(q=>e(et,{url:q.avatarStatic,size:"s",alt:`${q.displayName} @${q.acct}`,squircle:q==null?void 0:q.bot}))})}),e("span",{title:x,children:Ue(x)})," ","Followers"]}),e(Z,{class:"insignificant",tabIndex:0,to:ce,onClick:()=>{setTimeout(()=>{k.showGenericAccounts={heading:"Following",fetchAccounts:V,instance:o,excludeRelationshipAttrs:E?["following"]:[]}},0)},children:[e("span",{title:L,children:Ue(L)})," ","Following",e("br",{})]}),e(Z,{class:"insignificant",to:ce,children:[e("span",{title:C,children:Ue(C)})," ","Posts"]}),!!y&&e("div",{class:"insignificant",children:["Joined"," ",e("time",{datetime:y,children:Ke(y,{hideTime:!0})})]})]})]}),!!de&&e(Z,{to:ce,class:"account-metadata-box",children:e("div",{class:"shazam-container",children:e("div",{class:"shazam-container-inner",children:ie?e("div",{class:"posting-stats",title:`${Math.round(de.originals/de.total*100)}% original posts, ${Math.round(de.replies/de.total*100)}% replies, ${Math.round(de.boosts/de.total*100)}% boosts`,children:[e("div",{children:de.daysSinceLastPost<365?`Last ${de.total} post${de.total>1?"s":""} in the past ${de.daysSinceLastPost} day${de.daysSinceLastPost>1?"s":""}`:` Last ${de.total} posts in the past year(s) `}),e("div",{class:"posting-stats-bar",style:{"--originals-percentage":`${de.originals/de.total*100}%`,"--replies-percentage":`${(de.originals+de.replies)/de.total*100}%`}}),e("div",{class:"posting-stats-legends",children:[e("span",{class:"ib",children:[e("span",{class:"posting-stats-legend-item posting-stats-legend-item-originals"})," ","Original"]})," ",e("span",{class:"ib",children:[e("span",{class:"posting-stats-legend-item posting-stats-legend-item-replies"})," ","Replies"]})," ",e("span",{class:"ib",children:[e("span",{class:"posting-stats-legend-item posting-stats-legend-item-boosts"})," ","Boosts"]})]})]}):e("div",{class:"posting-stats",children:"Post stats unavailable."})})})}),e("div",{class:"account-metadata-box",children:e("div",{class:"shazam-container no-animation",hidden:!!de,children:e("div",{class:"shazam-container-inner",children:e("button",{type:"button",class:"posting-stats-button",disabled:G==="loading",onClick:()=>{Le()},children:[e("div",{class:`posting-stats-bar posting-stats-icon ${G==="loading"?"loading":""}`,style:{"--originals-percentage":"33%","--replies-percentage":"66%"}}),"View post stats"," "]})})})})]}),e("footer",{children:e(ui,{info:r,instance:o,authenticated:a,onRelationshipChange:$e})})]})]})}const di=3;function ui({info:t,instance:n,authenticated:i,onRelationshipChange:o=()=>{}}){var ye;if(!t)return null;const{masto:a,instance:s,authenticated:u}=z(),l=n===s,[c,d]=$("default"),[h,r]=$(null),{id:p,acct:f,url:b,username:g,locked:v,lastStatusAt:m,note:y,fields:S,moved:I}=t,T=D(p),{following:x,showingReblogs:L,notifying:N,followedBy:O,blocking:U,blockedBy:P,muting:M,mutingNotifications:C,requested:_,domainBlocking:F,endorsed:Y,note:te}=h||{},[W,ke]=$(null),[re,X]=$(!1);B(()=>{if(t){const V=se.session.get("currentAccount");let Z;(async()=>{if(l&&i)Z=p;else if(!l&&u){const fe=t.acct.includes("@");try{const me=await a.v2.search.fetch({q:fe?t.acct:`${t.username}@${n}`,type:"accounts",limit:1,resolve:!0});me.accounts.length&&(Z=me.accounts[0].id,ke(me.accounts[0]))}catch{}}if(!Z)return;if(V===Z){X(!0);return}if(T.current=Z,I)return;d("loading");const ce=a.v1.accounts.relationships.fetch({id:[Z]});try{const fe=await ce;if(d("default"),fe.length){const me=fe[0];r(me),o({relationship:me,currentID:Z})}}catch{d("error")}})()}},[t,i]),B(()=>{t&&re&&ys(t)},[t,re]);const E=c==="loading",[j,ne]=$(!1),[le,H]=$(!1),[ae,Q]=$(!1);return e(A,{children:[e("div",{class:"actions",children:[e("span",{children:[O?e("span",{class:"tag",children:"Follows you"}):m?e("small",{class:"insignificant",children:["Last post:"," ",e("span",{class:"ib",children:Ke(m,{hideTime:!0})})]}):e("span",{}),M&&e("span",{class:"tag danger",children:"Muted"}),U&&e("span",{class:"tag danger",children:"Blocked"})]})," ",e("span",{class:"buttons",children:[!!te&&e("button",{type:"button",class:"private-note-tag",title:"Private note",onClick:()=>{Q(!0)},dir:"auto",children:e("span",{children:te})}),e(Fe,{portal:{target:document.body},containerProps:{style:{zIndex:1001}},align:"center",position:"anchor",overflow:"auto",menuButton:e("button",{type:"button",title:"More",class:"plain",disabled:E,children:e(w,{icon:"more",size:"l",alt:"More"})}),children:[u&&!re&&e(A,{children:[e(oe,{onClick:()=>{k.showCompose={draftStatus:{status:`@${(W==null?void 0:W.acct)||f} `}}},children:[e(w,{icon:"at"}),e("span",{children:["Mention @",g]})]}),e(oe,{onClick:()=>{ne(!0)},children:[e(w,{icon:"translate"}),e("span",{children:"Translate bio"})]}),e(oe,{onClick:()=>{Q(!0)},children:[e(w,{icon:"pencil"}),e("span",{children:te?"Edit private note":"Add private note"})]}),x&&e(oe,{onClick:()=>{H(!0)},children:[e(w,{icon:"list"}),e("span",{children:"Add/remove from Lists"})]}),e(De,{})]}),e(oe,{href:b,target:"_blank",children:[e(w,{icon:"external"}),e("small",{class:"menu-double-lines",children:fi(b)})]}),e("div",{class:"menu-horizontal",children:[e(oe,{onClick:()=>{try{navigator.clipboard.writeText(b),pe("Link copied")}catch{pe("Unable to copy link")}},children:[e(w,{icon:"link"}),e("span",{children:"Copy"})]}),(navigator==null?void 0:navigator.share)&&((ye=navigator==null?void 0:navigator.canShare)==null?void 0:ye.call(navigator,{url:b}))&&e(oe,{onClick:()=>{try{navigator.share({url:b})}catch{alert("Sharing doesn't seem to work.")}},children:[e(w,{icon:"share"}),e("span",{children:"Share…"})]})]}),!!h&&e(A,{children:[e(De,{}),M?e(oe,{onClick:()=>{d("loading"),(async()=>{try{const V=await a.v1.accounts.$select((W==null?void 0:W.id)||p).unmute();r(V),d("default"),pe(`Unmuted @${g}`),k.reloadGenericAccounts.id="mute",k.reloadGenericAccounts.counter++}catch{d("error")}})()},children:[e(w,{icon:"unmute"}),e("span",{children:["Unmute @",g]})]}):e(Ms,{openTrigger:"clickOnly",direction:"bottom",overflow:"auto",shift:16,label:e(A,{children:[e(w,{icon:"mute"}),e("span",{class:"menu-grow",children:["Mute @",g,"…"]}),e("span",{style:{textOverflow:"clip"},children:[e(w,{icon:"time"}),e(w,{icon:"chevron-right"})]})]}),children:e("div",{class:"menu-wrap",children:oi.map(V=>e(oe,{onClick:()=>{d("loading"),(async()=>{try{const Z=await a.v1.accounts.$select((W==null?void 0:W.id)||p).mute({duration:V});r(Z),d("default"),pe(`Muted @${g} for ${fn[V]}`),k.reloadGenericAccounts.id="mute",k.reloadGenericAccounts.counter++}catch{d("error"),pe(`Unable to mute @${g}`)}})()},children:fn[V]}))})}),e(Be,{subMenu:!0,confirm:!U,confirmLabel:e(A,{children:[e(w,{icon:"block"}),e("span",{children:["Block @",g,"?"]})]}),menuItemClassName:"danger",onClick:()=>{d("loading"),(async()=>{try{if(U){const V=await a.v1.accounts.$select((W==null?void 0:W.id)||p).unblock();r(V),d("default"),pe(`Unblocked @${g}`)}else{const V=await a.v1.accounts.$select((W==null?void 0:W.id)||p).block();r(V),d("default"),pe(`Blocked @${g}`)}k.reloadGenericAccounts.id="block",k.reloadGenericAccounts.counter++}catch{d("error"),U?pe(`Unable to unblock @${g}`):pe(`Unable to block @${g}`)}})()},children:U?e(A,{children:[e(w,{icon:"unblock"}),e("span",{children:["Unblock @",g]})]}):e(A,{children:[e(w,{icon:"block"}),e("span",{children:["Block @",g,"…"]})]})})]})]}),!h&&c==="loading"&&e(Ie,{abrupt:!0}),!!h&&e(Be,{confirm:x||_,confirmLabel:e("span",{children:_?"Withdraw follow request?":`Unfollow @${t.acct||t.username}?`}),menuItemClassName:"danger",align:"end",disabled:E,onClick:()=>{d("loading"),(async()=>{try{let V;x||_?V=await a.v1.accounts.$select(T.current).unfollow():V=await a.v1.accounts.$select(T.current).follow(),V&&r(V),d("default")}catch(V){alert(V),d("error")}})()},children:e("button",{type:"button",class:`${x||_?"light swap":""}`,"data-swap-state":x||_?"danger":"",disabled:E,children:x?e(A,{children:[e("span",{children:"Following"}),e("span",{children:"Unfollow…"})]}):_?e(A,{children:[e("span",{children:"Requested"}),e("span",{children:"Withdraw…"})]}):v?e(A,{children:[e(w,{icon:"lock"})," ",e("span",{children:"Follow"})]}):"Follow"})})]})]}),!!j&&e(Ce,{class:"light",onClose:()=>{ne(!1)},children:e(pi,{note:y,fields:S,onClose:()=>ne(!1)})}),!!le&&e(Ce,{class:"light",onClose:()=>{H(!1)},children:e(mi,{accountID:T.current,onClose:()=>H(!1)})}),!!ae&&e(Ce,{class:"light",onClose:()=>{Q(!1)},children:e(gi,{account:t,note:te,onRelationshipChange:V=>{r(V)},onClose:()=>Q(!1)})})]})}function hi([t,n,i]){const o=.2126*t+.7152*n+.0722*i;let a;return o>=220?a=1:o<=50?a=.1:a=o/255,a=Math.min(1,a),[t,n,i,a]}function fi(t){if(!t)return;const n=new URL(t),{host:i,pathname:o}=n,a=o.replace(/\/$/,"").replace(/^\//,"");return e(A,{children:[e("span",{class:"more-insignificant",children:[i,"/"]}),e("wbr",{}),e("span",{children:a})]})}function pi({note:t,fields:n,onClose:i}){const o=(n==null?void 0:n.map(({name:s,value:u})=>`${s} @@ -18,5 +18,5 @@ ${o}`:"");return e("div",{class:"sheet",children:[!!i&&e("button",{type:"button" ${me?"filtered":""} ${de?"has-spoiler":""} ${G?"show-media":""} - `,children:e(Fn,{class:t,media:ie,lang:_,to:`/${o}/s/${y}?media-only=${we+1}`,onClick:s?q=>s(q,we,ie,i):void 0})},Le)})}const vn=ze(Ji);function mt(t){var S,I,T,x,L;const n=Se(k),{masto:i,instance:o,authenticated:a}=z(),[s,u]=$(),[l,c]=$(!1);B(()=>{const N=se.local.getJSON("accounts")||[],O=N.find(U=>U.info.id===se.session.get("currentAccount"));O&&u(O),c(N.length>1)},[]);const d=(n.settings.shortcutsViewMode==="multi-column"||!n.settings.shortcutsViewMode&&n.settings.shortcutsColumnsMode)&&!n.shortcuts.find(N=>N.type==="following"),h=Ns(()=>{k.showAccounts=!0},{threshold:600,detect:"touch",cancelOnMovement:!0}),r=D(),[p,f]=$(void 0),b=Ts([0,0,n.settings.shortcutsViewMode==="tab-menu-bar"?50:0,0]),g=D();async function v(N){return(N||!g.current)&&(g.current=i.v1.mutes.list({limit:80})),await g.current.next()}const m=D();async function y(N){return(N||!m.current)&&(m.current=i.v1.blocks.list({limit:80})),await m.current.next()}return e(A,{children:[e("button",{ref:r,type:"button",class:`button plain nav-menu-button ${l?"with-avatar":""} ${open?"active":""}`,style:{position:"relative"},onClick:()=>{f(N=>N?void 0:"open")},onContextMenu:N=>{N.preventDefault(),k.showAccounts=!0},...h(),children:[l&&e(et,{url:((S=s==null?void 0:s.info)==null?void 0:S.avatar)||((I=s==null?void 0:s.info)==null?void 0:I.avatarStatic),size:"l",squircle:(T=s==null?void 0:s.info)==null?void 0:T.bot}),e(w,{icon:"menu",size:l?"s":"l"})]}),e(Gn,{menuClassName:"nav-menu",state:p,anchorRef:r,onClose:()=>{f(void 0)},containerProps:{style:{zIndex:10},onClick:()=>{f(void 0)}},portal:{target:document.body},...t,overflow:"auto",viewScroll:"close",position:"anchor",align:"center",boundingBoxPadding:b,unmountOnClose:!0,children:[!!((x=n.appVersion)!=null&&x.commitHash)&&n.appVersion.commitHash!=="adf0b35"&&e("div",{class:"top-menu",children:[e(oe,{onClick:()=>{confirm("Reload page now to update?")&&(async()=>{try{location.reload()}catch{}})()},children:[e(w,{icon:"sparkles",class:"sparkle-icon",size:"l"})," ",e("span",{children:"New update available…"})]}),e(De,{})]}),e("section",{children:[e(Ee,{to:"/",children:[e(w,{icon:"home",size:"l"})," ",e("span",{children:"Home"})]}),a&&e(A,{children:[d&&e(Ee,{to:"/following",children:[e(w,{icon:"following",size:"l"})," ",e("span",{children:"Following"})]}),e(Ee,{to:"/mentions",children:[e(w,{icon:"at",size:"l"})," ",e("span",{children:"Mentions"})]}),e(Ee,{to:"/notifications",children:[e(w,{icon:"notification",size:"l"})," ",e("span",{children:"Notifications"}),n.notificationsShowNew&&e("sup",{title:"New",style:{opacity:.5},children:[" ","•"]})]}),e(De,{}),e(Ee,{to:"/l",children:[e(w,{icon:"list",size:"l"})," ",e("span",{children:"Lists"})]}),e(Ee,{to:"/ft",children:[e(w,{icon:"hashtag",size:"l"})," ",e("span",{children:"Followed Hashtags"})]}),e(Ee,{to:"/b",children:[e(w,{icon:"bookmark",size:"l"})," ",e("span",{children:"Bookmarks"})]}),e(Ee,{to:"/f",children:[e(w,{icon:"heart",size:"l"})," ",e("span",{children:"Likes"})]})]}),e(De,{}),e(Ee,{to:"/search",children:[e(w,{icon:"search",size:"l"})," ",e("span",{children:"Search"})]}),e(Ee,{to:`/${o}/p/l`,children:[e(w,{icon:"building",size:"l"})," ",e("span",{children:"Local"})]}),e(Ee,{to:`/${o}/p`,children:[e(w,{icon:"earth",size:"l"})," ",e("span",{children:"Federated"})]}),e(Ee,{to:`/${o}/trending`,children:[e(w,{icon:"chart",size:"l"})," ",e("span",{children:"Trending"})]})]}),e("section",{children:a?e(A,{children:[e(De,{}),((L=s==null?void 0:s.info)==null?void 0:L.id)&&e(Ee,{to:`/${o}/a/${s.info.id}`,children:[e(w,{icon:"user",size:"l"})," ",e("span",{children:"Profile"})]}),e(oe,{onClick:()=>{k.showAccounts=!0},children:[e(w,{icon:"group",size:"l"})," ",e("span",{children:"Accounts…"})]}),e(oe,{onClick:()=>{k.showGenericAccounts={id:"mute",heading:"Muted users",fetchAccounts:v,excludeRelationshipAttrs:["muting"]}},children:[e(w,{icon:"mute",size:"l"})," Muted users…"]}),e(oe,{onClick:()=>{k.showGenericAccounts={id:"block",heading:"Blocked users",fetchAccounts:y,excludeRelationshipAttrs:["blocking"]}},children:[e(w,{icon:"block",size:"l"}),"Blocked users…"]}),e(De,{className:"divider-grow"}),e(oe,{onClick:()=>{k.showKeyboardShortcutsHelp=!0},children:[e(w,{icon:"keyboard",size:"l"})," ",e("span",{children:"Keyboard shortcuts"})]}),e(oe,{onClick:()=>{k.showShortcutsSettings=!0},children:[e(w,{icon:"shortcut",size:"l"})," ",e("span",{children:"Shortcuts / Columns…"})]}),e(oe,{onClick:()=>{k.showSettings=!0},children:[e(w,{icon:"gear",size:"l"})," ",e("span",{children:"Settings…"})]})]}):e(A,{children:[e(De,{}),e(Ee,{to:"/login",children:[e(w,{icon:"user",size:"l"})," ",e("span",{children:"Log in"})]}),e(oe,{onClick:()=>{k.showSettings=!0},children:[e(w,{icon:"gear",size:"l"})," ",e("span",{children:"Settings…"})]})]})})]})]})}const bt={block:"nearest",inline:"center",behavior:"smooth"};function Ye({title:t,titleComponent:n,id:i,instance:o,emptyText:a,errorText:s,useItemID:u,boostsCarousel:l,fetchItems:c=()=>{},checkForUpdates:d=()=>{},checkForUpdatesInterval:h=15e3,headerStart:r,headerEnd:p,timelineStart:f,refresh:b,view:g,filterContext:v,showFollowedTags:m}){const y=Se(k),[S,I]=$([]),[T,x]=$("default"),[L,N]=$(!1),[O,U]=$(!1),[P,M]=$(!0),C=D(),_=g!=="media",F=Ds(H=>{U(!1),T!=="loading"&&(x("loading"),(async()=>{try{let{done:ae,value:Q}=await c(H);if(Array.isArray(Q)){const[ye,V]=Q.reduce((Z,ce)=>(ce._pinned?Z[0].push(ce):Z[1].push(ce),Z),[[],[]]);Q=V,_&&(l&&(Q=Gi(Q)),Q=ji(Q)),ye.length&&(Q=ye.concat(Q)),I(H?Q:Z=>[...Z,...Q]),Q.length||(ae=!0),N(!ae)}else N(!1);x("default")}catch{x("error")}finally{F.cancel()}})())},1500,{leading:!0,trailing:!1}),Y=".timeline-item, .timeline-item-alt",te=Re("j, shift+j",(H,ae)=>{const Q=document.activeElement.closest(Y),ye=Q==null?void 0:Q.getBoundingClientRect(),V=Array.from(C.current.querySelectorAll(Y));if(Q&&ye.top0){const Z=V.indexOf(Q);let ce=V[Z+1];ae.shift&&(ce=V.find((fe,me)=>me>Z&&!fe.classList.contains("timeline-item-alt"))),ce&&(ce.focus(),ce.scrollIntoView(bt))}else{const Z=V.find(ce=>{const fe=ce.getBoundingClientRect();return fe.top>=44&&fe.left>=0});Z&&(Z.focus(),Z.scrollIntoView(bt))}}),W=Re("k, shift+k",(H,ae)=>{const Q=document.activeElement.closest(Y),ye=Q==null?void 0:Q.getBoundingClientRect(),V=Array.from(C.current.querySelectorAll(Y));if(Q&&ye.top0){const Z=V.indexOf(Q);let ce=V[Z-1];ae.shift&&(ce=V.findLast((fe,me)=>me{const fe=ce.getBoundingClientRect();return fe.top>=44&&fe.left>=0});Z&&(Z.focus(),Z.scrollIntoView(bt))}}),ke=Re(["enter","o"],()=>{const H=document.activeElement.closest(Y);H&&H.click()}),re=D(),[X,E]=$(!1);Zi({scrollableRef:C,distanceFromEnd:2,scrollThresholdStart:44},({scrollDirection:H,nearReachStart:ae,nearReachEnd:Q,reachStart:ye,reachEnd:V})=>{if(re.current){const Z=H==="end"&&!ae;re.current.hidden=Z}E(ae),ye&&F(!0)},[]),B(()=>{var H;(H=C.current)==null||H.scrollTo({top:0}),F(!0)},[]),B(()=>{F(!0)},[b]);const j=D(g);B(()=>{j.current!==g&&(j.current=g,I([]))},[g]);const ne=Ve(async({disableIdleCheck:H=!1}={})=>{const ae=C.current?getComputedStyle(C.current).pointerEvents==="none":!1;y.settings.autoRefresh&&C.current.scrollTop<16&&(H||window.__IDLE__)&&!to()&&!ae?F(!0):await d()&&U(!0)},[i,F,d,y.settings.autoRefresh]),le=D();return ct(H=>{if(H){const ae=Date.now()-le.current;(!le.current||ae>1e3*3)&&ne({disableIdleCheck:!0})}else le.current=Date.now();M(H)},[d,ne,y.settings.autoRefresh]),_n(ne,P&&!O?h*(X?1:2):null),e(On.Provider,{value:v,children:e("div",{id:`${i}-page`,class:"deck-container",ref:H=>{C.current=H,te.current=H,W.current=H,ke.current=H},tabIndex:"-1",children:e("div",{class:"timeline-deck deck",children:[e("header",{ref:re,onClick:H=>{var ae;H.target.closest("a, button")||(ae=C.current)==null||ae.scrollTo({top:0,behavior:"smooth"})},onDblClick:H=>{H.target.closest("a, button")||F(!0)},class:T==="loading"?"loading":"",children:[e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),r??e(ee,{to:"/",class:"button plain home-button",children:e(w,{icon:"home",size:"l"})})]}),t&&(n||e("h1",{children:t})),e("div",{class:"header-side",children:!!p&&p})]}),S.length>0&&T!=="loading"&&O&&e("button",{class:"updates-button shiny-pill",type:"button",onClick:()=>{var H;F(!0),(H=C.current)==null||H.scrollTo({top:0,behavior:"smooth"})},children:[e(w,{icon:"arrow-up"})," New posts"]})]}),!!f&&e("div",{class:`timeline-start ${T==="loading"?"loading":""}`,children:f}),S.length?e(A,{children:[e("ul",{class:`timeline ${g?`timeline-${g}`:""}`,children:[S.map(H=>e(Xi,{status:H,instance:o,useItemID:u,filterContext:v,view:g,showFollowedTags:m},H.id+(H==null?void 0:H._pinned)+g)),L&&T==="loading"&&(g==="media"?null:e(A,{children:[e("li",{style:{height:"20vh"},children:e(Me,{skeleton:!0})}),e("li",{style:{height:"25vh"},children:e(Me,{skeleton:!0})})]}))]}),T==="default"&&(L?e(je,{root:C.current,rootMargin:`0px 0px ${screen.height*1.5}px 0px`,onChange:H=>{H&&F()},children:e("button",{type:"button",class:"plain block",onClick:()=>F(),style:{marginBlockEnd:"6em"},children:"Show more…"})}):e("p",{class:"ui-state insignificant",children:"The end."}))]}):T==="loading"?e("ul",{class:"timeline",children:Array.from({length:5}).map((H,ae)=>g==="media"?e("div",{style:{height:"50vh"}}):e("li",{children:e(Me,{skeleton:!0})},ae))}):T!=="error"&&e("p",{class:"ui-state",children:a}),T==="error"&&e("p",{class:"ui-state",children:[s,e("br",{}),e("br",{}),e("button",{type:"button",onClick:()=>F(!S.length),children:"Try again"})]})]})})})}function Xi({status:t,instance:n,useItemID:i,filterContext:o,view:a,showFollowedTags:s}){const{id:u,reblog:l,items:c,type:d,_pinned:h}=t;h&&(i=!1);const r=(l==null?void 0:l.id)||u,p=n?`/${n}/s/${r}`:`/s/${r}`;let f="";d==="boosts"?f=`${c.length} Boosts`:d==="pinned"&&(f="Pinned posts");const b=d==="boosts"||d==="pinned";if(c){const v=rt(c,o);if(b)return v.sort((y,S)=>{const I=Nt(y.filtered,o),T=Nt(S.filtered,o);return I&&!T?1:!I&&T?-1:0}),e("li",{class:"timeline-item-carousel",children:e(Qi,{title:f,class:`${d}-carousel`,children:v.map(y=>{const{id:S,reblog:I,_pinned:T}=y,x=(I==null?void 0:I.id)||S,L=n?`/${n}/s/${x}`:`/s/${x}`;return T&&(i=!1),e("li",{children:e(ee,{class:"status-carousel-link timeline-item-alt",to:L,children:i?e(Me,{statusID:S,instance:n,size:"s",contentTextWeight:!0,enableCommentHint:!0}):e(Me,{status:y,instance:n,size:"s",contentTextWeight:!0,enableCommentHint:!0})})},S)})})},`timeline-${u}`);const m=v.length>3;return v.map((y,S)=>{const{id:I,_differentAuthor:T}=y,x=n?`/${n}/s/${I}`:`/s/${I}`,L=S>0&&S0||m&&L&&(d==="thread"||d==="conversation"&&!T&&!v[S-1]._differentAuthor&&!v[S+1]._differentAuthor),U=S===0,P=S===v.length-1;return e("li",{class:`timeline-item-container timeline-item-container-type-${d} timeline-item-container-${U?"start":P?"end":"middle"} ${T?"timeline-item-diff-author":""}`,children:e(ee,{class:"status-link timeline-item",to:x,children:O?e(eo,{status:y,instance:n}):i?e(Me,{statusID:I,instance:n,enableCommentHint:P,showFollowedTags:s}):e(Me,{status:y,instance:n,enableCommentHint:P,showFollowedTags:s})})},`timeline-${I}`)})}const g=`timeline-${u+h}`;return a==="media"?i?e(vn,{class:"timeline-item",parent:"li",statusID:u,instance:n},g):e(vn,{class:"timeline-item",parent:"li",status:t,instance:n},g):e("li",{children:e(ee,{class:"status-link timeline-item",to:p,children:i?e(Me,{statusID:u,instance:n,enableCommentHint:!0,showFollowedTags:s}):e(Me,{status:t,instance:n,enableCommentHint:!0,showFollowedTags:s})})},g)}function Qi({title:t,class:n,children:i}){const o=D(),a=D(),s=D(),[u,l]=$(!1);return B(()=>{setTimeout(()=>{l(!0)},1)},[]),e("div",{class:`status-carousel ${n}`,children:[e("header",{children:[e("h3",{children:t}),e("span",{children:[e("button",{ref:a,type:"button",class:"small plain2",onClick:()=>{var c,d;(d=o.current)==null||d.scrollBy({left:-Math.min(320,(c=o.current)==null?void 0:c.offsetWidth),behavior:"smooth"})},children:e(w,{icon:"chevron-left"})})," ",e("button",{ref:s,type:"button",class:"small plain2",onClick:()=>{var c,d;(d=o.current)==null||d.scrollBy({left:Math.min(320,(c=o.current)==null?void 0:c.offsetWidth),behavior:"smooth"})},children:e(w,{icon:"chevron-right"})})]})]}),e("ul",{ref:o,children:[e(je,{class:"status-carousel-beacon",onChange:c=>{a.current&&(a.current.disabled=c)}}),i[0],u&&i.slice(1),e(je,{class:"status-carousel-beacon",onChange:c=>{s.current&&(s.current.disabled=c)}})]})]})}function eo({status:t,instance:n}){const i=Se(k),{id:o,visibility:a}=t,s=Bn(t),u=Ge(o,n);return e("article",{class:`status compact-thread ${a==="direct"?"visibility-direct":""}`,tabindex:"-1",children:[i.statusThreadNumber[u]?e("div",{class:"status-thread-badge",children:[e(w,{icon:"thread",size:"s"}),i.statusThreadNumber[u]?` ${i.statusThreadNumber[u]}/X`:""]}):e("div",{class:"status-thread-badge",children:e(w,{icon:"thread",size:"s"})}),e("div",{class:"content-compact",title:s,children:[s,t.sensitive&&t.spoilerText&&e(A,{children:[" ",e("span",{class:"spoiler-badge",children:e(w,{icon:"eye-close",size:"s"})})]})]})]})}function to(){return!!document.querySelector(".deck-backdrop, #modal-container > *")}const ot=20,Zt=1983,Sn=`${Zt}-01`,no=(()=>{try{const t=document.createElement("input");return t.setAttribute("type","month"),t.type==="month"}catch{return!1}})();async function so(t){var o;const{masto:n}=z({instance:t}),i=await n.v2.search.fetch({q:"from:me",type:"statuses",limit:1});return!!((o=i==null?void 0:i.statuses)!=null&&o.length)}const io=tt(so);function oo(){const t=Se(k),{id:n,...i}=nt(),[o,a]=qe(),s=o.get("month"),u=!o.get("replies"),l=!!o.get("boosts"),c=o.get("tagged"),d=!!o.get("media"),{masto:h,instance:r,authenticated:p}=z({instance:i.instance}),{masto:f,instance:b}=z(),g=D(),v=[s,u,l,c,d],[m,y]=$(),S=D(0);B(()=>{S.current=0},v);const I=he(()=>r===b,[r,b]),[T,x]=$(!1);B(()=>{I&&m!=null&&m.acct&&(async()=>{const X=await io(r);x(X)})()},[r,I,m==null?void 0:m.acct]);async function L(X){var ae,Q,ye;const E=/^\d{4}-[01]\d$/.test(s),j=((Q=(ae=s==null?void 0:s.split)==null?void 0:ae.call(s,"-"))==null?void 0:Q[0])>=Zt;if(E&&j){if(!m)return{value:[],done:!0};const[V,Z]=s.split("-"),ce=parseInt(Z,10)-1,fe=new Date(V,ce,0),me=`${fe.getFullYear()}-${(fe.getMonth()+1).toString().padStart(2,"0")}-${fe.getDate().toString().padStart(2,"0")}`,de=new Date(V,ce+1,1),R=`${de.getFullYear()}-${(de.getMonth()+1).toString().padStart(2,"0")}-${de.getDate().toString().padStart(2,"0")}`;let G;X?(G=ot+1,S.current=0):(G=ot+S.current+1,S.current+=ot);const K=await h.v2.search.fetch({q:`from:${m.acct} after:${me} before:${R}`,type:"statuses",limit:G,offset:S.current});if((ye=K==null?void 0:K.statuses)!=null&&ye.length){const ie=K.statuses.slice(0,ot);ie.forEach(Le=>{Ae(Le,r)});const we=K.statuses.length<=ot;return{value:ie,done:we}}else return{value:[],done:!0}}const ne=[];if(X){const{value:V}=await h.v1.accounts.$select(n).statuses.list({pinned:!0}).next();if(V!=null&&V.length&&!c&&!d){const Z=V.map(ce=>(Ae(ce,r),{...ce,_pinned:!0}));if(Z.length>=3){const ce=Z.map(fe=>fe.id);ne.push({id:ce,items:Z,type:"pinned"})}else ne.push(...Z)}}(X||!g.current)&&(g.current=h.v1.accounts.$select(n).statuses.list({limit:ot,exclude_replies:u,exclude_reblogs:l,only_media:d,tagged:c}));const{value:le,done:H}=await g.current.next();return le!=null&&le.length&&(ne.push(...le),le.forEach(V=>{Ae(V,r)})),{value:ne,done:H}}const[N,O]=$([]);_e(m!=null&&m.acct?`${m!=null&&m.displayName?m.displayName+" ":""}@${m.acct}${u?l?" (- Boosts)":c?` (#${c})`:d?" (Media)":s?` (${new Date(s).toLocaleString("default",{month:"long",year:"numeric"})})`:"":" (+ Replies)"}`:"Account posts","/:instance?/a/:id");const U=D(),P=Ve(()=>{const X=U.current||h.v1.accounts.$select(n).fetch();return U.current=X,X},[n,h]);B(()=>{(async()=>{try{const X=await P();y(X)}catch{}try{const X=await h.v1.accounts.$select(n).featuredTags.list();O(X)}catch{}})()},[n]);const{displayName:M,acct:C,emojis:_}=m||{},F=he(()=>{const X=t.accounts[`${n}@${r}`];return e(Jn,{instance:r,account:X||n,fetchAccount:P,authenticated:p,standalone:!0})},[n,r,p,P]),Y=D(),te=he(()=>e(A,{children:[F,e("div",{class:"filter-bar",ref:Y,style:{position:"relative"},children:[!u||l||c||d||!!s?e(ee,{to:`/${r}/a/${n}`,class:"insignificant filter-clear",title:"Clear filters",children:e(w,{icon:"x",size:"l"})},"clear-filters"):e(w,{icon:"filter",class:"insignificant",size:"l"}),e(ee,{to:`/${r}/a/${n}${u?"?replies=1":""}`,onClick:()=>{u&&pe("Showing post with replies")},class:u?"":"is-active",children:"+ Replies"}),e(ee,{to:`/${r}/a/${n}${l?"":"?boosts=0"}`,onClick:()=>{l||pe("Showing posts without boosts")},class:l?"is-active":"",children:"- Boosts"}),e(ee,{to:`/${r}/a/${n}${d?"":"?media=1"}`,onClick:()=>{d||pe("Showing posts with media")},class:d?"is-active":"",children:"Media"}),N.map(E=>e(ee,{to:`/${r}/a/${n}${c===E.name?"":`?tagged=${encodeURIComponent(E.name)}`}`,onClick:()=>{c!==E.name&&pe(`Showing posts tagged with #${E.name}`)},class:c===E.name?"is-active":"",children:e("span",{children:[e("span",{class:"more-insignificant",children:"#"}),E.name]})},E.id)),T&&(no?e("label",{class:`filter-field ${s?"is-active":""}`,children:[e(w,{icon:"month",size:"l"}),e("input",{type:"month",disabled:!(m!=null&&m.acct),value:s||"",min:Sn,max:new Date().toISOString().slice(0,7),onInput:E=>{const{value:j,validity:ne}=E.currentTarget;if(!ne.valid)return;a(j?{month:j}:{});const[le,H]=j.split("-"),ae=parseInt(H,10)-1,Q=new Date(le,ae);pe(`Showing posts in ${Q.toLocaleString("default",{month:"long",year:"numeric"})}`)}})]}):e(ao,{class:`filter-field ${s?"is-active":""}`,disabled:!(m!=null&&m.acct),value:s||"",min:Sn,max:new Date().toISOString().slice(0,7),onInput:E=>{const{value:j,validity:ne}=E;ne.valid&&a(j?{month:j}:{})}}))]})]}),[n,r,p,N,T,...v]);B(()=>{var E;const X=(E=Y.current)==null?void 0:E.querySelector(".is-active");X&&Y.current.scrollTo({behavior:"smooth",left:X.offsetLeft-(Y.current.offsetWidth-X.offsetWidth)/2})},[N,T,...v]);const W=he(()=>m!=null&&m.url?new URL(m.url).hostname:null,[m]),re=!!m&&!(r===W);return e(Ye,{title:`${m!=null&&m.acct?"@"+m.acct:"Posts"}`,titleComponent:e("h1",{class:"header-double-lines header-account",children:[e("b",{children:e(Nn,{text:M,emojis:_})}),e("div",{children:e("span",{children:["@",C]})})]}),id:"account-statuses",instance:r,emptyText:"Nothing to see here yet.",errorText:"Unable to load posts",fetchItems:L,useItemID:!0,view:d?"media":void 0,boostsCarousel:t.settings.boostsCarousel,timelineStart:te,refresh:[u,l,c,d,s+(m==null?void 0:m.acct)].toString(),headerEnd:e(Fe,{portal:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{disabled:!re,onClick:()=>{(async()=>{try{const{masto:X}=z({instance:W}),E=await X.v1.accounts.lookup({acct:m.acct}),{id:j}=E;location.hash=`/${W}/a/${j}`}catch{alert("Unable to fetch account info")}})()},children:[e(w,{icon:"transfer"})," ",e("small",{class:"menu-double-lines",children:["Switch to account's instance (",e("b",{children:W}),")"]})]}),!I&&e(oe,{onClick:()=>{(async()=>{try{const X=await f.v1.accounts.lookup({acct:m.acct+"@"+r}),{id:E}=X;location.hash=`/${b}/a/${E}`}catch{alert("Unable to fetch account info")}})()},children:[e(w,{icon:"transfer"})," ",e("small",{class:"menu-double-lines",children:["Switch to my instance (",e("b",{children:b}),")"]})]})]})},n)}function ao(t){const{class:n,disabled:i,value:o,min:a,max:s,onInput:u=()=>{}}=t,[l,c]=(o==null?void 0:o.split("-"))||[],d=D(),h=D(),r=(p,f)=>{const[b,g]=(a==null?void 0:a.split("-"))||[],[v,m]=(s==null?void 0:s.split("-"))||[];return!(fv||f===b&&pm)};return e("div",{class:n,children:[e(w,{icon:"month",size:"l"}),e("select",{ref:d,disabled:i,value:c||"",onInput:p=>{const{value:f}=p.currentTarget,b=h.current.value;if(!r(f,b))return{value:"",validity:{valid:!1}};u({value:f?`${b}-${f}`:"",validity:{valid:!0}})},children:[e("option",{value:"",children:"Month"}),e("option",{disabled:!0,children:"-----"}),Array.from({length:12},(p,f)=>e("option",{value:(f+1).toString().padStart(2,"0"),children:new Date(0,f).toLocaleString("default",{month:"long"})},f))]})," ",e("input",{ref:h,type:"number",disabled:i,value:l||new Date().getFullYear(),min:(a==null?void 0:a.slice(0,4))||Zt,max:(s==null?void 0:s.slice(0,4))||new Date().getFullYear(),onInput:p=>{const{value:f,validity:b}=p.currentTarget,g=d.current.value;if(!b.valid||!r(g,f))return{value:"",validity:{valid:!1}};u({value:f?`${f}-${g}`:"",validity:{valid:!0}})},style:{width:"4.5em"}})]})}const co=20;function ss(){_e("Bookmarks","/b");const{masto:t,instance:n}=z(),i=D();async function o(a){return(a||!i.current)&&(i.current=t.v1.bookmarks.list({limit:co})),await i.current.next()}return e(Ye,{title:"Bookmarks",id:"bookmarks",emptyText:"No bookmarks yet. Go bookmark something!",errorText:"Unable to load bookmarks",instance:n,fetchItems:o})}const ro=20;function is(){_e("Likes","/f");const{masto:t,instance:n}=z(),i=D();async function o(a){return(a||!i.current)&&(i.current=t.v1.favourites.list({limit:ro})),await i.current.next()}return e(Ye,{title:"Likes",id:"favourites",emptyText:"No likes yet. Go like something!",errorText:"Unable to load likes",instance:n,fetchItems:o})}function lo(){const{masto:t,instance:n}=z();_e("Followed Hashtags","/ft");const[i,o]=$("default"),[a,s]=$([]);return B(()=>{o("loading"),(async()=>{try{const u=await Tt();s(u),o("default")}catch{o("error")}})()},[]),e("div",{id:"followed-hashtags-page",class:"deck-container",tabIndex:"-1",children:e("div",{class:"timeline-deck deck",children:[e("header",{children:e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),e(ee,{to:"/",class:"button plain",children:e(w,{icon:"home",size:"l"})})]}),e("h1",{children:"Followed Hashtags"}),e("div",{class:"header-side"})]})}),e("main",{children:a.length>0?e("ul",{class:"link-list",children:a.map(u=>e("li",{children:e(ee,{to:n?`/${n}/t/${u.name}`:`/t/${u.name}`,children:[e(w,{icon:"hashtag"})," ",e("span",{children:u.name})]})}))}):i==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):i==="error"?e("p",{class:"ui-state",children:"Unable to load followed hashtags."}):e("p",{class:"ui-state",children:"No hashtags followed yet."})})]})})}const uo=20;function Jt({title:t,path:n,id:i,...o}){_e(t||"Following",n||"/following");const{masto:a,streaming:s,instance:u}=z(),l=Se(k),c=D(),d=D();async function h(p){(p||!c.current)&&(c.current=a.v1.timelines.home.list({limit:uo}));const f=await c.current.next();let{value:b}=f;if(b!=null&&b.length){let g=!1;p&&(b[0].id!==d.current&&(g=!0),d.current=b[0].id),b.forEach(v=>{Ae(v,u)}),b=wn(b,u),p&&g&&Wi(),Yi(b,u),b.sort((v,m)=>{const y=new Date(v.createdAt);return new Date(m.createdAt)-y})}return{...f,value:b}}async function r(){try{const p=await a.v1.timelines.home.list({limit:5,since_id:d.current}).next();let{value:f}=p;return!!(f!=null&&f.length&&(d.current=f[0].id,f=wn(f,u),f=rt(f,"home"),f.some(b=>!b.reblog)))}catch{return!1}}return B(()=>{let p;return(async()=>{if(s){p=s.user.subscribe();for await(const f of p){if(!p)break;if(f.event==="status.update"){const b=f.payload;Ae(b,u)}else if(f.event==="delete"){const b=f.payload,g=zn(b,u);g&&(g._deleted=!0)}}}})(),()=>{var f;(f=p==null?void 0:p.unsubscribe)==null||f.call(p),p=null}},[s]),e(Ye,{title:t||"Following",id:i||"following",emptyText:"Nothing to see here.",errorText:"Unable to load posts.",instance:u,fetchItems:h,checkForUpdates:r,useItemID:!0,boostsCarousel:l.settings.boostsCarousel,...o,filterContext:"home",showFollowedTags:!0})}const ho=20,fo=4,kn=fo+1;function os({media:t,columnMode:n,...i}){let{hashtag:o,...a}=n?{}:nt();i.hashtag&&(o=i.hashtag);let s=o.trim().split(/[\s+]+/);s.sort(),o=s[0];const[u,l]=qe(),c=t||!!u.get("media"),d=c?"?media=1":"",{masto:h,instance:r,authenticated:p}=z({instance:(i==null?void 0:i.instance)||a.instance}),{masto:f,instance:b,authenticated:g}=z(),v=s.map(M=>`#${M}`).join(" "),m=c?" (Media only)":"",y=r?`${v}${m} on ${r}`:`${v}${m}`;_e(y,"/:instance?/t/:hashtag");const S=D(),I=D(void 0);async function T(M){const C=await h.v1.timelines.tag.$select(o).list({limit:ho,any:s.slice(1),maxId:M?void 0:I.current,onlyMedia:c}).next();let{value:_}=C;return _!=null&&_.length&&(M&&(S.current=_[0].id),_.forEach(F=>{Ae(F,r,{skipThreading:c})}),I.current=_[_.length-1].id),{...C,value:_}}async function x(){try{const M=await h.v1.timelines.tag.$select(o).list({limit:1,any:s.slice(1),since_id:S.current,onlyMedia:c}).next();let{value:C}=M;return C=rt(C,"public"),!!(C!=null&&C.length)}catch{return!1}}const[L,N]=$("default"),[O,U]=$();B(()=>{(async()=>{try{const M=await h.v1.tags.$select(o).fetch();U(M)}catch{}})()},[o]);const P=s.length>=kn;return e(Ye,{title:y,titleComponent:!!r&&e("h1",{class:"header-double-lines",children:[e("b",{children:v}),e("div",{children:r})]}),id:"hashtag",instance:r,emptyText:"No one has posted anything with this tag yet.",errorText:"Unable to load posts with this tag",fetchItems:T,checkForUpdates:x,useItemID:!0,view:c?"media":void 0,refresh:c,filterContext:"public",headerEnd:e(Fe,{portal:!0,setDownOverflow:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[!!O&&s.length===1&&e(A,{children:[e(Be,{subMenu:!0,confirm:O.following,confirmLabel:`Unfollow #${o}?`,disabled:L==="loading"||!p,onClick:()=>{N("loading"),O.following?h.v1.tags.$select(o).unfollow().then(()=>{U({...O,following:!1}),pe(`Unfollowed #${o}`)}).catch(M=>{alert(M)}).finally(()=>{N("default")}):h.v1.tags.$select(o).follow().then(()=>{U({...O,following:!0}),pe(`Followed #${o}`)}).catch(M=>{alert(M)}).finally(()=>{N("default")})},children:O.following?e(A,{children:[e(w,{icon:"check-circle"})," ",e("span",{children:"Following…"})]}):e(A,{children:[e(w,{icon:"plus"})," ",e("span",{children:"Follow"})]})}),e(De,{})]}),e(jn,{className:"plain",children:"Filters"}),e(oe,{type:"checkbox",checked:!!c,onClick:()=>{c?u.delete("media"):u.set("media","1"),l(u)},children:[e(w,{icon:"check-circle"})," ",e("span",{class:"menu-grow",children:"Media only"})]}),e(De,{}),e(Us,{className:"menu-field",disabled:P,children:({ref:M})=>e("form",{onSubmit:C=>{var F,Y;C.preventDefault();const _=(Y=(F=C.target[0].value)==null?void 0:F.trim)==null?void 0:Y.call(F);_&&!s.some(te=>te.toLowerCase()===_.toLowerCase())&&(s.push(_),s.sort(),location.hash=r?`/${r}/t/${s.join("+")}`:`/t/${s.join("+")}${d}`)},children:[e(w,{icon:"hashtag"}),e("input",{ref:M,type:"text",placeholder:P?`Max ${kn} tags`:"Add hashtag",required:!0,autocorrect:"off",autocapitalize:"off",spellcheck:!1,pattern:"[^#][^\\s#]+[^#]",disabled:P})]})}),e(Fs,{takeOverflow:!0,children:s.map((M,C)=>e(oe,{disabled:s.length===1,onClick:_=>{s.splice(C,1),s.sort(),location.hash=r?`/${r}/t/${s.join("+")}${d}`:`/t/${s.join("+")}${d}`},children:[e(w,{icon:"x",alt:"Remove hashtag",class:"danger-icon"}),e("span",{children:[e("span",{class:"more-insignificant",children:"#"}),M]})]},M))}),e(De,{}),e(oe,{disabled:!g,onClick:()=>{if(k.shortcuts.length>=Ze){alert(`Max ${Ze} shortcuts reached. Unable to add shortcut.`);return}const M={type:"hashtag",hashtag:s.join(" "),instance:r,media:c?"on":void 0};k.shortcuts.some(_=>_.type===M.type&&_.hashtag.split(/[\s+]+/).sort().join(" ")===M.hashtag.split(/[\s+]+/).sort().join(" ")&&(_.instance?_.instance===M.instance:!0)&&(_.media?!!_.media==!!M.media:!0))?alert("This shortcut already exists"):(k.shortcuts.push(M),pe("Hashtag shortcut added"))},children:[e(w,{icon:"shortcut"})," ",e("span",{children:"Add to Shorcuts"})]}),e(oe,{onClick:()=>{let M=prompt('Enter a new instance e.g. "mastodon.social"');if(!/\./.test(M)){M&&alert("Invalid instance");return}M&&(M=M.toLowerCase().trim(),location.hash=`/${M}/t/${s.join("+")}${d}`)},children:[e(w,{icon:"bus"})," ",e("span",{children:"Go to another instance…"})]}),b!==r&&e(oe,{onClick:()=>{location.hash=`/${b}/t/${s.join("+")}${d}`},children:[e(w,{icon:"bus"})," ",e("small",{class:"menu-double-lines",children:["Go to my instance (",e("b",{children:b}),")"]})]})]})},r+v)}const po=20;function as(t){var g;const n=Se(k),{masto:i,instance:o}=z(),a=(t==null?void 0:t.id)||((g=nt())==null?void 0:g.id),s=D(),u=D();async function l(v){(v||!u.current)&&(u.current=i.v1.timelines.list.$select(a).list({limit:po}));const m=await u.current.next();let{value:y}=m;return y!=null&&y.length&&(v&&(s.current=y[0].id),y.forEach(S=>{Ae(S,o)})),{...m,value:y}}async function c(){try{const v=await i.v1.timelines.list.$select(a).list({limit:1,since_id:s.current});let{value:m}=v;return m=rt(m,"home"),!!(m!=null&&m.length)}catch{return!1}}const[d,h]=$({title:"List"});_e(d.title,"/l/:id"),B(()=>{(async()=>{try{const v=await i.v1.lists.$select(a).fetch();h(v)}catch{}})()},[a]);const[r,p]=$(!1),[f,b]=$(!1);return e(A,{children:[e(Ye,{title:d.title,id:"list",emptyText:"Nothing yet.",errorText:"Unable to load posts.",instance:o,fetchItems:l,checkForUpdates:c,useItemID:!0,boostsCarousel:n.settings.boostsCarousel,filterContext:"home",headerStart:e(ee,{to:"/l",class:"button plain",children:e(w,{icon:"list",size:"l"})}),headerEnd:e(Fe,{portal:!0,setDownOverflow:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{onClick:()=>p({list:d}),children:[e(w,{icon:"pencil",size:"l"}),e("span",{children:"Edit"})]}),e(oe,{onClick:()=>b(!0),children:[e(w,{icon:"group",size:"l"}),e("span",{children:"Manage members"})]})]})},a),r&&e(Ce,{class:"light",onClick:v=>{v.target===v.currentTarget&&p(!1)},children:e(Yt,{list:r==null?void 0:r.list,onClose:v=>{v.state==="success"&&v.list?h(v.list):v.state==="deleted"&&(location.hash="/l"),p(!1)}})}),f&&e(Ce,{class:"light",onClick:v=>{v.target===v.currentTarget&&b(!1)},children:e(go,{listID:a,onClose:()=>b(!1)})})]})}const mo=40;function go({listID:t,onClose:n}){const{masto:i,instance:o}=z(),[a,s]=$([]),[u,l]=$("default"),[c,d]=$(!1),h=D();async function r(p){d(!1),l("loading"),(async()=>{try{(p||!h.current)&&(h.current=i.v1.lists.$select(t).accounts.list({limit:mo}));const f=await h.current.next();let{done:b,value:g}=f;g!=null&&g.length?(s(p?g:a.concat(g)),d(!b)):d(!1),l("default")}catch{l("error")}})()}return B(()=>{r(!0)},[]),e("div",{class:"sheet",id:"list-manage-members-container",children:[!!n&&e("button",{type:"button",class:"sheet-close",onClick:n,children:e(w,{icon:"x"})}),e("header",{children:e("h2",{children:"Manage members"})}),e("main",{children:e("ul",{children:[a.map(p=>e("li",{children:[e(He,{account:p,instance:o}),e(bo,{account:p,listID:t})]},p.id)),c&&u==="default"&&e(je,{as:"li",onChange:p=>p&&r(),children:e("button",{type:"button",class:"light block",onClick:r,children:"Show more…"})})]})})]})}function bo({account:t,listID:n}){const{masto:i}=z(),[o,a]=$("default"),[s,u]=$(!1);return e(Be,{confirm:!s,confirmLabel:e("span",{children:["Remove @",t.username," from list?"]}),align:"end",menuItemClassName:"danger",onClick:()=>{s?(a("loading"),(async()=>{try{await i.v1.lists.$select(n).accounts.create({accountIds:[t.id]}),a("default"),u(!1)}catch{a("error")}})()):(a("loading"),(async()=>{try{await i.v1.lists.$select(n).accounts.remove({accountIds:[t.id]}),a("default"),u(!0)}catch{a("error")}})())},children:e("button",{type:"button",class:`light ${s?"":"danger"}`,disabled:o==="loading",children:s?"Add":"Remove…"})})}const In=20,yo=new URLSearchParams;function cs({columnMode:t,...n}){const{masto:i,instance:o}=z(),[a]=t?[yo]:qe(),[s,u]=$(null),l=(n==null?void 0:n.type)||a.get("type")||s;_e(`Mentions${l==="private"?" (Private)":""}`,"/mentions");const c=D(),d=D();async function h(m){(m||!c.current)&&(c.current=i.v1.notifications.list({limit:In,types:["mention"]}));const y=await c.current.next();let{value:S}=y;return S!=null&&S.length&&(m&&(d.current=S[0].id),S.forEach(({status:I})=>{Ae(I,o)})),{...y,value:S==null?void 0:S.map(I=>I.status)}}const r=D(),p=D();async function f(m){(m||!r.current)&&(r.current=i.v1.conversations.list({limit:In}));const y=await r.current.next();let{value:S}=y;return S=S==null?void 0:S.filter(I=>I.lastStatus),S!=null&&S.length&&(m&&(p.current=S[0].lastStatus.id),S.forEach(({lastStatus:I})=>{Ae(I,o)})),{...y,value:S==null?void 0:S.map(I=>I.lastStatus)}}function b(...m){return l==="private"?f(...m):h(...m)}async function g(){if(l==="private")try{const m=await i.v1.conversations.list({limit:1,since_id:p.current}).next();let{value:y}=m;return y!=null&&y.length?(p.current=y[0].lastStatus.id,!0):!1}catch{return!1}else try{const m=await i.v1.notifications.list({limit:1,types:["mention"],since_id:d.current}).next();let{value:y}=m;return y!=null&&y.length?(d.current=y[0].id,!0):!1}catch{return!1}}const v=he(()=>e("div",{class:"filter-bar centered",children:[e(ee,{to:"/mentions",class:l?"":"is-active",onClick:m=>{t&&(m.preventDefault(),u(null))},children:"All"}),e(ee,{to:"/mentions?type=private",class:l==="private"?"is-active":"",onClick:m=>{t&&(m.preventDefault(),u("private"))},children:"Private"})]}),[l]);return e(Ye,{title:"Mentions",id:"mentions",emptyText:"No one mentioned you :(",errorText:"Unable to load mentions.",instance:o,fetchItems:b,checkForUpdates:g,useItemID:!0,timelineStart:v,refresh:l})}const wo={mention:["account","status"],status:["account","status"],reblog:["account","status"],follow:["account"],follow_request:["account"],favourite:["account","status"],poll:["status"],update:["status"]};function vo(t){return t.filter(n=>{const{type:i,id:o,createdAt:a}=n;if(!i)return!1;const s=wo[i];return s!=null&&s.length?s.every(u=>!!n[u]):!0})}function rs(t){t=vo(t);const n={},i=[];for(let s=0,u=0;sy.id===h.id);m?(m._types.push(r),m._types.sort().reverse(),v.id+=`-${c}`):(h._types=[r],v._accounts.push(h),v.id+=`-${c}`)}else{h._types=[r];let m=n[g]={...l,type:b,_accounts:[h]};i[u++]=m}}const o={},a=[];for(let s=0,u=0;s{Ae(H.status,i,{skipThreading:!0})});const le=rs(ne);E?(k.notificationsLast=ne[0],k.notifications=le,n.v1.markers.create({notifications:{lastReadId:ne[0].id}}).catch(()=>{})):k.notifications.push(...le)}return k.notificationsShowNew=!1,k.notificationsLastFetchTime=Date.now(),j}async function O(){try{return await n.v1.followRequests.list({limit:80})}catch{return[]}}const U=()=>{s("loading"),(async()=>{try{const E=await O();I(E),s("default")}catch{s("error")}})()};async function P(){try{return await n.v1.announcements.list()}catch{return[]}}const M=E=>{_(!1),s("loading"),(async()=>{try{const j=N(E);E&&(P().then(le=>{le.sort((H,ae)=>{const Q=new Date(H.updatedAt||H.createdAt);return new Date(ae.updatedAt||ae.createdAt)-Q}),x(le)}).catch(()=>{}),O().then(le=>{I(le)}).catch(()=>{}));const{done:ne}=await j;h(!ne),s("default")}catch{s("error")}})()};B(()=>{M(!0)},[]),B(()=>{v&&M(!0)},[v]);const[C,_]=$(!1),F=Ve(({disableIdleCheck:E=!1}={})=>{var j;a!=="loading"&&o.settings.autoRefresh&&((j=f.current)==null?void 0:j.scrollTop)<16&&(E||window.__IDLE__)&&!To()&&M(!0)},[o.notificationsShowNew,o.settings.autoRefresh,a]),Y=D();ct(E=>{let j;if(E){const ne=Date.now()-Y.current;!Y.current||ne>1e3*3?F({disableIdleCheck:!0}):Y.current=Date.now(),j=Os(k,"notificationsShowNew",le=>{le&&F(),_(le)})}return()=>{j==null||j()}});const te=new Date,W=new Date(te-24*60*60*1e3);let ke=new Date;const re=!o.notifications.some(E=>new Date(E.createdAt).toDateString()===te.toDateString()),X=D();return B(()=>{l&&(k.routeNotification={id:l,accessToken:atob(c)})},[l,c]),e("div",{id:"notifications-page",class:"deck-container",ref:f,tabIndex:"-1",children:e("div",{class:`timeline-deck deck ${r?"only-mentions":""}`,children:[e("header",{hidden:y,onClick:E=>{var j;E.target.closest("a, button")||(j=f.current)==null||j.scrollTo({top:0,behavior:"smooth"})},class:a==="loading"?"loading":"",children:[e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),e(ee,{to:"/",class:"button plain",children:e(w,{icon:"home",size:"l",alt:"Home"})})]}),e("h1",{children:"Notifications"}),e("div",{class:"header-side"})]}),C&&a!=="loading"&&e("button",{class:"updates-button shiny-pill",type:"button",onClick:()=>{var E;M(!0),(E=f.current)==null||E.scrollTo({top:0,behavior:"smooth"})},children:[e(w,{icon:"arrow-up"})," New notifications"]})]}),T.length>0&&e("div",{class:"shazam-container",children:e("div",{class:"shazam-container-inner",children:e("details",{class:"announcements",children:[e("summary",{children:[e("span",{children:[e(w,{icon:"announce",class:"announcement-icon",size:"l"})," ",e("b",{children:["Announcement",T.length>1?"s":""]})," ",e("small",{class:"insignificant",children:i})]}),T.length>1&&e("span",{class:"announcements-nav-buttons",children:T.map((E,j)=>e("button",{type:"button",class:"plain2 small",onClick:()=>{var ne;(ne=X.current)==null||ne.children[j].scrollIntoView({behavior:"smooth",block:"nearest"})},children:j+1}))})]}),e("ul",{class:`announcements-list-${T.length>1?"multiple":"single"}`,ref:X,children:T.map(E=>e("li",{children:e(Co,{announcement:E})}))})]})})}),S.length>0&&e("div",{class:"follow-requests",children:[e("h2",{class:"timeline-header",children:"Follow requests"}),S.length>5?e("details",{children:[e("summary",{children:[S.length," follow requests"]}),e("ul",{children:S.map(E=>e("li",{children:[e(He,{account:E}),e(Ft,{accountID:E.id,onChange:()=>{}})]},E.id))})]}):e("ul",{children:S.map(E=>e("li",{children:[e(He,{account:E}),e(Ft,{accountID:E.id,onChange:()=>{}})]},E.id))})]}),e("div",{id:"mentions-option",children:e("label",{children:[e("input",{type:"checkbox",checked:r,onChange:E=>{p(E.target.checked)}})," ","Only mentions"]})}),e("h2",{class:"timeline-header",children:"Today"}),re&&!!o.notifications.length&&e("p",{class:"ui-state insignificant",children:a==="default"?"You're all caught up.":e(A,{children:"…"})}),o.notifications.length?e(A,{children:o.notifications.filter(E=>E.type!=="follow_request").map(E=>{if(r&&E.type!=="mention")return null;const j=new Date(E.createdAt),ne=j.toDateString()!==ke.toDateString();ne&&(ke=j);const le=j.toDateString()===W.toDateString()?"Yesterday":Ke(ke,{hideTime:!0});return e(A,{children:[ne&&e("h2",{class:"timeline-header",children:le}),e(Kt,{instance:i,notification:E},E.id)]},E.id)})}):e(A,{children:[a==="loading"&&e(A,{children:e("ul",{class:"timeline flat",children:Array.from({length:5}).map((E,j)=>e("li",{class:"notification skeleton",children:[e("div",{class:"notification-type",children:e(w,{icon:"notification",size:"xl"})}),e("div",{class:"notification-content",children:e("p",{children:"███████████ ████"})})]}))})}),a==="error"&&e("p",{class:"ui-state",children:["Unable to load notifications",e("br",{}),e("br",{}),e("button",{type:"button",onClick:()=>M(!0),children:"Try again"})]})]}),d&&e(je,{onChange:E=>{E&&M()},children:e("button",{type:"button",class:"plain block",disabled:a==="loading",onClick:()=>M(),style:{marginBlockEnd:"6em"},children:a==="loading"?e(Ie,{abrupt:!0}):e(A,{children:"Show more…"})})})]})})}function To(){return!!document.querySelector(".deck-backdrop, #modal-container > *")}function Co({announcement:t}){const{instance:n}=z(),{contact:i}=Cs(),o=i==null?void 0:i.account,{id:a,content:s,startsAt:u,endsAt:l,published:c,allDay:d,publishedAt:h,updatedAt:r,read:p,mentions:f,statuses:b,tags:g,emojis:v,reactions:m}=t,y=new Date(h),S=Ke(y),I=new Date(r),T=Ke(I);return e("div",{class:"announcement-block",children:[e(He,{account:o}),e("div",{class:"announcement-content",onClick:Pn({mentions:f,instance:n}),dangerouslySetInnerHTML:{__html:Pt(s,{emojis:v})}}),e("p",{class:"insignificant",children:[e("time",{datetime:y.toISOString(),children:Ke(y)}),r&&T!==S&&e(A,{children:[" ","•"," ",e("span",{class:"ib",children:["Updated"," ",e("time",{datetime:I.toISOString(),children:Ke(I)})]})]})]}),e("div",{class:"announcement-reactions",hidden:!0,children:m.map(x=>{const{name:L,count:N,me:O,staticUrl:U,url:P}=x;return e("button",{type:"button",class:`plain4 small ${O?"reacted":""}`,children:[P||U?e("img",{src:P||U,alt:L,width:"16",height:"16"}):e("span",{children:L})," ",e("span",{class:"count",children:Ue(N)})]})})})]})}const ls=ze(Io),$o=20;function Ot({local:t,columnMode:n,...i}){const o=Se(k),a=!!t,s=n?{}:nt(),{masto:u,instance:l}=z({instance:(i==null?void 0:i.instance)||s.instance}),{masto:c,instance:d}=z(),h=`${a?"Local":"Federated"} timeline (${l})`;_e(h,a?"/:instance?/p/l":"/:instance?/p");const r=D(),p=D();async function f(g){(g||!p.current)&&(p.current=u.v1.timelines.public.list({limit:$o,local:a}));const v=await p.current.next();let{value:m}=v;return m!=null&&m.length&&(g&&(r.current=m[0].id),m.forEach(y=>{Ae(y,l)})),{...v,value:m}}async function b(){try{const g=await u.v1.timelines.public.list({limit:1,local:a,since_id:r.current}).next();let{value:v}=g;return v=rt(v,"public"),!!(v!=null&&v.length)}catch{return!1}}return e(Ye,{title:h,titleComponent:e("h1",{class:"header-double-lines",children:[e("b",{children:a?"Local timeline":"Federated timeline"}),e("div",{children:l})]}),id:"public",instance:l,emptyText:"No one has posted anything yet.",errorText:"Unable to load posts",fetchItems:f,checkForUpdates:b,useItemID:!0,headerStart:e(A,{}),boostsCarousel:o.settings.boostsCarousel,filterContext:"public",headerEnd:e(Fe,{portal:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{href:a?`/#/${l}/p`:`/#/${l}/p/l`,children:a?e(A,{children:[e(w,{icon:"transfer"})," ",e("span",{children:"Switch to Federated"})]}):e(A,{children:[e(w,{icon:"transfer"})," ",e("span",{children:"Switch to Local"})]})}),e(De,{}),e(oe,{onClick:()=>{let g=prompt('Enter a new instance e.g. "mastodon.social"');if(!/\./.test(g)){g&&alert("Invalid instance");return}g&&(g=g.toLowerCase().trim(),location.hash=a?`/${g}/p/l`:`/${g}/p`)},children:[e(w,{icon:"bus"})," ",e("span",{children:"Go to another instance…"})]}),d!==l&&e(oe,{onClick:()=>{location.hash=a?`/${d}/p/l`:`/${d}/p`},children:[e(w,{icon:"bus"})," ",e("small",{class:"menu-double-lines",children:["Go to my instance (",e("b",{children:d}),")"]})]})]})},l+a)}const yt=5,Et=40,xo=new URLSearchParams;function ds({columnMode:t,...n}){const i=t?{}:nt(),{masto:o,instance:a,authenticated:s}=z({instance:i.instance}),[u,l]=$("default"),[c]=t?[xo]:qe(),d=D(),h=(n==null?void 0:n.query)||c.get("q"),r=t?"statuses":(n==null?void 0:n.type)||c.get("type");_e(h?`Search: ${h}${r?` (${{statuses:"Posts",accounts:"Accounts",hashtags:"Hashtags"}[r]})`:""}`:"Search","/search");const[p,f]=$(!1),b=D(0);B(()=>{b.current=0},[h,r]);const g=D();Je(()=>{var C,_;(_=(C=g.current)==null?void 0:C.scrollTo)==null||_.call(C,0,0)},[h,r]);const[v,m]=$([]),[y,S]=$([]),[I,T]=$([]);B(()=>{m([]),S([]),T([])},[h]);const x={statuses:m,accounts:S,hashtags:T},[L,N]=$({}),O=async C=>{if(!(C!=null&&C.length))return;const _=await Wt(C,L);_&&N({...L,..._})};function U(C){C&&(b.current=0),!(!C&&!s)&&(l("loading"),C&&!r&&(m(v.slice(0,yt)),S(y.slice(0,yt)),T(I.slice(0,yt))),(async()=>{var F,Y;const _={q:h,resolve:s,limit:yt};r&&(_.limit=Et,_.type=r,s&&(_.offset=b.current));try{const te=await o.v2.search.fetch(_);if(r)if(C){x[r](te[r]);const W=(F=te[r])==null?void 0:F.length;b.current=Et,f(!!W)}else{x[r](ke=>[...ke,...te[r]]);const W=(Y=te[r])==null?void 0:Y.length;b.current=b.current+Et,f(!!W)}else m(te.statuses||[]),S(te.accounts||[]),T(te.hashtags||[]),b.current=0,f(!1);O(te.accounts),l("default")}catch{l("error")}})())}const P=D();ct(C=>{var F;const _=((F=g.current)==null?void 0:F.scrollTop)===0;if(C&&_){const Y=Date.now()-P.current;!P.current||Y>1e3*3?U(!0):P.current=Date.now()}}),B(()=>{var C,_,F,Y;(_=(C=d.current)==null?void 0:C.setValue)==null||_.call(C,h||""),h?U(!0):(Y=(F=d.current)==null?void 0:F.focus)==null||Y.call(F)},[h,r,a]),Re("/",C=>{var _,F;(F=(_=d.current)==null?void 0:_.focus)==null||F.call(_)},{preventDefault:!0});const[M]=Ht();return e("div",{id:"search-page",class:"deck-container",ref:g,children:e("div",{class:"timeline-deck deck",children:[e("header",{class:u==="loading"?"loading":"",children:e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:e(mt,{})}),e(ns,{ref:d}),e("div",{class:"header-side",children:e("button",{type:"button",class:"plain",onClick:()=>{U(!0)},disabled:u==="loading",children:e(w,{icon:"search",size:"l"})})})]})}),e("main",{children:[!!h&&!t&&e("div",{ref:M,class:`filter-bar ${u==="loading"?"loading":""}`,children:[!!r&&e(ee,{to:`/search${h?`?q=${encodeURIComponent(h)}`:""}`,children:"‹ All"}),[{label:"Accounts",type:"accounts",to:`/search?q=${encodeURIComponent(h)}&type=accounts`},{label:"Hashtags",type:"hashtags",to:`/search?q=${encodeURIComponent(h)}&type=hashtags`},{label:"Posts",type:"statuses",to:`/search?q=${encodeURIComponent(h)}&type=statuses`}].sort((C,_)=>C.type===r?-1:_.type===r?1:0).map(C=>e(ee,{to:C.to,children:C.label},C.type))]}),h?e(A,{children:[(!r||r==="accounts")&&e(A,{children:[r!=="accounts"&&e("h2",{class:"timeline-header",children:"Accounts"}),y.length>0?e(A,{children:[e("ul",{class:"timeline flat accounts-list",children:y.map(C=>e("li",{children:e(He,{account:C,instance:a,showStats:!0,relationship:L[C.id]})},C.id))}),r!=="accounts"&&e("div",{class:"ui-state",children:e(ee,{class:"plain button",to:`/search?q=${h}&type=accounts`,children:["See more accounts ",e(w,{icon:"arrow-right"})]})})]}):!r&&(u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"No accounts found."}))]}),(!r||r==="hashtags")&&e(A,{children:[r!=="hashtags"&&e("h2",{class:"timeline-header",children:"Hashtags"}),I.length>0?e(A,{children:[e("ul",{class:"link-list hashtag-list",children:I.map(C=>{var te;const{name:_,history:F}=C,Y=(te=F==null?void 0:F.reduce)==null?void 0:te.call(F,(W,ke)=>W+ +ke.uses,0);return e("li",{children:e(ee,{to:a?`/${a}/t/${_}`:`/t/${_}`,children:[e(w,{icon:"hashtag"}),e("span",{children:_}),!!Y&&e("span",{class:"count",children:Ue(Y)})]})},`${_}-${Y}`)})}),r!=="hashtags"&&e("div",{class:"ui-state",children:e(ee,{class:"plain button",to:`/search?q=${h}&type=hashtags`,children:["See more hashtags ",e(w,{icon:"arrow-right"})]})})]}):!r&&(u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"No hashtags found."}))]}),(!r||r==="statuses")&&e(A,{children:[r!=="statuses"&&e("h2",{class:"timeline-header",children:"Posts"}),v.length>0?e(A,{children:[e("ul",{class:"timeline",children:v.map(C=>e("li",{children:e(ee,{class:"status-link",to:a?`/${a}/s/${C.id}`:`/s/${C.id}`,children:e(Me,{status:C})})},C.id))}),r!=="statuses"&&e("div",{class:"ui-state",children:e(ee,{class:"plain button",to:`/search?q=${h}&type=statuses`,children:["See more posts ",e(w,{icon:"arrow-right"})]})})]}):!r&&(u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"No posts found."}))]}),!!r&&(u==="default"?p?e(je,{onChange:C=>{C&&U()},children:e("button",{type:"button",class:"plain block",onClick:()=>U(),style:{marginBlockEnd:"6em"},children:"Show more…"})}):e("p",{class:"ui-state insignificant",children:"The end."}):u==="loading"&&e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}))]}):u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"Enter your search term or paste a URL above to get started."})]})]})})}const Ao=20,Lo=tt(t=>t.v1.trends.links.list().next(),{maxAge:10*60*1e3});function us({columnMode:t,...n}){const i=Se(k),o=t?{}:nt(),{masto:a,instance:s}=z({instance:(n==null?void 0:n.instance)||o.instance}),{masto:u,instance:l}=z(),c=`Trending (${s})`;_e(c,"/:instance?/trending");const d=D(),[h,r]=$([]),[p,f]=$([]),b=D();async function g(y){var T;if(y||!b.current){b.current=a.v1.trends.statuses.list({limit:Ao});try{const x=a.v1.trends.tags.list(),{value:L}=await x.next();L!=null&&L.length&&r(L)}catch{}try{const{value:x}=await Lo(a),L=(T=x==null?void 0:x.filter)==null?void 0:T.call(x,N=>N.type==="link");L!=null&&L.length&&f(L)}catch{}}const S=await b.current.next();let{value:I}=S;return I!=null&&I.length&&(y&&(d.current=I[0].id),I.forEach(x=>{Ae(x,s)})),{...S,value:I}}async function v(){try{const y=await a.v1.trends.statuses.list({limit:1}).next();let{value:S}=y;return S=rt(S,"public"),S!=null&&S.length&&S[0].id!==d.current?(d.current=S[0].id,!0):!1}catch{return!1}}const m=he(()=>e(A,{children:[!!h.length&&e("div",{class:"filter-bar expandable",children:[e(w,{icon:"chart",class:"insignificant",size:"l"}),h.map((y,S)=>{const{name:I,history:T}=y,x=T.reduce((L,N)=>L+ +N.uses,0);return e(ee,{to:`/${s}/t/${I}`,children:[e("span",{children:[e("span",{class:"more-insignificant",children:"#"}),I]}),e("span",{class:"filter-count",children:Ue(x)})]},I)})]}),!!p.length&&e("div",{class:"links-bar",children:[e("header",{children:e("h3",{children:"Trending News"})}),p.map(y=>{const{authorName:S,authorUrl:I,blurhash:T,description:x,height:L,image:N,imageDescription:O,language:U,providerName:P,providerUrl:M,publishedAt:C,title:_,url:F,width:Y}=y,te=new URL(F).hostname.replace(/^www\./,"").replace(/\/$/,"");let W;if(T){const ke=qn(T),re=Xn(ke);W=Qn([.6,re[1],re[2]])}return e("a",{href:F,target:"_blank",rel:"noopener noreferrer",style:W?{"--accent-color":`rgb(${W.join(",")})`,"--accent-alpha-color":`rgba(${W.join(",")}, 0.4)`}:{},children:e("article",{children:[e("figure",{children:e("img",{src:N,alt:O,width:Y,height:L,loading:"lazy"})}),e("div",{class:"article-body",children:[e("header",{children:[e("div",{class:"article-meta",children:[e("span",{class:"domain",children:te})," ",!!C&&e(A,{children:"· "}),!!C&&e(A,{children:e($t,{datetime:C,format:"micro"})})]}),!!_&&e("h1",{class:"title",lang:U,dir:"auto",children:_})]}),!!x&&e("p",{class:"description",lang:U,dir:"auto",children:x})]})]})},F)})]})]}),[h,p]);return e(Ye,{title:c,titleComponent:e("h1",{class:"header-double-lines",children:[e("b",{children:"Trending"}),e("div",{children:s})]}),id:"trending",instance:s,emptyText:"No trending posts.",errorText:"Unable to load posts",fetchItems:g,checkForUpdates:v,checkForUpdatesInterval:5*60*1e3,useItemID:!0,headerStart:e(A,{}),boostsCarousel:i.settings.boostsCarousel,filterContext:"public",timelineStart:m,headerEnd:e(Fe,{portal:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{onClick:()=>{let y=prompt('Enter a new instance e.g. "mastodon.social"');if(!/\./.test(y)){y&&alert("Invalid instance");return}y&&(y=y.toLowerCase().trim(),location.hash=`/${y}/trending`)},children:[e(w,{icon:"bus"})," ",e("span",{children:"Go to another instance…"})]}),l!==s&&e(oe,{onClick:()=>{location.hash=`/${l}/trending`},children:[e(w,{icon:"bus"})," ",e("small",{class:"menu-double-lines",children:["Go to my instance (",e("b",{children:l}),")"]})]})]})},s)}function Mo(){_e("Home","/");const t=Se(k),{shortcuts:n}=t,i=n.map(o=>{if(!o)return null;const{type:a,...s}=o,u={following:Jt,notifications:ls,list:as,public:Ot,bookmarks:ss,favourites:is,hashtag:os,mentions:cs,trending:us,search:ds}[a];return!u||a==="search"&&!s.query?null:e(u,{...s,columnMode:!0},a+JSON.stringify(s))});return Re(["1","2","3","4","5","6","7","8","9"],(o,a)=>{try{const s=parseInt(a.keys[0],10)-1;document.querySelectorAll("#columns > *")[s].focus()}catch{}}),e("div",{id:"columns",onContextMenu:o=>{o.target.closest(".deck > header")&&!o.target.closest("a")&&!o.target.closest("button")&&(o.preventDefault(),k.showShortcutsSettings=!0)},children:i})}function Ro(){var n;const t=Se(k);return B(()=>{(async()=>{const i=await ht.drafts.keys();if(i.length){const o=Un();i.filter(s=>s.startsWith(o)).length&&(k.showDrafts=!0)}})()},[]),e(A,{children:(t.settings.shortcutsViewMode==="multi-column"||!t.settings.shortcutsViewMode&&t.settings.shortcutsColumnsMode)&&((n=t.shortcuts)!=null&&n.length)?e(Mo,{}):e(Jt,{title:"Home",path:"/",id:"home",headerStart:!1,headerEnd:e(_o,{})})})}function _o(){const t=Se(k),n=D(),[i,o]=$(void 0);return e(A,{children:[e(ee,{ref:n,to:"/notifications",class:`button plain notifications-button ${t.notificationsShowNew?"has-badge":""} ${i||""}`,onClick:a=>{a.stopPropagation(),window.matchMedia("(min-width: calc(40em))").matches&&(a.preventDefault(),o(s=>s?void 0:"open"))},children:e(w,{icon:"notification",size:"l",alt:"Notifications"})}),e(No,{state:i,anchorRef:n,onClose:()=>o(void 0)})]})}const Eo=30,Po=5;function No({anchorRef:t,state:n,onClose:i}){const{masto:o,instance:a}=z(),s=Se(k),[u,l]=$("default"),c=o.v1.notifications.list({limit:Eo});async function d(){const b=await c.next(),g=b.value;if(g!=null&&g.length){g.forEach(m=>{Ae(m.status,a,{skipThreading:!0})});const v=rs(g);k.notificationsLast=g[0],k.notifications=v,o.v1.markers.create({notifications:{lastReadId:g[0].id}}).catch(()=>{})}return k.notificationsShowNew=!1,k.notificationsLastFetchTime=Date.now(),b}const[h,r]=$(!1);function p(){return o.v1.followRequests.list({limit:1})}function f(){l("loading"),(async()=>{try{await d();const b=await p();r(!!(b!=null&&b.length)),l("default")}catch{l("error")}})()}return B(()=>{n==="open"&&f()},[n]),e(Gn,{menuClassName:"notifications-menu",state:n,anchorRef:t,onClose:i,portal:{target:document.body},overflow:"auto",viewScroll:"close",position:"anchor",align:"center",boundingBoxPadding:"8 8 8 8",children:[e("header",{children:e("h2",{children:"Notifications"})}),e("main",{children:s.notifications.length?e(A,{children:s.notifications.slice(0,Po).map(b=>e(Kt,{instance:a,notification:b,disableContextMenu:!0},b.id))}):u==="loading"?e("div",{class:"ui-state",children:e(Ie,{abrupt:!0})}):u==="error"&&e("div",{class:"ui-state",children:[e("p",{children:"Unable to fetch notifications."}),e("p",{children:e("button",{type:"button",onClick:f,children:"Try again"})})]})}),e("footer",{children:[e(ee,{to:"/mentions",class:"button plain",children:[e(w,{icon:"at"})," ",e("span",{children:"Mentions"})]}),e(ee,{to:"/notifications",class:"button plain2",children:[h?e(A,{children:[e("span",{class:"tag collapsed",children:"New"})," ",e("span",{children:"Follow Requests"})]}):e("b",{children:"See all"})," ",e(w,{icon:"arrow-right"})]})]})]})}const Do=ze(Ro),Uo=[/^\/@[^@\/]+\/(?:statuses|posts)\/([^\/]+)/i,/\/notes\/([^\/]+)/i,/^\/(?:notice|objects)\/([a-z0-9-]+)/i,/\/@[^@\/]+@?[^\/]+?\/([^\/]+)/i];function hs(t){const{hostname:n,pathname:i}=new URL(t);for(const o of Uo){const[,a]=i.match(o)||[];if(a)return{instance:n,id:a}}return{}}function Fo(t){const{instance:n,id:i}=hs(t);return n&&i?`/${n}/s/${i}`:null}function Oo(){const n=lt().pathname.replace(/^\//,""),i=hs(n),o=i!=null&&i.instance?`/${i.instance}/s/${i.id}`:null,[a,s]=$("loading");return Je(()=>{s("loading"),(async()=>{try{const{instance:u,id:l}=i,{masto:c}=z({instance:u});if(await c.v1.statuses.$select(l).fetch()){window.location.hash=o+"?view=full";return}}catch{}{const{masto:u,instance:l}=z(),c=await u.v2.search.fetch({q:n,type:"statuses",limit:1,resolve:!0});if(c.statuses.length){const d=c.statuses[0];window.location.hash=`/${l}/s/${d.id}?view=full`}else window.location.hash=o+"?view=full"}})()},[o]),e("div",{class:"ui-state",tabIndex:"-1",children:[a==="loading"?e(A,{children:[e(Ie,{abrupt:!0}),e("h2",{children:"Resolving…"}),e("p",{children:e("a",{href:n,target:"_blank",rel:"noopener noreferrer",children:n})})]}):e(A,{children:[e("h2",{children:"Unable to resolve URL"}),e("p",{children:e("a",{href:n,target:"_blank",rel:"noopener noreferrer",children:n})})]}),e("hr",{}),e("p",{children:e(ee,{to:"/",children:"Go home"})})]})}function Bo(){const{masto:t}=z();_e("Lists","/l");const[n,i]=$("default"),[o,a]=xt(d=>d+1,0),[s,u]=$([]);B(()=>{i("loading"),(async()=>{try{const d=await t.v1.lists.list();d.sort((h,r)=>h.title.localeCompare(r.title)),u(d),i("default")}catch{i("error")}})()},[o]);const[l,c]=$(!1);return e("div",{id:"lists-page",class:"deck-container",tabIndex:"-1",children:[e("div",{class:"timeline-deck deck",children:[e("header",{children:e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),e(ee,{to:"/",class:"button plain",children:e(w,{icon:"home",size:"l"})})]}),e("h1",{children:"Lists"}),e("div",{class:"header-side",children:e("button",{type:"button",class:"plain",onClick:()=>c(!0),children:e(w,{icon:"plus",size:"l",alt:"New list"})})})]})}),e("main",{children:s.length>0?e("ul",{class:"link-list",children:s.map(d=>e("li",{children:e(ee,{to:`/l/${d.id}`,children:e("span",{children:[e(w,{icon:"list"})," ",e("span",{children:d.title})]})})}))}):n==="loading"?e("p",{class:"ui-state",children:e(Ie,{})}):n==="error"?e("p",{class:"ui-state",children:"Unable to load lists."}):e("p",{class:"ui-state",children:"No lists yet."})})]}),l&&e(Ce,{class:"light",onClick:d=>{d.target===d.currentTarget&&c(!1)},children:e(Yt,{list:l==null?void 0:l.list,onClose:d=>{d.state==="success"&&a(),c(!1)}})})]})}const zo=""+new URL("instances-cddSOnAA.json",import.meta.url).href;var qo={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",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",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_CLIENT_NAME:Ho,PHANPY_WEBSITE:Vo}=qo,Xt="read write follow push";async function Go({instanceURL:t}){const n=new URLSearchParams({client_name:Ho,redirect_uris:location.origin+location.pathname,scopes:Xt,website:Vo});return await(await fetch(`https://${t}/api/v1/apps`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString()})).json()}async function jo({instanceURL:t,client_id:n}){const i=new URLSearchParams({client_id:n,scope:Xt,redirect_uri:location.origin+location.pathname,response_type:"code"});return`https://${t}/oauth/authorize?${i.toString()}`}async function Yo({instanceURL:t,client_id:n,client_secret:i,code:o}){const a=new URLSearchParams({client_id:n,client_secret:i,redirect_uri:location.origin+location.pathname,grant_type:"authorization_code",code:o,scope:Xt});return await(await fetch(`https://${t}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:a.toString()})).json()}var Wo={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",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",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_DEFAULT_INSTANCE:Ko}=Wo;function Zo(){_e("Log in");const t=D(),n=se.local.get("instanceURL"),[i,o]=$("default"),[a]=qe(),s=a.get("instance"),u=a.get("submit"),[l,c]=$(s||(n==null?void 0:n.toLowerCase())||""),[d,h]=$([]);B(()=>{(async()=>{try{const y=await(await fetch(zo)).json();h(y)}catch{}})()},[]);const r=m=>{m&&(se.local.set("instanceURL",m),(async()=>{o("loading");try{const{client_id:y,client_secret:S,vapid_key:I}=await Go({instanceURL:m});y&&S?(se.session.set("clientID",y),se.session.set("clientSecret",S),se.session.set("vapidKey",I),location.href=await jo({instanceURL:m,client_id:y})):alert("Failed to register application"),o("default")}catch{o("error")}})())},p=l?l.replace(/^https?:\/\//,"").replace(/\/+$/,"").replace(/^@?[^@]+@/,"").trim():null,f=/[^\s\r\n\t\/\\]+\.[^\s\r\n\t\/\\]+/.test(p)&&!/[\s\/\\@]/.test(p),b=p?d.filter(m=>m.includes(l)).sort((m,y)=>{const S=m.toLowerCase().startsWith(l.toLowerCase()),I=y.toLowerCase().startsWith(l.toLowerCase());return S&&!I?-1:!S&&I?1:0}).slice(0,10):[],g=f?p:b!=null&&b.length?b[0]:l?d.find(m=>m.includes(l)):null,v=m=>{m.preventDefault(),r(g)};return u&&B(()=>{r(s||g)},[]),e("main",{id:"login",style:{textAlign:"center"},children:e("form",{onSubmit:v,children:[e("h1",{children:[e("img",{src:Gt,alt:"",width:"80",height:"80"}),e("br",{}),"Log in"]}),e("label",{children:[e("p",{children:"Instance"}),e("input",{value:l,required:!0,type:"text",class:"large",id:"instanceURL",ref:t,disabled:i==="loading",autocorrect:"off",autocapitalize:"off",autocomplete:"off",spellcheck:!1,placeholder:"instance domain",onInput:m=>{c(m.target.value)}}),(b==null?void 0:b.length)>0?e("ul",{id:"instances-suggestions",children:b.map((m,y)=>e("li",{children:e("button",{type:"button",class:"plain5",onClick:()=>{r(m)},children:m})}))}):e("div",{id:"instances-eg",children:"e.g. “mastodon.social”"})]}),i==="error"&&e("p",{class:"error",children:"Failed to log in. Please try again or another instance."}),e("div",{children:[e("button",{disabled:i==="loading"||!l||!g,children:g?`Continue with ${g}`:"Continue"})," "]}),e(Ie,{hidden:i!=="loading"}),e("hr",{}),!Ko&&e("p",{children:e("a",{href:"https://joinmastodon.org/servers",target:"_blank",children:"Don't have an account? Create one!"})}),e("p",{children:e(ee,{to:"/",children:"Go home"})})]})})}const wt=40,Jo=10,Xo=5;let Bt={},St={},kt={};function zt(t){delete St[t],delete kt[t]}const dt={block:"nearest",inline:"center",behavior:"smooth"},Tn=".status-link:not(details:not([open]) > summary ~ *, details:not([open]) > summary ~ * *), .status-focus:not(details:not([open]) > summary ~ *, details:not([open]) > summary ~ * *)",Cn=/\/s\//i;function Qo(t){const{id:n}=t,{masto:i,instance:o}=z({instance:t.instance}),a=Se(k),[s,u]=qe(),l=s.get("media"),c=s.get("media-only"),d=parseInt(l||c,10);let h=d>0;const r=s.get("mediaStatusID"),p=zn(r,o);r&&!p&&(h=!1);const f=h&&!!c,b=Ge(n,o),[g,v]=$(k.statuses[b]);B(()=>{k.statuses[b]&&v(k.statuses[b])},[b]);const m=he(()=>{const{prevLocation:I}=k,T=((I==null?void 0:I.pathname)||"")+((I==null?void 0:I.search)||""),x=pt("/:instance/s/:id",T)||pt("/s/:id",T);return!T||x?"/":T},[]);B(()=>{!g&&h&&(async()=>{try{const I=await i.v1.statuses.$select(n).fetch();Ae(I,o),v(I)}catch{alert("Unable to load post."),location.hash=m}})()},[h]);const y=r?p==null?void 0:p.mediaAttachments:g==null?void 0:g.mediaAttachments,S=Ve(()=>{!window.matchMedia("(min-width: calc(40em + 350px))").matches&&a.prevLocation?history.back():f?location.hash=m:(s.delete("media"),s.delete("mediaStatusID"),u(s))},[f,m,a.prevLocation]);return B(()=>{let I=setTimeout(()=>{const T=document.querySelector(".carousel");T&&T.focus()},100);return()=>clearTimeout(I)},[f]),e("div",{class:"deck-backdrop",children:[h?y!=null&&y.length?e(es,{mediaAttachments:y,statusID:r||n,instance:o,lang:g==null?void 0:g.language,index:d-1,onClose:S}):e("div",{class:"media-modal-container loading",children:e(Ie,{abrupt:!0})}):e(ee,{to:m}),!f&&e(ea,{id:n,instance:t.instance,closeLink:m})]})}function ea({id:t,closeLink:n="/",instance:i}){var me,de;const[o,a]=qe(),s=o.get("media"),u=o.get("mediaStatusID"),l=parseInt(s,10)>0,c=D(!k.prevLocation&&(history.length===1||"navigation"in window&&((de=(me=navigation==null?void 0:navigation.entries)==null?void 0:me.call(navigation))==null?void 0:de.length)===1)),[d,h]=$(o.get("view")||c.current?"full":null),r=!!parseInt(o.get("translate")),{masto:p,instance:f}=z({instance:i}),{masto:b,instance:g,authenticated:v}=z(),m=f===g,y=Se(k),[S,I]=$([]),[T,x]=$("default"),L=D(),N=Ge(t,f),O=D(0),U=D();B(()=>{var R;(R=U.current)==null||R.focus()},[]),B(()=>{var G;const R=Yn(()=>{if(!U.current)return;const{scrollTop:K}=U.current;T!=="loading"&&(kt[t]=K)},50);return(G=U.current)==null||G.addEventListener("scroll",R,{passive:!0}),R(),()=>{var K;R.cancel(),(K=U.current)==null||K.removeEventListener("scroll",R)}},[t,T!=="loading"]);const P=D(),M=({reloadHero:R}={})=>{x("loading");let G;const K=St[t];if(K){const ie=K.filter(we=>k.statuses[N]);I(ie)}else I([{id:t}]);return(async()=>{var q,ge;const ie=()=>cn(()=>p.v1.statuses.$select(t).fetch(),{retries:4}),we=cn(()=>p.v1.statuses.$select(t).context.fetch(),{retries:8}),Le=!!y.statuses[N];let $e=y.statuses[N];if(!(Le&&!R))try{$e=await ie(),Ae($e,f),await new Promise(be=>{setTimeout(be,100)})}catch{x("error");return}try{let be=function(J){return J==null?void 0:J.map(ve=>({id:ve.id,account:ve.account,repliesCount:ve.repliesCount,content:ve.content,weight:ft(ve),replies:be(ve.__replies)}))};const ue=await we,{ancestors:xe,descendants:Pe}=ue;O.current=(Pe==null?void 0:Pe.length)||0;const Ne=new Set;xe.forEach(J=>{Ae(J,f,{skipThreading:!0}),J.inReplyToId&&!xe.find(ve=>ve.id===J.inReplyToId)&&Ne.add(J.inReplyToId)});const st=xe.every(J=>J.account.id===$e.account.id),Oe=[];Pe.forEach(J=>{if(Ae(J,f,{skipThreading:!0}),J.inReplyToId&&!Pe.find(ve=>ve.id===J.inReplyToId)&&J.inReplyToId!==$e.id&&Ne.add(J.inReplyToId),J.inReplyToAccountId===J.account.id)Oe.push(J);else if(J.inReplyToId===$e.id)Oe.push(J);else if(!J.inReplyToAccountId&&Oe.find(ve=>ve.id===J.inReplyToId)&&J.account.id===$e.account.id)Oe.push(J);else{const ve=Pe.find(ps=>ps.id===J.inReplyToId);ve&&(ve.__replies||(ve.__replies=[]),ve.__replies.push(J))}}),Ne.size;const We=[...xe.map(J=>({id:J.id,ancestor:!0,isThread:st,accountID:J.account.id,account:J.account,repliesCount:J.repliesCount,weight:ft(J)})),{id:t,accountID:$e.account.id,weight:ft($e)},...Oe.map(J=>({id:J.id,account:J.account,accountID:J.account.id,descendant:!0,thread:J.account.id===$e.account.id,weight:ft(J),replies:be(J.__replies)}))];x("default"),P.current={offsetTop:(q=L.current)==null?void 0:q.offsetTop,scrollTop:(ge=U.current)==null?void 0:ge.scrollTop};const Xe=We.findIndex(J=>J.id===t);Xe>=W&&ke(Xe+1),I(We),St[t]=We,$s($e,f)}catch{x("error")}})(),()=>{clearTimeout(G)}};B(M,[t,p]),B(()=>{var G,K;if(!S.length)return;const R=kt[t];if(R)U.current.scrollTop=R;else if(P.current){const ie={offsetTop:(G=L.current)==null?void 0:G.offsetTop,scrollTop:(K=U.current)==null?void 0:K.scrollTop},we=ie.offsetTop-P.current.offsetTop+ie.scrollTop;U.current.scrollTop=we}else S.length===1&&(U.current.scrollTop=0);P.current=null},[S]),B(()=>{y.reloadStatusPage<=0||(async()=>{try{const{instanceURL:R}=at(),G=`https://${R}/api/v1/statuses/${t}/context`;return await(await caches.open("api")).delete(G,{ignoreVary:!0}),M({reloadHero:!0})}catch{}})()},[y.reloadStatusPage]),B(()=>()=>{kt={},k.reloadStatusPage=0,St={},Bt={},qt.clear()},[]);const C=y.statuses[N]||y.statuses[t],_=he(()=>{if(!C)return"";const{account:R}=C,G=document.createElement("div");return G.innerHTML=R.displayName,G.innerText.trim()},[C]),F=he(()=>{if(!C)return"";let R=Bn(C);return R.length>64&&(R=R.slice(0,64)+"…"),R},[C]);_e(_&&F?`${_}: "${F}"`:"Status","/:instance?/s/:id");const Y=he(()=>{if(!C)return;const{url:R}=C;if(R)return new URL(R).hostname},[C]),te=he(()=>{if(Y)return Y===f},[Y,f]),[W,ke]=$(wt),re=he(()=>S.length-W,[S.length,W]),X=S.some(R=>R.descendant),E=S.filter(R=>R.ancestor),[j,ne]=$(!0),le=he(()=>{if(!L.current||j)return null;const{top:R}=L.current.getBoundingClientRect();return R>0?"down":"up"},[j]);Re("esc",()=>{location.hash=n},{enabled:!l,ignoreEventWhen:R=>!!document.querySelector("#modal-container > *")}),Re("backspace",()=>{location.hash=n}),Re("j",()=>{const R=document.activeElement.closest(".status-link, .status-focus"),G=R==null?void 0:R.getBoundingClientRect(),K=Array.from(U.current.querySelectorAll(Tn));if(R&&G.top0){const ie=K.indexOf(R);let we=K[ie+1];we&&(we.focus(),we.scrollIntoView(dt))}else{const ie=K.find(we=>{const Le=we.getBoundingClientRect();return Le.top>=44&&Le.left>=0});ie&&(ie.focus(),ie.scrollIntoView(dt))}}),Re("k",()=>{const R=document.activeElement.closest(".status-link, .status-focus"),G=R==null?void 0:R.getBoundingClientRect(),K=Array.from(U.current.querySelectorAll(Tn));if(R&&G.top0){const ie=K.indexOf(R);let we=K[ie-1];we&&(we.focus(),we.scrollIntoView(dt))}else{const ie=K.find(we=>{const Le=we.getBoundingClientRect();return Le.top>=44&&Le.left>=0});ie&&(ie.focus(),ie.scrollIntoView(dt))}}),Re("x",()=>{const R=document.activeElement.closest(".status-link, .status-focus");if(R){const G=R.nextElementSibling;G&&G.tagName.toLowerCase()==="details"&&(G.open=!G.open)}});const[H,ae]=$(!1),Q=D(l?"media+status":"status"),ye=Ve((R,G,K,ie)=>{R.preventDefault(),R.stopPropagation(),a({media:G+1,mediaStatusID:ie.id})},[t]),V=Ve((R,G)=>{zt(G.id)},[]);B(()=>{let R;return u&&l&&(R=setTimeout(()=>{var K;const G=(K=U.current)==null?void 0:K.querySelector(`.status-link[href*="/${u}"]`);G&&G.scrollIntoView(dt)},400)),()=>{clearTimeout(R)}},[u,l]);const Z=Ve((R,G)=>{const{id:K,ancestor:ie,isThread:we,descendant:Le,thread:$e,replies:q,repliesCount:ge,weight:be}=R,ue=K===t;return e("li",{ref:ue?L:null,class:`${ie?"ancestor":""} ${Le?"descendant":""} ${$e?"thread":""} ${ue?"hero":""}`,children:[ue?e(A,{children:[e(je,{threshold:.1,onChange:xe=>{queueMicrotask(()=>{requestAnimationFrame(()=>{ne(xe)})})},class:"status-focus",tabIndex:0,children:e(Me,{statusID:K,instance:f,withinContext:!0,size:"l",enableTranslate:!0,forceTranslate:r})}),T!=="loading"&&!v?e("div",{class:"post-status-banner",children:[e("p",{children:"You're not logged in. Interactions (reply, boost, etc) are not possible."}),e(ee,{to:"/login",class:"button",children:"Log in"})]}):!m&&e("div",{class:"post-status-banner",children:[e("p",{children:["This post is from another instance (",e("b",{children:f}),"). Interactions (reply, boost, etc) are not possible."]}),e("button",{type:"button",disabled:T==="loading",onClick:()=>{x("loading"),(async()=>{try{const xe=await b.v2.search.fetch({q:C.url,type:"statuses",resolve:!0,limit:1});if(xe.statuses.length){const Pe=xe.statuses[0];location.hash=g?`/${g}/s/${Pe.id}`:`/s/${Pe.id}`}else throw new Error("No results")}catch(xe){x("default"),alert("Error: "+xe)}})()},children:[e(w,{icon:"transfer"})," Switch to my instance to enable interactions"]})]})]}):e(ee,{class:"status-link",to:f?`/${f}/s/${K}`:`/s/${K}`,onClick:()=>{zt(K)},children:[e(je,{skip:G!==0||!ie,threshold:.5,onChange:xe=>{queueMicrotask(()=>{requestAnimationFrame(()=>{ae(xe)})})},children:e(Me,{statusID:K,instance:f,withinContext:!0,size:$e||ie?"m":"s",enableTranslate:!0,onMediaClick:ye,onStatusLinkClick:V})}),ie&&ge>1&&e("div",{class:"replies-link",children:[e(w,{icon:"comment2"})," ",e("span",{title:ge,children:Ue(ge)})]})," "]}),Le&&(q==null?void 0:q.length)>0&&e(fs,{instance:f,replies:q,hasParentThread:$e,level:1,accWeight:be,openAll:O.current{k.reloadStatusPage++},children:"Try again"})]})]},K)},[t,f,T,v,m,r,ye,V,X]),ce=he(()=>{var R;if("navigation"in window&&(navigation!=null&&navigation.entries)){const G=navigation.entries()[navigation.currentEntry.index-1];if(G!=null&&G.url)return Cn.test(G.url)}return Cn.test((R=k.prevLocation)==null?void 0:R.pathname)},[N]),fe=he(()=>{if(!re)return[];const R=[];function G(K){R.push(K.id),K.replies&&K.replies.forEach(G)}return S.slice(W).forEach(G),R.map(K=>Ge(K,f))},[re,S,W,f]);return e("div",{tabIndex:"-1",ref:U,class:`status-deck deck contained ${S.length>1?"padded-bottom":""} ${Q.current==="status"&&!c.current?"slide-in":""} ${d?`deck-view-${d}`:""}`,onAnimationEnd:R=>{Q.current==="status"&&(Q.current=null)},children:[e("header",{class:`${T==="loading"?"loading":""}`,onDblClick:R=>{k.reloadStatusPage++},children:e("div",{class:"header-grid header-grid-2",children:[e("h1",{children:[ce&&e("button",{type:"button",class:"plain deck-back",onClick:()=>{history.back()},children:e(w,{icon:"chevron-left",size:"xl"})}),!j&&C&&T!=="loading"?e(A,{children:[e("span",{class:"hero-heading",children:[e(It,{account:C.account,instance:f,showAvatar:!0,short:!0})," ",e("span",{class:"insignificant",children:["•"," ",e($t,{datetime:C.createdAt,format:"micro"})]})]})," ",e("button",{type:"button",class:"ancestors-indicator light small",onClick:R=>{R.preventDefault(),R.stopPropagation(),L.current.scrollIntoView({behavior:"smooth",block:"start"})},title:"Go to main post",children:e(w,{icon:le==="down"?"arrow-down":"arrow-up"})})]}):e(A,{children:["Post"," ",e("button",{type:"button",class:"ancestors-indicator light small",onClick:R=>{R.preventDefault(),R.stopPropagation(),U.current.scrollTo({top:0,behavior:"smooth"})},hidden:!E.length||H,title:`${E.length} posts above ‒ Go to top`,children:[e(w,{icon:"arrow-up"}),E.filter((R,G,K)=>K.findIndex(ie=>ie.accountID===R.accountID)===G).slice(0,3).map(R=>e(et,{url:R.account.avatar,alt:R.account.displayName},R.account.id)),E.length>3&&e(A,{children:[" ",e("span",{class:"insignificant",children:Ue(E.length)})]})]})]})]}),e("div",{class:"header-side",children:[e("button",{type:"button",class:"plain4 button-switch-view",style:{display:d==="full"?"":"none"},onClick:()=>{h(null),o.delete("media"),o.delete("media-only"),o.delete("view"),a(o)},title:"Switch to Side Peek view",children:e(w,{icon:"layout4",size:"l"})}),e(Fe,{align:"end",portal:{target:U.current},menuButton:e("button",{type:"button",class:"button plain4",children:e(w,{icon:"more",alt:"Actions",size:"xl"})}),children:[e(oe,{disabled:T==="loading",onClick:()=>{k.reloadStatusPage++},children:[e(w,{icon:"refresh"}),e("span",{children:"Refresh"})]}),e(oe,{className:"menu-switch-view",onClick:()=>{h(d==="full"?null:"full"),o.delete("media"),o.delete("media-only"),d==="full"?o.delete("view"):o.set("view","full"),a(o)},children:[e(w,{icon:{"":"layout5",full:"layout4"}[d||""]}),e("span",{children:["Switch to ",d==="full"?"Side Peek":"Full"," view"]})]}),e(oe,{onClick:()=>{Array.from(U.current.querySelectorAll(".spoiler-button:not(.spoiling), .spoiler-media-button:not(.spoiling)")).forEach(G=>{G.click()})},children:[e(w,{icon:"eye-open"})," ",e("span",{children:"Show all sensitive content"})]}),e(De,{}),e(jn,{className:"plain",children:"Experimental"}),e(oe,{disabled:!Y||te,onClick:()=>{const R=Fo(C.url);R?location.hash=R:alert("Unable to switch")},children:[e(w,{icon:"transfer"}),e("small",{class:"menu-double-lines",children:["Switch to post's instance",Y?e(A,{children:[" ","(",e("b",{children:Y}),")"]}):""]})]})]}),e(ee,{class:"button plain deck-close",to:n,children:e(w,{icon:"x",size:"xl"})})]})]})}),S.length&&C?e("ul",{class:`timeline flat contextual grow ${T==="loading"?"loading":""}`,children:[S.slice(0,W).map(Z),re>0&&e("li",{children:e("button",{type:"button",class:"plain block show-more",disabled:T==="loading",onClick:()=>ke(R=>R+wt),style:{marginBlockEnd:"6em"},"data-state-post-ids":fe.join(" "),children:[e("div",{class:"ib avatars-bunch",children:S.slice(W,W+5).map(R=>e(et,{url:R.account.avatarStatic},R.id))})," ",e("div",{class:"ib",children:["Show more…"," ",e("span",{class:"tag",children:re>wt?`${wt}+`:re})]})]})})]}):e(A,{children:[T==="loading"&&e("ul",{class:"timeline flat contextual grow loading",children:e("li",{children:e(Me,{skeleton:!0,size:"l"})})}),T==="error"&&e("p",{class:"ui-state",children:["Unable to load post",e("br",{}),e("br",{}),e("button",{type:"button",onClick:()=>{k.reloadStatusPage++},children:"Try again"})]})]})]})}function fs({replies:t,instance:n,hasParentThread:i,level:o,accWeight:a,openAll:s}){const[u,l]=qe(),c=m=>m.reduce((y,S)=>{const{repliesCount:I,replies:T}=S,x=(T==null?void 0:T.length)||I;return y+x+c(T||[])},0),d=t.length+c(t),h=t.length===d,r=t.map(m=>m.account).filter((m,y,S)=>S.findIndex(I=>I.id===m.id)===y).slice(0,3),p=he(()=>t==null?void 0:t.reduce((m,y)=>m+(y==null?void 0:y.weight),a),[a,t==null?void 0:t.length]);let f=!1;(s||p<=Xo||!i&&d===1&&ft(t[0])<2)&&(f=!0);const b=Bt[t[0].id],g=Ve((m,y,S,I)=>{m.preventDefault(),m.stopPropagation(),l({media:y+1,mediaStatusID:I.id})},[]),v=D();return Je(()=>{var y;function m(S){S.target.dataset.scrollLeft=S.target.scrollLeft}return(y=v.current)==null||y.addEventListener("scroll",m,{passive:!0}),()=>{var S;(S=v.current)==null||S.removeEventListener("scroll",m)}},[]),e("details",{ref:v,class:"replies",open:b||f,onToggle:m=>{const{open:y}=m.target;Bt[t[0].id]=y},style:{"--comments-level":o},"data-comments-level":o,"data-comments-level-overflow":o>4,children:[e("summary",{class:"replies-summary",hidden:f,children:[e("span",{class:"avatars",children:r.map(m=>e(et,{url:m.avatarStatic,title:`${m.displayName} @${m.username}`,squircle:m==null?void 0:m.bot},m.id))}),e("b",{children:[e("span",{title:t.length,children:Ue(t.length)})," ","repl",t.length===1?"y":"ies"]}),!h&&d>1&&e(A,{children:[" ","·"," ",e("span",{children:[e("span",{title:d,children:Ue(d)})," ","comment",d===1?"":"s"]})]})]}),e("ul",{children:t.map(m=>{var y,S;return e("li",{children:[e(ee,{class:"status-link",to:n?`/${n}/s/${m.id}`:`/s/${m.id}`,onClick:()=>{zt(m.id)},children:[e(Me,{statusID:m.id,instance:n,withinContext:!0,size:"s",enableTranslate:!0,onMediaClick:g}),!((y=m.replies)!=null&&y.length)&&m.repliesCount>0&&e("div",{class:"replies-link",children:[e(w,{icon:"comment2"})," ",e("span",{title:m.repliesCount,children:Ue(m.repliesCount)})]})]}),((S=m.replies)==null?void 0:S.length)&&e(fs,{instance:n,replies:m.replies,level:o+1,accWeight:f?p:m.weight,openAll:s})]},m.id)})})]})}const ta=140,na=35,sa=70,ia=140,qt=new Map;function ft(t){var f,b;const n=qt.get(t.id);if(n)return n;const{spoilerText:i,content:o,mediaAttachments:a,poll:s,card:u}=t,l=xs(i+o),c=a!=null&&a.length?ta:0,d=(((f=s==null?void 0:s.options)==null?void 0:f.length)||0)*na,h=u&&(a!=null&&a.length||(b=s==null?void 0:s.options)!=null&&b.length)?0:sa,p=(l+c+d+h)/ia;return qt.set(t.id,p),p}const oa=ze(Qo);function aa(){const t=nt(),{id:n,instance:i}=t;return e(oa,{id:n,instance:i})}const ca=""+new URL("boosts-carousel-YjmjXTE6.jpg",import.meta.url).href,ra=""+new URL("grouped-notifications-xYMFVY91.jpg",import.meta.url).href,la=""+new URL("multi-column-ETnJNDVb.jpg",import.meta.url).href,da=""+new URL("multi-hashtag-timeline-x-SDVR4g.jpg",import.meta.url).href,ua=""+new URL("nested-comments-thread-Ib-fZGS3.jpg",import.meta.url).href,ha="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20fill-rule='evenodd'%20stroke-linejoin='round'%20stroke-miterlimit='2'%20clip-rule='evenodd'%20viewBox='0%200%20102%2028'%3e%3cpath%20fill='none'%20d='M0%200h101.5v27.5H0z'/%3e%3cg%20fill-rule='nonzero'%3e%3cpath%20fill='url(%23a)'%20d='M2.32%2021.85c1.4%200%202.21-.85%202.21-2.3v-4.64H8.5c4.45%200%207.54-2.9%207.54-7.24%200-4.35-2.98-7.24-7.32-7.24h-6.4C.93.43.11%201.28.11%202.73v16.82c0%201.45.82%202.3%202.21%202.3Zm2.21-10.4V3.94h3c2.54%200%204%201.34%204%203.75s-1.47%203.76-4%203.76h-3Z'/%3e%3cpath%20fill='url(%23b)'%20d='M20.52%2021.88c1.25%200%202.13-.76%202.13-2.23v-7.04c0-2.07%201.2-3.49%203.21-3.49%201.95%200%202.95%201.23%202.95%203.25v7.28c0%201.47.89%202.23%202.13%202.23%201.26%200%202.14-.76%202.14-2.23v-8.18c0-3.64-1.99-5.9-5.48-5.9-2.38%200-4.1%201.12-4.93%203.1h-.09V2.3c0-1.38-.78-2.2-2.1-2.2-1.31%200-2.1.82-2.1%202.2v17.34c0%201.47.9%202.23%202.14%202.23Z'/%3e%3cpath%20fill='url(%23c)'%20d='M40.45%2021.82c1.96%200%203.93-.98%204.8-2.65h.1v.8c.08%201.27.89%201.91%202.05%201.91%201.21%200%202.08-.73%202.08-2.15v-8.95c0-3.17-2.63-5.25-6.65-5.25-3.26%200-5.78%201.16-6.5%203.04-.15.32-.23.63-.23.96%200%20.97.75%201.64%201.79%201.64.69%200%201.23-.26%201.7-.79.95-1.23%201.74-1.65%203.04-1.65%201.62%200%202.64.85%202.64%202.31v1.04l-3.95.24c-3.93.23-6.13%201.88-6.13%204.74%200%202.83%202.27%204.76%205.26%204.76Zm1.4-3.09c-1.43%200-2.4-.73-2.4-1.9%200-1.12.91-1.83%202.51-1.95l3.31-.2v1.14c0%201.7-1.54%202.91-3.41%202.91Z'/%3e%3cpath%20fill='url(%23d)'%20d='M54.37%2021.88c1.26%200%202.14-.76%202.14-2.23v-7.09c0-2.03%201.21-3.44%203.13-3.44s2.89%201.17%202.89%203.22v7.31c0%201.47.88%202.23%202.14%202.23%201.24%200%202.13-.76%202.13-2.23v-8.2c0-3.68-1.96-5.87-5.45-5.87-2.41%200-4%201.07-4.83%203.01h-.09v-.87c0-1.35-.85-2.17-2.14-2.17-1.28%200-2.06.82-2.06%202.15v11.95c0%201.47.9%202.23%202.14%202.23Z'/%3e%3cpath%20fill='url(%23e)'%20d='M71.65%2027.17c1.26%200%202.14-.76%202.14-2.23v-6h.09a5.15%205.15%200%200%200%204.88%202.88c3.92%200%206.35-3.05%206.35-8.1%200-5.07-2.44-8.1-6.43-8.1a5.12%205.12%200%200%200-4.86%202.99h-.09v-.85c0-1.45-.88-2.21-2.1-2.21-1.24%200-2.11.76-2.11%202.2v17.2c0%201.46.89%202.22%202.13%202.22Zm5.6-8.8c-2.1%200-3.47-1.8-3.47-4.65%200-2.81%201.37-4.67%203.47-4.67%202.14%200%203.49%201.83%203.49%204.67%200%202.86-1.35%204.66-3.5%204.66Z'/%3e%3cpath%20fill='url(%23f)'%20d='M89.61%2027.39c3.44%200%205.26-1.5%206.73-5.55l4.81-13.1a4%204%200%200%200%20.24-1.26c0-1.13-.85-1.93-2.08-1.93-1.1%200-1.71.51-2.07%201.7l-3.4%2010.9h-.08L90.35%207.28c-.36-1.25-.94-1.73-2.07-1.73-1.26%200-2.21.83-2.21%201.99%200%20.35.09.82.25%201.26l5%2013.21-.21.56c-.52%201.1-1.32%201.42-2.07%201.42l-.75-.01c-.96%200-1.56.54-1.56%201.4%200%201.29%201%202%202.88%202Z'/%3e%3c/g%3e%3cdefs%3e%3cradialGradient%20id='a'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='b'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='c'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='d'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='e'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='f'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3c/defs%3e%3c/svg%3e";var fa={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",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",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_DEFAULT_INSTANCE:ut,PHANPY_WEBSITE:$n,PHANPY_PRIVACY_POLICY_URL:pa,PHANPY_DEFAULT_INSTANCE_REGISTRATION_URL:xn}=fa,An=$n?$n.replace(/https?:\/\//g,"").replace(/\/$/,""):null,Ln=`${"2024-01-05T02:16:32.524Z".slice(0,10).replace(/-/g,".")}.adf0b35`;function Mn(){return _e(null,["/","/welcome"]),e("main",{id:"welcome",children:[e("div",{class:"hero-container",children:[e("div",{class:"hero-content",children:[e("h1",{children:[e("img",{src:Gt,alt:"",width:"160",height:"160",style:{aspectRatio:"1/1",marginBlockEnd:-16}}),e("img",{src:ha,alt:"Phanpy",width:"200"})]}),e("p",{class:"desc",children:"A minimalistic opinionated Mastodon web client."}),e("p",{children:e(ee,{to:ut?`/login?instance=${ut}&submit=1`:"/login",class:"button",children:ut?"Log in":"Log in with Mastodon"})}),ut&&xn&&e("p",{children:e("a",{href:xn,class:"button plain5",children:"Sign up"})}),!ut&&e("p",{class:"insignificant",children:e("small",{children:["Connect your existing Mastodon/Fediverse account.",e("br",{}),"Your credentials are not stored on this server."]})})]}),(An||Ln)&&e("p",{class:"app-site-version",children:e("small",{children:[An," ",Ln]})}),e("p",{children:[e("a",{href:"https://github.com/cheeaun/phanpy",target:"_blank",children:"Built"})," ","by"," ",e("a",{href:"https://mastodon.social/@cheeaun",target:"_blank",onClick:t=>{t.preventDefault(),k.showAccount="cheeaun@mastodon.social"},children:"@cheeaun"}),"."," ",e("a",{href:pa,target:"_blank",children:"Privacy Policy"}),"."]})]}),e("div",{id:"why-container",children:e("div",{class:"sections",children:[e("section",{children:[e("img",{src:ca,alt:"Screenshot of Boosts Carousel",loading:"lazy"}),e("h4",{children:"Boosts Carousel"}),e("p",{children:"Visually separate original posts and re-shared posts (boosted posts)."})]}),e("section",{children:[e("img",{src:ua,alt:"Screenshot of nested comments thread",loading:"lazy"}),e("h4",{children:"Nested comments thread"}),e("p",{children:"Effortlessly follow conversations. Semi-collapsible replies."})]}),e("section",{children:[e("img",{src:ra,alt:"Screenshot of grouped notifications",loading:"lazy"}),e("h4",{children:"Grouped notifications"}),e("p",{children:"Similar notifications are grouped and collapsed to reduce clutter."})]}),e("section",{children:[e("img",{src:la,alt:"Screenshot of multi-column UI",loading:"lazy"}),e("h4",{children:"Single or multi-column"}),e("p",{children:"By default, single column for zen-mode seekers. Configurable multi-column for power users."})]}),e("section",{children:[e("img",{src:da,alt:"Screenshot of multi-hashtag timeline with a form to add more hashtags",loading:"lazy"}),e("h4",{children:"Multi-hashtag timeline"}),e("p",{children:"Up to 5 hashtags combined into a single timeline."})]})]})})]})}const ma=window.alert;window.__nativeAlert||(window.__nativeAlert=ma);window.alert=function(t){t instanceof Error&&(t!=null&&t.message)&&(t=t.message),typeof t!="string"&&(t=JSON.stringify(t));const n=Bs({text:t,className:"alert",gravity:"top",position:"center",duration:1e4,offset:{y:48},onClick:()=>{n.hideToast()}});n.showToast()};window.__STATES__=k;window.__STATES_STATS__=()=>{const t=["statuses","accounts","spoilers","unfurledLinks","statusQuotes"],n={};t.forEach(a=>{n[a]=Object.keys(k[a]).length});const{statuses:i}=k,o=[];for(const a in i)document.querySelector(`[data-state-post-id~="${a}"], [data-state-post-ids~="${a}"]`)||o.push(a)};setInterval(()=>{if(!window.__IDLE__)return;const{statuses:t,unfurledLinks:n,notifications:i}=k;let o=0;const{instance:a}=z();for(const s in t){if(!window.__IDLE__)break;try{const u=document.querySelector(`[data-state-post-id~="${s}"], [data-state-post-ids~="${s}"]`),l=i.some(c=>{var d;return s===Ge((d=c.status)==null?void 0:d.id,a)});if(!u&&!l){delete k.statuses[s],delete k.statusQuotes[s];for(const c in n){const d=n[c];if(Ge(d.id,d.instance)===s){delete k.unfurledLinks[c];break}}o++}}catch{}}},15*60*1e3);setTimeout(()=>{for(const t in gt)queueMicrotask(()=>{var n,i,o,a;Array.isArray(gt[t])?(i=(n=gt[t])[0])==null||i.call(n):(a=(o=gt)[t])==null||a.call(o)})},5e3);(()=>{window.__IDLE__=!0;const t=["mousemove","mousedown","resize","keydown","touchstart","pointerdown","pointermove","wheel"],n=()=>{window.__IDLE__=!0},o=Yn(n,3e3),a=()=>{window.__IDLE__=!1,o()};t.forEach(s=>{window.addEventListener(s,a,{passive:!0,capture:!0})}),window.addEventListener("blur",n,{passive:!0}),document.documentElement.addEventListener("mouseleave",s=>{!s.relatedTarget&&!s.toElement&&n()},{passive:!0})})();const ga=/iPad|iPhone|iPod/.test(navigator.userAgent);ga&&document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="visible"){const t=se.local.get("theme");let n;if(t){if(n=document.querySelector('meta[name="theme-color"][data-theme-setting="manual"]'),n){const i=n.content,o=t==="light"?n.dataset.themeLightColorTemp:n.dataset.themeDarkColorTemp;n.content=o||"",setTimeout(()=>{n.content=i},10)}}else{const i=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";if(n=document.querySelector(`meta[name="theme-color"][media*="${i}"]`),n){const o=n.dataset.content,a=n.dataset.contentTemp;n.content=a||"",setTimeout(()=>{n.content=o},10)}}}});{const t=se.local.get("theme");if(t){document.documentElement.classList.add(`is-${t}`),document.querySelector('meta[name="color-scheme"]').setAttribute("content",t||"dark light");const i=document.querySelector('meta[data-theme-setting="manual"]');i&&(i.name="theme-color",i.content=t==="light"?i.dataset.themeLightColor:i.dataset.themeDarkColor),document.querySelectorAll('meta[data-theme-setting="auto"]').forEach(a=>{a.name=""})}const n=se.local.get("textSize");n&&document.documentElement.style.setProperty("--text-size",`${n}px`)}Hn(k,t=>{var n;for(const[i,o,a,s]of t){if(o.join(".")==="settings.shortcutsViewMode"){const u=document.getElementById("app");u&&(u.dataset.shortcutsViewMode=(n=k.shortcuts)!=null&&n.length?a:"")}o.join(".")==="settings.cloakMode"&&document.body.classList.toggle("cloak",a)}});function ba(){const[t,n]=$(!1),[i,o]=$("loading");B(()=>{const s=se.local.get("instanceURL"),u=decodeURIComponent((window.location.search.match(/code=([^&]+)/)||[,""])[1]);if(u){window.history.replaceState({},document.title,window.location.pathname||"/");const l=se.session.get("clientID"),c=se.session.get("clientSecret"),d=se.session.get("vapidKey");(async()=>{o("loading");const{access_token:h}=await Yo({instanceURL:s,client_id:l,client_secret:c,code:u}),r=As({instance:s,accessToken:h});await Promise.allSettled([nn(r,s),Ls(r,s,h,d)]),sn(),on(r),n(!0),o("default")})()}else{window.__IGNORE_GET_ACCOUNT_ERROR__=!0;const l=at();if(l){se.session.set("currentAccount",l.info.id);const{client:c}=z({account:l}),{instance:d}=c;sn(),on(c),o("loading"),(async()=>{try{await nn(c,d)}catch{}finally{n(!0),o("default")}})()}else o("default")}},[]);let a=lt();return k.currentLocation=a.pathname,B(Dt,[a,t]),/\/https?:/.test(a.pathname)?e(Oo,{}):e(A,{children:[e(ya,{isLoggedIn:t,loading:i==="loading"}),e(wa,{isLoggedIn:t}),i==="default"&&e(Vt,{children:e(Te,{path:"/:instance?/s/:id",element:e(aa,{})})}),t&&e(js,{}),t&&e(Vi,{}),e(Oi,{}),t&&e(zi,{}),e(Gs,{isLoggedIn:t}),i!=="loading"&&e(qi,{onClose:Dt}),e(Ys,{})]})}function ya({isLoggedIn:t,loading:n}){const i=lt(),o=he(()=>{const{pathname:a}=i;return!/^\/(login|welcome)/.test(a)},[i]);return e(Vt,{location:o||i,children:[e(Te,{path:"/",element:t?e(Do,{}):n?e(Ie,{id:"loader-root"}):e(Mn,{})}),e(Te,{path:"/login",element:e(Zo,{})}),e(Te,{path:"/welcome",element:e(Mn,{})})]})}function Rn(){return k.prevLocation||null}function wa({isLoggedIn:t}){const n=lt(),i=D(Rn());return he(()=>pt("/:instance/s/:id",n.pathname)||pt("/s/:id",n.pathname),[n.pathname,pt])?i.current||(i.current=Rn()):i.current=null,e(Vt,{location:i.current||n,children:[t&&e(A,{children:[e(Te,{path:"/notifications",element:e(ls,{})}),e(Te,{path:"/mentions",element:e(cs,{})}),e(Te,{path:"/following",element:e(Jt,{})}),e(Te,{path:"/b",element:e(ss,{})}),e(Te,{path:"/f",element:e(is,{})}),e(Te,{path:"/l",children:[e(Te,{index:!0,element:e(Bo,{})}),e(Te,{path:":id",element:e(as,{})})]}),e(Te,{path:"/ft",element:e(lo,{})})]}),e(Te,{path:"/:instance?/t/:hashtag",element:e(os,{})}),e(Te,{path:"/:instance?/a/:id",element:e(oo,{})}),e(Te,{path:"/:instance?/p",children:[e(Te,{index:!0,element:e(Ot,{})}),e(Te,{path:"l",element:e(Ot,{local:!0})})]}),e(Te,{path:"/:instance?/trending",element:e(us,{})}),e(Te,{path:"/:instance?/search",element:e(ds,{})})]})}"AbortSignal"in window&&(AbortSignal.timeout=AbortSignal.timeout||(t=>{const n=new AbortController;return setTimeout(()=>n.abort(),t),n.signal}));qs(e(zs,{children:e(ba,{})}),document.getElementById("app"));setTimeout(()=>{try{Object.keys(localStorage).forEach(t=>{t.startsWith("iconify")&&localStorage.removeItem(t)}),Object.keys(sessionStorage).forEach(t=>{t.startsWith("iconify")&&sessionStorage.removeItem(t)}),localStorage.removeItem("settings:boostsCarousel")}catch{}},5e3);window.__CLOAK__=()=>{document.body.classList.toggle("cloak")}; -//# sourceMappingURL=main-93nxKW6L.js.map + `,children:e(Fn,{class:t,media:ie,lang:_,to:`/${o}/s/${y}?media-only=${we+1}`,onClick:s?q=>s(q,we,ie,i):void 0})},Le)})}const vn=ze(Ji);function mt(t){var S,I,T,x,L;const n=Se(k),{masto:i,instance:o,authenticated:a}=z(),[s,u]=$(),[l,c]=$(!1);B(()=>{const N=se.local.getJSON("accounts")||[],O=N.find(U=>U.info.id===se.session.get("currentAccount"));O&&u(O),c(N.length>1)},[]);const d=(n.settings.shortcutsViewMode==="multi-column"||!n.settings.shortcutsViewMode&&n.settings.shortcutsColumnsMode)&&!n.shortcuts.find(N=>N.type==="following"),h=Ns(()=>{k.showAccounts=!0},{threshold:600,detect:"touch",cancelOnMovement:!0}),r=D(),[p,f]=$(void 0),b=Ts([0,0,n.settings.shortcutsViewMode==="tab-menu-bar"?50:0,0]),g=D();async function v(N){return(N||!g.current)&&(g.current=i.v1.mutes.list({limit:80})),await g.current.next()}const m=D();async function y(N){return(N||!m.current)&&(m.current=i.v1.blocks.list({limit:80})),await m.current.next()}return e(A,{children:[e("button",{ref:r,type:"button",class:`button plain nav-menu-button ${l?"with-avatar":""} ${open?"active":""}`,style:{position:"relative"},onClick:()=>{f(N=>N?void 0:"open")},onContextMenu:N=>{N.preventDefault(),k.showAccounts=!0},...h(),children:[l&&e(et,{url:((S=s==null?void 0:s.info)==null?void 0:S.avatar)||((I=s==null?void 0:s.info)==null?void 0:I.avatarStatic),size:"l",squircle:(T=s==null?void 0:s.info)==null?void 0:T.bot}),e(w,{icon:"menu",size:l?"s":"l"})]}),e(Gn,{menuClassName:"nav-menu",state:p,anchorRef:r,onClose:()=>{f(void 0)},containerProps:{style:{zIndex:10},onClick:()=>{f(void 0)}},portal:{target:document.body},...t,overflow:"auto",viewScroll:"close",position:"anchor",align:"center",boundingBoxPadding:b,unmountOnClose:!0,children:[!!((x=n.appVersion)!=null&&x.commitHash)&&n.appVersion.commitHash!=="32c53b8"&&e("div",{class:"top-menu",children:[e(oe,{onClick:()=>{confirm("Reload page now to update?")&&(async()=>{try{location.reload()}catch{}})()},children:[e(w,{icon:"sparkles",class:"sparkle-icon",size:"l"})," ",e("span",{children:"New update available…"})]}),e(De,{})]}),e("section",{children:[e(Ee,{to:"/",children:[e(w,{icon:"home",size:"l"})," ",e("span",{children:"Home"})]}),a&&e(A,{children:[d&&e(Ee,{to:"/following",children:[e(w,{icon:"following",size:"l"})," ",e("span",{children:"Following"})]}),e(Ee,{to:"/mentions",children:[e(w,{icon:"at",size:"l"})," ",e("span",{children:"Mentions"})]}),e(Ee,{to:"/notifications",children:[e(w,{icon:"notification",size:"l"})," ",e("span",{children:"Notifications"}),n.notificationsShowNew&&e("sup",{title:"New",style:{opacity:.5},children:[" ","•"]})]}),e(De,{}),e(Ee,{to:"/l",children:[e(w,{icon:"list",size:"l"})," ",e("span",{children:"Lists"})]}),e(Ee,{to:"/ft",children:[e(w,{icon:"hashtag",size:"l"})," ",e("span",{children:"Followed Hashtags"})]}),e(Ee,{to:"/b",children:[e(w,{icon:"bookmark",size:"l"})," ",e("span",{children:"Bookmarks"})]}),e(Ee,{to:"/f",children:[e(w,{icon:"heart",size:"l"})," ",e("span",{children:"Likes"})]})]}),e(De,{}),e(Ee,{to:"/search",children:[e(w,{icon:"search",size:"l"})," ",e("span",{children:"Search"})]}),e(Ee,{to:`/${o}/p/l`,children:[e(w,{icon:"building",size:"l"})," ",e("span",{children:"Local"})]}),e(Ee,{to:`/${o}/p`,children:[e(w,{icon:"earth",size:"l"})," ",e("span",{children:"Federated"})]}),e(Ee,{to:`/${o}/trending`,children:[e(w,{icon:"chart",size:"l"})," ",e("span",{children:"Trending"})]})]}),e("section",{children:a?e(A,{children:[e(De,{}),((L=s==null?void 0:s.info)==null?void 0:L.id)&&e(Ee,{to:`/${o}/a/${s.info.id}`,children:[e(w,{icon:"user",size:"l"})," ",e("span",{children:"Profile"})]}),e(oe,{onClick:()=>{k.showAccounts=!0},children:[e(w,{icon:"group",size:"l"})," ",e("span",{children:"Accounts…"})]}),e(oe,{onClick:()=>{k.showGenericAccounts={id:"mute",heading:"Muted users",fetchAccounts:v,excludeRelationshipAttrs:["muting"]}},children:[e(w,{icon:"mute",size:"l"})," Muted users…"]}),e(oe,{onClick:()=>{k.showGenericAccounts={id:"block",heading:"Blocked users",fetchAccounts:y,excludeRelationshipAttrs:["blocking"]}},children:[e(w,{icon:"block",size:"l"}),"Blocked users…"]}),e(De,{className:"divider-grow"}),e(oe,{onClick:()=>{k.showKeyboardShortcutsHelp=!0},children:[e(w,{icon:"keyboard",size:"l"})," ",e("span",{children:"Keyboard shortcuts"})]}),e(oe,{onClick:()=>{k.showShortcutsSettings=!0},children:[e(w,{icon:"shortcut",size:"l"})," ",e("span",{children:"Shortcuts / Columns…"})]}),e(oe,{onClick:()=>{k.showSettings=!0},children:[e(w,{icon:"gear",size:"l"})," ",e("span",{children:"Settings…"})]})]}):e(A,{children:[e(De,{}),e(Ee,{to:"/login",children:[e(w,{icon:"user",size:"l"})," ",e("span",{children:"Log in"})]}),e(oe,{onClick:()=>{k.showSettings=!0},children:[e(w,{icon:"gear",size:"l"})," ",e("span",{children:"Settings…"})]})]})})]})]})}const bt={block:"nearest",inline:"center",behavior:"smooth"};function Ye({title:t,titleComponent:n,id:i,instance:o,emptyText:a,errorText:s,useItemID:u,boostsCarousel:l,fetchItems:c=()=>{},checkForUpdates:d=()=>{},checkForUpdatesInterval:h=15e3,headerStart:r,headerEnd:p,timelineStart:f,refresh:b,view:g,filterContext:v,showFollowedTags:m}){const y=Se(k),[S,I]=$([]),[T,x]=$("default"),[L,N]=$(!1),[O,U]=$(!1),[P,M]=$(!0),C=D(),_=g!=="media",F=Ds(H=>{U(!1),T!=="loading"&&(x("loading"),(async()=>{try{let{done:ae,value:Q}=await c(H);if(Array.isArray(Q)){const[ye,V]=Q.reduce((Z,ce)=>(ce._pinned?Z[0].push(ce):Z[1].push(ce),Z),[[],[]]);Q=V,_&&(l&&(Q=Gi(Q)),Q=ji(Q)),ye.length&&(Q=ye.concat(Q)),I(H?Q:Z=>[...Z,...Q]),Q.length||(ae=!0),N(!ae)}else N(!1);x("default")}catch{x("error")}finally{F.cancel()}})())},1500,{leading:!0,trailing:!1}),Y=".timeline-item, .timeline-item-alt",te=Re("j, shift+j",(H,ae)=>{const Q=document.activeElement.closest(Y),ye=Q==null?void 0:Q.getBoundingClientRect(),V=Array.from(C.current.querySelectorAll(Y));if(Q&&ye.top0){const Z=V.indexOf(Q);let ce=V[Z+1];ae.shift&&(ce=V.find((fe,me)=>me>Z&&!fe.classList.contains("timeline-item-alt"))),ce&&(ce.focus(),ce.scrollIntoView(bt))}else{const Z=V.find(ce=>{const fe=ce.getBoundingClientRect();return fe.top>=44&&fe.left>=0});Z&&(Z.focus(),Z.scrollIntoView(bt))}}),W=Re("k, shift+k",(H,ae)=>{const Q=document.activeElement.closest(Y),ye=Q==null?void 0:Q.getBoundingClientRect(),V=Array.from(C.current.querySelectorAll(Y));if(Q&&ye.top0){const Z=V.indexOf(Q);let ce=V[Z-1];ae.shift&&(ce=V.findLast((fe,me)=>me{const fe=ce.getBoundingClientRect();return fe.top>=44&&fe.left>=0});Z&&(Z.focus(),Z.scrollIntoView(bt))}}),ke=Re(["enter","o"],()=>{const H=document.activeElement.closest(Y);H&&H.click()}),re=D(),[X,E]=$(!1);Zi({scrollableRef:C,distanceFromEnd:2,scrollThresholdStart:44},({scrollDirection:H,nearReachStart:ae,nearReachEnd:Q,reachStart:ye,reachEnd:V})=>{if(re.current){const Z=H==="end"&&!ae;re.current.hidden=Z}E(ae),ye&&F(!0)},[]),B(()=>{var H;(H=C.current)==null||H.scrollTo({top:0}),F(!0)},[]),B(()=>{F(!0)},[b]);const j=D(g);B(()=>{j.current!==g&&(j.current=g,I([]))},[g]);const ne=Ve(async({disableIdleCheck:H=!1}={})=>{const ae=C.current?getComputedStyle(C.current).pointerEvents==="none":!1;y.settings.autoRefresh&&C.current.scrollTop<16&&(H||window.__IDLE__)&&!to()&&!ae?F(!0):await d()&&U(!0)},[i,F,d,y.settings.autoRefresh]),le=D();return ct(H=>{if(H){const ae=Date.now()-le.current;(!le.current||ae>1e3*3)&&ne({disableIdleCheck:!0})}else le.current=Date.now();M(H)},[d,ne,y.settings.autoRefresh]),_n(ne,P&&!O?h*(X?1:2):null),e(On.Provider,{value:v,children:e("div",{id:`${i}-page`,class:"deck-container",ref:H=>{C.current=H,te.current=H,W.current=H,ke.current=H},tabIndex:"-1",children:e("div",{class:"timeline-deck deck",children:[e("header",{ref:re,onClick:H=>{var ae;H.target.closest("a, button")||(ae=C.current)==null||ae.scrollTo({top:0,behavior:"smooth"})},onDblClick:H=>{H.target.closest("a, button")||F(!0)},class:T==="loading"?"loading":"",children:[e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),r??e(ee,{to:"/",class:"button plain home-button",children:e(w,{icon:"home",size:"l"})})]}),t&&(n||e("h1",{children:t})),e("div",{class:"header-side",children:!!p&&p})]}),S.length>0&&T!=="loading"&&O&&e("button",{class:"updates-button shiny-pill",type:"button",onClick:()=>{var H;F(!0),(H=C.current)==null||H.scrollTo({top:0,behavior:"smooth"})},children:[e(w,{icon:"arrow-up"})," New posts"]})]}),!!f&&e("div",{class:`timeline-start ${T==="loading"?"loading":""}`,children:f}),S.length?e(A,{children:[e("ul",{class:`timeline ${g?`timeline-${g}`:""}`,children:[S.map(H=>e(Xi,{status:H,instance:o,useItemID:u,filterContext:v,view:g,showFollowedTags:m},H.id+(H==null?void 0:H._pinned)+g)),L&&T==="loading"&&(g==="media"?null:e(A,{children:[e("li",{style:{height:"20vh"},children:e(Me,{skeleton:!0})}),e("li",{style:{height:"25vh"},children:e(Me,{skeleton:!0})})]}))]}),T==="default"&&(L?e(je,{root:C.current,rootMargin:`0px 0px ${screen.height*1.5}px 0px`,onChange:H=>{H&&F()},children:e("button",{type:"button",class:"plain block",onClick:()=>F(),style:{marginBlockEnd:"6em"},children:"Show more…"})}):e("p",{class:"ui-state insignificant",children:"The end."}))]}):T==="loading"?e("ul",{class:"timeline",children:Array.from({length:5}).map((H,ae)=>g==="media"?e("div",{style:{height:"50vh"}}):e("li",{children:e(Me,{skeleton:!0})},ae))}):T!=="error"&&e("p",{class:"ui-state",children:a}),T==="error"&&e("p",{class:"ui-state",children:[s,e("br",{}),e("br",{}),e("button",{type:"button",onClick:()=>F(!S.length),children:"Try again"})]})]})})})}function Xi({status:t,instance:n,useItemID:i,filterContext:o,view:a,showFollowedTags:s}){const{id:u,reblog:l,items:c,type:d,_pinned:h}=t;h&&(i=!1);const r=(l==null?void 0:l.id)||u,p=n?`/${n}/s/${r}`:`/s/${r}`;let f="";d==="boosts"?f=`${c.length} Boosts`:d==="pinned"&&(f="Pinned posts");const b=d==="boosts"||d==="pinned";if(c){const v=rt(c,o);if(b)return v.sort((y,S)=>{const I=Nt(y.filtered,o),T=Nt(S.filtered,o);return I&&!T?1:!I&&T?-1:0}),e("li",{class:"timeline-item-carousel",children:e(Qi,{title:f,class:`${d}-carousel`,children:v.map(y=>{const{id:S,reblog:I,_pinned:T}=y,x=(I==null?void 0:I.id)||S,L=n?`/${n}/s/${x}`:`/s/${x}`;return T&&(i=!1),e("li",{children:e(ee,{class:"status-carousel-link timeline-item-alt",to:L,children:i?e(Me,{statusID:S,instance:n,size:"s",contentTextWeight:!0,enableCommentHint:!0}):e(Me,{status:y,instance:n,size:"s",contentTextWeight:!0,enableCommentHint:!0})})},S)})})},`timeline-${u}`);const m=v.length>3;return v.map((y,S)=>{const{id:I,_differentAuthor:T}=y,x=n?`/${n}/s/${I}`:`/s/${I}`,L=S>0&&S0||m&&L&&(d==="thread"||d==="conversation"&&!T&&!v[S-1]._differentAuthor&&!v[S+1]._differentAuthor),U=S===0,P=S===v.length-1;return e("li",{class:`timeline-item-container timeline-item-container-type-${d} timeline-item-container-${U?"start":P?"end":"middle"} ${T?"timeline-item-diff-author":""}`,children:e(ee,{class:"status-link timeline-item",to:x,children:O?e(eo,{status:y,instance:n}):i?e(Me,{statusID:I,instance:n,enableCommentHint:P,showFollowedTags:s}):e(Me,{status:y,instance:n,enableCommentHint:P,showFollowedTags:s})})},`timeline-${I}`)})}const g=`timeline-${u+h}`;return a==="media"?i?e(vn,{class:"timeline-item",parent:"li",statusID:u,instance:n},g):e(vn,{class:"timeline-item",parent:"li",status:t,instance:n},g):e("li",{children:e(ee,{class:"status-link timeline-item",to:p,children:i?e(Me,{statusID:u,instance:n,enableCommentHint:!0,showFollowedTags:s}):e(Me,{status:t,instance:n,enableCommentHint:!0,showFollowedTags:s})})},g)}function Qi({title:t,class:n,children:i}){const o=D(),a=D(),s=D(),[u,l]=$(!1);return B(()=>{setTimeout(()=>{l(!0)},1)},[]),e("div",{class:`status-carousel ${n}`,children:[e("header",{children:[e("h3",{children:t}),e("span",{children:[e("button",{ref:a,type:"button",class:"small plain2",onClick:()=>{var c,d;(d=o.current)==null||d.scrollBy({left:-Math.min(320,(c=o.current)==null?void 0:c.offsetWidth),behavior:"smooth"})},children:e(w,{icon:"chevron-left"})})," ",e("button",{ref:s,type:"button",class:"small plain2",onClick:()=>{var c,d;(d=o.current)==null||d.scrollBy({left:Math.min(320,(c=o.current)==null?void 0:c.offsetWidth),behavior:"smooth"})},children:e(w,{icon:"chevron-right"})})]})]}),e("ul",{ref:o,children:[e(je,{class:"status-carousel-beacon",onChange:c=>{a.current&&(a.current.disabled=c)}}),i[0],u&&i.slice(1),e(je,{class:"status-carousel-beacon",onChange:c=>{s.current&&(s.current.disabled=c)}})]})]})}function eo({status:t,instance:n}){const i=Se(k),{id:o,visibility:a}=t,s=Bn(t),u=Ge(o,n);return e("article",{class:`status compact-thread ${a==="direct"?"visibility-direct":""}`,tabindex:"-1",children:[i.statusThreadNumber[u]?e("div",{class:"status-thread-badge",children:[e(w,{icon:"thread",size:"s"}),i.statusThreadNumber[u]?` ${i.statusThreadNumber[u]}/X`:""]}):e("div",{class:"status-thread-badge",children:e(w,{icon:"thread",size:"s"})}),e("div",{class:"content-compact",title:s,children:[s,t.sensitive&&t.spoilerText&&e(A,{children:[" ",e("span",{class:"spoiler-badge",children:e(w,{icon:"eye-close",size:"s"})})]})]})]})}function to(){return!!document.querySelector(".deck-backdrop, #modal-container > *")}const ot=20,Zt=1983,Sn=`${Zt}-01`,no=(()=>{try{const t=document.createElement("input");return t.setAttribute("type","month"),t.type==="month"}catch{return!1}})();async function so(t){var o;const{masto:n}=z({instance:t}),i=await n.v2.search.fetch({q:"from:me",type:"statuses",limit:1});return!!((o=i==null?void 0:i.statuses)!=null&&o.length)}const io=tt(so);function oo(){const t=Se(k),{id:n,...i}=nt(),[o,a]=qe(),s=o.get("month"),u=!o.get("replies"),l=!!o.get("boosts"),c=o.get("tagged"),d=!!o.get("media"),{masto:h,instance:r,authenticated:p}=z({instance:i.instance}),{masto:f,instance:b}=z(),g=D(),v=[s,u,l,c,d],[m,y]=$(),S=D(0);B(()=>{S.current=0},v);const I=he(()=>r===b,[r,b]),[T,x]=$(!1);B(()=>{I&&m!=null&&m.acct&&(async()=>{const X=await io(r);x(X)})()},[r,I,m==null?void 0:m.acct]);async function L(X){var ae,Q,ye;const E=/^\d{4}-[01]\d$/.test(s),j=((Q=(ae=s==null?void 0:s.split)==null?void 0:ae.call(s,"-"))==null?void 0:Q[0])>=Zt;if(E&&j){if(!m)return{value:[],done:!0};const[V,Z]=s.split("-"),ce=parseInt(Z,10)-1,fe=new Date(V,ce,0),me=`${fe.getFullYear()}-${(fe.getMonth()+1).toString().padStart(2,"0")}-${fe.getDate().toString().padStart(2,"0")}`,de=new Date(V,ce+1,1),R=`${de.getFullYear()}-${(de.getMonth()+1).toString().padStart(2,"0")}-${de.getDate().toString().padStart(2,"0")}`;let G;X?(G=ot+1,S.current=0):(G=ot+S.current+1,S.current+=ot);const K=await h.v2.search.fetch({q:`from:${m.acct} after:${me} before:${R}`,type:"statuses",limit:G,offset:S.current});if((ye=K==null?void 0:K.statuses)!=null&&ye.length){const ie=K.statuses.slice(0,ot);ie.forEach(Le=>{Ae(Le,r)});const we=K.statuses.length<=ot;return{value:ie,done:we}}else return{value:[],done:!0}}const ne=[];if(X){const{value:V}=await h.v1.accounts.$select(n).statuses.list({pinned:!0}).next();if(V!=null&&V.length&&!c&&!d){const Z=V.map(ce=>(Ae(ce,r),{...ce,_pinned:!0}));if(Z.length>=3){const ce=Z.map(fe=>fe.id);ne.push({id:ce,items:Z,type:"pinned"})}else ne.push(...Z)}}(X||!g.current)&&(g.current=h.v1.accounts.$select(n).statuses.list({limit:ot,exclude_replies:u,exclude_reblogs:l,only_media:d,tagged:c}));const{value:le,done:H}=await g.current.next();return le!=null&&le.length&&(ne.push(...le),le.forEach(V=>{Ae(V,r)})),{value:ne,done:H}}const[N,O]=$([]);_e(m!=null&&m.acct?`${m!=null&&m.displayName?m.displayName+" ":""}@${m.acct}${u?l?" (- Boosts)":c?` (#${c})`:d?" (Media)":s?` (${new Date(s).toLocaleString("default",{month:"long",year:"numeric"})})`:"":" (+ Replies)"}`:"Account posts","/:instance?/a/:id");const U=D(),P=Ve(()=>{const X=U.current||h.v1.accounts.$select(n).fetch();return U.current=X,X},[n,h]);B(()=>{(async()=>{try{const X=await P();y(X)}catch{}try{const X=await h.v1.accounts.$select(n).featuredTags.list();O(X)}catch{}})()},[n]);const{displayName:M,acct:C,emojis:_}=m||{},F=he(()=>{const X=t.accounts[`${n}@${r}`];return e(Jn,{instance:r,account:X||n,fetchAccount:P,authenticated:p,standalone:!0})},[n,r,p,P]),Y=D(),te=he(()=>e(A,{children:[F,e("div",{class:"filter-bar",ref:Y,style:{position:"relative"},children:[!u||l||c||d||!!s?e(ee,{to:`/${r}/a/${n}`,class:"insignificant filter-clear",title:"Clear filters",children:e(w,{icon:"x",size:"l"})},"clear-filters"):e(w,{icon:"filter",class:"insignificant",size:"l"}),e(ee,{to:`/${r}/a/${n}${u?"?replies=1":""}`,onClick:()=>{u&&pe("Showing post with replies")},class:u?"":"is-active",children:"+ Replies"}),e(ee,{to:`/${r}/a/${n}${l?"":"?boosts=0"}`,onClick:()=>{l||pe("Showing posts without boosts")},class:l?"is-active":"",children:"- Boosts"}),e(ee,{to:`/${r}/a/${n}${d?"":"?media=1"}`,onClick:()=>{d||pe("Showing posts with media")},class:d?"is-active":"",children:"Media"}),N.map(E=>e(ee,{to:`/${r}/a/${n}${c===E.name?"":`?tagged=${encodeURIComponent(E.name)}`}`,onClick:()=>{c!==E.name&&pe(`Showing posts tagged with #${E.name}`)},class:c===E.name?"is-active":"",children:e("span",{children:[e("span",{class:"more-insignificant",children:"#"}),E.name]})},E.id)),T&&(no?e("label",{class:`filter-field ${s?"is-active":""}`,children:[e(w,{icon:"month",size:"l"}),e("input",{type:"month",disabled:!(m!=null&&m.acct),value:s||"",min:Sn,max:new Date().toISOString().slice(0,7),onInput:E=>{const{value:j,validity:ne}=E.currentTarget;if(!ne.valid)return;a(j?{month:j}:{});const[le,H]=j.split("-"),ae=parseInt(H,10)-1,Q=new Date(le,ae);pe(`Showing posts in ${Q.toLocaleString("default",{month:"long",year:"numeric"})}`)}})]}):e(ao,{class:`filter-field ${s?"is-active":""}`,disabled:!(m!=null&&m.acct),value:s||"",min:Sn,max:new Date().toISOString().slice(0,7),onInput:E=>{const{value:j,validity:ne}=E;ne.valid&&a(j?{month:j}:{})}}))]})]}),[n,r,p,N,T,...v]);B(()=>{var E;const X=(E=Y.current)==null?void 0:E.querySelector(".is-active");X&&Y.current.scrollTo({behavior:"smooth",left:X.offsetLeft-(Y.current.offsetWidth-X.offsetWidth)/2})},[N,T,...v]);const W=he(()=>m!=null&&m.url?new URL(m.url).hostname:null,[m]),re=!!m&&!(r===W);return e(Ye,{title:`${m!=null&&m.acct?"@"+m.acct:"Posts"}`,titleComponent:e("h1",{class:"header-double-lines header-account",children:[e("b",{children:e(Nn,{text:M,emojis:_})}),e("div",{children:e("span",{children:["@",C]})})]}),id:"account-statuses",instance:r,emptyText:"Nothing to see here yet.",errorText:"Unable to load posts",fetchItems:L,useItemID:!0,view:d?"media":void 0,boostsCarousel:t.settings.boostsCarousel,timelineStart:te,refresh:[u,l,c,d,s+(m==null?void 0:m.acct)].toString(),headerEnd:e(Fe,{portal:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{disabled:!re,onClick:()=>{(async()=>{try{const{masto:X}=z({instance:W}),E=await X.v1.accounts.lookup({acct:m.acct}),{id:j}=E;location.hash=`/${W}/a/${j}`}catch{alert("Unable to fetch account info")}})()},children:[e(w,{icon:"transfer"})," ",e("small",{class:"menu-double-lines",children:["Switch to account's instance (",e("b",{children:W}),")"]})]}),!I&&e(oe,{onClick:()=>{(async()=>{try{const X=await f.v1.accounts.lookup({acct:m.acct+"@"+r}),{id:E}=X;location.hash=`/${b}/a/${E}`}catch{alert("Unable to fetch account info")}})()},children:[e(w,{icon:"transfer"})," ",e("small",{class:"menu-double-lines",children:["Switch to my instance (",e("b",{children:b}),")"]})]})]})},n)}function ao(t){const{class:n,disabled:i,value:o,min:a,max:s,onInput:u=()=>{}}=t,[l,c]=(o==null?void 0:o.split("-"))||[],d=D(),h=D(),r=(p,f)=>{const[b,g]=(a==null?void 0:a.split("-"))||[],[v,m]=(s==null?void 0:s.split("-"))||[];return!(fv||f===b&&pm)};return e("div",{class:n,children:[e(w,{icon:"month",size:"l"}),e("select",{ref:d,disabled:i,value:c||"",onInput:p=>{const{value:f}=p.currentTarget,b=h.current.value;if(!r(f,b))return{value:"",validity:{valid:!1}};u({value:f?`${b}-${f}`:"",validity:{valid:!0}})},children:[e("option",{value:"",children:"Month"}),e("option",{disabled:!0,children:"-----"}),Array.from({length:12},(p,f)=>e("option",{value:(f+1).toString().padStart(2,"0"),children:new Date(0,f).toLocaleString("default",{month:"long"})},f))]})," ",e("input",{ref:h,type:"number",disabled:i,value:l||new Date().getFullYear(),min:(a==null?void 0:a.slice(0,4))||Zt,max:(s==null?void 0:s.slice(0,4))||new Date().getFullYear(),onInput:p=>{const{value:f,validity:b}=p.currentTarget,g=d.current.value;if(!b.valid||!r(g,f))return{value:"",validity:{valid:!1}};u({value:f?`${f}-${g}`:"",validity:{valid:!0}})},style:{width:"4.5em"}})]})}const co=20;function ss(){_e("Bookmarks","/b");const{masto:t,instance:n}=z(),i=D();async function o(a){return(a||!i.current)&&(i.current=t.v1.bookmarks.list({limit:co})),await i.current.next()}return e(Ye,{title:"Bookmarks",id:"bookmarks",emptyText:"No bookmarks yet. Go bookmark something!",errorText:"Unable to load bookmarks",instance:n,fetchItems:o})}const ro=20;function is(){_e("Likes","/f");const{masto:t,instance:n}=z(),i=D();async function o(a){return(a||!i.current)&&(i.current=t.v1.favourites.list({limit:ro})),await i.current.next()}return e(Ye,{title:"Likes",id:"favourites",emptyText:"No likes yet. Go like something!",errorText:"Unable to load likes",instance:n,fetchItems:o})}function lo(){const{masto:t,instance:n}=z();_e("Followed Hashtags","/ft");const[i,o]=$("default"),[a,s]=$([]);return B(()=>{o("loading"),(async()=>{try{const u=await Tt();s(u),o("default")}catch{o("error")}})()},[]),e("div",{id:"followed-hashtags-page",class:"deck-container",tabIndex:"-1",children:e("div",{class:"timeline-deck deck",children:[e("header",{children:e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),e(ee,{to:"/",class:"button plain",children:e(w,{icon:"home",size:"l"})})]}),e("h1",{children:"Followed Hashtags"}),e("div",{class:"header-side"})]})}),e("main",{children:a.length>0?e("ul",{class:"link-list",children:a.map(u=>e("li",{children:e(ee,{to:n?`/${n}/t/${u.name}`:`/t/${u.name}`,children:[e(w,{icon:"hashtag"})," ",e("span",{children:u.name})]})}))}):i==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):i==="error"?e("p",{class:"ui-state",children:"Unable to load followed hashtags."}):e("p",{class:"ui-state",children:"No hashtags followed yet."})})]})})}const uo=20;function Jt({title:t,path:n,id:i,...o}){_e(t||"Following",n||"/following");const{masto:a,streaming:s,instance:u}=z(),l=Se(k),c=D(),d=D();async function h(p){(p||!c.current)&&(c.current=a.v1.timelines.home.list({limit:uo}));const f=await c.current.next();let{value:b}=f;if(b!=null&&b.length){let g=!1;p&&(b[0].id!==d.current&&(g=!0),d.current=b[0].id),b.forEach(v=>{Ae(v,u)}),b=wn(b,u),p&&g&&Wi(),Yi(b,u),b.sort((v,m)=>{const y=new Date(v.createdAt);return new Date(m.createdAt)-y})}return{...f,value:b}}async function r(){try{const p=await a.v1.timelines.home.list({limit:5,since_id:d.current}).next();let{value:f}=p;return!!(f!=null&&f.length&&(d.current=f[0].id,f=wn(f,u),f=rt(f,"home"),f.some(b=>!b.reblog)))}catch{return!1}}return B(()=>{let p;return(async()=>{if(s){p=s.user.subscribe();for await(const f of p){if(!p)break;if(f.event==="status.update"){const b=f.payload;Ae(b,u)}else if(f.event==="delete"){const b=f.payload,g=zn(b,u);g&&(g._deleted=!0)}}}})(),()=>{var f;(f=p==null?void 0:p.unsubscribe)==null||f.call(p),p=null}},[s]),e(Ye,{title:t||"Following",id:i||"following",emptyText:"Nothing to see here.",errorText:"Unable to load posts.",instance:u,fetchItems:h,checkForUpdates:r,useItemID:!0,boostsCarousel:l.settings.boostsCarousel,...o,filterContext:"home",showFollowedTags:!0})}const ho=20,fo=4,kn=fo+1;function os({media:t,columnMode:n,...i}){let{hashtag:o,...a}=n?{}:nt();i.hashtag&&(o=i.hashtag);let s=o.trim().split(/[\s+]+/);s.sort(),o=s[0];const[u,l]=qe(),c=t||!!u.get("media"),d=c?"?media=1":"",{masto:h,instance:r,authenticated:p}=z({instance:(i==null?void 0:i.instance)||a.instance}),{masto:f,instance:b,authenticated:g}=z(),v=s.map(M=>`#${M}`).join(" "),m=c?" (Media only)":"",y=r?`${v}${m} on ${r}`:`${v}${m}`;_e(y,"/:instance?/t/:hashtag");const S=D(),I=D(void 0);async function T(M){const C=await h.v1.timelines.tag.$select(o).list({limit:ho,any:s.slice(1),maxId:M?void 0:I.current,onlyMedia:c}).next();let{value:_}=C;return _!=null&&_.length&&(M&&(S.current=_[0].id),_.forEach(F=>{Ae(F,r,{skipThreading:c})}),I.current=_[_.length-1].id),{...C,value:_}}async function x(){try{const M=await h.v1.timelines.tag.$select(o).list({limit:1,any:s.slice(1),since_id:S.current,onlyMedia:c}).next();let{value:C}=M;return C=rt(C,"public"),!!(C!=null&&C.length)}catch{return!1}}const[L,N]=$("default"),[O,U]=$();B(()=>{(async()=>{try{const M=await h.v1.tags.$select(o).fetch();U(M)}catch{}})()},[o]);const P=s.length>=kn;return e(Ye,{title:y,titleComponent:!!r&&e("h1",{class:"header-double-lines",children:[e("b",{children:v}),e("div",{children:r})]}),id:"hashtag",instance:r,emptyText:"No one has posted anything with this tag yet.",errorText:"Unable to load posts with this tag",fetchItems:T,checkForUpdates:x,useItemID:!0,view:c?"media":void 0,refresh:c,filterContext:"public",headerEnd:e(Fe,{portal:!0,setDownOverflow:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[!!O&&s.length===1&&e(A,{children:[e(Be,{subMenu:!0,confirm:O.following,confirmLabel:`Unfollow #${o}?`,disabled:L==="loading"||!p,onClick:()=>{N("loading"),O.following?h.v1.tags.$select(o).unfollow().then(()=>{U({...O,following:!1}),pe(`Unfollowed #${o}`)}).catch(M=>{alert(M)}).finally(()=>{N("default")}):h.v1.tags.$select(o).follow().then(()=>{U({...O,following:!0}),pe(`Followed #${o}`)}).catch(M=>{alert(M)}).finally(()=>{N("default")})},children:O.following?e(A,{children:[e(w,{icon:"check-circle"})," ",e("span",{children:"Following…"})]}):e(A,{children:[e(w,{icon:"plus"})," ",e("span",{children:"Follow"})]})}),e(De,{})]}),e(jn,{className:"plain",children:"Filters"}),e(oe,{type:"checkbox",checked:!!c,onClick:()=>{c?u.delete("media"):u.set("media","1"),l(u)},children:[e(w,{icon:"check-circle"})," ",e("span",{class:"menu-grow",children:"Media only"})]}),e(De,{}),e(Us,{className:"menu-field",disabled:P,children:({ref:M})=>e("form",{onSubmit:C=>{var F,Y;C.preventDefault();const _=(Y=(F=C.target[0].value)==null?void 0:F.trim)==null?void 0:Y.call(F);_&&!s.some(te=>te.toLowerCase()===_.toLowerCase())&&(s.push(_),s.sort(),location.hash=r?`/${r}/t/${s.join("+")}`:`/t/${s.join("+")}${d}`)},children:[e(w,{icon:"hashtag"}),e("input",{ref:M,type:"text",placeholder:P?`Max ${kn} tags`:"Add hashtag",required:!0,autocorrect:"off",autocapitalize:"off",spellcheck:!1,pattern:"[^#][^\\s#]+[^#]",disabled:P})]})}),e(Fs,{takeOverflow:!0,children:s.map((M,C)=>e(oe,{disabled:s.length===1,onClick:_=>{s.splice(C,1),s.sort(),location.hash=r?`/${r}/t/${s.join("+")}${d}`:`/t/${s.join("+")}${d}`},children:[e(w,{icon:"x",alt:"Remove hashtag",class:"danger-icon"}),e("span",{children:[e("span",{class:"more-insignificant",children:"#"}),M]})]},M))}),e(De,{}),e(oe,{disabled:!g,onClick:()=>{if(k.shortcuts.length>=Ze){alert(`Max ${Ze} shortcuts reached. Unable to add shortcut.`);return}const M={type:"hashtag",hashtag:s.join(" "),instance:r,media:c?"on":void 0};k.shortcuts.some(_=>_.type===M.type&&_.hashtag.split(/[\s+]+/).sort().join(" ")===M.hashtag.split(/[\s+]+/).sort().join(" ")&&(_.instance?_.instance===M.instance:!0)&&(_.media?!!_.media==!!M.media:!0))?alert("This shortcut already exists"):(k.shortcuts.push(M),pe("Hashtag shortcut added"))},children:[e(w,{icon:"shortcut"})," ",e("span",{children:"Add to Shorcuts"})]}),e(oe,{onClick:()=>{let M=prompt('Enter a new instance e.g. "mastodon.social"');if(!/\./.test(M)){M&&alert("Invalid instance");return}M&&(M=M.toLowerCase().trim(),location.hash=`/${M}/t/${s.join("+")}${d}`)},children:[e(w,{icon:"bus"})," ",e("span",{children:"Go to another instance…"})]}),b!==r&&e(oe,{onClick:()=>{location.hash=`/${b}/t/${s.join("+")}${d}`},children:[e(w,{icon:"bus"})," ",e("small",{class:"menu-double-lines",children:["Go to my instance (",e("b",{children:b}),")"]})]})]})},r+v)}const po=20;function as(t){var g;const n=Se(k),{masto:i,instance:o}=z(),a=(t==null?void 0:t.id)||((g=nt())==null?void 0:g.id),s=D(),u=D();async function l(v){(v||!u.current)&&(u.current=i.v1.timelines.list.$select(a).list({limit:po}));const m=await u.current.next();let{value:y}=m;return y!=null&&y.length&&(v&&(s.current=y[0].id),y.forEach(S=>{Ae(S,o)})),{...m,value:y}}async function c(){try{const v=await i.v1.timelines.list.$select(a).list({limit:1,since_id:s.current});let{value:m}=v;return m=rt(m,"home"),!!(m!=null&&m.length)}catch{return!1}}const[d,h]=$({title:"List"});_e(d.title,"/l/:id"),B(()=>{(async()=>{try{const v=await i.v1.lists.$select(a).fetch();h(v)}catch{}})()},[a]);const[r,p]=$(!1),[f,b]=$(!1);return e(A,{children:[e(Ye,{title:d.title,id:"list",emptyText:"Nothing yet.",errorText:"Unable to load posts.",instance:o,fetchItems:l,checkForUpdates:c,useItemID:!0,boostsCarousel:n.settings.boostsCarousel,filterContext:"home",headerStart:e(ee,{to:"/l",class:"button plain",children:e(w,{icon:"list",size:"l"})}),headerEnd:e(Fe,{portal:!0,setDownOverflow:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{onClick:()=>p({list:d}),children:[e(w,{icon:"pencil",size:"l"}),e("span",{children:"Edit"})]}),e(oe,{onClick:()=>b(!0),children:[e(w,{icon:"group",size:"l"}),e("span",{children:"Manage members"})]})]})},a),r&&e(Ce,{class:"light",onClick:v=>{v.target===v.currentTarget&&p(!1)},children:e(Yt,{list:r==null?void 0:r.list,onClose:v=>{v.state==="success"&&v.list?h(v.list):v.state==="deleted"&&(location.hash="/l"),p(!1)}})}),f&&e(Ce,{class:"light",onClick:v=>{v.target===v.currentTarget&&b(!1)},children:e(go,{listID:a,onClose:()=>b(!1)})})]})}const mo=40;function go({listID:t,onClose:n}){const{masto:i,instance:o}=z(),[a,s]=$([]),[u,l]=$("default"),[c,d]=$(!1),h=D();async function r(p){d(!1),l("loading"),(async()=>{try{(p||!h.current)&&(h.current=i.v1.lists.$select(t).accounts.list({limit:mo}));const f=await h.current.next();let{done:b,value:g}=f;g!=null&&g.length?(s(p?g:a.concat(g)),d(!b)):d(!1),l("default")}catch{l("error")}})()}return B(()=>{r(!0)},[]),e("div",{class:"sheet",id:"list-manage-members-container",children:[!!n&&e("button",{type:"button",class:"sheet-close",onClick:n,children:e(w,{icon:"x"})}),e("header",{children:e("h2",{children:"Manage members"})}),e("main",{children:e("ul",{children:[a.map(p=>e("li",{children:[e(He,{account:p,instance:o}),e(bo,{account:p,listID:t})]},p.id)),c&&u==="default"&&e(je,{as:"li",onChange:p=>p&&r(),children:e("button",{type:"button",class:"light block",onClick:r,children:"Show more…"})})]})})]})}function bo({account:t,listID:n}){const{masto:i}=z(),[o,a]=$("default"),[s,u]=$(!1);return e(Be,{confirm:!s,confirmLabel:e("span",{children:["Remove @",t.username," from list?"]}),align:"end",menuItemClassName:"danger",onClick:()=>{s?(a("loading"),(async()=>{try{await i.v1.lists.$select(n).accounts.create({accountIds:[t.id]}),a("default"),u(!1)}catch{a("error")}})()):(a("loading"),(async()=>{try{await i.v1.lists.$select(n).accounts.remove({accountIds:[t.id]}),a("default"),u(!0)}catch{a("error")}})())},children:e("button",{type:"button",class:`light ${s?"":"danger"}`,disabled:o==="loading",children:s?"Add":"Remove…"})})}const In=20,yo=new URLSearchParams;function cs({columnMode:t,...n}){const{masto:i,instance:o}=z(),[a]=t?[yo]:qe(),[s,u]=$(null),l=(n==null?void 0:n.type)||a.get("type")||s;_e(`Mentions${l==="private"?" (Private)":""}`,"/mentions");const c=D(),d=D();async function h(m){(m||!c.current)&&(c.current=i.v1.notifications.list({limit:In,types:["mention"]}));const y=await c.current.next();let{value:S}=y;return S!=null&&S.length&&(m&&(d.current=S[0].id),S.forEach(({status:I})=>{Ae(I,o)})),{...y,value:S==null?void 0:S.map(I=>I.status)}}const r=D(),p=D();async function f(m){(m||!r.current)&&(r.current=i.v1.conversations.list({limit:In}));const y=await r.current.next();let{value:S}=y;return S=S==null?void 0:S.filter(I=>I.lastStatus),S!=null&&S.length&&(m&&(p.current=S[0].lastStatus.id),S.forEach(({lastStatus:I})=>{Ae(I,o)})),{...y,value:S==null?void 0:S.map(I=>I.lastStatus)}}function b(...m){return l==="private"?f(...m):h(...m)}async function g(){if(l==="private")try{const m=await i.v1.conversations.list({limit:1,since_id:p.current}).next();let{value:y}=m;return y!=null&&y.length?(p.current=y[0].lastStatus.id,!0):!1}catch{return!1}else try{const m=await i.v1.notifications.list({limit:1,types:["mention"],since_id:d.current}).next();let{value:y}=m;return y!=null&&y.length?(d.current=y[0].id,!0):!1}catch{return!1}}const v=he(()=>e("div",{class:"filter-bar centered",children:[e(ee,{to:"/mentions",class:l?"":"is-active",onClick:m=>{t&&(m.preventDefault(),u(null))},children:"All"}),e(ee,{to:"/mentions?type=private",class:l==="private"?"is-active":"",onClick:m=>{t&&(m.preventDefault(),u("private"))},children:"Private"})]}),[l]);return e(Ye,{title:"Mentions",id:"mentions",emptyText:"No one mentioned you :(",errorText:"Unable to load mentions.",instance:o,fetchItems:b,checkForUpdates:g,useItemID:!0,timelineStart:v,refresh:l})}const wo={mention:["account","status"],status:["account","status"],reblog:["account","status"],follow:["account"],follow_request:["account"],favourite:["account","status"],poll:["status"],update:["status"]};function vo(t){return t.filter(n=>{const{type:i,id:o,createdAt:a}=n;if(!i)return!1;const s=wo[i];return s!=null&&s.length?s.every(u=>!!n[u]):!0})}function rs(t){t=vo(t);const n={},i=[];for(let s=0,u=0;sy.id===h.id);m?(m._types.push(r),m._types.sort().reverse(),v.id+=`-${c}`):(h._types=[r],v._accounts.push(h),v.id+=`-${c}`)}else{h._types=[r];let m=n[g]={...l,type:b,_accounts:[h]};i[u++]=m}}const o={},a=[];for(let s=0,u=0;s{Ae(H.status,i,{skipThreading:!0})});const le=rs(ne);E?(k.notificationsLast=ne[0],k.notifications=le,n.v1.markers.create({notifications:{lastReadId:ne[0].id}}).catch(()=>{})):k.notifications.push(...le)}return k.notificationsShowNew=!1,k.notificationsLastFetchTime=Date.now(),j}async function O(){try{return await n.v1.followRequests.list({limit:80})}catch{return[]}}const U=()=>{s("loading"),(async()=>{try{const E=await O();I(E),s("default")}catch{s("error")}})()};async function P(){try{return await n.v1.announcements.list()}catch{return[]}}const M=E=>{_(!1),s("loading"),(async()=>{try{const j=N(E);E&&(P().then(le=>{le.sort((H,ae)=>{const Q=new Date(H.updatedAt||H.createdAt);return new Date(ae.updatedAt||ae.createdAt)-Q}),x(le)}).catch(()=>{}),O().then(le=>{I(le)}).catch(()=>{}));const{done:ne}=await j;h(!ne),s("default")}catch{s("error")}})()};B(()=>{M(!0)},[]),B(()=>{v&&M(!0)},[v]);const[C,_]=$(!1),F=Ve(({disableIdleCheck:E=!1}={})=>{var j;a!=="loading"&&o.settings.autoRefresh&&((j=f.current)==null?void 0:j.scrollTop)<16&&(E||window.__IDLE__)&&!To()&&M(!0)},[o.notificationsShowNew,o.settings.autoRefresh,a]),Y=D();ct(E=>{let j;if(E){const ne=Date.now()-Y.current;!Y.current||ne>1e3*3?F({disableIdleCheck:!0}):Y.current=Date.now(),j=Os(k,"notificationsShowNew",le=>{le&&F(),_(le)})}return()=>{j==null||j()}});const te=new Date,W=new Date(te-24*60*60*1e3);let ke=new Date;const re=!o.notifications.some(E=>new Date(E.createdAt).toDateString()===te.toDateString()),X=D();return B(()=>{l&&(k.routeNotification={id:l,accessToken:atob(c)})},[l,c]),e("div",{id:"notifications-page",class:"deck-container",ref:f,tabIndex:"-1",children:e("div",{class:`timeline-deck deck ${r?"only-mentions":""}`,children:[e("header",{hidden:y,onClick:E=>{var j;E.target.closest("a, button")||(j=f.current)==null||j.scrollTo({top:0,behavior:"smooth"})},class:a==="loading"?"loading":"",children:[e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),e(ee,{to:"/",class:"button plain",children:e(w,{icon:"home",size:"l",alt:"Home"})})]}),e("h1",{children:"Notifications"}),e("div",{class:"header-side"})]}),C&&a!=="loading"&&e("button",{class:"updates-button shiny-pill",type:"button",onClick:()=>{var E;M(!0),(E=f.current)==null||E.scrollTo({top:0,behavior:"smooth"})},children:[e(w,{icon:"arrow-up"})," New notifications"]})]}),T.length>0&&e("div",{class:"shazam-container",children:e("div",{class:"shazam-container-inner",children:e("details",{class:"announcements",children:[e("summary",{children:[e("span",{children:[e(w,{icon:"announce",class:"announcement-icon",size:"l"})," ",e("b",{children:["Announcement",T.length>1?"s":""]})," ",e("small",{class:"insignificant",children:i})]}),T.length>1&&e("span",{class:"announcements-nav-buttons",children:T.map((E,j)=>e("button",{type:"button",class:"plain2 small",onClick:()=>{var ne;(ne=X.current)==null||ne.children[j].scrollIntoView({behavior:"smooth",block:"nearest"})},children:j+1}))})]}),e("ul",{class:`announcements-list-${T.length>1?"multiple":"single"}`,ref:X,children:T.map(E=>e("li",{children:e(Co,{announcement:E})}))})]})})}),S.length>0&&e("div",{class:"follow-requests",children:[e("h2",{class:"timeline-header",children:"Follow requests"}),S.length>5?e("details",{children:[e("summary",{children:[S.length," follow requests"]}),e("ul",{children:S.map(E=>e("li",{children:[e(He,{account:E}),e(Ft,{accountID:E.id,onChange:()=>{}})]},E.id))})]}):e("ul",{children:S.map(E=>e("li",{children:[e(He,{account:E}),e(Ft,{accountID:E.id,onChange:()=>{}})]},E.id))})]}),e("div",{id:"mentions-option",children:e("label",{children:[e("input",{type:"checkbox",checked:r,onChange:E=>{p(E.target.checked)}})," ","Only mentions"]})}),e("h2",{class:"timeline-header",children:"Today"}),re&&!!o.notifications.length&&e("p",{class:"ui-state insignificant",children:a==="default"?"You're all caught up.":e(A,{children:"…"})}),o.notifications.length?e(A,{children:o.notifications.filter(E=>E.type!=="follow_request").map(E=>{if(r&&E.type!=="mention")return null;const j=new Date(E.createdAt),ne=j.toDateString()!==ke.toDateString();ne&&(ke=j);const le=j.toDateString()===W.toDateString()?"Yesterday":Ke(ke,{hideTime:!0});return e(A,{children:[ne&&e("h2",{class:"timeline-header",children:le}),e(Kt,{instance:i,notification:E},E.id)]},E.id)})}):e(A,{children:[a==="loading"&&e(A,{children:e("ul",{class:"timeline flat",children:Array.from({length:5}).map((E,j)=>e("li",{class:"notification skeleton",children:[e("div",{class:"notification-type",children:e(w,{icon:"notification",size:"xl"})}),e("div",{class:"notification-content",children:e("p",{children:"███████████ ████"})})]}))})}),a==="error"&&e("p",{class:"ui-state",children:["Unable to load notifications",e("br",{}),e("br",{}),e("button",{type:"button",onClick:()=>M(!0),children:"Try again"})]})]}),d&&e(je,{onChange:E=>{E&&M()},children:e("button",{type:"button",class:"plain block",disabled:a==="loading",onClick:()=>M(),style:{marginBlockEnd:"6em"},children:a==="loading"?e(Ie,{abrupt:!0}):e(A,{children:"Show more…"})})})]})})}function To(){return!!document.querySelector(".deck-backdrop, #modal-container > *")}function Co({announcement:t}){const{instance:n}=z(),{contact:i}=Cs(),o=i==null?void 0:i.account,{id:a,content:s,startsAt:u,endsAt:l,published:c,allDay:d,publishedAt:h,updatedAt:r,read:p,mentions:f,statuses:b,tags:g,emojis:v,reactions:m}=t,y=new Date(h),S=Ke(y),I=new Date(r),T=Ke(I);return e("div",{class:"announcement-block",children:[e(He,{account:o}),e("div",{class:"announcement-content",onClick:Pn({mentions:f,instance:n}),dangerouslySetInnerHTML:{__html:Pt(s,{emojis:v})}}),e("p",{class:"insignificant",children:[e("time",{datetime:y.toISOString(),children:Ke(y)}),r&&T!==S&&e(A,{children:[" ","•"," ",e("span",{class:"ib",children:["Updated"," ",e("time",{datetime:I.toISOString(),children:Ke(I)})]})]})]}),e("div",{class:"announcement-reactions",hidden:!0,children:m.map(x=>{const{name:L,count:N,me:O,staticUrl:U,url:P}=x;return e("button",{type:"button",class:`plain4 small ${O?"reacted":""}`,children:[P||U?e("img",{src:P||U,alt:L,width:"16",height:"16"}):e("span",{children:L})," ",e("span",{class:"count",children:Ue(N)})]})})})]})}const ls=ze(Io),$o=20;function Ot({local:t,columnMode:n,...i}){const o=Se(k),a=!!t,s=n?{}:nt(),{masto:u,instance:l}=z({instance:(i==null?void 0:i.instance)||s.instance}),{masto:c,instance:d}=z(),h=`${a?"Local":"Federated"} timeline (${l})`;_e(h,a?"/:instance?/p/l":"/:instance?/p");const r=D(),p=D();async function f(g){(g||!p.current)&&(p.current=u.v1.timelines.public.list({limit:$o,local:a}));const v=await p.current.next();let{value:m}=v;return m!=null&&m.length&&(g&&(r.current=m[0].id),m.forEach(y=>{Ae(y,l)})),{...v,value:m}}async function b(){try{const g=await u.v1.timelines.public.list({limit:1,local:a,since_id:r.current}).next();let{value:v}=g;return v=rt(v,"public"),!!(v!=null&&v.length)}catch{return!1}}return e(Ye,{title:h,titleComponent:e("h1",{class:"header-double-lines",children:[e("b",{children:a?"Local timeline":"Federated timeline"}),e("div",{children:l})]}),id:"public",instance:l,emptyText:"No one has posted anything yet.",errorText:"Unable to load posts",fetchItems:f,checkForUpdates:b,useItemID:!0,headerStart:e(A,{}),boostsCarousel:o.settings.boostsCarousel,filterContext:"public",headerEnd:e(Fe,{portal:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{href:a?`/#/${l}/p`:`/#/${l}/p/l`,children:a?e(A,{children:[e(w,{icon:"transfer"})," ",e("span",{children:"Switch to Federated"})]}):e(A,{children:[e(w,{icon:"transfer"})," ",e("span",{children:"Switch to Local"})]})}),e(De,{}),e(oe,{onClick:()=>{let g=prompt('Enter a new instance e.g. "mastodon.social"');if(!/\./.test(g)){g&&alert("Invalid instance");return}g&&(g=g.toLowerCase().trim(),location.hash=a?`/${g}/p/l`:`/${g}/p`)},children:[e(w,{icon:"bus"})," ",e("span",{children:"Go to another instance…"})]}),d!==l&&e(oe,{onClick:()=>{location.hash=a?`/${d}/p/l`:`/${d}/p`},children:[e(w,{icon:"bus"})," ",e("small",{class:"menu-double-lines",children:["Go to my instance (",e("b",{children:d}),")"]})]})]})},l+a)}const yt=5,Et=40,xo=new URLSearchParams;function ds({columnMode:t,...n}){const i=t?{}:nt(),{masto:o,instance:a,authenticated:s}=z({instance:i.instance}),[u,l]=$("default"),[c]=t?[xo]:qe(),d=D(),h=(n==null?void 0:n.query)||c.get("q"),r=t?"statuses":(n==null?void 0:n.type)||c.get("type");_e(h?`Search: ${h}${r?` (${{statuses:"Posts",accounts:"Accounts",hashtags:"Hashtags"}[r]})`:""}`:"Search","/search");const[p,f]=$(!1),b=D(0);B(()=>{b.current=0},[h,r]);const g=D();Je(()=>{var C,_;(_=(C=g.current)==null?void 0:C.scrollTo)==null||_.call(C,0,0)},[h,r]);const[v,m]=$([]),[y,S]=$([]),[I,T]=$([]);B(()=>{m([]),S([]),T([])},[h]);const x={statuses:m,accounts:S,hashtags:T},[L,N]=$({}),O=async C=>{if(!(C!=null&&C.length))return;const _=await Wt(C,L);_&&N({...L,..._})};function U(C){C&&(b.current=0),!(!C&&!s)&&(l("loading"),C&&!r&&(m(v.slice(0,yt)),S(y.slice(0,yt)),T(I.slice(0,yt))),(async()=>{var F,Y;const _={q:h,resolve:s,limit:yt};r&&(_.limit=Et,_.type=r,s&&(_.offset=b.current));try{const te=await o.v2.search.fetch(_);if(r)if(C){x[r](te[r]);const W=(F=te[r])==null?void 0:F.length;b.current=Et,f(!!W)}else{x[r](ke=>[...ke,...te[r]]);const W=(Y=te[r])==null?void 0:Y.length;b.current=b.current+Et,f(!!W)}else m(te.statuses||[]),S(te.accounts||[]),T(te.hashtags||[]),b.current=0,f(!1);O(te.accounts),l("default")}catch{l("error")}})())}const P=D();ct(C=>{var F;const _=((F=g.current)==null?void 0:F.scrollTop)===0;if(C&&_){const Y=Date.now()-P.current;!P.current||Y>1e3*3?U(!0):P.current=Date.now()}}),B(()=>{var C,_,F,Y;(_=(C=d.current)==null?void 0:C.setValue)==null||_.call(C,h||""),h?U(!0):(Y=(F=d.current)==null?void 0:F.focus)==null||Y.call(F)},[h,r,a]),Re("/",C=>{var _,F;(F=(_=d.current)==null?void 0:_.focus)==null||F.call(_)},{preventDefault:!0});const[M]=Ht();return e("div",{id:"search-page",class:"deck-container",ref:g,children:e("div",{class:"timeline-deck deck",children:[e("header",{class:u==="loading"?"loading":"",children:e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:e(mt,{})}),e(ns,{ref:d}),e("div",{class:"header-side",children:e("button",{type:"button",class:"plain",onClick:()=>{U(!0)},disabled:u==="loading",children:e(w,{icon:"search",size:"l"})})})]})}),e("main",{children:[!!h&&!t&&e("div",{ref:M,class:`filter-bar ${u==="loading"?"loading":""}`,children:[!!r&&e(ee,{to:`/search${h?`?q=${encodeURIComponent(h)}`:""}`,children:"‹ All"}),[{label:"Accounts",type:"accounts",to:`/search?q=${encodeURIComponent(h)}&type=accounts`},{label:"Hashtags",type:"hashtags",to:`/search?q=${encodeURIComponent(h)}&type=hashtags`},{label:"Posts",type:"statuses",to:`/search?q=${encodeURIComponent(h)}&type=statuses`}].sort((C,_)=>C.type===r?-1:_.type===r?1:0).map(C=>e(ee,{to:C.to,children:C.label},C.type))]}),h?e(A,{children:[(!r||r==="accounts")&&e(A,{children:[r!=="accounts"&&e("h2",{class:"timeline-header",children:"Accounts"}),y.length>0?e(A,{children:[e("ul",{class:"timeline flat accounts-list",children:y.map(C=>e("li",{children:e(He,{account:C,instance:a,showStats:!0,relationship:L[C.id]})},C.id))}),r!=="accounts"&&e("div",{class:"ui-state",children:e(ee,{class:"plain button",to:`/search?q=${h}&type=accounts`,children:["See more accounts ",e(w,{icon:"arrow-right"})]})})]}):!r&&(u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"No accounts found."}))]}),(!r||r==="hashtags")&&e(A,{children:[r!=="hashtags"&&e("h2",{class:"timeline-header",children:"Hashtags"}),I.length>0?e(A,{children:[e("ul",{class:"link-list hashtag-list",children:I.map(C=>{var te;const{name:_,history:F}=C,Y=(te=F==null?void 0:F.reduce)==null?void 0:te.call(F,(W,ke)=>W+ +ke.uses,0);return e("li",{children:e(ee,{to:a?`/${a}/t/${_}`:`/t/${_}`,children:[e(w,{icon:"hashtag"}),e("span",{children:_}),!!Y&&e("span",{class:"count",children:Ue(Y)})]})},`${_}-${Y}`)})}),r!=="hashtags"&&e("div",{class:"ui-state",children:e(ee,{class:"plain button",to:`/search?q=${h}&type=hashtags`,children:["See more hashtags ",e(w,{icon:"arrow-right"})]})})]}):!r&&(u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"No hashtags found."}))]}),(!r||r==="statuses")&&e(A,{children:[r!=="statuses"&&e("h2",{class:"timeline-header",children:"Posts"}),v.length>0?e(A,{children:[e("ul",{class:"timeline",children:v.map(C=>e("li",{children:e(ee,{class:"status-link",to:a?`/${a}/s/${C.id}`:`/s/${C.id}`,children:e(Me,{status:C})})},C.id))}),r!=="statuses"&&e("div",{class:"ui-state",children:e(ee,{class:"plain button",to:`/search?q=${h}&type=statuses`,children:["See more posts ",e(w,{icon:"arrow-right"})]})})]}):!r&&(u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"No posts found."}))]}),!!r&&(u==="default"?p?e(je,{onChange:C=>{C&&U()},children:e("button",{type:"button",class:"plain block",onClick:()=>U(),style:{marginBlockEnd:"6em"},children:"Show more…"})}):e("p",{class:"ui-state insignificant",children:"The end."}):u==="loading"&&e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}))]}):u==="loading"?e("p",{class:"ui-state",children:e(Ie,{abrupt:!0})}):e("p",{class:"ui-state",children:"Enter your search term or paste a URL above to get started."})]})]})})}const Ao=20,Lo=tt(t=>t.v1.trends.links.list().next(),{maxAge:10*60*1e3});function us({columnMode:t,...n}){const i=Se(k),o=t?{}:nt(),{masto:a,instance:s}=z({instance:(n==null?void 0:n.instance)||o.instance}),{masto:u,instance:l}=z(),c=`Trending (${s})`;_e(c,"/:instance?/trending");const d=D(),[h,r]=$([]),[p,f]=$([]),b=D();async function g(y){var T;if(y||!b.current){b.current=a.v1.trends.statuses.list({limit:Ao});try{const x=a.v1.trends.tags.list(),{value:L}=await x.next();L!=null&&L.length&&r(L)}catch{}try{const{value:x}=await Lo(a),L=(T=x==null?void 0:x.filter)==null?void 0:T.call(x,N=>N.type==="link");L!=null&&L.length&&f(L)}catch{}}const S=await b.current.next();let{value:I}=S;return I!=null&&I.length&&(y&&(d.current=I[0].id),I.forEach(x=>{Ae(x,s)})),{...S,value:I}}async function v(){try{const y=await a.v1.trends.statuses.list({limit:1}).next();let{value:S}=y;return S=rt(S,"public"),S!=null&&S.length&&S[0].id!==d.current?(d.current=S[0].id,!0):!1}catch{return!1}}const m=he(()=>e(A,{children:[!!h.length&&e("div",{class:"filter-bar expandable",children:[e(w,{icon:"chart",class:"insignificant",size:"l"}),h.map((y,S)=>{const{name:I,history:T}=y,x=T.reduce((L,N)=>L+ +N.uses,0);return e(ee,{to:`/${s}/t/${I}`,children:[e("span",{children:[e("span",{class:"more-insignificant",children:"#"}),I]}),e("span",{class:"filter-count",children:Ue(x)})]},I)})]}),!!p.length&&e("div",{class:"links-bar",children:[e("header",{children:e("h3",{children:"Trending News"})}),p.map(y=>{const{authorName:S,authorUrl:I,blurhash:T,description:x,height:L,image:N,imageDescription:O,language:U,providerName:P,providerUrl:M,publishedAt:C,title:_,url:F,width:Y}=y,te=new URL(F).hostname.replace(/^www\./,"").replace(/\/$/,"");let W;if(T){const ke=qn(T),re=Xn(ke);W=Qn([.6,re[1],re[2]])}return e("a",{href:F,target:"_blank",rel:"noopener noreferrer",style:W?{"--accent-color":`rgb(${W.join(",")})`,"--accent-alpha-color":`rgba(${W.join(",")}, 0.4)`}:{},children:e("article",{children:[e("figure",{children:e("img",{src:N,alt:O,width:Y,height:L,loading:"lazy"})}),e("div",{class:"article-body",children:[e("header",{children:[e("div",{class:"article-meta",children:[e("span",{class:"domain",children:te})," ",!!C&&e(A,{children:"· "}),!!C&&e(A,{children:e($t,{datetime:C,format:"micro"})})]}),!!_&&e("h1",{class:"title",lang:U,dir:"auto",children:_})]}),!!x&&e("p",{class:"description",lang:U,dir:"auto",children:x})]})]})},F)})]})]}),[h,p]);return e(Ye,{title:c,titleComponent:e("h1",{class:"header-double-lines",children:[e("b",{children:"Trending"}),e("div",{children:s})]}),id:"trending",instance:s,emptyText:"No trending posts.",errorText:"Unable to load posts",fetchItems:g,checkForUpdates:v,checkForUpdatesInterval:5*60*1e3,useItemID:!0,headerStart:e(A,{}),boostsCarousel:i.settings.boostsCarousel,filterContext:"public",timelineStart:m,headerEnd:e(Fe,{portal:!0,overflow:"auto",viewScroll:"close",position:"anchor",menuButton:e("button",{type:"button",class:"plain",children:e(w,{icon:"more",size:"l"})}),children:[e(oe,{onClick:()=>{let y=prompt('Enter a new instance e.g. "mastodon.social"');if(!/\./.test(y)){y&&alert("Invalid instance");return}y&&(y=y.toLowerCase().trim(),location.hash=`/${y}/trending`)},children:[e(w,{icon:"bus"})," ",e("span",{children:"Go to another instance…"})]}),l!==s&&e(oe,{onClick:()=>{location.hash=`/${l}/trending`},children:[e(w,{icon:"bus"})," ",e("small",{class:"menu-double-lines",children:["Go to my instance (",e("b",{children:l}),")"]})]})]})},s)}function Mo(){_e("Home","/");const t=Se(k),{shortcuts:n}=t,i=n.map(o=>{if(!o)return null;const{type:a,...s}=o,u={following:Jt,notifications:ls,list:as,public:Ot,bookmarks:ss,favourites:is,hashtag:os,mentions:cs,trending:us,search:ds}[a];return!u||a==="search"&&!s.query?null:e(u,{...s,columnMode:!0},a+JSON.stringify(s))});return Re(["1","2","3","4","5","6","7","8","9"],(o,a)=>{try{const s=parseInt(a.keys[0],10)-1;document.querySelectorAll("#columns > *")[s].focus()}catch{}}),e("div",{id:"columns",onContextMenu:o=>{o.target.closest(".deck > header")&&!o.target.closest("a")&&!o.target.closest("button")&&(o.preventDefault(),k.showShortcutsSettings=!0)},children:i})}function Ro(){var n;const t=Se(k);return B(()=>{(async()=>{const i=await ht.drafts.keys();if(i.length){const o=Un();i.filter(s=>s.startsWith(o)).length&&(k.showDrafts=!0)}})()},[]),e(A,{children:(t.settings.shortcutsViewMode==="multi-column"||!t.settings.shortcutsViewMode&&t.settings.shortcutsColumnsMode)&&((n=t.shortcuts)!=null&&n.length)?e(Mo,{}):e(Jt,{title:"Home",path:"/",id:"home",headerStart:!1,headerEnd:e(_o,{})})})}function _o(){const t=Se(k),n=D(),[i,o]=$(void 0);return e(A,{children:[e(ee,{ref:n,to:"/notifications",class:`button plain notifications-button ${t.notificationsShowNew?"has-badge":""} ${i||""}`,onClick:a=>{a.stopPropagation(),window.matchMedia("(min-width: calc(40em))").matches&&(a.preventDefault(),o(s=>s?void 0:"open"))},children:e(w,{icon:"notification",size:"l",alt:"Notifications"})}),e(No,{state:i,anchorRef:n,onClose:()=>o(void 0)})]})}const Eo=30,Po=5;function No({anchorRef:t,state:n,onClose:i}){const{masto:o,instance:a}=z(),s=Se(k),[u,l]=$("default"),c=o.v1.notifications.list({limit:Eo});async function d(){const b=await c.next(),g=b.value;if(g!=null&&g.length){g.forEach(m=>{Ae(m.status,a,{skipThreading:!0})});const v=rs(g);k.notificationsLast=g[0],k.notifications=v,o.v1.markers.create({notifications:{lastReadId:g[0].id}}).catch(()=>{})}return k.notificationsShowNew=!1,k.notificationsLastFetchTime=Date.now(),b}const[h,r]=$(!1);function p(){return o.v1.followRequests.list({limit:1})}function f(){l("loading"),(async()=>{try{await d();const b=await p();r(!!(b!=null&&b.length)),l("default")}catch{l("error")}})()}return B(()=>{n==="open"&&f()},[n]),e(Gn,{menuClassName:"notifications-menu",state:n,anchorRef:t,onClose:i,portal:{target:document.body},overflow:"auto",viewScroll:"close",position:"anchor",align:"center",boundingBoxPadding:"8 8 8 8",children:[e("header",{children:e("h2",{children:"Notifications"})}),e("main",{children:s.notifications.length?e(A,{children:s.notifications.slice(0,Po).map(b=>e(Kt,{instance:a,notification:b,disableContextMenu:!0},b.id))}):u==="loading"?e("div",{class:"ui-state",children:e(Ie,{abrupt:!0})}):u==="error"&&e("div",{class:"ui-state",children:[e("p",{children:"Unable to fetch notifications."}),e("p",{children:e("button",{type:"button",onClick:f,children:"Try again"})})]})}),e("footer",{children:[e(ee,{to:"/mentions",class:"button plain",children:[e(w,{icon:"at"})," ",e("span",{children:"Mentions"})]}),e(ee,{to:"/notifications",class:"button plain2",children:[h?e(A,{children:[e("span",{class:"tag collapsed",children:"New"})," ",e("span",{children:"Follow Requests"})]}):e("b",{children:"See all"})," ",e(w,{icon:"arrow-right"})]})]})]})}const Do=ze(Ro),Uo=[/^\/@[^@\/]+\/(?:statuses|posts)\/([^\/]+)/i,/\/notes\/([^\/]+)/i,/^\/(?:notice|objects)\/([a-z0-9-]+)/i,/\/@[^@\/]+@?[^\/]+?\/([^\/]+)/i];function hs(t){const{hostname:n,pathname:i}=new URL(t);for(const o of Uo){const[,a]=i.match(o)||[];if(a)return{instance:n,id:a}}return{}}function Fo(t){const{instance:n,id:i}=hs(t);return n&&i?`/${n}/s/${i}`:null}function Oo(){const n=lt().pathname.replace(/^\//,""),i=hs(n),o=i!=null&&i.instance?`/${i.instance}/s/${i.id}`:null,[a,s]=$("loading");return Je(()=>{s("loading"),(async()=>{try{const{instance:u,id:l}=i,{masto:c}=z({instance:u});if(await c.v1.statuses.$select(l).fetch()){window.location.hash=o+"?view=full";return}}catch{}{const{masto:u,instance:l}=z(),c=await u.v2.search.fetch({q:n,type:"statuses",limit:1,resolve:!0});if(c.statuses.length){const d=c.statuses[0];window.location.hash=`/${l}/s/${d.id}?view=full`}else window.location.hash=o+"?view=full"}})()},[o]),e("div",{class:"ui-state",tabIndex:"-1",children:[a==="loading"?e(A,{children:[e(Ie,{abrupt:!0}),e("h2",{children:"Resolving…"}),e("p",{children:e("a",{href:n,target:"_blank",rel:"noopener noreferrer",children:n})})]}):e(A,{children:[e("h2",{children:"Unable to resolve URL"}),e("p",{children:e("a",{href:n,target:"_blank",rel:"noopener noreferrer",children:n})})]}),e("hr",{}),e("p",{children:e(ee,{to:"/",children:"Go home"})})]})}function Bo(){const{masto:t}=z();_e("Lists","/l");const[n,i]=$("default"),[o,a]=xt(d=>d+1,0),[s,u]=$([]);B(()=>{i("loading"),(async()=>{try{const d=await t.v1.lists.list();d.sort((h,r)=>h.title.localeCompare(r.title)),u(d),i("default")}catch{i("error")}})()},[o]);const[l,c]=$(!1);return e("div",{id:"lists-page",class:"deck-container",tabIndex:"-1",children:[e("div",{class:"timeline-deck deck",children:[e("header",{children:e("div",{class:"header-grid",children:[e("div",{class:"header-side",children:[e(mt,{}),e(ee,{to:"/",class:"button plain",children:e(w,{icon:"home",size:"l"})})]}),e("h1",{children:"Lists"}),e("div",{class:"header-side",children:e("button",{type:"button",class:"plain",onClick:()=>c(!0),children:e(w,{icon:"plus",size:"l",alt:"New list"})})})]})}),e("main",{children:s.length>0?e("ul",{class:"link-list",children:s.map(d=>e("li",{children:e(ee,{to:`/l/${d.id}`,children:e("span",{children:[e(w,{icon:"list"})," ",e("span",{children:d.title})]})})}))}):n==="loading"?e("p",{class:"ui-state",children:e(Ie,{})}):n==="error"?e("p",{class:"ui-state",children:"Unable to load lists."}):e("p",{class:"ui-state",children:"No lists yet."})})]}),l&&e(Ce,{class:"light",onClick:d=>{d.target===d.currentTarget&&c(!1)},children:e(Yt,{list:l==null?void 0:l.list,onClose:d=>{d.state==="success"&&a(),c(!1)}})})]})}const zo=""+new URL("instances-cddSOnAA.json",import.meta.url).href;var qo={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",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",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_CLIENT_NAME:Ho,PHANPY_WEBSITE:Vo}=qo,Xt="read write follow push";async function Go({instanceURL:t}){const n=new URLSearchParams({client_name:Ho,redirect_uris:location.origin+location.pathname,scopes:Xt,website:Vo});return await(await fetch(`https://${t}/api/v1/apps`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString()})).json()}async function jo({instanceURL:t,client_id:n}){const i=new URLSearchParams({client_id:n,scope:Xt,redirect_uri:location.origin+location.pathname,response_type:"code"});return`https://${t}/oauth/authorize?${i.toString()}`}async function Yo({instanceURL:t,client_id:n,client_secret:i,code:o}){const a=new URLSearchParams({client_id:n,client_secret:i,redirect_uri:location.origin+location.pathname,grant_type:"authorization_code",code:o,scope:Xt});return await(await fetch(`https://${t}/oauth/token`,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:a.toString()})).json()}var Wo={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",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",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_DEFAULT_INSTANCE:Ko}=Wo;function Zo(){_e("Log in");const t=D(),n=se.local.get("instanceURL"),[i,o]=$("default"),[a]=qe(),s=a.get("instance"),u=a.get("submit"),[l,c]=$(s||(n==null?void 0:n.toLowerCase())||""),[d,h]=$([]);B(()=>{(async()=>{try{const y=await(await fetch(zo)).json();h(y)}catch{}})()},[]);const r=m=>{m&&(se.local.set("instanceURL",m),(async()=>{o("loading");try{const{client_id:y,client_secret:S,vapid_key:I}=await Go({instanceURL:m});y&&S?(se.session.set("clientID",y),se.session.set("clientSecret",S),se.session.set("vapidKey",I),location.href=await jo({instanceURL:m,client_id:y})):alert("Failed to register application"),o("default")}catch{o("error")}})())},p=l?l.replace(/^https?:\/\//,"").replace(/\/+$/,"").replace(/^@?[^@]+@/,"").trim():null,f=/[^\s\r\n\t\/\\]+\.[^\s\r\n\t\/\\]+/.test(p)&&!/[\s\/\\@]/.test(p),b=p?d.filter(m=>m.includes(l)).sort((m,y)=>{const S=m.toLowerCase().startsWith(l.toLowerCase()),I=y.toLowerCase().startsWith(l.toLowerCase());return S&&!I?-1:!S&&I?1:0}).slice(0,10):[],g=f?p:b!=null&&b.length?b[0]:l?d.find(m=>m.includes(l)):null,v=m=>{m.preventDefault(),r(g)};return u&&B(()=>{r(s||g)},[]),e("main",{id:"login",style:{textAlign:"center"},children:e("form",{onSubmit:v,children:[e("h1",{children:[e("img",{src:Gt,alt:"",width:"80",height:"80"}),e("br",{}),"Log in"]}),e("label",{children:[e("p",{children:"Instance"}),e("input",{value:l,required:!0,type:"text",class:"large",id:"instanceURL",ref:t,disabled:i==="loading",autocorrect:"off",autocapitalize:"off",autocomplete:"off",spellcheck:!1,placeholder:"instance domain",onInput:m=>{c(m.target.value)}}),(b==null?void 0:b.length)>0?e("ul",{id:"instances-suggestions",children:b.map((m,y)=>e("li",{children:e("button",{type:"button",class:"plain5",onClick:()=>{r(m)},children:m})}))}):e("div",{id:"instances-eg",children:"e.g. “mastodon.social”"})]}),i==="error"&&e("p",{class:"error",children:"Failed to log in. Please try again or another instance."}),e("div",{children:[e("button",{disabled:i==="loading"||!l||!g,children:g?`Continue with ${g}`:"Continue"})," "]}),e(Ie,{hidden:i!=="loading"}),e("hr",{}),!Ko&&e("p",{children:e("a",{href:"https://joinmastodon.org/servers",target:"_blank",children:"Don't have an account? Create one!"})}),e("p",{children:e(ee,{to:"/",children:"Go home"})})]})})}const wt=40,Jo=10,Xo=5;let Bt={},St={},kt={};function zt(t){delete St[t],delete kt[t]}const dt={block:"nearest",inline:"center",behavior:"smooth"},Tn=".status-link:not(details:not([open]) > summary ~ *, details:not([open]) > summary ~ * *), .status-focus:not(details:not([open]) > summary ~ *, details:not([open]) > summary ~ * *)",Cn=/\/s\//i;function Qo(t){const{id:n}=t,{masto:i,instance:o}=z({instance:t.instance}),a=Se(k),[s,u]=qe(),l=s.get("media"),c=s.get("media-only"),d=parseInt(l||c,10);let h=d>0;const r=s.get("mediaStatusID"),p=zn(r,o);r&&!p&&(h=!1);const f=h&&!!c,b=Ge(n,o),[g,v]=$(k.statuses[b]);B(()=>{k.statuses[b]&&v(k.statuses[b])},[b]);const m=he(()=>{const{prevLocation:I}=k,T=((I==null?void 0:I.pathname)||"")+((I==null?void 0:I.search)||""),x=pt("/:instance/s/:id",T)||pt("/s/:id",T);return!T||x?"/":T},[]);B(()=>{!g&&h&&(async()=>{try{const I=await i.v1.statuses.$select(n).fetch();Ae(I,o),v(I)}catch{alert("Unable to load post."),location.hash=m}})()},[h]);const y=r?p==null?void 0:p.mediaAttachments:g==null?void 0:g.mediaAttachments,S=Ve(()=>{!window.matchMedia("(min-width: calc(40em + 350px))").matches&&a.prevLocation?history.back():f?location.hash=m:(s.delete("media"),s.delete("mediaStatusID"),u(s))},[f,m,a.prevLocation]);return B(()=>{let I=setTimeout(()=>{const T=document.querySelector(".carousel");T&&T.focus()},100);return()=>clearTimeout(I)},[f]),e("div",{class:"deck-backdrop",children:[h?y!=null&&y.length?e(es,{mediaAttachments:y,statusID:r||n,instance:o,lang:g==null?void 0:g.language,index:d-1,onClose:S}):e("div",{class:"media-modal-container loading",children:e(Ie,{abrupt:!0})}):e(ee,{to:m}),!f&&e(ea,{id:n,instance:t.instance,closeLink:m})]})}function ea({id:t,closeLink:n="/",instance:i}){var me,de;const[o,a]=qe(),s=o.get("media"),u=o.get("mediaStatusID"),l=parseInt(s,10)>0,c=D(!k.prevLocation&&(history.length===1||"navigation"in window&&((de=(me=navigation==null?void 0:navigation.entries)==null?void 0:me.call(navigation))==null?void 0:de.length)===1)),[d,h]=$(o.get("view")||c.current?"full":null),r=!!parseInt(o.get("translate")),{masto:p,instance:f}=z({instance:i}),{masto:b,instance:g,authenticated:v}=z(),m=f===g,y=Se(k),[S,I]=$([]),[T,x]=$("default"),L=D(),N=Ge(t,f),O=D(0),U=D();B(()=>{var R;(R=U.current)==null||R.focus()},[]),B(()=>{var G;const R=Yn(()=>{if(!U.current)return;const{scrollTop:K}=U.current;T!=="loading"&&(kt[t]=K)},50);return(G=U.current)==null||G.addEventListener("scroll",R,{passive:!0}),R(),()=>{var K;R.cancel(),(K=U.current)==null||K.removeEventListener("scroll",R)}},[t,T!=="loading"]);const P=D(),M=({reloadHero:R}={})=>{x("loading");let G;const K=St[t];if(K){const ie=K.filter(we=>k.statuses[N]);I(ie)}else I([{id:t}]);return(async()=>{var q,ge;const ie=()=>cn(()=>p.v1.statuses.$select(t).fetch(),{retries:4}),we=cn(()=>p.v1.statuses.$select(t).context.fetch(),{retries:8}),Le=!!y.statuses[N];let $e=y.statuses[N];if(!(Le&&!R))try{$e=await ie(),Ae($e,f),await new Promise(be=>{setTimeout(be,100)})}catch{x("error");return}try{let be=function(J){return J==null?void 0:J.map(ve=>({id:ve.id,account:ve.account,repliesCount:ve.repliesCount,content:ve.content,weight:ft(ve),replies:be(ve.__replies)}))};const ue=await we,{ancestors:xe,descendants:Pe}=ue;O.current=(Pe==null?void 0:Pe.length)||0;const Ne=new Set;xe.forEach(J=>{Ae(J,f,{skipThreading:!0}),J.inReplyToId&&!xe.find(ve=>ve.id===J.inReplyToId)&&Ne.add(J.inReplyToId)});const st=xe.every(J=>J.account.id===$e.account.id),Oe=[];Pe.forEach(J=>{if(Ae(J,f,{skipThreading:!0}),J.inReplyToId&&!Pe.find(ve=>ve.id===J.inReplyToId)&&J.inReplyToId!==$e.id&&Ne.add(J.inReplyToId),J.inReplyToAccountId===J.account.id)Oe.push(J);else if(J.inReplyToId===$e.id)Oe.push(J);else if(!J.inReplyToAccountId&&Oe.find(ve=>ve.id===J.inReplyToId)&&J.account.id===$e.account.id)Oe.push(J);else{const ve=Pe.find(ps=>ps.id===J.inReplyToId);ve&&(ve.__replies||(ve.__replies=[]),ve.__replies.push(J))}}),Ne.size;const We=[...xe.map(J=>({id:J.id,ancestor:!0,isThread:st,accountID:J.account.id,account:J.account,repliesCount:J.repliesCount,weight:ft(J)})),{id:t,accountID:$e.account.id,weight:ft($e)},...Oe.map(J=>({id:J.id,account:J.account,accountID:J.account.id,descendant:!0,thread:J.account.id===$e.account.id,weight:ft(J),replies:be(J.__replies)}))];x("default"),P.current={offsetTop:(q=L.current)==null?void 0:q.offsetTop,scrollTop:(ge=U.current)==null?void 0:ge.scrollTop};const Xe=We.findIndex(J=>J.id===t);Xe>=W&&ke(Xe+1),I(We),St[t]=We,$s($e,f)}catch{x("error")}})(),()=>{clearTimeout(G)}};B(M,[t,p]),B(()=>{var G,K;if(!S.length)return;const R=kt[t];if(R)U.current.scrollTop=R;else if(P.current){const ie={offsetTop:(G=L.current)==null?void 0:G.offsetTop,scrollTop:(K=U.current)==null?void 0:K.scrollTop},we=ie.offsetTop-P.current.offsetTop+ie.scrollTop;U.current.scrollTop=we}else S.length===1&&(U.current.scrollTop=0);P.current=null},[S]),B(()=>{y.reloadStatusPage<=0||(async()=>{try{const{instanceURL:R}=at(),G=`https://${R}/api/v1/statuses/${t}/context`;return await(await caches.open("api")).delete(G,{ignoreVary:!0}),M({reloadHero:!0})}catch{}})()},[y.reloadStatusPage]),B(()=>()=>{kt={},k.reloadStatusPage=0,St={},Bt={},qt.clear()},[]);const C=y.statuses[N]||y.statuses[t],_=he(()=>{if(!C)return"";const{account:R}=C,G=document.createElement("div");return G.innerHTML=R.displayName,G.innerText.trim()},[C]),F=he(()=>{if(!C)return"";let R=Bn(C);return R.length>64&&(R=R.slice(0,64)+"…"),R},[C]);_e(_&&F?`${_}: "${F}"`:"Status","/:instance?/s/:id");const Y=he(()=>{if(!C)return;const{url:R}=C;if(R)return new URL(R).hostname},[C]),te=he(()=>{if(Y)return Y===f},[Y,f]),[W,ke]=$(wt),re=he(()=>S.length-W,[S.length,W]),X=S.some(R=>R.descendant),E=S.filter(R=>R.ancestor),[j,ne]=$(!0),le=he(()=>{if(!L.current||j)return null;const{top:R}=L.current.getBoundingClientRect();return R>0?"down":"up"},[j]);Re("esc",()=>{location.hash=n},{enabled:!l,ignoreEventWhen:R=>!!document.querySelector("#modal-container > *")}),Re("backspace",()=>{location.hash=n}),Re("j",()=>{const R=document.activeElement.closest(".status-link, .status-focus"),G=R==null?void 0:R.getBoundingClientRect(),K=Array.from(U.current.querySelectorAll(Tn));if(R&&G.top0){const ie=K.indexOf(R);let we=K[ie+1];we&&(we.focus(),we.scrollIntoView(dt))}else{const ie=K.find(we=>{const Le=we.getBoundingClientRect();return Le.top>=44&&Le.left>=0});ie&&(ie.focus(),ie.scrollIntoView(dt))}}),Re("k",()=>{const R=document.activeElement.closest(".status-link, .status-focus"),G=R==null?void 0:R.getBoundingClientRect(),K=Array.from(U.current.querySelectorAll(Tn));if(R&&G.top0){const ie=K.indexOf(R);let we=K[ie-1];we&&(we.focus(),we.scrollIntoView(dt))}else{const ie=K.find(we=>{const Le=we.getBoundingClientRect();return Le.top>=44&&Le.left>=0});ie&&(ie.focus(),ie.scrollIntoView(dt))}}),Re("x",()=>{const R=document.activeElement.closest(".status-link, .status-focus");if(R){const G=R.nextElementSibling;G&&G.tagName.toLowerCase()==="details"&&(G.open=!G.open)}});const[H,ae]=$(!1),Q=D(l?"media+status":"status"),ye=Ve((R,G,K,ie)=>{R.preventDefault(),R.stopPropagation(),a({media:G+1,mediaStatusID:ie.id})},[t]),V=Ve((R,G)=>{zt(G.id)},[]);B(()=>{let R;return u&&l&&(R=setTimeout(()=>{var K;const G=(K=U.current)==null?void 0:K.querySelector(`.status-link[href*="/${u}"]`);G&&G.scrollIntoView(dt)},400)),()=>{clearTimeout(R)}},[u,l]);const Z=Ve((R,G)=>{const{id:K,ancestor:ie,isThread:we,descendant:Le,thread:$e,replies:q,repliesCount:ge,weight:be}=R,ue=K===t;return e("li",{ref:ue?L:null,class:`${ie?"ancestor":""} ${Le?"descendant":""} ${$e?"thread":""} ${ue?"hero":""}`,children:[ue?e(A,{children:[e(je,{threshold:.1,onChange:xe=>{queueMicrotask(()=>{requestAnimationFrame(()=>{ne(xe)})})},class:"status-focus",tabIndex:0,children:e(Me,{statusID:K,instance:f,withinContext:!0,size:"l",enableTranslate:!0,forceTranslate:r})}),T!=="loading"&&!v?e("div",{class:"post-status-banner",children:[e("p",{children:"You're not logged in. Interactions (reply, boost, etc) are not possible."}),e(ee,{to:"/login",class:"button",children:"Log in"})]}):!m&&e("div",{class:"post-status-banner",children:[e("p",{children:["This post is from another instance (",e("b",{children:f}),"). Interactions (reply, boost, etc) are not possible."]}),e("button",{type:"button",disabled:T==="loading",onClick:()=>{x("loading"),(async()=>{try{const xe=await b.v2.search.fetch({q:C.url,type:"statuses",resolve:!0,limit:1});if(xe.statuses.length){const Pe=xe.statuses[0];location.hash=g?`/${g}/s/${Pe.id}`:`/s/${Pe.id}`}else throw new Error("No results")}catch(xe){x("default"),alert("Error: "+xe)}})()},children:[e(w,{icon:"transfer"})," Switch to my instance to enable interactions"]})]})]}):e(ee,{class:"status-link",to:f?`/${f}/s/${K}`:`/s/${K}`,onClick:()=>{zt(K)},children:[e(je,{skip:G!==0||!ie,threshold:.5,onChange:xe=>{queueMicrotask(()=>{requestAnimationFrame(()=>{ae(xe)})})},children:e(Me,{statusID:K,instance:f,withinContext:!0,size:$e||ie?"m":"s",enableTranslate:!0,onMediaClick:ye,onStatusLinkClick:V})}),ie&&ge>1&&e("div",{class:"replies-link",children:[e(w,{icon:"comment2"})," ",e("span",{title:ge,children:Ue(ge)})]})," "]}),Le&&(q==null?void 0:q.length)>0&&e(fs,{instance:f,replies:q,hasParentThread:$e,level:1,accWeight:be,openAll:O.current{k.reloadStatusPage++},children:"Try again"})]})]},K)},[t,f,T,v,m,r,ye,V,X]),ce=he(()=>{var R;if("navigation"in window&&(navigation!=null&&navigation.entries)){const G=navigation.entries()[navigation.currentEntry.index-1];if(G!=null&&G.url)return Cn.test(G.url)}return Cn.test((R=k.prevLocation)==null?void 0:R.pathname)},[N]),fe=he(()=>{if(!re)return[];const R=[];function G(K){R.push(K.id),K.replies&&K.replies.forEach(G)}return S.slice(W).forEach(G),R.map(K=>Ge(K,f))},[re,S,W,f]);return e("div",{tabIndex:"-1",ref:U,class:`status-deck deck contained ${S.length>1?"padded-bottom":""} ${Q.current==="status"&&!c.current?"slide-in":""} ${d?`deck-view-${d}`:""}`,onAnimationEnd:R=>{Q.current==="status"&&(Q.current=null)},children:[e("header",{class:`${T==="loading"?"loading":""}`,onDblClick:R=>{k.reloadStatusPage++},children:e("div",{class:"header-grid header-grid-2",children:[e("h1",{children:[ce&&e("button",{type:"button",class:"plain deck-back",onClick:()=>{history.back()},children:e(w,{icon:"chevron-left",size:"xl"})}),!j&&C&&T!=="loading"?e(A,{children:[e("span",{class:"hero-heading",children:[e(It,{account:C.account,instance:f,showAvatar:!0,short:!0})," ",e("span",{class:"insignificant",children:["•"," ",e($t,{datetime:C.createdAt,format:"micro"})]})]})," ",e("button",{type:"button",class:"ancestors-indicator light small",onClick:R=>{R.preventDefault(),R.stopPropagation(),L.current.scrollIntoView({behavior:"smooth",block:"start"})},title:"Go to main post",children:e(w,{icon:le==="down"?"arrow-down":"arrow-up"})})]}):e(A,{children:["Post"," ",e("button",{type:"button",class:"ancestors-indicator light small",onClick:R=>{R.preventDefault(),R.stopPropagation(),U.current.scrollTo({top:0,behavior:"smooth"})},hidden:!E.length||H,title:`${E.length} posts above ‒ Go to top`,children:[e(w,{icon:"arrow-up"}),E.filter((R,G,K)=>K.findIndex(ie=>ie.accountID===R.accountID)===G).slice(0,3).map(R=>e(et,{url:R.account.avatar,alt:R.account.displayName},R.account.id)),E.length>3&&e(A,{children:[" ",e("span",{class:"insignificant",children:Ue(E.length)})]})]})]})]}),e("div",{class:"header-side",children:[e("button",{type:"button",class:"plain4 button-switch-view",style:{display:d==="full"?"":"none"},onClick:()=>{h(null),o.delete("media"),o.delete("media-only"),o.delete("view"),a(o)},title:"Switch to Side Peek view",children:e(w,{icon:"layout4",size:"l"})}),e(Fe,{align:"end",portal:{target:U.current},menuButton:e("button",{type:"button",class:"button plain4",children:e(w,{icon:"more",alt:"Actions",size:"xl"})}),children:[e(oe,{disabled:T==="loading",onClick:()=>{k.reloadStatusPage++},children:[e(w,{icon:"refresh"}),e("span",{children:"Refresh"})]}),e(oe,{className:"menu-switch-view",onClick:()=>{h(d==="full"?null:"full"),o.delete("media"),o.delete("media-only"),d==="full"?o.delete("view"):o.set("view","full"),a(o)},children:[e(w,{icon:{"":"layout5",full:"layout4"}[d||""]}),e("span",{children:["Switch to ",d==="full"?"Side Peek":"Full"," view"]})]}),e(oe,{onClick:()=>{Array.from(U.current.querySelectorAll(".spoiler-button:not(.spoiling), .spoiler-media-button:not(.spoiling)")).forEach(G=>{G.click()})},children:[e(w,{icon:"eye-open"})," ",e("span",{children:"Show all sensitive content"})]}),e(De,{}),e(jn,{className:"plain",children:"Experimental"}),e(oe,{disabled:!Y||te,onClick:()=>{const R=Fo(C.url);R?location.hash=R:alert("Unable to switch")},children:[e(w,{icon:"transfer"}),e("small",{class:"menu-double-lines",children:["Switch to post's instance",Y?e(A,{children:[" ","(",e("b",{children:Y}),")"]}):""]})]})]}),e(ee,{class:"button plain deck-close",to:n,children:e(w,{icon:"x",size:"xl"})})]})]})}),S.length&&C?e("ul",{class:`timeline flat contextual grow ${T==="loading"?"loading":""}`,children:[S.slice(0,W).map(Z),re>0&&e("li",{children:e("button",{type:"button",class:"plain block show-more",disabled:T==="loading",onClick:()=>ke(R=>R+wt),style:{marginBlockEnd:"6em"},"data-state-post-ids":fe.join(" "),children:[e("div",{class:"ib avatars-bunch",children:S.slice(W,W+5).map(R=>e(et,{url:R.account.avatarStatic},R.id))})," ",e("div",{class:"ib",children:["Show more…"," ",e("span",{class:"tag",children:re>wt?`${wt}+`:re})]})]})})]}):e(A,{children:[T==="loading"&&e("ul",{class:"timeline flat contextual grow loading",children:e("li",{children:e(Me,{skeleton:!0,size:"l"})})}),T==="error"&&e("p",{class:"ui-state",children:["Unable to load post",e("br",{}),e("br",{}),e("button",{type:"button",onClick:()=>{k.reloadStatusPage++},children:"Try again"})]})]})]})}function fs({replies:t,instance:n,hasParentThread:i,level:o,accWeight:a,openAll:s}){const[u,l]=qe(),c=m=>m.reduce((y,S)=>{const{repliesCount:I,replies:T}=S,x=(T==null?void 0:T.length)||I;return y+x+c(T||[])},0),d=t.length+c(t),h=t.length===d,r=t.map(m=>m.account).filter((m,y,S)=>S.findIndex(I=>I.id===m.id)===y).slice(0,3),p=he(()=>t==null?void 0:t.reduce((m,y)=>m+(y==null?void 0:y.weight),a),[a,t==null?void 0:t.length]);let f=!1;(s||p<=Xo||!i&&d===1&&ft(t[0])<2)&&(f=!0);const b=Bt[t[0].id],g=Ve((m,y,S,I)=>{m.preventDefault(),m.stopPropagation(),l({media:y+1,mediaStatusID:I.id})},[]),v=D();return Je(()=>{var y;function m(S){S.target.dataset.scrollLeft=S.target.scrollLeft}return(y=v.current)==null||y.addEventListener("scroll",m,{passive:!0}),()=>{var S;(S=v.current)==null||S.removeEventListener("scroll",m)}},[]),e("details",{ref:v,class:"replies",open:b||f,onToggle:m=>{const{open:y}=m.target;Bt[t[0].id]=y},style:{"--comments-level":o},"data-comments-level":o,"data-comments-level-overflow":o>4,children:[e("summary",{class:"replies-summary",hidden:f,children:[e("span",{class:"avatars",children:r.map(m=>e(et,{url:m.avatarStatic,title:`${m.displayName} @${m.username}`,squircle:m==null?void 0:m.bot},m.id))}),e("b",{children:[e("span",{title:t.length,children:Ue(t.length)})," ","repl",t.length===1?"y":"ies"]}),!h&&d>1&&e(A,{children:[" ","·"," ",e("span",{children:[e("span",{title:d,children:Ue(d)})," ","comment",d===1?"":"s"]})]})]}),e("ul",{children:t.map(m=>{var y,S;return e("li",{children:[e(ee,{class:"status-link",to:n?`/${n}/s/${m.id}`:`/s/${m.id}`,onClick:()=>{zt(m.id)},children:[e(Me,{statusID:m.id,instance:n,withinContext:!0,size:"s",enableTranslate:!0,onMediaClick:g}),!((y=m.replies)!=null&&y.length)&&m.repliesCount>0&&e("div",{class:"replies-link",children:[e(w,{icon:"comment2"})," ",e("span",{title:m.repliesCount,children:Ue(m.repliesCount)})]})]}),((S=m.replies)==null?void 0:S.length)&&e(fs,{instance:n,replies:m.replies,level:o+1,accWeight:f?p:m.weight,openAll:s})]},m.id)})})]})}const ta=140,na=35,sa=70,ia=140,qt=new Map;function ft(t){var f,b;const n=qt.get(t.id);if(n)return n;const{spoilerText:i,content:o,mediaAttachments:a,poll:s,card:u}=t,l=xs(i+o),c=a!=null&&a.length?ta:0,d=(((f=s==null?void 0:s.options)==null?void 0:f.length)||0)*na,h=u&&(a!=null&&a.length||(b=s==null?void 0:s.options)!=null&&b.length)?0:sa,p=(l+c+d+h)/ia;return qt.set(t.id,p),p}const oa=ze(Qo);function aa(){const t=nt(),{id:n,instance:i}=t;return e(oa,{id:n,instance:i})}const ca=""+new URL("boosts-carousel-YjmjXTE6.jpg",import.meta.url).href,ra=""+new URL("grouped-notifications-xYMFVY91.jpg",import.meta.url).href,la=""+new URL("multi-column-ETnJNDVb.jpg",import.meta.url).href,da=""+new URL("multi-hashtag-timeline-x-SDVR4g.jpg",import.meta.url).href,ua=""+new URL("nested-comments-thread-Ib-fZGS3.jpg",import.meta.url).href,ha="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20fill-rule='evenodd'%20stroke-linejoin='round'%20stroke-miterlimit='2'%20clip-rule='evenodd'%20viewBox='0%200%20102%2028'%3e%3cpath%20fill='none'%20d='M0%200h101.5v27.5H0z'/%3e%3cg%20fill-rule='nonzero'%3e%3cpath%20fill='url(%23a)'%20d='M2.32%2021.85c1.4%200%202.21-.85%202.21-2.3v-4.64H8.5c4.45%200%207.54-2.9%207.54-7.24%200-4.35-2.98-7.24-7.32-7.24h-6.4C.93.43.11%201.28.11%202.73v16.82c0%201.45.82%202.3%202.21%202.3Zm2.21-10.4V3.94h3c2.54%200%204%201.34%204%203.75s-1.47%203.76-4%203.76h-3Z'/%3e%3cpath%20fill='url(%23b)'%20d='M20.52%2021.88c1.25%200%202.13-.76%202.13-2.23v-7.04c0-2.07%201.2-3.49%203.21-3.49%201.95%200%202.95%201.23%202.95%203.25v7.28c0%201.47.89%202.23%202.13%202.23%201.26%200%202.14-.76%202.14-2.23v-8.18c0-3.64-1.99-5.9-5.48-5.9-2.38%200-4.1%201.12-4.93%203.1h-.09V2.3c0-1.38-.78-2.2-2.1-2.2-1.31%200-2.1.82-2.1%202.2v17.34c0%201.47.9%202.23%202.14%202.23Z'/%3e%3cpath%20fill='url(%23c)'%20d='M40.45%2021.82c1.96%200%203.93-.98%204.8-2.65h.1v.8c.08%201.27.89%201.91%202.05%201.91%201.21%200%202.08-.73%202.08-2.15v-8.95c0-3.17-2.63-5.25-6.65-5.25-3.26%200-5.78%201.16-6.5%203.04-.15.32-.23.63-.23.96%200%20.97.75%201.64%201.79%201.64.69%200%201.23-.26%201.7-.79.95-1.23%201.74-1.65%203.04-1.65%201.62%200%202.64.85%202.64%202.31v1.04l-3.95.24c-3.93.23-6.13%201.88-6.13%204.74%200%202.83%202.27%204.76%205.26%204.76Zm1.4-3.09c-1.43%200-2.4-.73-2.4-1.9%200-1.12.91-1.83%202.51-1.95l3.31-.2v1.14c0%201.7-1.54%202.91-3.41%202.91Z'/%3e%3cpath%20fill='url(%23d)'%20d='M54.37%2021.88c1.26%200%202.14-.76%202.14-2.23v-7.09c0-2.03%201.21-3.44%203.13-3.44s2.89%201.17%202.89%203.22v7.31c0%201.47.88%202.23%202.14%202.23%201.24%200%202.13-.76%202.13-2.23v-8.2c0-3.68-1.96-5.87-5.45-5.87-2.41%200-4%201.07-4.83%203.01h-.09v-.87c0-1.35-.85-2.17-2.14-2.17-1.28%200-2.06.82-2.06%202.15v11.95c0%201.47.9%202.23%202.14%202.23Z'/%3e%3cpath%20fill='url(%23e)'%20d='M71.65%2027.17c1.26%200%202.14-.76%202.14-2.23v-6h.09a5.15%205.15%200%200%200%204.88%202.88c3.92%200%206.35-3.05%206.35-8.1%200-5.07-2.44-8.1-6.43-8.1a5.12%205.12%200%200%200-4.86%202.99h-.09v-.85c0-1.45-.88-2.21-2.1-2.21-1.24%200-2.11.76-2.11%202.2v17.2c0%201.46.89%202.22%202.13%202.22Zm5.6-8.8c-2.1%200-3.47-1.8-3.47-4.65%200-2.81%201.37-4.67%203.47-4.67%202.14%200%203.49%201.83%203.49%204.67%200%202.86-1.35%204.66-3.5%204.66Z'/%3e%3cpath%20fill='url(%23f)'%20d='M89.61%2027.39c3.44%200%205.26-1.5%206.73-5.55l4.81-13.1a4%204%200%200%200%20.24-1.26c0-1.13-.85-1.93-2.08-1.93-1.1%200-1.71.51-2.07%201.7l-3.4%2010.9h-.08L90.35%207.28c-.36-1.25-.94-1.73-2.07-1.73-1.26%200-2.21.83-2.21%201.99%200%20.35.09.82.25%201.26l5%2013.21-.21.56c-.52%201.1-1.32%201.42-2.07%201.42l-.75-.01c-.96%200-1.56.54-1.56%201.4%200%201.29%201%202%202.88%202Z'/%3e%3c/g%3e%3cdefs%3e%3cradialGradient%20id='a'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='b'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='c'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='d'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='e'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3cradialGradient%20id='f'%20cx='0'%20cy='0'%20r='1'%20gradientTransform='rotate(28.51%20.06%20.22)%20scale(57.6252)'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0'%20stop-color='%23a4bff7'/%3e%3cstop%20offset='1'%20stop-color='%236081e6'/%3e%3c/radialGradient%3e%3c/defs%3e%3c/svg%3e";var fa={PHANPY_CLIENT_NAME:"Phanpy",PHANPY_WEBSITE:"https://phanpy.social",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",VITE_APP_ENV:"production",BASE_URL:"./",MODE:"production",DEV:!1,PROD:!0,SSR:!1};const{PHANPY_DEFAULT_INSTANCE:ut,PHANPY_WEBSITE:$n,PHANPY_PRIVACY_POLICY_URL:pa,PHANPY_DEFAULT_INSTANCE_REGISTRATION_URL:xn}=fa,An=$n?$n.replace(/https?:\/\//g,"").replace(/\/$/,""):null,Ln=`${"2024-01-05T19:24:44.622Z".slice(0,10).replace(/-/g,".")}.32c53b8`;function Mn(){return _e(null,["/","/welcome"]),e("main",{id:"welcome",children:[e("div",{class:"hero-container",children:[e("div",{class:"hero-content",children:[e("h1",{children:[e("img",{src:Gt,alt:"",width:"160",height:"160",style:{aspectRatio:"1/1",marginBlockEnd:-16}}),e("img",{src:ha,alt:"Phanpy",width:"200"})]}),e("p",{class:"desc",children:"A minimalistic opinionated Mastodon web client."}),e("p",{children:e(ee,{to:ut?`/login?instance=${ut}&submit=1`:"/login",class:"button",children:ut?"Log in":"Log in with Mastodon"})}),ut&&xn&&e("p",{children:e("a",{href:xn,class:"button plain5",children:"Sign up"})}),!ut&&e("p",{class:"insignificant",children:e("small",{children:["Connect your existing Mastodon/Fediverse account.",e("br",{}),"Your credentials are not stored on this server."]})})]}),(An||Ln)&&e("p",{class:"app-site-version",children:e("small",{children:[An," ",Ln]})}),e("p",{children:[e("a",{href:"https://github.com/cheeaun/phanpy",target:"_blank",children:"Built"})," ","by"," ",e("a",{href:"https://mastodon.social/@cheeaun",target:"_blank",onClick:t=>{t.preventDefault(),k.showAccount="cheeaun@mastodon.social"},children:"@cheeaun"}),"."," ",e("a",{href:pa,target:"_blank",children:"Privacy Policy"}),"."]})]}),e("div",{id:"why-container",children:e("div",{class:"sections",children:[e("section",{children:[e("img",{src:ca,alt:"Screenshot of Boosts Carousel",loading:"lazy"}),e("h4",{children:"Boosts Carousel"}),e("p",{children:"Visually separate original posts and re-shared posts (boosted posts)."})]}),e("section",{children:[e("img",{src:ua,alt:"Screenshot of nested comments thread",loading:"lazy"}),e("h4",{children:"Nested comments thread"}),e("p",{children:"Effortlessly follow conversations. Semi-collapsible replies."})]}),e("section",{children:[e("img",{src:ra,alt:"Screenshot of grouped notifications",loading:"lazy"}),e("h4",{children:"Grouped notifications"}),e("p",{children:"Similar notifications are grouped and collapsed to reduce clutter."})]}),e("section",{children:[e("img",{src:la,alt:"Screenshot of multi-column UI",loading:"lazy"}),e("h4",{children:"Single or multi-column"}),e("p",{children:"By default, single column for zen-mode seekers. Configurable multi-column for power users."})]}),e("section",{children:[e("img",{src:da,alt:"Screenshot of multi-hashtag timeline with a form to add more hashtags",loading:"lazy"}),e("h4",{children:"Multi-hashtag timeline"}),e("p",{children:"Up to 5 hashtags combined into a single timeline."})]})]})})]})}const ma=window.alert;window.__nativeAlert||(window.__nativeAlert=ma);window.alert=function(t){t instanceof Error&&(t!=null&&t.message)&&(t=t.message),typeof t!="string"&&(t=JSON.stringify(t));const n=Bs({text:t,className:"alert",gravity:"top",position:"center",duration:1e4,offset:{y:48},onClick:()=>{n.hideToast()}});n.showToast()};window.__STATES__=k;window.__STATES_STATS__=()=>{const t=["statuses","accounts","spoilers","unfurledLinks","statusQuotes"],n={};t.forEach(a=>{n[a]=Object.keys(k[a]).length});const{statuses:i}=k,o=[];for(const a in i)document.querySelector(`[data-state-post-id~="${a}"], [data-state-post-ids~="${a}"]`)||o.push(a)};setInterval(()=>{if(!window.__IDLE__)return;const{statuses:t,unfurledLinks:n,notifications:i}=k;let o=0;const{instance:a}=z();for(const s in t){if(!window.__IDLE__)break;try{const u=document.querySelector(`[data-state-post-id~="${s}"], [data-state-post-ids~="${s}"]`),l=i.some(c=>{var d;return s===Ge((d=c.status)==null?void 0:d.id,a)});if(!u&&!l){delete k.statuses[s],delete k.statusQuotes[s];for(const c in n){const d=n[c];if(Ge(d.id,d.instance)===s){delete k.unfurledLinks[c];break}}o++}}catch{}}},15*60*1e3);setTimeout(()=>{for(const t in gt)queueMicrotask(()=>{var n,i,o,a;Array.isArray(gt[t])?(i=(n=gt[t])[0])==null||i.call(n):(a=(o=gt)[t])==null||a.call(o)})},5e3);(()=>{window.__IDLE__=!0;const t=["mousemove","mousedown","resize","keydown","touchstart","pointerdown","pointermove","wheel"],n=()=>{window.__IDLE__=!0},o=Yn(n,3e3),a=()=>{window.__IDLE__=!1,o()};t.forEach(s=>{window.addEventListener(s,a,{passive:!0,capture:!0})}),window.addEventListener("blur",n,{passive:!0}),document.documentElement.addEventListener("mouseleave",s=>{!s.relatedTarget&&!s.toElement&&n()},{passive:!0})})();const ga=/iPad|iPhone|iPod/.test(navigator.userAgent);ga&&document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="visible"){const t=se.local.get("theme");let n;if(t){if(n=document.querySelector('meta[name="theme-color"][data-theme-setting="manual"]'),n){const i=n.content,o=t==="light"?n.dataset.themeLightColorTemp:n.dataset.themeDarkColorTemp;n.content=o||"",setTimeout(()=>{n.content=i},10)}}else{const i=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";if(n=document.querySelector(`meta[name="theme-color"][media*="${i}"]`),n){const o=n.dataset.content,a=n.dataset.contentTemp;n.content=a||"",setTimeout(()=>{n.content=o},10)}}}});{const t=se.local.get("theme");if(t){document.documentElement.classList.add(`is-${t}`),document.querySelector('meta[name="color-scheme"]').setAttribute("content",t||"dark light");const i=document.querySelector('meta[data-theme-setting="manual"]');i&&(i.name="theme-color",i.content=t==="light"?i.dataset.themeLightColor:i.dataset.themeDarkColor),document.querySelectorAll('meta[data-theme-setting="auto"]').forEach(a=>{a.name=""})}const n=se.local.get("textSize");n&&document.documentElement.style.setProperty("--text-size",`${n}px`)}Hn(k,t=>{var n;for(const[i,o,a,s]of t){if(o.join(".")==="settings.shortcutsViewMode"){const u=document.getElementById("app");u&&(u.dataset.shortcutsViewMode=(n=k.shortcuts)!=null&&n.length?a:"")}o.join(".")==="settings.cloakMode"&&document.body.classList.toggle("cloak",a)}});function ba(){const[t,n]=$(!1),[i,o]=$("loading");B(()=>{const s=se.local.get("instanceURL"),u=decodeURIComponent((window.location.search.match(/code=([^&]+)/)||[,""])[1]);if(u){window.history.replaceState({},document.title,window.location.pathname||"/");const l=se.session.get("clientID"),c=se.session.get("clientSecret"),d=se.session.get("vapidKey");(async()=>{o("loading");const{access_token:h}=await Yo({instanceURL:s,client_id:l,client_secret:c,code:u}),r=As({instance:s,accessToken:h});await Promise.allSettled([nn(r,s),Ls(r,s,h,d)]),sn(),on(r),n(!0),o("default")})()}else{window.__IGNORE_GET_ACCOUNT_ERROR__=!0;const l=at();if(l){se.session.set("currentAccount",l.info.id);const{client:c}=z({account:l}),{instance:d}=c;sn(),on(c),o("loading"),(async()=>{try{await nn(c,d)}catch{}finally{n(!0),o("default")}})()}else o("default")}},[]);let a=lt();return k.currentLocation=a.pathname,B(Dt,[a,t]),/\/https?:/.test(a.pathname)?e(Oo,{}):e(A,{children:[e(ya,{isLoggedIn:t,loading:i==="loading"}),e(wa,{isLoggedIn:t}),i==="default"&&e(Vt,{children:e(Te,{path:"/:instance?/s/:id",element:e(aa,{})})}),t&&e(js,{}),t&&e(Vi,{}),e(Oi,{}),t&&e(zi,{}),e(Gs,{isLoggedIn:t}),i!=="loading"&&e(qi,{onClose:Dt}),e(Ys,{})]})}function ya({isLoggedIn:t,loading:n}){const i=lt(),o=he(()=>{const{pathname:a}=i;return!/^\/(login|welcome)/.test(a)},[i]);return e(Vt,{location:o||i,children:[e(Te,{path:"/",element:t?e(Do,{}):n?e(Ie,{id:"loader-root"}):e(Mn,{})}),e(Te,{path:"/login",element:e(Zo,{})}),e(Te,{path:"/welcome",element:e(Mn,{})})]})}function Rn(){return k.prevLocation||null}function wa({isLoggedIn:t}){const n=lt(),i=D(Rn());return he(()=>pt("/:instance/s/:id",n.pathname)||pt("/s/:id",n.pathname),[n.pathname,pt])?i.current||(i.current=Rn()):i.current=null,e(Vt,{location:i.current||n,children:[t&&e(A,{children:[e(Te,{path:"/notifications",element:e(ls,{})}),e(Te,{path:"/mentions",element:e(cs,{})}),e(Te,{path:"/following",element:e(Jt,{})}),e(Te,{path:"/b",element:e(ss,{})}),e(Te,{path:"/f",element:e(is,{})}),e(Te,{path:"/l",children:[e(Te,{index:!0,element:e(Bo,{})}),e(Te,{path:":id",element:e(as,{})})]}),e(Te,{path:"/ft",element:e(lo,{})})]}),e(Te,{path:"/:instance?/t/:hashtag",element:e(os,{})}),e(Te,{path:"/:instance?/a/:id",element:e(oo,{})}),e(Te,{path:"/:instance?/p",children:[e(Te,{index:!0,element:e(Ot,{})}),e(Te,{path:"l",element:e(Ot,{local:!0})})]}),e(Te,{path:"/:instance?/trending",element:e(us,{})}),e(Te,{path:"/:instance?/search",element:e(ds,{})})]})}"AbortSignal"in window&&(AbortSignal.timeout=AbortSignal.timeout||(t=>{const n=new AbortController;return setTimeout(()=>n.abort(),t),n.signal}));qs(e(zs,{children:e(ba,{})}),document.getElementById("app"));setTimeout(()=>{try{Object.keys(localStorage).forEach(t=>{t.startsWith("iconify")&&localStorage.removeItem(t)}),Object.keys(sessionStorage).forEach(t=>{t.startsWith("iconify")&&sessionStorage.removeItem(t)}),localStorage.removeItem("settings:boostsCarousel")}catch{}},5e3);window.__CLOAK__=()=>{document.body.classList.toggle("cloak")}; +//# sourceMappingURL=main-9vVntYq7.js.map diff --git a/assets/main-93nxKW6L.js.map b/assets/main-9vVntYq7.js.map similarity index 99% rename from assets/main-93nxKW6L.js.map rename to assets/main-9vVntYq7.js.map index 46f09ad..9f06731 100644 --- a/assets/main-93nxKW6L.js.map +++ b/assets/main-9vVntYq7.js.map @@ -1 +1 @@ -{"version":3,"file":"main-93nxKW6L.js","sources":["../../src/utils/usePageVisibility.js","../../src/components/background-service.jsx","../../src/components/compose-button.jsx","../../src/components/keyboard-shortcuts-help.jsx","../../src/pages/accounts.jsx","../../src/assets/logo.svg","../../src/utils/push-notifications.js","../../src/pages/settings.jsx","../../src/utils/focus-deck.jsx","../../src/utils/useLocationChange.js","../../src/components/list-add-edit.jsx","../../src/components/account-info.jsx","../../src/components/account-sheet.jsx","../../src/components/drafts.jsx","../../src/utils/relationships.js","../../src/components/generic-accounts.jsx","../../src/components/media-alt-modal.jsx","../../src/utils/color-utils.js","../../src/components/media-modal.jsx","../../src/assets/floating-button.svg","../../src/assets/multi-column.svg","../../src/assets/tab-menu-bar.svg","../../src/utils/followed-tags.js","../../src/components/AsyncText.jsx","../../src/components/shortcuts-settings.jsx","../../src/components/modals.jsx","../../src/components/follow-request-buttons.jsx","../../src/components/notification.jsx","../../src/components/notification-service.jsx","../../src/components/search-form.jsx","../../src/components/search-command.jsx","../../src/components/shortcuts.jsx","../../src/utils/timeline-utils.jsx","../../src/utils/useScroll.js","../../src/utils/useScrollFn.js","../../src/components/media-post.jsx","../../src/components/nav-menu.jsx","../../src/components/timeline.jsx","../../src/pages/account-statuses.jsx","../../src/pages/bookmarks.jsx","../../src/pages/favourites.jsx","../../src/pages/followed-hashtags.jsx","../../src/pages/following.jsx","../../src/pages/hashtag.jsx","../../src/pages/list.jsx","../../src/pages/mentions.jsx","../../src/utils/group-notifications.jsx","../../src/pages/notifications.jsx","../../src/pages/public.jsx","../../src/pages/search.jsx","../../src/pages/trending.jsx","../../src/components/columns.jsx","../../src/pages/home.jsx","../../src/utils/get-instance-status-url.js","../../src/pages/http-route.jsx","../../src/pages/lists.jsx","../../src/data/instances.json?url","../../src/utils/auth.js","../../src/pages/login.jsx","../../src/pages/status.jsx","../../src/pages/status-route.jsx","../../src/assets/features/boosts-carousel.jpg","../../src/assets/features/grouped-notifications.jpg","../../src/assets/features/multi-column.jpg","../../src/assets/features/multi-hashtag-timeline.jpg","../../src/assets/features/nested-comments-thread.jpg","../../src/assets/logo-text.svg","../../src/pages/welcome.jsx","../../src/utils/toast-alert.js","../../src/app.jsx","../../src/main.jsx"],"sourcesContent":["import { useEffect, useRef } from 'preact/hooks';\n\nexport default function usePageVisibility(fn = () => {}, deps = []) {\n const savedCallback = useRef(fn);\n useEffect(() => {\n savedCallback.current = fn;\n }, [deps]);\n\n useEffect(() => {\n const handleVisibilityChange = () => {\n const hidden = document.hidden || document.visibilityState === 'hidden';\n console.log('👀 Page visibility changed', hidden ? 'hidden' : 'visible');\n savedCallback.current(!hidden);\n };\n\n document.addEventListener('visibilitychange', handleVisibilityChange);\n return () =>\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n }, []);\n}\n","import { memo } from 'preact/compat';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport { api } from '../utils/api';\nimport showToast from '../utils/show-toast';\nimport states, { saveStatus } from '../utils/states';\nimport useInterval from '../utils/useInterval';\nimport usePageVisibility from '../utils/usePageVisibility';\n\nconst STREAMING_TIMEOUT = 1000 * 3; // 3 seconds\nconst POLL_INTERVAL = 15_000; // 15 seconds\n\nexport default memo(function BackgroundService({ isLoggedIn }) {\n // Notifications service\n // - WebSocket to receive notifications when page is visible\n const [visible, setVisible] = useState(true);\n usePageVisibility(setVisible);\n const checkLatestNotification = async (masto, instance, skipCheckMarkers) => {\n if (states.notificationsLast) {\n const notificationsIterator = masto.v1.notifications.list({\n limit: 1,\n sinceId: states.notificationsLast.id,\n });\n const { value: notifications } = await notificationsIterator.next();\n if (notifications?.length) {\n if (skipCheckMarkers) {\n states.notificationsShowNew = true;\n } else {\n let lastReadId;\n try {\n const markers = await masto.v1.markers.fetch({\n timeline: 'notifications',\n });\n lastReadId = markers?.notifications?.lastReadId;\n } catch (e) {}\n if (lastReadId) {\n states.notificationsShowNew = notifications[0].id !== lastReadId;\n } else {\n states.notificationsShowNew = true;\n }\n }\n }\n }\n };\n\n useEffect(() => {\n let sub;\n let pollNotifications;\n if (isLoggedIn && visible) {\n const { masto, streaming, instance } = api();\n (async () => {\n // 1. Get the latest notification\n await checkLatestNotification(masto, instance);\n\n let hasStreaming = false;\n // 2. Start streaming\n if (streaming) {\n pollNotifications = setTimeout(() => {\n (async () => {\n try {\n hasStreaming = true;\n sub = streaming.user.notification.subscribe();\n console.log('🎏 Streaming notification', sub);\n for await (const entry of sub) {\n if (!sub) break;\n if (!visible) break;\n console.log('🔔🔔 Notification entry', entry);\n if (entry.event === 'notification') {\n console.log('🔔🔔 Notification', entry);\n saveStatus(entry.payload, instance, {\n skipThreading: true,\n });\n }\n states.notificationsShowNew = true;\n }\n console.log('💥 Streaming notification loop STOPPED');\n } catch (e) {\n hasStreaming = false;\n console.error(e);\n }\n\n if (!hasStreaming) {\n console.log('🎏 Streaming failed, fallback to polling');\n pollNotifications = setInterval(() => {\n checkLatestNotification(masto, instance, true);\n }, POLL_INTERVAL);\n }\n })();\n }, STREAMING_TIMEOUT);\n }\n })();\n }\n return () => {\n sub?.unsubscribe?.();\n sub = null;\n clearTimeout(pollNotifications);\n clearInterval(pollNotifications);\n };\n }, [visible, isLoggedIn]);\n\n // Check for updates service\n const lastCheckDate = useRef();\n const checkForUpdates = () => {\n lastCheckDate.current = Date.now();\n console.log('✨ Check app update');\n fetch('./version.json')\n .then((r) => r.json())\n .then((info) => {\n if (info) states.appVersion = info;\n })\n .catch((e) => {\n console.error(e);\n });\n };\n useInterval(checkForUpdates, visible && 1000 * 60 * 30); // 30 minutes\n usePageVisibility((visible) => {\n if (visible) {\n if (!lastCheckDate.current) {\n checkForUpdates();\n } else {\n const diff = Date.now() - lastCheckDate.current;\n if (diff > 1000 * 60 * 60) {\n // 1 hour\n checkForUpdates();\n }\n }\n }\n });\n\n // Global keyboard shortcuts \"service\"\n useHotkeys('shift+alt+k', () => {\n const currentCloakMode = states.settings.cloakMode;\n states.settings.cloakMode = !currentCloakMode;\n showToast({\n text: `Cloak mode ${currentCloakMode ? 'disabled' : 'enabled'}`,\n });\n });\n\n return null;\n});\n","import { useHotkeys } from 'react-hotkeys-hook';\n\nimport openCompose from '../utils/open-compose';\nimport states from '../utils/states';\n\nimport Icon from './icon';\n\nexport default function ComposeButton() {\n function handleButton(e) {\n if (e.shiftKey) {\n const newWin = openCompose();\n\n if (!newWin) {\n states.showCompose = true;\n }\n } else {\n states.showCompose = true;\n }\n }\n\n useHotkeys('c, shift+c', handleButton, {\n ignoreEventWhen: (e) => {\n const hasModal = !!document.querySelector('#modal-container > *');\n return hasModal;\n },\n });\n\n return (\n \n );\n}\n","import './keyboard-shortcuts-help.css';\n\nimport { memo } from 'preact/compat';\nimport { useHotkeys } from 'react-hotkeys-hook';\nimport { useSnapshot } from 'valtio';\n\nimport states from '../utils/states';\n\nimport Icon from './icon';\nimport Modal from './modal';\n\nexport default memo(function KeyboardShortcutsHelp() {\n const snapStates = useSnapshot(states);\n\n function onClose() {\n states.showKeyboardShortcutsHelp = false;\n }\n\n useHotkeys(\n '?, shift+?',\n (e) => {\n console.log('help');\n states.showKeyboardShortcutsHelp = true;\n },\n {\n ignoreEventWhen: (e) => {\n const hasModal = !!document.querySelector('#modal-container > *');\n return hasModal;\n },\n },\n );\n\n return (\n !!snapStates.showKeyboardShortcutsHelp && (\n \n
\n \n
\n

Keyboard shortcuts

\n
\n
\n \n {[\n {\n action: 'Keyboard shortcuts help',\n keys: ?,\n },\n {\n action: 'Next post',\n keys: j,\n },\n {\n action: 'Previous post',\n keys: k,\n },\n {\n action: 'Skip carousel to next post',\n keys: (\n <>\n Shift + j\n \n ),\n },\n {\n action: 'Skip carousel to previous post',\n keys: (\n <>\n Shift + k\n \n ),\n },\n {\n action: 'Open post details',\n keys: (\n <>\n Enter or o\n \n ),\n },\n {\n action: (\n <>\n Expand content warning or\n
\n toggle expanded/collapsed thread\n \n ),\n keys: x,\n },\n {\n action: 'Close post or dialogs',\n keys: (\n <>\n Esc or Backspace\n \n ),\n },\n {\n action: 'Focus column in multi-column mode',\n keys: (\n <>\n 1 to 9\n \n ),\n },\n {\n action: 'Compose new post',\n keys: c,\n },\n {\n action: 'Compose new post (new window)',\n className: 'insignificant',\n keys: (\n <>\n Shift + c\n \n ),\n },\n {\n action: 'Send post',\n keys: (\n <>\n Ctrl + Enter or +{' '}\n Enter\n \n ),\n },\n {\n action: 'Search',\n keys: /,\n },\n {\n action: 'Reply',\n keys: r,\n },\n {\n action: 'Reply (new window)',\n className: 'insignificant',\n keys: (\n <>\n Shift + r\n \n ),\n },\n {\n action: 'Like (favourite)',\n keys: (\n <>\n l or f\n \n ),\n },\n {\n action: 'Boost',\n keys: (\n <>\n Shift + b\n \n ),\n },\n {\n action: 'Bookmark',\n keys: d,\n },\n {\n action: 'Toggle Cloak mode',\n keys: (\n <>\n Shift + Alt + k\n \n ),\n },\n ].map(({ action, className, keys }) => (\n \n \n \n \n ))}\n
{action}{keys}
\n
\n
\n
\n )\n );\n});\n","import './accounts.css';\n\nimport { useAutoAnimate } from '@formkit/auto-animate/preact';\nimport { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu';\nimport { useReducer } from 'preact/hooks';\n\nimport Avatar from '../components/avatar';\nimport Icon from '../components/icon';\nimport Link from '../components/link';\nimport Menu2 from '../components/menu2';\nimport MenuConfirm from '../components/menu-confirm';\nimport NameText from '../components/name-text';\nimport { api } from '../utils/api';\nimport states from '../utils/states';\nimport store from '../utils/store';\n\nfunction Accounts({ onClose }) {\n const { masto } = api();\n // Accounts\n const accounts = store.local.getJSON('accounts');\n const currentAccount = store.session.get('currentAccount');\n const moreThanOneAccount = accounts.length > 1;\n\n const [_, reload] = useReducer((x) => x + 1, 0);\n const [accountsListParent] = useAutoAnimate();\n\n return (\n
\n {!!onClose && (\n \n )}\n
\n

Accounts

\n
\n
\n
\n
    \n {accounts.map((account, i) => {\n const isCurrent = account.info.id === currentAccount;\n const isDefault = i === 0; // first account is always default\n return (\n
  • \n
    \n {moreThanOneAccount && (\n \n \n \n )}\n {\n if (isCurrent) {\n try {\n const info = await masto.v1.accounts\n .$select(account.info.id)\n .fetch();\n console.log('fetched account info', info);\n account.info = info;\n store.local.setJSON('accounts', accounts);\n reload();\n } catch (e) {}\n }\n }}\n />\n {\n if (isCurrent) {\n states.showAccount = `${account.info.username}@${account.instanceURL}`;\n } else {\n store.session.set('currentAccount', account.info.id);\n location.reload();\n }\n }}\n />\n
    \n
    \n {isDefault && moreThanOneAccount && (\n <>\n Default{' '}\n \n )}\n \n \n \n }\n >\n {\n states.showAccount = `${account.info.username}@${account.instanceURL}`;\n }}\n >\n \n View profile…\n \n \n {moreThanOneAccount && (\n {\n // Move account to the top of the list\n accounts.splice(i, 1);\n accounts.unshift(account);\n store.local.setJSON('accounts', accounts);\n reload();\n }}\n >\n \n Set as default\n \n )}\n \n \n Log out @{account.info.acct}?\n \n }\n disabled={!isCurrent}\n menuItemClassName=\"danger\"\n onClick={() => {\n // const yes = confirm('Log out?');\n // if (!yes) return;\n accounts.splice(i, 1);\n store.local.setJSON('accounts', accounts);\n // location.reload();\n location.href = location.pathname || '/';\n }}\n >\n \n Log out…\n \n \n
    \n
  • \n );\n })}\n
\n

\n \n Add an existing account\n \n

\n {moreThanOneAccount && (\n

\n \n Note: Default account will always be used for first load.\n Switched accounts will persist during the session.\n \n

\n )}\n
\n
\n
\n );\n}\n\nexport default Accounts;\n","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20fill-rule='evenodd'%20stroke-linejoin='round'%20stroke-miterlimit='2'%20clip-rule='evenodd'%20viewBox='0%200%2064%2064'%3e%3cpath%20fill='none'%20d='M0%200h63.994v63.994H0z'/%3e%3cpath%20fill='%23a4bff7'%20d='M37.774%2011.471c14.639%203.752%2019.034%2016.557%2015.889%2031.304-.696%203.261-2.563%206.661-6.356%208.693-3.204%201.717-8.07%202.537-15.338.55l-9.634-2.404C11.651%2046.992%208.378%2038.733%2010.027%2031.823c3.627-15.201%2015.543-23.48%2027.747-20.352Z'/%3e%3cpath%20fill='%23d8e7fe'%20d='M36.76%2015.429c12.289%203.15%2015.547%2014.114%2012.907%2026.493-.947%204.44-4.937%209.365-16.664%206.143l-9.684-2.417c-7.854-1.923-10.53-7.8-9.318-12.877%203.016-12.639%2012.611-19.943%2022.759-17.342Z'/%3e%3cpath%20fill='%236081e6'%20d='M27.471%2024.991c-1.457-.698-7.229%203.213-7.663%208.926-.182%202.39%204.55%203.237%205.071-.169.725-4.743%203.715-8.218%202.592-8.757Zm10.746%202.005c-2.083.327-.382%205.901-.595%2010.727-.123%202.8%204.388%203.464%204.703%202.011%201.098-5.073-2.066-13.058-4.108-12.738Z'/%3e%3c/svg%3e\"","// Utils for push notifications\nimport { api } from './api';\nimport { getCurrentAccount } from './store-utils';\n\n// Subscription is an object with the following structure:\n// {\n// data: {\n// alerts: {\n// admin: {\n// report: boolean,\n// signUp: boolean,\n// },\n// favourite: boolean,\n// follow: boolean,\n// mention: boolean,\n// poll: boolean,\n// reblog: boolean,\n// status: boolean,\n// update: boolean,\n// }\n// },\n// policy: \"all\" | \"followed\" | \"follower\" | \"none\",\n// subscription: {\n// endpoint: string,\n// keys: {\n// auth: string,\n// p256dh: string,\n// },\n// },\n// }\n\n// Back-end CRUD\n// =============\n\nfunction createBackendPushSubscription(subscription) {\n const { masto } = api();\n return masto.v1.push.subscription.create(subscription);\n}\n\nfunction fetchBackendPushSubscription() {\n const { masto } = api();\n return masto.v1.push.subscription.fetch();\n}\n\nfunction updateBackendPushSubscription(subscription) {\n const { masto } = api();\n return masto.v1.push.subscription.update(subscription);\n}\n\nfunction removeBackendPushSubscription() {\n const { masto } = api();\n return masto.v1.push.subscription.remove();\n}\n\n// Front-end\n// =========\n\nexport function isPushSupported() {\n return 'serviceWorker' in navigator && 'PushManager' in window;\n}\n\nexport function getRegistration() {\n // return navigator.serviceWorker.ready;\n return navigator.serviceWorker.getRegistration();\n}\n\nasync function getSubscription() {\n const registration = await getRegistration();\n const subscription = registration\n ? await registration.pushManager.getSubscription()\n : undefined;\n return { registration, subscription };\n}\n\nfunction urlBase64ToUint8Array(base64String) {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = `${base64String}${padding}`\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n const rawData = window.atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n\n return outputArray;\n}\n\n// Front-end <-> back-end\n// ======================\n\nexport async function initSubscription() {\n if (!isPushSupported()) return;\n const { subscription } = await getSubscription();\n let backendSubscription = null;\n try {\n backendSubscription = await fetchBackendPushSubscription();\n } catch (err) {\n if (/(not found|unknown)/i.test(err.message)) {\n // No subscription found\n } else {\n // Other error\n throw err;\n }\n }\n console.log('INIT subscription', {\n subscription,\n backendSubscription,\n });\n\n // Check if the subscription changed\n if (backendSubscription && subscription) {\n const sameEndpoint = backendSubscription.endpoint === subscription.endpoint;\n const { vapidKey } = getCurrentAccount();\n const sameKey = backendSubscription.serverKey === vapidKey;\n if (!sameEndpoint) {\n throw new Error('Backend subscription endpoint changed');\n }\n if (sameKey) {\n // Subscription didn't change\n } else {\n // Subscription changed\n console.error('🔔 Subscription changed', {\n sameEndpoint,\n serverKey: backendSubscription.serverKey,\n vapIdKey: vapidKey,\n endpoint1: backendSubscription.endpoint,\n endpoint2: subscription.endpoint,\n sameKey,\n key1: backendSubscription.serverKey,\n key2: vapidKey,\n });\n throw new Error('Backend subscription key and vapid key changed');\n // Only unsubscribe from backend, not from browser\n // await removeBackendPushSubscription();\n // // Now let's resubscribe\n // // NOTE: I have no idea if this works\n // return await updateSubscription({\n // data: backendSubscription.data,\n // policy: backendSubscription.policy,\n // });\n }\n }\n\n if (subscription && !backendSubscription) {\n // check if account's vapidKey is same as subscription's applicationServerKey\n const { vapidKey } = getCurrentAccount();\n const { applicationServerKey } = subscription.options;\n const vapidKeyStr = urlBase64ToUint8Array(vapidKey).toString();\n const applicationServerKeyStr = new Uint8Array(\n applicationServerKey,\n ).toString();\n const sameKey = vapidKeyStr === applicationServerKeyStr;\n if (sameKey) {\n // Subscription didn't change\n } else {\n // Subscription changed\n console.error('🔔 Subscription changed', {\n vapidKeyStr,\n applicationServerKeyStr,\n sameKey,\n });\n // Unsubscribe since backend doesn't have a subscription\n await subscription.unsubscribe();\n throw new Error('Subscription key and vapid key changed');\n }\n }\n\n // Check if backend subscription returns 404\n // if (subscription && !backendSubscription) {\n // // Re-subscribe to backend\n // backendSubscription = await createBackendPushSubscription({\n // subscription,\n // data: {},\n // policy: 'all',\n // });\n // }\n\n return { subscription, backendSubscription };\n}\n\nexport async function updateSubscription({ data, policy }) {\n console.log('🔔 Updating subscription', { data, policy });\n if (!isPushSupported()) return;\n let { registration, subscription } = await getSubscription();\n let backendSubscription = null;\n\n if (subscription) {\n try {\n backendSubscription = await updateBackendPushSubscription({\n data,\n policy,\n });\n // TODO: save subscription in user settings\n } catch (error) {\n // Backend doesn't have a subscription for this user\n // Create a new one\n backendSubscription = await createBackendPushSubscription({\n subscription,\n data,\n policy,\n });\n // TODO: save subscription in user settings\n }\n } else {\n // User is not subscribed\n const { vapidKey } = getCurrentAccount();\n if (!vapidKey) throw new Error('No server key found');\n subscription = await registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: urlBase64ToUint8Array(vapidKey),\n });\n backendSubscription = await createBackendPushSubscription({\n subscription,\n data,\n policy,\n });\n // TODO: save subscription in user settings\n }\n\n return { subscription, backendSubscription };\n}\n\nexport async function removeSubscription() {\n if (!isPushSupported()) return;\n const { subscription } = await getSubscription();\n if (subscription) {\n await removeBackendPushSubscription();\n await subscription.unsubscribe();\n }\n}\n","import './settings.css';\n\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { useSnapshot } from 'valtio';\n\nimport logo from '../assets/logo.svg';\n\nimport Icon from '../components/icon';\nimport Link from '../components/link';\nimport RelativeTime from '../components/relative-time';\nimport targetLanguages from '../data/lingva-target-languages';\nimport { api } from '../utils/api';\nimport getTranslateTargetLanguage from '../utils/get-translate-target-language';\nimport localeCode2Text from '../utils/localeCode2Text';\nimport {\n initSubscription,\n isPushSupported,\n removeSubscription,\n updateSubscription,\n} from '../utils/push-notifications';\nimport showToast from '../utils/show-toast';\nimport states from '../utils/states';\nimport store from '../utils/store';\n\nconst DEFAULT_TEXT_SIZE = 16;\nconst TEXT_SIZES = [15, 16, 17, 18, 19, 20];\nconst {\n PHANPY_WEBSITE: WEBSITE,\n PHANPY_PRIVACY_POLICY_URL: PRIVACY_POLICY_URL,\n PHANPY_IMG_ALT_API_URL: IMG_ALT_API_URL,\n} = import.meta.env;\n\nfunction Settings({ onClose }) {\n const snapStates = useSnapshot(states);\n const currentTheme = store.local.get('theme') || 'auto';\n const themeFormRef = useRef();\n const targetLanguage =\n snapStates.settings.contentTranslationTargetLanguage || null;\n const systemTargetLanguage = getTranslateTargetLanguage();\n const systemTargetLanguageText = localeCode2Text(systemTargetLanguage);\n const currentTextSize = store.local.get('textSize') || DEFAULT_TEXT_SIZE;\n\n const [prefs, setPrefs] = useState(store.account.get('preferences') || {});\n const { masto, authenticated, instance } = api();\n // Get preferences every time Settings is opened\n // NOTE: Disabled for now because I don't expect this to change often. Also for some reason, the /api/v1/preferences endpoint is cached for a while and return old prefs if refresh immediately after changing them.\n // useEffect(() => {\n // const { masto } = api();\n // (async () => {\n // try {\n // const preferences = await masto.v1.preferences.fetch();\n // setPrefs(preferences);\n // store.account.set('preferences', preferences);\n // } catch (e) {\n // // Silently fail\n // console.error(e);\n // }\n // })();\n // }, []);\n\n return (\n
\n {!!onClose && (\n \n )}\n
\n

Settings

\n
\n
\n
\n
    \n
  • \n
    \n \n
    \n
    \n {\n console.log(e);\n e.preventDefault();\n const formData = new FormData(themeFormRef.current);\n const theme = formData.get('theme');\n const html = document.documentElement;\n\n if (theme === 'auto') {\n html.classList.remove('is-light', 'is-dark');\n\n // Disable manual theme \n const $manualMeta = document.querySelector(\n 'meta[data-theme-setting=\"manual\"]',\n );\n if ($manualMeta) {\n $manualMeta.name = '';\n }\n // Enable auto theme s\n const $autoMetas = document.querySelectorAll(\n 'meta[data-theme-setting=\"auto\"]',\n );\n $autoMetas.forEach((m) => {\n m.name = 'theme-color';\n });\n } else {\n html.classList.toggle('is-light', theme === 'light');\n html.classList.toggle('is-dark', theme === 'dark');\n\n // Enable manual theme \n const $manualMeta = document.querySelector(\n 'meta[data-theme-setting=\"manual\"]',\n );\n if ($manualMeta) {\n $manualMeta.name = 'theme-color';\n $manualMeta.content =\n theme === 'light'\n ? $manualMeta.dataset.themeLightColor\n : $manualMeta.dataset.themeDarkColor;\n }\n // Disable auto theme s\n const $autoMetas = document.querySelectorAll(\n 'meta[data-theme-setting=\"auto\"]',\n );\n $autoMetas.forEach((m) => {\n m.name = '';\n });\n }\n document\n .querySelector('meta[name=\"color-scheme\"]')\n .setAttribute(\n 'content',\n theme === 'auto' ? 'dark light' : theme,\n );\n\n if (theme === 'auto') {\n store.local.del('theme');\n } else {\n store.local.set('theme', theme);\n }\n }}\n >\n
    \n \n \n \n
    \n \n
    \n
  • \n
  • \n
    \n \n
    \n
    \n A{' '}\n {\n const value = parseInt(e.target.value, 10);\n const html = document.documentElement;\n // set CSS variable\n html.style.setProperty('--text-size', `${value}px`);\n // save to local storage\n if (value === DEFAULT_TEXT_SIZE) {\n store.local.del('textSize');\n } else {\n store.local.set('textSize', e.target.value);\n }\n }}\n />{' '}\n \n A\n \n \n {TEXT_SIZES.map((size) => (\n \n
    \n
  • \n
\n
\n {authenticated && (\n <>\n

Posting

\n
\n
    \n
  • \n
    \n \n
    \n
    \n {\n const { value } = e.target;\n (async () => {\n try {\n await masto.v1.accounts.updateCredentials({\n source: {\n privacy: value,\n },\n });\n setPrefs({\n ...prefs,\n 'posting:default:visibility': value,\n });\n store.account.set('preferences', {\n ...prefs,\n 'posting:default:visibility': value,\n });\n } catch (e) {\n alert('Failed to update posting privacy');\n console.error(e);\n }\n })();\n }}\n >\n \n \n \n \n
    \n
  • \n
\n
\n

\n {' '}\n \n Synced to your instance server's settings.{' '}\n \n Go to your instance ({instance}) for more settings.\n \n \n

\n \n )}\n

Experiments

\n
\n
    \n
  • \n \n
  • \n
  • \n \n
  • \n
  • \n \n \n
    \n \n
    \n
    \n

    \n Hide \"Translate\" button for\n {snapStates.settings.contentTranslationHideLanguages.length >\n 0 && (\n <>\n {' '}\n (\n {\n snapStates.settings.contentTranslationHideLanguages\n .length\n }\n )\n \n )}\n :\n

    \n {targetLanguages.map((lang) => (\n \n ))}\n
    \n

    \n

    \n \n Note: This feature uses external translation services,\n powered by{' '}\n \n Lingva API\n {' '}\n &{' '}\n \n Lingva Translate\n \n .\n \n

    \n
    \n
    \n \n

    \n \n Automatically show translation for posts in timeline. Only\n works for short posts without content warning,\n media and poll.\n \n

    \n
    \n
\n \n {!!IMG_ALT_API_URL && (\n
  • \n \n
    \n Only for new images while composing new posts.\n
    \n
    \n \n Note: This feature uses external AI service, powered by{' '}\n \n img-alt-api\n \n . May not work well. Only for images and in English.\n \n
    \n
  • \n )}\n
  • \n \n
    \n \n Replace text as blocks, useful when taking screenshots, for\n privacy reasons.\n \n
    \n
  • \n {authenticated && (\n
  • \n {\n states.showDrafts = true;\n states.showSettings = false;\n }}\n >\n Unsent drafts\n \n
  • \n )}\n \n \n {authenticated && }\n

    About

    \n
    \n \n \n
    \n Phanpy{' '}\n {\n e.preventDefault();\n states.showAccount = 'phanpy@hachyderm.io';\n }}\n >\n @phanpy\n \n
    \n \n Built\n {' '}\n by{' '}\n {\n e.preventDefault();\n states.showAccount = 'cheeaun@mastodon.social';\n }}\n >\n @cheeaun\n \n
    \n \n

    \n \n Sponsor\n {' '}\n ·{' '}\n \n Donate\n {' '}\n ·{' '}\n \n Privacy Policy\n \n

    \n {__BUILD_TIME__ && (\n

    \n {WEBSITE && (\n <>\n Site:{' '}\n {WEBSITE.replace(/https?:\\/\\//g, '').replace(/\\/$/, '')}\n
    \n \n )}\n Version:{' '}\n {\n e.target.select();\n // Copy to clipboard\n try {\n navigator.clipboard.writeText(e.target.value);\n showToast('Version string copied');\n } catch (e) {\n console.warn(e);\n showToast('Unable to copy version string');\n }\n }}\n />{' '}\n {!__FAKE_COMMIT_HASH__ && (\n \n (\n \n \n \n )\n \n )}\n

    \n )}\n
    \n \n \n );\n}\n\nfunction PushNotificationsSection({ onClose }) {\n if (!isPushSupported()) return null;\n\n const { instance } = api();\n const [uiState, setUIState] = useState('default');\n const pushFormRef = useRef();\n const [allowNofitications, setAllowNotifications] = useState(false);\n const [needRelogin, setNeedRelogin] = useState(false);\n const previousPolicyRef = useRef();\n useEffect(() => {\n (async () => {\n setUIState('loading');\n try {\n const { subscription, backendSubscription } = await initSubscription();\n if (\n backendSubscription?.policy &&\n backendSubscription.policy !== 'none'\n ) {\n setAllowNotifications(true);\n const { alerts, policy } = backendSubscription;\n previousPolicyRef.current = policy;\n const { elements } = pushFormRef.current;\n const policyEl = elements.namedItem(policy);\n if (policyEl) policyEl.value = policy;\n // alerts is {}, iterate it\n Object.keys(alerts).forEach((alert) => {\n const el = elements.namedItem(alert);\n if (el?.type === 'checkbox') {\n el.checked = true;\n }\n });\n }\n setUIState('default');\n } catch (err) {\n console.warn(err);\n if (/outside.*authorized/i.test(err.message)) {\n setNeedRelogin(true);\n } else {\n alert(err?.message || err);\n }\n setUIState('error');\n }\n })();\n }, []);\n\n const isLoading = uiState === 'loading';\n\n return (\n {\n const values = Object.fromEntries(new FormData(pushFormRef.current));\n const allowNofitications = !!values['policy-allow'];\n const params = {\n policy: values.policy,\n data: {\n alerts: {\n mention: !!values.mention,\n favourite: !!values.favourite,\n reblog: !!values.reblog,\n follow: !!values.follow,\n follow_request: !!values.followRequest,\n poll: !!values.poll,\n update: !!values.update,\n status: !!values.status,\n },\n },\n };\n\n let alertsCount = 0;\n // Remove false values from data.alerts\n // API defaults to false anyway\n Object.keys(params.data.alerts).forEach((key) => {\n if (!params.data.alerts[key]) {\n delete params.data.alerts[key];\n } else {\n alertsCount++;\n }\n });\n const policyChanged = previousPolicyRef.current !== params.policy;\n\n console.log('PN Form', { values, allowNofitications, params });\n\n if (allowNofitications && alertsCount > 0) {\n if (policyChanged) {\n console.debug('Policy changed.');\n removeSubscription()\n .then(() => {\n updateSubscription(params);\n })\n .catch((err) => {\n console.warn(err);\n alert('Failed to update subscription. Please try again.');\n });\n } else {\n updateSubscription(params).catch((err) => {\n console.warn(err);\n alert('Failed to update subscription. Please try again.');\n });\n }\n } else {\n removeSubscription().catch((err) => {\n console.warn(err);\n alert('Failed to remove subscription. Please try again.');\n });\n }\n }}\n >\n

    Push Notifications (beta)

    \n
    \n
      \n
    • \n \n
    • \n
    \n
    \n

    \n \n NOTE: Push notifications only work for one account.\n \n

    \n \n );\n}\n\nexport default Settings;\n","const focusDeck = () => {\n let timer = setTimeout(() => {\n const columns = document.getElementById('columns');\n if (columns) {\n // Focus first column\n // columns.querySelector('.deck-container')?.focus?.();\n } else {\n const modals = document.querySelectorAll('#modal-container > *');\n if (modals?.length) {\n // Focus last modal\n const modal = modals[modals.length - 1]; // last one\n const modalFocusElement =\n modal.querySelector('[tabindex=\"-1\"]') || modal;\n if (modalFocusElement) {\n modalFocusElement.focus();\n return;\n }\n }\n const backDrop = document.querySelector('.deck-backdrop');\n if (backDrop) return;\n // Focus last deck\n const pages = document.querySelectorAll('.deck-container');\n const page = pages[pages.length - 1]; // last one\n if (page && page.tabIndex === -1) {\n console.log('FOCUS', page);\n page.focus();\n }\n }\n }, 100);\n return () => clearTimeout(timer);\n};\n\nexport default focusDeck;\n","import { useEffect, useRef } from 'preact/hooks';\nimport { useLocation } from 'react-router-dom';\n\n// Hook that runs a callback when the location changes\n// Won't run on the first render\n\nexport default function useLocationChange(fn) {\n if (!fn) return;\n const location = useLocation();\n const currentLocationRef = useRef(location.pathname);\n useEffect(() => {\n // console.log('location', {\n // current: currentLocationRef.current,\n // next: location.pathname,\n // });\n if (\n currentLocationRef.current &&\n location.pathname !== currentLocationRef.current\n ) {\n fn?.();\n }\n }, [location.pathname, fn]);\n}\n","import { useEffect, useRef, useState } from 'preact/hooks';\n\nimport { api } from '../utils/api';\nimport supports from '../utils/supports';\n\nimport Icon from './icon';\nimport MenuConfirm from './menu-confirm';\n\nfunction ListAddEdit({ list, onClose }) {\n const { masto } = api();\n const [uiState, setUIState] = useState('default');\n const editMode = !!list;\n const nameFieldRef = useRef();\n const repliesPolicyFieldRef = useRef();\n const exclusiveFieldRef = useRef();\n useEffect(() => {\n if (editMode) {\n nameFieldRef.current.value = list.title;\n repliesPolicyFieldRef.current.value = list.repliesPolicy;\n if (exclusiveFieldRef.current) {\n exclusiveFieldRef.current.checked = list.exclusive;\n }\n }\n }, [editMode]);\n const supportsExclusive = supports('@mastodon/list-exclusive');\n\n return (\n
    \n {!!onClose && (\n \n )}{' '}\n
    \n

    {editMode ? 'Edit list' : 'New list'}

    \n
    \n
    \n {\n e.preventDefault(); // Get form values\n\n const formData = new FormData(e.target);\n const title = formData.get('title');\n const repliesPolicy = formData.get('replies_policy');\n const exclusive = formData.get('exclusive') === 'on';\n console.log({\n title,\n repliesPolicy,\n exclusive,\n });\n setUIState('loading');\n\n (async () => {\n try {\n let listResult;\n\n if (editMode) {\n listResult = await masto.v1.lists.$select(list.id).update({\n title,\n replies_policy: repliesPolicy,\n exclusive,\n });\n } else {\n listResult = await masto.v1.lists.create({\n title,\n replies_policy: repliesPolicy,\n exclusive,\n });\n }\n\n console.log(listResult);\n setUIState('default');\n onClose?.({\n state: 'success',\n list: listResult,\n });\n } catch (e) {\n console.error(e);\n setUIState('error');\n alert(\n editMode ? 'Unable to edit list.' : 'Unable to create list.',\n );\n }\n })();\n }}\n >\n
    \n \n
    \n
    \n \n \n \n \n \n
    \n {supportsExclusive && (\n
    \n \n
    \n )}\n
    \n \n {editMode && (\n {\n // const yes = confirm('Delete this list?');\n // if (!yes) return;\n setUIState('loading');\n\n (async () => {\n try {\n await masto.v1.lists.$select(list.id).remove();\n setUIState('default');\n onClose?.({\n state: 'deleted',\n });\n } catch (e) {\n console.error(e);\n setUIState('error');\n alert('Unable to delete list.');\n }\n })();\n }}\n >\n \n Delete…\n \n \n )}\n
    \n \n
    \n
    \n );\n}\n\nexport default ListAddEdit;\n","import './account-info.css';\n\nimport { Menu, MenuDivider, MenuItem, SubMenu } from '@szhsin/react-menu';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'preact/hooks';\n\nimport { api } from '../utils/api';\nimport enhanceContent from '../utils/enhance-content';\nimport getHTMLText from '../utils/getHTMLText';\nimport handleContentLinks from '../utils/handle-content-links';\nimport niceDateTime from '../utils/nice-date-time';\nimport pmem from '../utils/pmem';\nimport shortenNumber from '../utils/shorten-number';\nimport showToast from '../utils/show-toast';\nimport states, { hideAllModals } from '../utils/states';\nimport store from '../utils/store';\nimport { updateAccount } from '../utils/store-utils';\n\nimport AccountBlock from './account-block';\nimport Avatar from './avatar';\nimport EmojiText from './emoji-text';\nimport Icon from './icon';\nimport Link from './link';\nimport ListAddEdit from './list-add-edit';\nimport Loader from './loader';\nimport Menu2 from './menu2';\nimport MenuConfirm from './menu-confirm';\nimport Modal from './modal';\nimport TranslationBlock from './translation-block';\n\nconst MUTE_DURATIONS = [\n 60 * 5, // 5 minutes\n 60 * 30, // 30 minutes\n 60 * 60, // 1 hour\n 60 * 60 * 6, // 6 hours\n 60 * 60 * 24, // 1 day\n 60 * 60 * 24 * 3, // 3 days\n 60 * 60 * 24 * 7, // 1 week\n 0, // forever\n];\nconst MUTE_DURATIONS_LABELS = {\n 0: 'Forever',\n 300: '5 minutes',\n 1_800: '30 minutes',\n 3_600: '1 hour',\n 21_600: '6 hours',\n 86_400: '1 day',\n 259_200: '3 days',\n 604_800: '1 week',\n};\n\nconst LIMIT = 80;\n\nconst ACCOUNT_INFO_MAX_AGE = 1000 * 60 * 10; // 10 mins\n\nfunction fetchFamiliarFollowers(currentID, masto) {\n return masto.v1.accounts.familiarFollowers.fetch({\n id: [currentID],\n });\n}\nconst memFetchFamiliarFollowers = pmem(fetchFamiliarFollowers, {\n maxAge: ACCOUNT_INFO_MAX_AGE,\n});\n\nasync function fetchPostingStats(accountID, masto) {\n const fetchStatuses = masto.v1.accounts\n .$select(accountID)\n .statuses.list({\n limit: 20,\n })\n .next();\n\n const { value: statuses } = await fetchStatuses;\n console.log('fetched statuses', statuses);\n const stats = {\n total: statuses.length,\n originals: 0,\n replies: 0,\n boosts: 0,\n };\n // Categories statuses by type\n // - Original posts (not replies to others)\n // - Threads (self-replies + 1st original post)\n // - Boosts (reblogs)\n // - Replies (not-self replies)\n statuses.forEach((status) => {\n if (status.reblog) {\n stats.boosts++;\n } else if (\n !!status.inReplyToId &&\n status.inReplyToAccountId !== status.account.id // Not self-reply\n ) {\n stats.replies++;\n } else {\n stats.originals++;\n }\n });\n\n // Count days since last post\n if (statuses.length) {\n stats.daysSinceLastPost = Math.ceil(\n (Date.now() - new Date(statuses[statuses.length - 1].createdAt)) /\n 86400000,\n );\n }\n\n console.log('posting stats', stats);\n return stats;\n}\nconst memFetchPostingStats = pmem(fetchPostingStats, {\n maxAge: ACCOUNT_INFO_MAX_AGE,\n});\n\nfunction AccountInfo({\n account,\n fetchAccount = () => {},\n standalone,\n instance,\n authenticated,\n}) {\n const { masto } = api({\n instance,\n });\n const { masto: currentMasto, instance: currentInstance } = api();\n const [uiState, setUIState] = useState('default');\n const isString = typeof account === 'string';\n const [info, setInfo] = useState(isString ? null : account);\n\n const sameCurrentInstance = useMemo(\n () => instance === currentInstance,\n [instance, currentInstance],\n );\n\n useEffect(() => {\n if (!isString) {\n setInfo(account);\n return;\n }\n setUIState('loading');\n (async () => {\n try {\n const info = await fetchAccount();\n states.accounts[`${info.id}@${instance}`] = info;\n setInfo(info);\n setUIState('default');\n } catch (e) {\n console.error(e);\n setInfo(null);\n setUIState('error');\n }\n })();\n }, [isString, account, fetchAccount]);\n\n const {\n acct,\n avatar,\n avatarStatic,\n bot,\n createdAt,\n displayName,\n emojis,\n fields,\n followersCount,\n followingCount,\n group,\n // header,\n // headerStatic,\n id,\n lastStatusAt,\n locked,\n note,\n statusesCount,\n url,\n username,\n memorial,\n moved,\n roles,\n } = info || {};\n let headerIsAvatar = false;\n let { header, headerStatic } = info || {};\n if (!header || /missing\\.png$/.test(header)) {\n if (avatar && !/missing\\.png$/.test(avatar)) {\n header = avatar;\n headerIsAvatar = true;\n if (avatarStatic && !/missing\\.png$/.test(avatarStatic)) {\n headerStatic = avatarStatic;\n }\n }\n }\n\n const isSelf = useMemo(\n () => id === store.session.get('currentAccount'),\n [id],\n );\n\n useEffect(() => {\n const infoHasEssentials = !!(\n info?.id &&\n info?.username &&\n info?.acct &&\n info?.avatar &&\n info?.avatarStatic &&\n info?.displayName &&\n info?.url\n );\n if (isSelf && instance && infoHasEssentials) {\n const accounts = store.local.getJSON('accounts');\n let updated = false;\n accounts.forEach((account) => {\n if (account.info.id === info.id && account.instanceURL === instance) {\n account.info = info;\n updated = true;\n }\n });\n if (updated) {\n console.log('Updated account info', info);\n store.local.setJSON('accounts', accounts);\n }\n }\n }, [isSelf, info, instance]);\n\n const accountInstance = useMemo(() => {\n if (!url) return null;\n const domain = new URL(url).hostname;\n return domain;\n }, [url]);\n\n const [headerCornerColors, setHeaderCornerColors] = useState([]);\n\n const followersIterator = useRef();\n const familiarFollowersCache = useRef([]);\n async function fetchFollowers(firstLoad) {\n if (firstLoad || !followersIterator.current) {\n followersIterator.current = masto.v1.accounts.$select(id).followers.list({\n limit: LIMIT,\n });\n }\n const results = await followersIterator.current.next();\n if (isSelf) return results;\n if (!sameCurrentInstance) return results;\n\n const { value } = results;\n let newValue = [];\n // On first load, fetch familiar followers, merge to top of results' `value`\n // Remove dups on every fetch\n if (firstLoad) {\n const familiarFollowers = await masto.v1.accounts.familiarFollowers.fetch(\n {\n id: [id],\n },\n );\n familiarFollowersCache.current = familiarFollowers[0].accounts;\n newValue = [\n ...familiarFollowersCache.current,\n ...value.filter(\n (account) =>\n !familiarFollowersCache.current.some(\n (familiar) => familiar.id === account.id,\n ),\n ),\n ];\n } else if (value?.length) {\n newValue = value.filter(\n (account) =>\n !familiarFollowersCache.current.some(\n (familiar) => familiar.id === account.id,\n ),\n );\n }\n\n return {\n ...results,\n value: newValue,\n };\n }\n\n const followingIterator = useRef();\n async function fetchFollowing(firstLoad) {\n if (firstLoad || !followingIterator.current) {\n followingIterator.current = masto.v1.accounts.$select(id).following.list({\n limit: LIMIT,\n });\n }\n const results = await followingIterator.current.next();\n return results;\n }\n\n const LinkOrDiv = standalone ? 'div' : Link;\n const accountLink = instance ? `/${instance}/a/${id}` : `/a/${id}`;\n\n const [familiarFollowers, setFamiliarFollowers] = useState([]);\n const [postingStats, setPostingStats] = useState();\n const [postingStatsUIState, setPostingStatsUIState] = useState('default');\n const hasPostingStats = !!postingStats?.total;\n\n const renderFamiliarFollowers = async (currentID) => {\n try {\n const followers = await memFetchFamiliarFollowers(\n currentID,\n currentMasto,\n );\n console.log('fetched familiar followers', followers);\n setFamiliarFollowers(\n followers[0].accounts.slice(0, FAMILIAR_FOLLOWERS_LIMIT),\n );\n } catch (e) {\n console.error(e);\n }\n };\n\n const renderPostingStats = async () => {\n if (!id) return;\n setPostingStatsUIState('loading');\n try {\n const stats = await memFetchPostingStats(id, masto);\n setPostingStats(stats);\n setPostingStatsUIState('default');\n } catch (e) {\n console.error(e);\n setPostingStatsUIState('error');\n }\n };\n\n const onRelationshipChange = useCallback(\n ({ relationship, currentID }) => {\n if (!relationship.following) {\n renderFamiliarFollowers(currentID);\n if (!standalone && statusesCount > 0) {\n // Only render posting stats if not standalone and has posts\n renderPostingStats();\n }\n }\n },\n [standalone, id, statusesCount],\n );\n\n return (\n \n {uiState === 'error' && (\n
    \n

    Unable to load account.

    \n

    \n \n Go to account page \n \n

    \n
    \n )}\n {uiState === 'loading' ? (\n <>\n
    \n \n
    \n
    \n
    \n

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

    \n

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

    \n
    \n \n
    \n \n \n \n \n
    \n
    \n \n ) : (\n info && (\n <>\n {!!moved && (\n
    \n

    \n {displayName} has indicated that their new account is\n now:\n

    \n {\n e.stopPropagation();\n states.showAccount = moved;\n }}\n />\n
    \n )}\n {!!header && !/missing\\.png$/.test(header) && (\n {\n if (e.target.crossOrigin) {\n if (e.target.src !== headerStatic) {\n e.target.src = headerStatic;\n } else {\n e.target.removeAttribute('crossorigin');\n e.target.src = header;\n }\n } else if (e.target.src !== headerStatic) {\n e.target.src = headerStatic;\n } else {\n e.target.remove();\n }\n }}\n crossOrigin=\"anonymous\"\n onLoad={(e) => {\n e.target.classList.add('loaded');\n try {\n // Get color from four corners of image\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d', {\n willReadFrequently: true,\n });\n canvas.width = e.target.width;\n canvas.height = e.target.height;\n ctx.drawImage(e.target, 0, 0);\n // const colors = [\n // ctx.getImageData(0, 0, 1, 1).data,\n // ctx.getImageData(e.target.width - 1, 0, 1, 1).data,\n // ctx.getImageData(0, e.target.height - 1, 1, 1).data,\n // ctx.getImageData(\n // e.target.width - 1,\n // e.target.height - 1,\n // 1,\n // 1,\n // ).data,\n // ];\n // Get 10x10 pixels from corners, get average color from each\n const pixelDimension = 10;\n const colors = [\n ctx.getImageData(0, 0, pixelDimension, pixelDimension)\n .data,\n ctx.getImageData(\n e.target.width - pixelDimension,\n 0,\n pixelDimension,\n pixelDimension,\n ).data,\n ctx.getImageData(\n 0,\n e.target.height - pixelDimension,\n pixelDimension,\n pixelDimension,\n ).data,\n ctx.getImageData(\n e.target.width - pixelDimension,\n e.target.height - pixelDimension,\n pixelDimension,\n pixelDimension,\n ).data,\n ].map((data) => {\n let r = 0;\n let g = 0;\n let b = 0;\n let a = 0;\n for (let i = 0; i < data.length; i += 4) {\n r += data[i];\n g += data[i + 1];\n b += data[i + 2];\n a += data[i + 3];\n }\n const dataLength = data.length / 4;\n return [\n r / dataLength,\n g / dataLength,\n b / dataLength,\n a / dataLength,\n ];\n });\n const rgbColors = colors.map((color) => {\n const [r, g, b, a] = lightenRGB(color);\n return `rgba(${r}, ${g}, ${b}, ${a})`;\n });\n setHeaderCornerColors(rgbColors);\n console.log({ colors, rgbColors });\n } catch (e) {\n // Silently fail\n }\n }}\n />\n )}\n
    \n \n
    \n
    \n
    \n {!!memorial && In Memoriam}\n {!!bot && (\n \n Automated\n \n )}\n {!!group && (\n \n Group\n \n )}\n {roles?.map((role) => (\n \n {role.name}\n {!!accountInstance && (\n <>\n {' '}\n {accountInstance}\n \n )}\n \n ))}\n \n \n )}\n
    \n {\n // states.showAccount = false;\n setTimeout(() => {\n states.showGenericAccounts = {\n heading: 'Followers',\n fetchAccounts: fetchFollowers,\n instance,\n excludeRelationshipAttrs: isSelf\n ? ['followedBy']\n : [],\n };\n }, 0);\n }}\n >\n {!!familiarFollowers.length && (\n \n \n {familiarFollowers.map((follower) => (\n \n ))}\n \n \n )}\n \n {shortenNumber(followersCount)}\n {' '}\n Followers\n \n {\n // states.showAccount = false;\n setTimeout(() => {\n states.showGenericAccounts = {\n heading: 'Following',\n fetchAccounts: fetchFollowing,\n instance,\n excludeRelationshipAttrs: isSelf ? ['following'] : [],\n };\n }, 0);\n }}\n >\n \n {shortenNumber(followingCount)}\n {' '}\n Following\n
    \n \n {\n // hideAllModals();\n // }\n // }\n >\n \n {shortenNumber(statusesCount)}\n {' '}\n Posts\n \n {!!createdAt && (\n
    \n Joined{' '}\n \n
    \n )}\n
    \n
    \n {!!postingStats && (\n