birdclaw 0.9.3 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cli/birdclaw.js +74 -22
  3. package/dist/client/assets/{AvatarChip-C8zELEVt.js → AvatarChip-DsHj3LT7.js} +1 -1
  4. package/dist/client/assets/{ProfilePreview-CsiLpFrb.js → ProfilePreview-CaaMHV2N.js} +1 -1
  5. package/dist/client/assets/{SavedTimelineView-BSnwnujP.js → SavedTimelineView-HNbc1InN.js} +1 -1
  6. package/dist/client/assets/{SmartTimestamp-BypN4KPq.js → SmartTimestamp-CXaNLqN7.js} +1 -1
  7. package/dist/client/assets/{TimelineRouteFrame-H3D4R0Xu.js → TimelineRouteFrame-DUF8ETx2.js} +1 -1
  8. package/dist/client/assets/{blocks-WsAOmHsv.js → blocks-CLV8UyL1.js} +1 -1
  9. package/dist/client/assets/{bookmarks-B2I0kAWY.js → bookmarks-f8mrhE5v.js} +1 -1
  10. package/dist/client/assets/{client-stream-contracts-D1QUdWfh.js → client-stream-contracts-CNz2FSrQ.js} +1 -1
  11. package/dist/client/assets/{data-sources-DI5W9oVq.js → data-sources-obqEq3vx.js} +1 -1
  12. package/dist/client/assets/{discuss-t2QxXK0h.js → discuss-IVQmzPlf.js} +1 -1
  13. package/dist/client/assets/{dms-DjyXURaJ.js → dms-Dz53c2A8.js} +1 -1
  14. package/dist/client/assets/{inbox-CkHVoykL.js → inbox-OtMwyDqg.js} +1 -1
  15. package/dist/client/assets/{index-BR860w88.js → index-gdLl886E.js} +3 -3
  16. package/dist/client/assets/likes-bYLP-Iur.js +1 -0
  17. package/dist/client/assets/{links-lDqy93u8.js → links-Calv868h.js} +1 -1
  18. package/dist/client/assets/{mapbox-CVPXIYUZ.js → mapbox-D8DIktls.js} +2 -2
  19. package/dist/client/assets/{mapbox-gl-DRRiLKWb.js → mapbox-gl-CL_i4VMi.js} +1 -1
  20. package/dist/client/assets/{mentions-B6BXntri.js → mentions-CceV_r9w.js} +1 -1
  21. package/dist/client/assets/{network-map-BCUtBk8G.js → network-map-7r9If3kD.js} +2 -2
  22. package/dist/client/assets/{profile-analyze-YExKd6Lx.js → profile-analyze-BeyDxO7C.js} +1 -1
  23. package/dist/client/assets/{profile-hydration-client-BQyC5--e.js → profile-hydration-client-kffyMcqf.js} +1 -1
  24. package/dist/client/assets/{profiles._handle-idhd3kYo.js → profiles._handle-BH11vR7-.js} +1 -1
  25. package/dist/client/assets/{query-client-DZ5C7UNo.js → query-client-CD880OPj.js} +1 -1
  26. package/dist/client/assets/{rate-limits-jGxIfvUD.js → rate-limits-pf5ibAYx.js} +1 -1
  27. package/dist/client/assets/{routes-6U4Cc79j.js → routes-DYUCTi0s.js} +1 -1
  28. package/dist/client/assets/{schemas-CntsNLmN.js → schemas-CMQMhQXI.js} +1 -1
  29. package/dist/client/assets/{styles-DT4Pxoi-.css → styles-DAoXpgpq.css} +1 -1
  30. package/dist/client/assets/{today-COmNSYaE.js → today-CwzttriK.js} +1 -1
  31. package/dist/client/assets/{useTimelineRouteData-BpQzU16P.js → useTimelineRouteData-BE84vgO5.js} +1 -1
  32. package/dist/server/assets/{AvatarChip-DWag3IzT.js → AvatarChip-B5ASnpQ4.js} +1 -1
  33. package/dist/server/assets/{FeedState-CwzcvP-p.js → FeedState-YrMZ10Gf.js} +1 -1
  34. package/dist/server/assets/{ProfileAnalysisStream-CLjrYzEx.js → ProfileAnalysisStream-1CHrSLNN.js} +2 -2
  35. package/dist/server/assets/{ProfilePreview-Bq-DSUM2.js → ProfilePreview-Dk2CdOOS.js} +2 -2
  36. package/dist/server/assets/{SavedTimelineView-Bk9nfnb-.js → SavedTimelineView-BGZvQIYS.js} +2 -2
  37. package/dist/server/assets/{SmartTimestamp-C06w_f9J.js → SmartTimestamp-sxGoy8Uj.js} +1 -1
  38. package/dist/server/assets/{SyncNowButton-CKuXKYcd.js → SyncNowButton-CsgOFaO_.js} +1 -1
  39. package/dist/server/assets/{TimelineRouteFrame-Bg3e7X_N.js → TimelineRouteFrame-BWWFisJF.js} +3 -3
  40. package/dist/server/assets/{TweetRichText-wzUAtbPS.js → TweetRichText-BEo_OCEM.js} +2 -2
  41. package/dist/server/assets/{_tanstack-start-manifest_v-mm-2VYBo.js → _tanstack-start-manifest_v-AFEKQ2i-.js} +24 -24
  42. package/dist/server/assets/{blocks-CaP_u3mY.js → blocks-DWZAKPAX.js} +3 -3
  43. package/dist/server/assets/{blocks-DKy4yTF-.js → blocks-VXmcBqKD.js} +3 -3
  44. package/dist/server/assets/{bookmarks-CPFq3JVX.js → bookmarks-B-I4ELcA.js} +1 -1
  45. package/dist/server/assets/{client-stream-contracts-gtXEreFY.js → client-stream-contracts-DVzk8DzM.js} +4 -4
  46. package/dist/server/assets/{data-sources-DWwmQqcO.js → data-sources-UEYjgFHD.js} +1 -1
  47. package/dist/server/assets/{discuss-CVGB4_I0.js → discuss-4b2z14mT.js} +3 -3
  48. package/dist/server/assets/{discuss-BB8wFy4L.js → discuss-CJ_vThu8.js} +3 -3
  49. package/dist/server/assets/{dms-7NzdyQZQ.js → dms-BAKB1Mia.js} +6 -6
  50. package/dist/server/assets/{dms-vbEumuuO.js → dms-BCI8W9u2.js} +4 -4
  51. package/dist/server/assets/{inbox-CBeZctFd.js → inbox-BJzEE8Aa.js} +2 -2
  52. package/dist/server/assets/{inbox-UpHhXODd.js → inbox-D607zrwZ.js} +4 -4
  53. package/dist/server/assets/{likes-CDAjYyTm.js → likes-CMQGc5bh.js} +1 -1
  54. package/dist/server/assets/{links-DU-TIHtg.js → links-BU_FRxcz.js} +6 -6
  55. package/dist/server/assets/{links-sQ3q2jvO.js → links-Dz-6bmkg.js} +6 -6
  56. package/dist/server/assets/{mentions-DdndGSRw.js → mentions-B2K8tGvx.js} +1 -1
  57. package/dist/server/assets/{network-map-CcOz-T9O.js → network-map-BLqLL8CR.js} +2 -2
  58. package/dist/server/assets/{network-map-B9iOapuB.js → network-map-DvfpJQy1.js} +2 -2
  59. package/dist/server/assets/{profile-analyze-CUfXmXEH.js → profile-analyze-CyfbGAsL.js} +3 -3
  60. package/dist/server/assets/{profile-analyze-BmDeTif5.js → profile-analyze-Drz-nRl-.js} +1 -1
  61. package/dist/server/assets/{profiles._handle-BAqnghwo.js → profiles._handle-BBXArSJO.js} +5 -5
  62. package/dist/server/assets/{profiles._handle-8snagiR1.js → profiles._handle-CsU6xBVm.js} +4 -4
  63. package/dist/server/assets/{rate-limits-BY2-aQPT.js → rate-limits-3C3mBM3G.js} +1 -1
  64. package/dist/server/assets/{router-B874XqWN.js → router-DeGdUXyx.js} +80 -42
  65. package/dist/server/assets/{routes-D9226vKz.js → routes-C4caR_ZX.js} +1 -1
  66. package/dist/server/assets/{today-DKWphGrC.js → today-CRa6Y-Tg.js} +3 -3
  67. package/dist/server/assets/{today-BmvIMJzI.js → today-CScZDxQx.js} +3 -3
  68. package/dist/server/assets/{ui-rDHeS-cc.js → ui-CL21-Ku0.js} +1 -1
  69. package/dist/server/assets/{useTimelineRouteData-BmDbGvQ8.js → useTimelineRouteData-BWxx9yQl.js} +6 -6
  70. package/dist/server/server.js +2 -2
  71. package/package.json +1 -1
  72. package/dist/client/assets/likes-CenHqxQG.js +0 -1
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-B-9mzPXz.js";import{t}from"./react-BwGzW7mM.js";import{At as n,Ct as r,Dt as i,Et as a,Fn as o,Gt as s,In as c,Kt as l,M as u,Mt as d,Rn as f,St as p,Tt as m,Ut as h,Wt as g,_t as _,an as v,at as y,bt as b,ct as x,ft as S,gt as C,ht as w,it as T,jt as E,kt as D,lt as O,mt as k,on as ee,ot as te,pt as A,rt as ne,sn as re,st as ie,vt as ae,wt as j,xt as oe,yt as se}from"./schemas-CntsNLmN.js";import{t as M}from"./createLucideIcon-CMLcIxOz.js";import{t as ce}from"./circle-check-BCK_qvXt.js";import{t as le}from"./repeat-2-CQ0lek01.js";import{t as ue}from"./search-C_LqodNa.js";import{C as de,a as fe,b as N,i as pe,l as me,m as he,n as P,o as ge,r as _e,s as ve,v as ye,w as be}from"./query-client-DZ5C7UNo.js";import{r as F,t as xe}from"./AvatarChip-C8zELEVt.js";import{c as Se,i as I,s as Ce,t as L}from"./ProfilePreview-CsiLpFrb.js";import{t as R}from"./SmartTimestamp-BypN4KPq.js";import{A as we,M as Te,O as Ee,at as De,ct as z,d as Oe,dt as ke,gt as B,it as Ae,k as je,lt as Me,mt as Ne,ot as Pe,pt as V,s as H,st as Fe,ut as Ie,vt as Le}from"./index-BR860w88.js";var Re=M(`book-open`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),ze=M(`bookmark-check`,[[`path`,{d:`M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z`,key:`oz39mx`}],[`path`,{d:`m9 10 2 2 4-4`,key:`1gnqz4`}]]),Be=M(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),Ve=M(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),He=class extends Ie{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){e._type=`infinite`,super.setOptions(e)}getOptimisticResult(e){return e._type=`infinite`,super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:a,isError:o,isRefetchError:s}=r,c=n.fetchMeta?.fetchMore?.direction,l=o&&c===`forward`,u=i&&c===`forward`,d=o&&c===`backward`,f=i&&c===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:de(t,n.data),hasPreviousPage:be(t,n.data),isFetchNextPageError:l,isFetchingNextPage:u,isFetchPreviousPageError:d,isFetchingPreviousPage:f,isRefetchError:s&&!l&&!d,isRefetching:a&&!u&&!f}}};function Ue(e){return e}function We(e,t){return Me(e,He,t)}var U=e(t(),1),Ge=(0,U.createContext)(null);function Ke(e){return Ue({queryKey:[...P.conversations,e],queryFn:()=>me(pe(`/api/conversation?tweetId=${encodeURIComponent(e)}`,void 0,ye,`Conversation unavailable`)).then(e=>e.items),staleTime:1/0})}function qe({children:e}){let[t,n]=(0,U.useState)(null),r=(0,U.useMemo)(()=>({expandedSurfaceId:t,setExpandedSurfaceId:n}),[t]);return(0,U.createElement)(Ge.Provider,{value:r},e)}function Je(e,t=e){let n=(0,U.useContext)(Ge),[r,i]=(0,U.useState)(null),a=n?.expandedSurfaceId??r,o=n?.setExpandedSurfaceId??i,s=a===e,c=N(),l=z({...Ke(t),enabled:s}),u=(0,U.useCallback)(()=>{o(s?null:e)},[s,o,e]),d=(0,U.useCallback)(()=>{c.prefetchQuery(Ke(t))},[c,t]),f=l.isError?`error`:l.isFetching?`loading`:l.data?`ready`:`idle`;return{error:l.error instanceof Error?l.error.message:null,isOpen:s,items:l.data??[],loading:l.isFetching,prefetch:d,status:f,toggle:u}}var W=f();function Ye(e){let t=I(e);if(!t)return null;try{return new URL(t).hostname===`pbs.twimg.com`?t:null}catch{return null}}function G({article:e}){let t=I(e.url);if(!t)return null;let r=Ye(e.coverImageUrl);return(0,W.jsxs)(`a`,{"aria-label":`Read article: ${e.title}`,className:D,"data-perf":`tweet-article-card`,href:t,rel:`noreferrer`,target:`_blank`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col justify-center gap-1 px-3.5 py-3`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,W.jsx)(Re,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-[var(--ink-soft)]`,strokeWidth:1.8}),(0,W.jsx)(`span`,{className:E,children:`Article on X`}),(0,W.jsx)(B,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-[var(--ink-soft)] opacity-0 transition-opacity group-hover/link-preview:opacity-100`,strokeWidth:1.8})]}),(0,W.jsx)(`span`,{className:d,children:e.title}),e.previewText?(0,W.jsx)(`span`,{className:n,children:e.previewText}):null]}),r?(0,W.jsx)(`div`,{className:`flex aspect-[1.45] w-40 shrink-0 overflow-hidden border-l border-[var(--line)] bg-[var(--bg-soft)] max-[720px]:w-28`,children:(0,W.jsx)(`img`,{alt:``,className:`size-full object-cover transition-transform duration-200 group-hover/link-preview:scale-[1.03]`,loading:`lazy`,src:r})}):null]})}function K({items:e}){let[t,n]=(0,U.useState)(null);if(e.length===0)return null;let r=e.slice(0,4),i=t===null?null:r[t]??null,a=i?.type===`video`||i?.type===`gif`?i.variants?.[0]?.url??Ze(i.url):null,s=r.length===1&&r[0]?.type===`image`?r[0]:null;return(0,W.jsxs)(W.Fragment,{children:[s?(0,W.jsx)(`button`,{"aria-label":`Open tweet media 1`,className:u(`tweet-media-single mt-2 max-w-full overflow-hidden rounded-2xl border border-[var(--line)] bg-[var(--bg-active)] p-0 text-left`,s.width&&s.height?`block`:`inline-block align-top`),onClick:e=>{e.stopPropagation(),n(0)},style:Xe(s),type:`button`,children:(0,W.jsx)(`img`,{alt:s.altText??`Tweet media 1`,className:u(`tweet-media-image block max-h-[720px] max-w-full`,s.width&&s.height?`size-full object-cover`:`h-auto w-auto object-contain`),height:s.height,loading:`lazy`,src:s.thumbnailUrl??s.url,width:s.width})}):(0,W.jsx)(`div`,{className:o(Math.min(e.length,4)),children:r.map((t,i)=>(0,W.jsx)(`button`,{"aria-label":`Open tweet media ${String(i+1)}`,className:c(i,Math.min(e.length,4)),onClick:e=>{e.stopPropagation(),n(i)},style:r.length===1&&t.width&&t.height?{aspectRatio:`${String(t.width)} / ${String(t.height)}`}:void 0,type:`button`,children:t.type===`image`?(0,W.jsx)(`img`,{alt:t.altText??`Tweet media ${String(i+1)}`,className:`tweet-media-image block size-full object-contain`,loading:`lazy`,src:t.thumbnailUrl??t.url}):(0,W.jsx)(`span`,{className:`tweet-media-fallback grid min-h-40 place-items-center font-semibold text-[var(--ink-soft)]`,children:t.type===`video`?`Video`:t.type===`gif`?`GIF`:`Media`})},t.url+String(i)))}),i?(0,W.jsxs)(`div`,{"aria-modal":`true`,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/85 p-4`,onClick:e=>{e.stopPropagation(),n(null)},role:`dialog`,children:[(0,W.jsx)(`button`,{"aria-label":`Close media viewer`,className:`absolute right-4 top-4 grid size-10 place-items-center rounded-full bg-white/10 text-white transition-colors hover:bg-white/20`,onClick:e=>{e.stopPropagation(),n(null)},type:`button`,children:(0,W.jsx)(Ve,{className:`size-5`,strokeWidth:1.8})}),i.type===`image`?(0,W.jsx)(`img`,{alt:i.altText??`Tweet media`,className:`max-h-[92vh] max-w-[92vw] object-contain`,onClick:e=>e.stopPropagation(),src:i.url}):a?(0,W.jsx)(`video`,{autoPlay:i.type===`gif`,className:`max-h-[92vh] max-w-[92vw]`,controls:!0,loop:i.type===`gif`,muted:i.type===`gif`,onClick:e=>e.stopPropagation(),playsInline:!0,poster:i.thumbnailUrl,src:a}):(0,W.jsxs)(`div`,{className:`grid min-h-64 min-w-80 place-items-center gap-3 rounded-2xl border border-white/20 bg-black p-6 text-white`,onClick:e=>e.stopPropagation(),children:[(0,W.jsx)(`span`,{children:i.type===`video`?`Video`:i.type===`gif`?`GIF`:`Media`}),(0,W.jsx)(`a`,{className:`rounded-full bg-white/10 px-4 py-2 text-sm font-semibold text-white transition-colors hover:bg-white/20`,href:i.url,rel:`noreferrer`,target:`_blank`,children:`Open media`})]})]}):null]})}function Xe(e){if(!e.width||!e.height)return;let t=Math.min(e.width,Math.round(e.width/e.height*720));return{aspectRatio:`${String(e.width)} / ${String(e.height)}`,width:`${String(t)}px`}}function Ze(e){try{let t=new URL(e);return t.hostname===`video.twimg.com`||/\.(?:mp4|m3u8)(?:$|[?#])/i.test(t.pathname)?e:void 0}catch{return/\.(?:mp4|m3u8)(?:$|[?#])/i.test(e)?e:void 0}}function Qe({anchorId:e,error:t,items:n,loading:r}){return r?(0,W.jsx)(`section`,{className:`mt-3 rounded-2xl border border-[var(--line)] bg-[var(--bg-card)]`,children:(0,W.jsx)(De,{detail:`Finding archived replies around this post`,label:`Loading conversation`})}):t?(0,W.jsx)(`section`,{className:`mt-3 rounded-2xl border border-[var(--alert)] bg-[var(--alert-soft)] px-4 py-3 text-[14px] text-[var(--alert)]`,children:t}):n.length<=1?(0,W.jsx)(`section`,{className:`mt-3 rounded-2xl border border-[var(--line)]`,children:(0,W.jsx)(Ae,{detail:`This post has no other archived replies locally.`,label:`No thread context yet`})}):(0,W.jsxs)(`section`,{"aria-label":`Conversation`,className:`mt-3 overflow-hidden rounded-2xl border border-[var(--line)] bg-[var(--bg-card)]`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--line)] px-4 py-2.5 text-[13px] font-bold text-[var(--ink)]`,children:[(0,W.jsx)(V,{className:A,strokeWidth:1.8}),(0,W.jsxs)(`span`,{children:[n.length,` tweets in conversation`]})]}),(0,W.jsx)(`div`,{className:`flex flex-col`,children:n.map((t,r)=>{let a=t.id===e;return(0,W.jsxs)(`div`,{className:u(`flex gap-3 px-4 py-3`,r>0&&`border-t border-[var(--line)]`,a&&`bg-[var(--accent-soft)]`),children:[(0,W.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,W.jsx)(xe,{avatarUrl:t.author.avatarUrl,hue:t.author.avatarHue,name:t.author.displayName,profileId:t.author.id,size:`small`}),r<n.length-1?(0,W.jsx)(`span`,{className:`mt-2 w-px flex-1 bg-[var(--line)]`}):null]}),(0,W.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,W.jsxs)(`header`,{className:`flex min-w-0 items-center gap-1.5 text-[14px]`,children:[(0,W.jsx)(L,{profile:t.author,children:(0,W.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:p,children:t.author.displayName}),(0,W.jsxs)(`span`,{className:b,children:[`@`,t.author.handle]})]})}),(0,W.jsx)(`span`,{className:`text-[var(--ink-soft)]`,children:`·`}),(0,W.jsx)(R,{className:i,value:t.createdAt}),a?(0,W.jsx)(`span`,{className:`ml-auto rounded-full bg-[var(--accent)] px-2 py-0.5 text-[11px] font-bold text-white`,children:`selected`}):null]}),(0,W.jsx)(H,{className:`mt-1 whitespace-pre-wrap break-words text-[14px] leading-[1.45] text-[var(--ink)] [overflow-wrap:anywhere]`,entities:t.entities,text:t.text}),(0,W.jsx)(K,{items:t.media}),t.entities.article?(0,W.jsx)(G,{article:t.entities.article}):null]})]},t.id)})})]})}function q({item:e,label:t}){return(0,W.jsxs)(`section`,{className:ne,children:[(0,W.jsx)(`p`,{className:x,children:t}),(0,W.jsxs)(`header`,{className:ie,children:[(0,W.jsx)(L,{profile:e.author,children:(0,W.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:O,children:e.author.displayName}),(0,W.jsxs)(`span`,{className:te,children:[`@`,e.author.handle]})]})}),(0,W.jsx)(`span`,{className:`text-[var(--ink-soft)]`,children:`·`}),(0,W.jsx)(R,{className:i,value:e.createdAt})]}),(0,W.jsx)(H,{className:y,entities:e.entities,text:e.text}),(0,W.jsx)(K,{items:e.media}),e.entities.article?(0,W.jsx)(G,{article:e.entities.article}):null]})}var $e=2,J=0,Y=[];function et(e){let t=e.expandedUrl||``;return e.imageUrl&&e.siteName&&e.title&&it(t)?!1:!e.imageUrl||!e.title||!e.description||e.title===e.displayUrl||e.description===e.displayUrl}function tt(){for(;J<$e&&Y.length>0;)Y.shift()?.()}function nt(e){return new Promise((t,n)=>{Y.push(()=>{J+=1,e().then(t).catch(n).finally(()=>{J=Math.max(0,J-1),tt()})}),tt()})}function rt(e){let t=new URLSearchParams({url:e});return Ue({queryKey:[...P.linkPreviews,e],queryFn:()=>nt(()=>_e(`/api/link-preview?${t.toString()}`,void 0,he,`Link preview unavailable`).then(e=>e.preview)),staleTime:30*6e4})}function X(e,t){try{return new URL(e).hostname.replace(/^www\./,``)}catch{return t}}function it(e){try{let t=new URL(e);return t.protocol===`https:`&&t.hostname===`pbs.twimg.com`&&(t.pathname.startsWith(`/media/`)||t.pathname.startsWith(`/amplify_video_thumb/`))}catch{return!1}}function at(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`https:`&&t.hostname===`pbs.twimg.com`&&(t.pathname.startsWith(`/media/`)||t.pathname.startsWith(`/amplify_video_thumb/`))?t.toString():null}catch{return null}}function ot({entry:e,index:t}){let r=I(e.expandedUrl||e.url),i=r??``,a=e.displayUrl||(r?X(r,r):``),o=r&&it(r)?r:null,s=(0,U.useMemo)(()=>({expandedUrl:i,displayUrl:a,title:e.title??(o?X(i,a):void 0),description:e.description??(o?a:void 0),imageUrl:e.imageUrl??o,siteName:e.siteName??(o?X(i,a):void 0)}),[o,a,e.description,e.imageUrl,e.siteName,e.title,i]),[c,l]=(0,U.useState)(!1),[f,p]=(0,U.useState)(!1),[m,h]=(0,U.useState)(!1),g=(0,U.useRef)(null),_=!!(r&&et(s)),v=z({...rt(r??``),enabled:_&&f&&m}),y=(0,U.useMemo)(()=>{let e=v.data;return e?{expandedUrl:I(e.url)??s.expandedUrl,displayUrl:s.displayUrl,title:e.title??s.title,description:e.description??s.description,imageUrl:e.imageUrl??s.imageUrl,siteName:e.siteName??s.siteName}:s},[s,v.data]);if((0,U.useEffect)(()=>{l(!1),p(!1),h(!1)},[s]),(0,U.useEffect)(()=>{if(!r||!_)return;let e=g.current;if(!e||typeof IntersectionObserver>`u`){p(!0);return}let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(p(!0),t.disconnect())},{rootMargin:`320px 0px`});return t.observe(e),()=>t.disconnect()},[_,r]),(0,U.useEffect)(()=>{if(!r||!f||!_)return;let e=window.setTimeout(()=>{h(!0)},100);return()=>window.clearTimeout(e)},[f,_,r]),!r)return null;let b=y.title||e.displayUrl,x=y.description&&y.description!==b?y.description:y.siteName||X(y.expandedUrl,e.displayUrl),S=y.siteName||X(y.expandedUrl,e.displayUrl),C=at(y.imageUrl),w=!!(C&&!c);return(0,W.jsxs)(`a`,{className:D,"data-perf":`link-preview-card`,href:I(y.expandedUrl)??r,ref:g,rel:`noreferrer`,target:`_blank`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col justify-center gap-1 px-3.5 py-3`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,W.jsx)(`span`,{className:E,children:S}),(0,W.jsx)(B,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-[var(--ink-soft)] opacity-0 transition-opacity group-hover/link-preview:opacity-100`,strokeWidth:1.8})]}),(0,W.jsx)(`span`,{className:d,children:b}),(0,W.jsx)(`span`,{className:n,children:x}),(0,W.jsx)(`span`,{className:u(E,`text-[12px]`),children:e.displayUrl})]}),(0,W.jsx)(`div`,{className:`flex aspect-[1.45] w-40 shrink-0 items-center justify-center overflow-hidden border-l border-[var(--line)] bg-[var(--bg-soft)] max-[720px]:w-28`,children:w?(0,W.jsx)(`img`,{alt:b,className:`size-full object-cover transition-transform duration-200 group-hover/link-preview:scale-[1.03]`,loading:`lazy`,onError:()=>l(!0),src:C??``}):(0,W.jsx)(Be,{"aria-hidden":`true`,className:`size-8 text-[var(--ink-soft)]`,strokeWidth:1.7})})]},`${e.expandedUrl}-${String(t)}`)}function st(e){if(!e)return null;try{let t=new URL(e);return`${t.protocol}//${t.hostname}${t.pathname}`}catch{return e.split(`?`)[0]??e}}function ct(e){let t=new Set;for(let n of e)for(let e of[n.url,n.thumbnailUrl]){let n=st(e);n&&t.add(n)}return t}function lt(e,t,n){if(t.size>0&&ft(e.expandedUrl,n))return!0;for(let n of[e.url,e.expandedUrl,e.displayUrl]){let e=st(n);if(e&&t.has(e))return!0}return!1}function Z(e){if(!e)return!1;try{let t=e.includes(`://`)?e:`https://${e}`;return new URL(t).hostname.replace(/^www\./,``)===`t.co`}catch{return!1}}function Q(e){return Z(e.expandedUrl)?!0:e.expandedUrl?!1:Z(e.displayUrl)?!0:!e.displayUrl&&Z(e.url)}function ut(e,t){return(t.urls??[]).filter(Q).map(t=>Se(e,t))}function dt(e,t){let n=0,r=``;for(let i of[...t].sort((e,t)=>e.start-t.start))i.start<n||i.end<=i.start||i.end>e.length||(r+=e.slice(n,i.start),n=i.end);return r+=e.slice(n),r}function $(e,t,n){if(n.size===0)return!1;let r=ut(e,t);return r.length===0?!1:dt(e,r).trim().length===0}function ft(e,t){if(!e)return!1;try{let n=new URL(e),r=n.hostname.replace(/^www\./,``);if(r!==`x.com`&&r!==`twitter.com`)return!1;let i=n.pathname.split(`/`).filter(Boolean),a=i.indexOf(`status`);if(a<0||i[a+1]!==t)return!1;let o=i[a+2];return o===`photo`||o===`video`}catch{return!1}}function pt(e,t,n,r){let i=ct(t);if(i.size===0)return e;let a=$(r,e,i);return{...e,urls:(e.urls??[]).filter(e=>!lt(e,i,n)&&!(a&&Q(e)))}}function mt(e,t,n,r){let i=ct(t);if(i.size===0)return[];let a=$(r,e,i);return(e.urls??[]).filter(e=>lt(e,i,n)||a&&Q(e)).map(e=>Se(r,e))}function ht(e,t){return(e.urls??[]).filter(n=>Q(n)||e.article&&Ce(n,e.article)?!1:t?!n.expandedUrl.includes(t):!0)}function gt(e){return e instanceof Element&&!!e.closest(`a,button,input,textarea,select,[role='button']`)}function _t({tweet:e,hiddenUrlRanges:t,visibleUrlCards:n,replyToTweet:r,quotedTweet:i}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(H,{className:a,entities:e.entities,hiddenUrlRanges:t,text:e.text}),(0,W.jsx)(K,{items:e.media}),e.entities.article?(0,W.jsx)(G,{article:e.entities.article}):null,r?(0,W.jsx)(`div`,{className:T,children:(0,W.jsx)(q,{item:r,label:`In reply to`})}):null,i?(0,W.jsx)(`div`,{className:T,children:(0,W.jsx)(q,{item:i,label:`Quoted tweet`})}):null,n.map((e,t)=>(0,W.jsx)(ot,{entry:e,index:t},`${e.expandedUrl}-${String(t)}`))]})}function vt({item:e,onReply:t,showReplyControls:n=!0}){let a=n&&e.kind!==`like`&&e.kind!==`bookmark`,o=e.retweetedTweet??e,s=o.id,c=e.retweetedTweet&&s===`${e.id}:retweeted`?e.id:s,l=o.author,d=Je(e.id,c),f=pt(o.entities,o.media,o.id,o.text),h=mt(o.entities,o.media,o.id,o.text),g=ht(f,e.retweetedTweet?null:e.quotedTweet?.id??null),v=e.retweetedTweet?o.mediaCount??o.media.length:e.mediaCount,y=o.isReplied??e.isReplied,x=o.likeCount??e.likeCount,w=o.bookmarked??e.bookmarked,T=o.liked??e.liked,E=T||x>0,D=v>0,O=!!(e.retweetedTweet?o.replyToId:e.replyToTweet||e.replyToId);return(0,W.jsxs)(`article`,{className:u(ae,`cursor-pointer [content-visibility:auto] [contain-intrinsic-size:auto_280px]`),"data-perf":`timeline-card`,onFocus:d.prefetch,onMouseEnter:d.prefetch,onClick:e=>{gt(e.target)||d.toggle()},children:[(0,W.jsx)(xe,{avatarUrl:l.avatarUrl,hue:l.avatarHue,name:l.displayName,profileId:l.id}),(0,W.jsxs)(`div`,{className:_,children:[e.retweetedTweet?(0,W.jsxs)(`div`,{className:`inline-flex items-center gap-2 text-[13px] font-medium text-[var(--ink-soft)]`,children:[(0,W.jsx)(le,{className:`size-4`,strokeWidth:1.8}),(0,W.jsx)(L,{profile:e.author,children:(0,W.jsxs)(`span`,{children:[e.author.displayName,` reposted`]})})]}):null,(0,W.jsxs)(`header`,{className:oe,children:[(0,W.jsx)(L,{profile:l,children:(0,W.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:p,children:l.displayName}),(0,W.jsxs)(`span`,{className:b,children:[`@`,l.handle]})]})}),(0,W.jsx)(`span`,{className:se,children:`·`}),(0,W.jsx)(R,{className:i,value:o.createdAt}),a||O?(0,W.jsxs)(`span`,{className:`ml-auto inline-flex items-center gap-1`,children:[O?(0,W.jsxs)(`span`,{"aria-label":`Part of a conversation`,className:u(j,r),title:`Part of a conversation`,children:[(0,W.jsx)(V,{className:`size-3.5`,strokeWidth:2}),`thread`]}):null,a?(0,W.jsxs)(`span`,{"aria-label":y?`We replied`:`Reply open`,className:u(j,y?r:m),title:y?`We replied`:`Reply open`,children:[y?(0,W.jsx)(ce,{className:`size-3.5`,strokeWidth:2}):(0,W.jsx)(Le,{className:`size-3`,strokeWidth:2.2}),y?`replied`:`open`]}):null]}):null]}),(0,W.jsx)(_t,{hiddenUrlRanges:h,quotedTweet:e.retweetedTweet?null:e.quotedTweet,replyToTweet:e.retweetedTweet?null:e.replyToTweet,tweet:o,visibleUrlCards:g}),(0,W.jsx)(`footer`,{className:C,children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3 text-[13px] text-[var(--ink-soft)]`,children:[(0,W.jsxs)(`button`,{"aria-expanded":d.isOpen,"aria-label":d.isOpen?`Hide conversation`:`Show conversation`,className:S,onClick:e=>{e.stopPropagation(),d.toggle()},type:`button`,children:[(0,W.jsx)(`span`,{className:k,children:(0,W.jsx)(V,{className:A,strokeWidth:1.7})}),(0,W.jsx)(`span`,{className:`text-[13px]`,children:d.isOpen?`Hide thread`:`Thread`})]}),a?(0,W.jsxs)(`button`,{className:S,onClick:e=>{e.stopPropagation(),t(c)},type:`button`,"aria-label":`Reply`,children:[(0,W.jsx)(`span`,{className:k,children:(0,W.jsx)(V,{className:A,strokeWidth:1.7})}),(0,W.jsx)(`span`,{className:`text-[13px]`,children:`Reply`})]}):null,(0,W.jsxs)(`a`,{"aria-label":`Analyse @${l.handle}`,className:S,href:`/profiles/${encodeURIComponent(l.handle)}`,onClick:e=>{e.stopPropagation()},title:`Analyse @${l.handle}`,children:[(0,W.jsx)(`span`,{className:k,children:(0,W.jsx)(ke,{className:A,strokeWidth:1.7})}),(0,W.jsx)(`span`,{className:`text-[13px]`,children:`Analyse`})]}),E?(0,W.jsxs)(`span`,{"aria-label":`${F(x)} likes`,className:u(`inline-flex items-center gap-1 px-2 py-1 text-[13px]`,T&&`text-[var(--like)]`),title:`${F(x)} likes`,children:[(0,W.jsx)(Ne,{className:A,strokeWidth:1.7,fill:T?`currentColor`:`none`}),(0,W.jsx)(`span`,{children:F(x)})]}):null,w?(0,W.jsx)(`span`,{"aria-label":`Bookmarked`,className:`inline-flex items-center px-2 py-1`,title:`Bookmarked`,children:(0,W.jsx)(ze,{className:A,strokeWidth:1.7})}):null,D?(0,W.jsxs)(`span`,{"aria-label":`${String(v)} media attachments`,className:`inline-flex items-center gap-1 px-2 py-1 text-[13px]`,title:`${String(v)} media attachments`,children:[(0,W.jsx)(Be,{className:A,strokeWidth:1.7}),(0,W.jsx)(`span`,{children:v})]}):null]})}),d.isOpen?(0,W.jsx)(Qe,{anchorId:c,error:d.error,items:d.items,loading:d.loading}):null]})]})}function yt({title:e,subtitles:t,action:n,controls:r}){return(0,W.jsxs)(`header`,{className:h,children:[(0,W.jsxs)(`div`,{className:`${g} flex-wrap`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,W.jsx)(`h1`,{className:l,children:e}),t]}),n]}),r]})}function bt({children:e}){return(0,W.jsx)(`p`,{className:s,children:e})}function xt({value:e,onChange:t,placeholder:n}){return(0,W.jsx)(`div`,{className:`px-4 pb-3`,children:(0,W.jsxs)(`label`,{className:re,children:[(0,W.jsx)(ue,{className:v,strokeWidth:2}),(0,W.jsx)(`input`,{className:ee,onChange:e=>t(e.target.value),placeholder:n,value:e})]})})}function St({header:e,notice:t,loading:n,loadingLabel:r,loadingDetail:i,error:a,errorTitle:o,onRetry:s,empty:c,emptyLabel:l,emptyDetail:u,children:d,hasMore:f,loadingMore:p,onLoadMore:m}){return(0,W.jsxs)(W.Fragment,{children:[e,t,(0,W.jsx)(qe,{children:(0,W.jsxs)(`section`,{className:w,children:[n?(0,W.jsx)(we,{detail:i,label:r,children:(0,W.jsx)(Te,{})}):a?(0,W.jsx)(je,{action:(0,W.jsx)(`button`,{className:`rounded-full bg-[var(--accent)] px-4 py-1.5 text-[14px] font-bold text-white`,onClick:s,type:`button`,children:`Retry`}),message:a,title:o}):c?(0,W.jsx)(Ee,{detail:u,label:l}):null,d,!n&&!a&&f?(0,W.jsx)(`div`,{className:`flex justify-center py-4`,children:(0,W.jsx)(`button`,{className:`rounded-full bg-[var(--accent)] px-5 py-1.5 text-[14px] font-bold text-white disabled:opacity-60`,disabled:p,onClick:m,type:`button`,children:p?`Loading…`:`Load more`})}):null]})})]})}var Ct=50,wt=5*6e4;function Tt({resource:e,search:t,replyFilter:n,likedOnly:r,bookmarkedOnly:i,selectedAccountId:a,pageParam:o}){let s=new URLSearchParams({resource:e,limit:String(Ct)});a&&s.set(`account`,a),n&&s.set(`replyFilter`,n),r&&s.set(`liked`,`true`),i&&s.set(`bookmarked`,`true`),t.trim()&&s.set(`search`,t.trim()),o&&(s.set(`until`,o.until),s.set(`untilId`,o.untilId)),s.sort();let c=typeof window>`u`?`http://birdclaw.local`:window.location.origin;return new URL(`/api/query?${s.toString()}`,c).toString()}function Et({resource:e,search:t,errorFallback:n,replyFilter:r,likedOnly:i=!1,bookmarkedOnly:a=!1}){let o=N(),s=z({queryKey:P.status,queryFn:({signal:e})=>fe({signal:e})}).data??null,c=Pe(s?.accounts),l=Oe(t,180),u=[...P.timelines,{resource:e,search:l,replyFilter:r??`all`,likedOnly:i,bookmarkedOnly:a,selectedAccountId:c??null}],d=We({queryKey:u,initialPageParam:void 0,queryFn:({pageParam:t,signal:n})=>ge(Tt({resource:e,search:l,replyFilter:r,likedOnly:i,bookmarkedOnly:a,selectedAccountId:c,pageParam:t}),{signal:n}),getNextPageParam:e=>{if(e.resource===`dms`)return;let t=e.items,n=t.at(-1);return t.length>=Ct&&n?{until:n.createdAt,untilId:n.id}:void 0},staleTime:wt}),f=(0,U.useMemo)(()=>{let e=new Set,t=[];for(let n of d.data?.pages??[])if(n.resource!==`dms`)for(let r of n.items)e.has(r.id)||(e.add(r.id),t.push(r));return t},[d.data]),p=Fe({mutationFn:({tweetId:e,text:t})=>ve({kind:`replyTweet`,accountId:c??`acct_primary`,tweetId:e,text:t}),onSuccess:()=>o.invalidateQueries({queryKey:u})});function m(){d.refetch()}function h(){Promise.all([o.invalidateQueries({queryKey:P.timelines}),o.invalidateQueries({queryKey:P.status})])}async function g(e){let t=window.prompt(`Reply text`);t?.trim()&&await p.mutateAsync({tweetId:e,text:t.trim()}).catch(()=>{})}let _=d.error;return{meta:s,items:f,loading:d.isPending,error:_?_ instanceof Error?_.message:n:null,replyError:p.error?p.error instanceof Error?p.error.message:`Reply failed`:null,retry:m,refreshLocalView:h,replyToTweet:g,selectedAccountId:c,hasMore:d.hasNextPage,loadingMore:d.isFetchingNextPage,loadMore:()=>d.fetchNextPage().then(()=>void 0)}}export{xt as a,bt as i,yt as n,vt as o,St as r,Et as t};
1
+ import{r as e}from"./rolldown-runtime-B-9mzPXz.js";import{t}from"./react-BwGzW7mM.js";import{At as n,Ct as r,Dt as i,Et as a,Fn as o,Gt as s,In as c,Kt as l,M as u,Mt as d,Rn as f,St as p,Tt as m,Ut as h,Wt as g,_t as _,an as v,at as y,bt as b,ct as x,ft as S,gt as C,ht as w,it as T,jt as E,kt as D,lt as O,mt as k,on as ee,ot as te,pt as A,rt as ne,sn as re,st as ie,vt as ae,wt as j,xt as oe,yt as se}from"./schemas-CMQMhQXI.js";import{t as M}from"./createLucideIcon-CMLcIxOz.js";import{t as ce}from"./circle-check-BCK_qvXt.js";import{t as le}from"./repeat-2-CQ0lek01.js";import{t as ue}from"./search-C_LqodNa.js";import{C as de,a as fe,b as N,i as pe,l as me,m as he,n as P,o as ge,r as _e,s as ve,v as ye,w as be}from"./query-client-CD880OPj.js";import{r as F,t as xe}from"./AvatarChip-DsHj3LT7.js";import{c as Se,i as I,s as Ce,t as L}from"./ProfilePreview-CaaMHV2N.js";import{t as R}from"./SmartTimestamp-CXaNLqN7.js";import{A as we,M as Te,O as Ee,at as De,ct as z,d as Oe,dt as ke,gt as B,it as Ae,k as je,lt as Me,mt as Ne,ot as Pe,pt as V,s as H,st as Fe,ut as Ie,vt as Le}from"./index-gdLl886E.js";var Re=M(`book-open`,[[`path`,{d:`M12 7v14`,key:`1akyts`}],[`path`,{d:`M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z`,key:`ruj8y`}]]),ze=M(`bookmark-check`,[[`path`,{d:`M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z`,key:`oz39mx`}],[`path`,{d:`m9 10 2 2 4-4`,key:`1gnqz4`}]]),Be=M(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),Ve=M(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),He=class extends Ie{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){e._type=`infinite`,super.setOptions(e)}getOptimisticResult(e){return e._type=`infinite`,super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:a,isError:o,isRefetchError:s}=r,c=n.fetchMeta?.fetchMore?.direction,l=o&&c===`forward`,u=i&&c===`forward`,d=o&&c===`backward`,f=i&&c===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:de(t,n.data),hasPreviousPage:be(t,n.data),isFetchNextPageError:l,isFetchingNextPage:u,isFetchPreviousPageError:d,isFetchingPreviousPage:f,isRefetchError:s&&!l&&!d,isRefetching:a&&!u&&!f}}};function Ue(e){return e}function We(e,t){return Me(e,He,t)}var U=e(t(),1),Ge=(0,U.createContext)(null);function Ke(e){return Ue({queryKey:[...P.conversations,e],queryFn:()=>me(pe(`/api/conversation?tweetId=${encodeURIComponent(e)}`,void 0,ye,`Conversation unavailable`)).then(e=>e.items),staleTime:1/0})}function qe({children:e}){let[t,n]=(0,U.useState)(null),r=(0,U.useMemo)(()=>({expandedSurfaceId:t,setExpandedSurfaceId:n}),[t]);return(0,U.createElement)(Ge.Provider,{value:r},e)}function Je(e,t=e){let n=(0,U.useContext)(Ge),[r,i]=(0,U.useState)(null),a=n?.expandedSurfaceId??r,o=n?.setExpandedSurfaceId??i,s=a===e,c=N(),l=z({...Ke(t),enabled:s}),u=(0,U.useCallback)(()=>{o(s?null:e)},[s,o,e]),d=(0,U.useCallback)(()=>{c.prefetchQuery(Ke(t))},[c,t]),f=l.isError?`error`:l.isFetching?`loading`:l.data?`ready`:`idle`;return{error:l.error instanceof Error?l.error.message:null,isOpen:s,items:l.data??[],loading:l.isFetching,prefetch:d,status:f,toggle:u}}var W=f();function Ye(e){let t=I(e);if(!t)return null;try{return new URL(t).hostname===`pbs.twimg.com`?t:null}catch{return null}}function G({article:e}){let t=I(e.url);if(!t)return null;let r=Ye(e.coverImageUrl);return(0,W.jsxs)(`a`,{"aria-label":`Read article: ${e.title}`,className:D,"data-perf":`tweet-article-card`,href:t,rel:`noreferrer`,target:`_blank`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col justify-center gap-1 px-3.5 py-3`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,W.jsx)(Re,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-[var(--ink-soft)]`,strokeWidth:1.8}),(0,W.jsx)(`span`,{className:E,children:`Article on X`}),(0,W.jsx)(B,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-[var(--ink-soft)] opacity-0 transition-opacity group-hover/link-preview:opacity-100`,strokeWidth:1.8})]}),(0,W.jsx)(`span`,{className:d,children:e.title}),e.previewText?(0,W.jsx)(`span`,{className:n,children:e.previewText}):null]}),r?(0,W.jsx)(`div`,{className:`flex aspect-[1.45] w-40 shrink-0 overflow-hidden border-l border-[var(--line)] bg-[var(--bg-soft)] max-[720px]:w-28`,children:(0,W.jsx)(`img`,{alt:``,className:`size-full object-cover transition-transform duration-200 group-hover/link-preview:scale-[1.03]`,loading:`lazy`,src:r})}):null]})}function K({items:e}){let[t,n]=(0,U.useState)(null);if(e.length===0)return null;let r=e.slice(0,4),i=t===null?null:r[t]??null,a=i?.type===`video`||i?.type===`gif`?i.variants?.[0]?.url??Ze(i.url):null,s=r.length===1&&r[0]?.type===`image`?r[0]:null;return(0,W.jsxs)(W.Fragment,{children:[s?(0,W.jsx)(`button`,{"aria-label":`Open tweet media 1`,className:u(`tweet-media-single mt-2 max-w-full overflow-hidden rounded-2xl border border-[var(--line)] bg-[var(--bg-active)] p-0 text-left`,s.width&&s.height?`block`:`inline-block align-top`),onClick:e=>{e.stopPropagation(),n(0)},style:Xe(s),type:`button`,children:(0,W.jsx)(`img`,{alt:s.altText??`Tweet media 1`,className:u(`tweet-media-image block max-h-[720px] max-w-full`,s.width&&s.height?`size-full object-cover`:`h-auto w-auto object-contain`),height:s.height,loading:`lazy`,src:s.thumbnailUrl??s.url,width:s.width})}):(0,W.jsx)(`div`,{className:o(Math.min(e.length,4)),children:r.map((t,i)=>(0,W.jsx)(`button`,{"aria-label":`Open tweet media ${String(i+1)}`,className:c(i,Math.min(e.length,4)),onClick:e=>{e.stopPropagation(),n(i)},style:r.length===1&&t.width&&t.height?{aspectRatio:`${String(t.width)} / ${String(t.height)}`}:void 0,type:`button`,children:t.type===`image`?(0,W.jsx)(`img`,{alt:t.altText??`Tweet media ${String(i+1)}`,className:`tweet-media-image block size-full object-contain`,loading:`lazy`,src:t.thumbnailUrl??t.url}):(0,W.jsx)(`span`,{className:`tweet-media-fallback grid min-h-40 place-items-center font-semibold text-[var(--ink-soft)]`,children:t.type===`video`?`Video`:t.type===`gif`?`GIF`:`Media`})},t.url+String(i)))}),i?(0,W.jsxs)(`div`,{"aria-modal":`true`,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/85 p-4`,onClick:e=>{e.stopPropagation(),n(null)},role:`dialog`,children:[(0,W.jsx)(`button`,{"aria-label":`Close media viewer`,className:`absolute right-4 top-4 grid size-10 place-items-center rounded-full bg-white/10 text-white transition-colors hover:bg-white/20`,onClick:e=>{e.stopPropagation(),n(null)},type:`button`,children:(0,W.jsx)(Ve,{className:`size-5`,strokeWidth:1.8})}),i.type===`image`?(0,W.jsx)(`img`,{alt:i.altText??`Tweet media`,className:`max-h-[92vh] max-w-[92vw] object-contain`,onClick:e=>e.stopPropagation(),src:i.url}):a?(0,W.jsx)(`video`,{autoPlay:i.type===`gif`,className:`max-h-[92vh] max-w-[92vw]`,controls:!0,loop:i.type===`gif`,muted:i.type===`gif`,onClick:e=>e.stopPropagation(),playsInline:!0,poster:i.thumbnailUrl,src:a}):(0,W.jsxs)(`div`,{className:`grid min-h-64 min-w-80 place-items-center gap-3 rounded-2xl border border-white/20 bg-black p-6 text-white`,onClick:e=>e.stopPropagation(),children:[(0,W.jsx)(`span`,{children:i.type===`video`?`Video`:i.type===`gif`?`GIF`:`Media`}),(0,W.jsx)(`a`,{className:`rounded-full bg-white/10 px-4 py-2 text-sm font-semibold text-white transition-colors hover:bg-white/20`,href:i.url,rel:`noreferrer`,target:`_blank`,children:`Open media`})]})]}):null]})}function Xe(e){if(!e.width||!e.height)return;let t=Math.min(e.width,Math.round(e.width/e.height*720));return{aspectRatio:`${String(e.width)} / ${String(e.height)}`,width:`${String(t)}px`}}function Ze(e){try{let t=new URL(e);return t.hostname===`video.twimg.com`||/\.(?:mp4|m3u8)(?:$|[?#])/i.test(t.pathname)?e:void 0}catch{return/\.(?:mp4|m3u8)(?:$|[?#])/i.test(e)?e:void 0}}function Qe({anchorId:e,error:t,items:n,loading:r}){return r?(0,W.jsx)(`section`,{className:`mt-3 rounded-2xl border border-[var(--line)] bg-[var(--bg-card)]`,children:(0,W.jsx)(De,{detail:`Finding archived replies around this post`,label:`Loading conversation`})}):t?(0,W.jsx)(`section`,{className:`mt-3 rounded-2xl border border-[var(--alert)] bg-[var(--alert-soft)] px-4 py-3 text-[14px] text-[var(--alert)]`,children:t}):n.length<=1?(0,W.jsx)(`section`,{className:`mt-3 rounded-2xl border border-[var(--line)]`,children:(0,W.jsx)(Ae,{detail:`This post has no other archived replies locally.`,label:`No thread context yet`})}):(0,W.jsxs)(`section`,{"aria-label":`Conversation`,className:`mt-3 overflow-hidden rounded-2xl border border-[var(--line)] bg-[var(--bg-card)]`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--line)] px-4 py-2.5 text-[13px] font-bold text-[var(--ink)]`,children:[(0,W.jsx)(V,{className:A,strokeWidth:1.8}),(0,W.jsxs)(`span`,{children:[n.length,` tweets in conversation`]})]}),(0,W.jsx)(`div`,{className:`flex flex-col`,children:n.map((t,r)=>{let a=t.id===e;return(0,W.jsxs)(`div`,{className:u(`flex gap-3 px-4 py-3`,r>0&&`border-t border-[var(--line)]`,a&&`bg-[var(--accent-soft)]`),children:[(0,W.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,W.jsx)(xe,{avatarUrl:t.author.avatarUrl,hue:t.author.avatarHue,name:t.author.displayName,profileId:t.author.id,size:`small`}),r<n.length-1?(0,W.jsx)(`span`,{className:`mt-2 w-px flex-1 bg-[var(--line)]`}):null]}),(0,W.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,W.jsxs)(`header`,{className:`flex min-w-0 items-center gap-1.5 text-[14px]`,children:[(0,W.jsx)(L,{profile:t.author,children:(0,W.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:p,children:t.author.displayName}),(0,W.jsxs)(`span`,{className:b,children:[`@`,t.author.handle]})]})}),(0,W.jsx)(`span`,{className:`text-[var(--ink-soft)]`,children:`·`}),(0,W.jsx)(R,{className:i,value:t.createdAt}),a?(0,W.jsx)(`span`,{className:`ml-auto rounded-full bg-[var(--accent)] px-2 py-0.5 text-[11px] font-bold text-white`,children:`selected`}):null]}),(0,W.jsx)(H,{className:`mt-1 whitespace-pre-wrap break-words text-[14px] leading-[1.45] text-[var(--ink)] [overflow-wrap:anywhere]`,entities:t.entities,text:t.text}),(0,W.jsx)(K,{items:t.media}),t.entities.article?(0,W.jsx)(G,{article:t.entities.article}):null]})]},t.id)})})]})}function q({item:e,label:t}){return(0,W.jsxs)(`section`,{className:ne,children:[(0,W.jsx)(`p`,{className:x,children:t}),(0,W.jsxs)(`header`,{className:ie,children:[(0,W.jsx)(L,{profile:e.author,children:(0,W.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:O,children:e.author.displayName}),(0,W.jsxs)(`span`,{className:te,children:[`@`,e.author.handle]})]})}),(0,W.jsx)(`span`,{className:`text-[var(--ink-soft)]`,children:`·`}),(0,W.jsx)(R,{className:i,value:e.createdAt})]}),(0,W.jsx)(H,{className:y,entities:e.entities,text:e.text}),(0,W.jsx)(K,{items:e.media}),e.entities.article?(0,W.jsx)(G,{article:e.entities.article}):null]})}var $e=2,J=0,Y=[];function et(e){let t=e.expandedUrl||``;return e.imageUrl&&e.siteName&&e.title&&it(t)?!1:!e.imageUrl||!e.title||!e.description||e.title===e.displayUrl||e.description===e.displayUrl}function tt(){for(;J<$e&&Y.length>0;)Y.shift()?.()}function nt(e){return new Promise((t,n)=>{Y.push(()=>{J+=1,e().then(t).catch(n).finally(()=>{J=Math.max(0,J-1),tt()})}),tt()})}function rt(e){let t=new URLSearchParams({url:e});return Ue({queryKey:[...P.linkPreviews,e],queryFn:()=>nt(()=>_e(`/api/link-preview?${t.toString()}`,void 0,he,`Link preview unavailable`).then(e=>e.preview)),staleTime:30*6e4})}function X(e,t){try{return new URL(e).hostname.replace(/^www\./,``)}catch{return t}}function it(e){try{let t=new URL(e);return t.protocol===`https:`&&t.hostname===`pbs.twimg.com`&&(t.pathname.startsWith(`/media/`)||t.pathname.startsWith(`/amplify_video_thumb/`))}catch{return!1}}function at(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`https:`&&t.hostname===`pbs.twimg.com`&&(t.pathname.startsWith(`/media/`)||t.pathname.startsWith(`/amplify_video_thumb/`))?t.toString():null}catch{return null}}function ot({entry:e,index:t}){let r=I(e.expandedUrl||e.url),i=r??``,a=e.displayUrl||(r?X(r,r):``),o=r&&it(r)?r:null,s=(0,U.useMemo)(()=>({expandedUrl:i,displayUrl:a,title:e.title??(o?X(i,a):void 0),description:e.description??(o?a:void 0),imageUrl:e.imageUrl??o,siteName:e.siteName??(o?X(i,a):void 0)}),[o,a,e.description,e.imageUrl,e.siteName,e.title,i]),[c,l]=(0,U.useState)(!1),[f,p]=(0,U.useState)(!1),[m,h]=(0,U.useState)(!1),g=(0,U.useRef)(null),_=!!(r&&et(s)),v=z({...rt(r??``),enabled:_&&f&&m}),y=(0,U.useMemo)(()=>{let e=v.data;return e?{expandedUrl:I(e.url)??s.expandedUrl,displayUrl:s.displayUrl,title:e.title??s.title,description:e.description??s.description,imageUrl:e.imageUrl??s.imageUrl,siteName:e.siteName??s.siteName}:s},[s,v.data]);if((0,U.useEffect)(()=>{l(!1),p(!1),h(!1)},[s]),(0,U.useEffect)(()=>{if(!r||!_)return;let e=g.current;if(!e||typeof IntersectionObserver>`u`){p(!0);return}let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(p(!0),t.disconnect())},{rootMargin:`320px 0px`});return t.observe(e),()=>t.disconnect()},[_,r]),(0,U.useEffect)(()=>{if(!r||!f||!_)return;let e=window.setTimeout(()=>{h(!0)},100);return()=>window.clearTimeout(e)},[f,_,r]),!r)return null;let b=y.title||e.displayUrl,x=y.description&&y.description!==b?y.description:y.siteName||X(y.expandedUrl,e.displayUrl),S=y.siteName||X(y.expandedUrl,e.displayUrl),C=at(y.imageUrl),w=!!(C&&!c);return(0,W.jsxs)(`a`,{className:D,"data-perf":`link-preview-card`,href:I(y.expandedUrl)??r,ref:g,rel:`noreferrer`,target:`_blank`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col justify-center gap-1 px-3.5 py-3`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,W.jsx)(`span`,{className:E,children:S}),(0,W.jsx)(B,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-[var(--ink-soft)] opacity-0 transition-opacity group-hover/link-preview:opacity-100`,strokeWidth:1.8})]}),(0,W.jsx)(`span`,{className:d,children:b}),(0,W.jsx)(`span`,{className:n,children:x}),(0,W.jsx)(`span`,{className:u(E,`text-[12px]`),children:e.displayUrl})]}),(0,W.jsx)(`div`,{className:`flex aspect-[1.45] w-40 shrink-0 items-center justify-center overflow-hidden border-l border-[var(--line)] bg-[var(--bg-soft)] max-[720px]:w-28`,children:w?(0,W.jsx)(`img`,{alt:b,className:`size-full object-cover transition-transform duration-200 group-hover/link-preview:scale-[1.03]`,loading:`lazy`,onError:()=>l(!0),src:C??``}):(0,W.jsx)(Be,{"aria-hidden":`true`,className:`size-8 text-[var(--ink-soft)]`,strokeWidth:1.7})})]},`${e.expandedUrl}-${String(t)}`)}function st(e){if(!e)return null;try{let t=new URL(e);return`${t.protocol}//${t.hostname}${t.pathname}`}catch{return e.split(`?`)[0]??e}}function ct(e){let t=new Set;for(let n of e)for(let e of[n.url,n.thumbnailUrl]){let n=st(e);n&&t.add(n)}return t}function lt(e,t,n){if(t.size>0&&ft(e.expandedUrl,n))return!0;for(let n of[e.url,e.expandedUrl,e.displayUrl]){let e=st(n);if(e&&t.has(e))return!0}return!1}function Z(e){if(!e)return!1;try{let t=e.includes(`://`)?e:`https://${e}`;return new URL(t).hostname.replace(/^www\./,``)===`t.co`}catch{return!1}}function Q(e){return Z(e.expandedUrl)?!0:e.expandedUrl?!1:Z(e.displayUrl)?!0:!e.displayUrl&&Z(e.url)}function ut(e,t){return(t.urls??[]).filter(Q).map(t=>Se(e,t))}function dt(e,t){let n=0,r=``;for(let i of[...t].sort((e,t)=>e.start-t.start))i.start<n||i.end<=i.start||i.end>e.length||(r+=e.slice(n,i.start),n=i.end);return r+=e.slice(n),r}function $(e,t,n){if(n.size===0)return!1;let r=ut(e,t);return r.length===0?!1:dt(e,r).trim().length===0}function ft(e,t){if(!e)return!1;try{let n=new URL(e),r=n.hostname.replace(/^www\./,``);if(r!==`x.com`&&r!==`twitter.com`)return!1;let i=n.pathname.split(`/`).filter(Boolean),a=i.indexOf(`status`);if(a<0||i[a+1]!==t)return!1;let o=i[a+2];return o===`photo`||o===`video`}catch{return!1}}function pt(e,t,n,r){let i=ct(t);if(i.size===0)return e;let a=$(r,e,i);return{...e,urls:(e.urls??[]).filter(e=>!lt(e,i,n)&&!(a&&Q(e)))}}function mt(e,t,n,r){let i=ct(t);if(i.size===0)return[];let a=$(r,e,i);return(e.urls??[]).filter(e=>lt(e,i,n)||a&&Q(e)).map(e=>Se(r,e))}function ht(e,t){return(e.urls??[]).filter(n=>Q(n)||e.article&&Ce(n,e.article)?!1:t?!n.expandedUrl.includes(t):!0)}function gt(e){return e instanceof Element&&!!e.closest(`a,button,input,textarea,select,[role='button']`)}function _t({tweet:e,hiddenUrlRanges:t,visibleUrlCards:n,replyToTweet:r,quotedTweet:i}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(H,{className:a,entities:e.entities,hiddenUrlRanges:t,text:e.text}),(0,W.jsx)(K,{items:e.media}),e.entities.article?(0,W.jsx)(G,{article:e.entities.article}):null,r?(0,W.jsx)(`div`,{className:T,children:(0,W.jsx)(q,{item:r,label:`In reply to`})}):null,i?(0,W.jsx)(`div`,{className:T,children:(0,W.jsx)(q,{item:i,label:`Quoted tweet`})}):null,n.map((e,t)=>(0,W.jsx)(ot,{entry:e,index:t},`${e.expandedUrl}-${String(t)}`))]})}function vt({item:e,onReply:t,showReplyControls:n=!0}){let a=n&&e.kind!==`like`&&e.kind!==`bookmark`,o=e.retweetedTweet??e,s=o.id,c=e.retweetedTweet&&s===`${e.id}:retweeted`?e.id:s,l=o.author,d=Je(e.id,c),f=pt(o.entities,o.media,o.id,o.text),h=mt(o.entities,o.media,o.id,o.text),g=ht(f,e.retweetedTweet?null:e.quotedTweet?.id??null),v=e.retweetedTweet?o.mediaCount??o.media.length:e.mediaCount,y=o.isReplied??e.isReplied,x=o.likeCount??e.likeCount,w=o.bookmarked??e.bookmarked,T=o.liked??e.liked,E=T||x>0,D=v>0,O=!!(e.retweetedTweet?o.replyToId:e.replyToTweet||e.replyToId);return(0,W.jsxs)(`article`,{className:u(ae,`cursor-pointer [content-visibility:auto] [contain-intrinsic-size:auto_280px]`),"data-perf":`timeline-card`,onFocus:d.prefetch,onMouseEnter:d.prefetch,onClick:e=>{gt(e.target)||d.toggle()},children:[(0,W.jsx)(xe,{avatarUrl:l.avatarUrl,hue:l.avatarHue,name:l.displayName,profileId:l.id}),(0,W.jsxs)(`div`,{className:_,children:[e.retweetedTweet?(0,W.jsxs)(`div`,{className:`inline-flex items-center gap-2 text-[13px] font-medium text-[var(--ink-soft)]`,children:[(0,W.jsx)(le,{className:`size-4`,strokeWidth:1.8}),(0,W.jsx)(L,{profile:e.author,children:(0,W.jsxs)(`span`,{children:[e.author.displayName,` reposted`]})})]}):null,(0,W.jsxs)(`header`,{className:oe,children:[(0,W.jsx)(L,{profile:l,children:(0,W.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:p,children:l.displayName}),(0,W.jsxs)(`span`,{className:b,children:[`@`,l.handle]})]})}),(0,W.jsx)(`span`,{className:se,children:`·`}),(0,W.jsx)(R,{className:i,value:o.createdAt}),a||O?(0,W.jsxs)(`span`,{className:`ml-auto inline-flex items-center gap-1`,children:[O?(0,W.jsxs)(`span`,{"aria-label":`Part of a conversation`,className:u(j,r),title:`Part of a conversation`,children:[(0,W.jsx)(V,{className:`size-3.5`,strokeWidth:2}),`thread`]}):null,a?(0,W.jsxs)(`span`,{"aria-label":y?`We replied`:`Reply open`,className:u(j,y?r:m),title:y?`We replied`:`Reply open`,children:[y?(0,W.jsx)(ce,{className:`size-3.5`,strokeWidth:2}):(0,W.jsx)(Le,{className:`size-3`,strokeWidth:2.2}),y?`replied`:`open`]}):null]}):null]}),(0,W.jsx)(_t,{hiddenUrlRanges:h,quotedTweet:e.retweetedTweet?null:e.quotedTweet,replyToTweet:e.retweetedTweet?null:e.replyToTweet,tweet:o,visibleUrlCards:g}),(0,W.jsx)(`footer`,{className:C,children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3 text-[13px] text-[var(--ink-soft)]`,children:[(0,W.jsxs)(`button`,{"aria-expanded":d.isOpen,"aria-label":d.isOpen?`Hide conversation`:`Show conversation`,className:S,onClick:e=>{e.stopPropagation(),d.toggle()},type:`button`,children:[(0,W.jsx)(`span`,{className:k,children:(0,W.jsx)(V,{className:A,strokeWidth:1.7})}),(0,W.jsx)(`span`,{className:`text-[13px]`,children:d.isOpen?`Hide thread`:`Thread`})]}),a?(0,W.jsxs)(`button`,{className:S,onClick:e=>{e.stopPropagation(),t(c)},type:`button`,"aria-label":`Reply`,children:[(0,W.jsx)(`span`,{className:k,children:(0,W.jsx)(V,{className:A,strokeWidth:1.7})}),(0,W.jsx)(`span`,{className:`text-[13px]`,children:`Reply`})]}):null,(0,W.jsxs)(`a`,{"aria-label":`Analyse @${l.handle}`,className:S,href:`/profiles/${encodeURIComponent(l.handle)}`,onClick:e=>{e.stopPropagation()},title:`Analyse @${l.handle}`,children:[(0,W.jsx)(`span`,{className:k,children:(0,W.jsx)(ke,{className:A,strokeWidth:1.7})}),(0,W.jsx)(`span`,{className:`text-[13px]`,children:`Analyse`})]}),E?(0,W.jsxs)(`span`,{"aria-label":`${F(x)} likes`,className:u(`inline-flex items-center gap-1 px-2 py-1 text-[13px]`,T&&`text-[var(--like)]`),title:`${F(x)} likes`,children:[(0,W.jsx)(Ne,{className:A,strokeWidth:1.7,fill:T?`currentColor`:`none`}),(0,W.jsx)(`span`,{children:F(x)})]}):null,w?(0,W.jsx)(`span`,{"aria-label":`Bookmarked`,className:`inline-flex items-center px-2 py-1`,title:`Bookmarked`,children:(0,W.jsx)(ze,{className:A,strokeWidth:1.7})}):null,D?(0,W.jsxs)(`span`,{"aria-label":`${String(v)} media attachments`,className:`inline-flex items-center gap-1 px-2 py-1 text-[13px]`,title:`${String(v)} media attachments`,children:[(0,W.jsx)(Be,{className:A,strokeWidth:1.7}),(0,W.jsx)(`span`,{children:v})]}):null]})}),d.isOpen?(0,W.jsx)(Qe,{anchorId:c,error:d.error,items:d.items,loading:d.loading}):null]})]})}function yt({title:e,subtitles:t,action:n,controls:r}){return(0,W.jsxs)(`header`,{className:h,children:[(0,W.jsxs)(`div`,{className:`${g} flex-wrap`,children:[(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-col`,children:[(0,W.jsx)(`h1`,{className:l,children:e}),t]}),n]}),r]})}function bt({children:e}){return(0,W.jsx)(`p`,{className:s,children:e})}function xt({value:e,onChange:t,placeholder:n}){return(0,W.jsx)(`div`,{className:`px-4 pb-3`,children:(0,W.jsxs)(`label`,{className:re,children:[(0,W.jsx)(ue,{className:v,strokeWidth:2}),(0,W.jsx)(`input`,{className:ee,onChange:e=>t(e.target.value),placeholder:n,value:e})]})})}function St({header:e,notice:t,loading:n,loadingLabel:r,loadingDetail:i,error:a,errorTitle:o,onRetry:s,empty:c,emptyLabel:l,emptyDetail:u,children:d,hasMore:f,loadingMore:p,onLoadMore:m}){return(0,W.jsxs)(W.Fragment,{children:[e,t,(0,W.jsx)(qe,{children:(0,W.jsxs)(`section`,{className:w,children:[n?(0,W.jsx)(we,{detail:i,label:r,children:(0,W.jsx)(Te,{})}):a?(0,W.jsx)(je,{action:(0,W.jsx)(`button`,{className:`rounded-full bg-[var(--accent)] px-4 py-1.5 text-[14px] font-bold text-white`,onClick:s,type:`button`,children:`Retry`}),message:a,title:o}):c?(0,W.jsx)(Ee,{detail:u,label:l}):null,d,!n&&!a&&f?(0,W.jsx)(`div`,{className:`flex justify-center py-4`,children:(0,W.jsx)(`button`,{className:`rounded-full bg-[var(--accent)] px-5 py-1.5 text-[14px] font-bold text-white disabled:opacity-60`,disabled:p,onClick:m,type:`button`,children:p?`Loading…`:`Load more`})}):null]})})]})}var Ct=50,wt=5*6e4;function Tt({resource:e,search:t,replyFilter:n,likedOnly:r,bookmarkedOnly:i,selectedAccountId:a,pageParam:o}){let s=new URLSearchParams({resource:e,limit:String(Ct)});a&&s.set(`account`,a),n&&s.set(`replyFilter`,n),r&&s.set(`liked`,`true`),i&&s.set(`bookmarked`,`true`),t.trim()&&s.set(`search`,t.trim()),o&&(s.set(`until`,o.until),s.set(`untilId`,o.untilId)),s.sort();let c=typeof window>`u`?`http://birdclaw.local`:window.location.origin;return new URL(`/api/query?${s.toString()}`,c).toString()}function Et({resource:e,search:t,errorFallback:n,replyFilter:r,likedOnly:i=!1,bookmarkedOnly:a=!1}){let o=N(),s=z({queryKey:P.status,queryFn:({signal:e})=>fe({signal:e})}).data??null,c=Pe(s?.accounts),l=Oe(t,180),u=[...P.timelines,{resource:e,search:l,replyFilter:r??`all`,likedOnly:i,bookmarkedOnly:a,selectedAccountId:c??null}],d=We({queryKey:u,initialPageParam:void 0,queryFn:({pageParam:t,signal:n})=>ge(Tt({resource:e,search:l,replyFilter:r,likedOnly:i,bookmarkedOnly:a,selectedAccountId:c,pageParam:t}),{signal:n}),getNextPageParam:e=>{if(e.resource===`dms`)return;let t=e.items,n=t.at(-1);return t.length>=Ct&&n?{until:n.createdAt,untilId:n.id}:void 0},staleTime:wt}),f=(0,U.useMemo)(()=>{let e=new Set,t=[];for(let n of d.data?.pages??[])if(n.resource!==`dms`)for(let r of n.items)e.has(r.id)||(e.add(r.id),t.push(r));return t},[d.data]),p=Fe({mutationFn:({tweetId:e,text:t})=>ve({kind:`replyTweet`,accountId:c??`acct_primary`,tweetId:e,text:t}),onSuccess:()=>o.invalidateQueries({queryKey:u})});function m(){d.refetch()}function h(){Promise.all([o.invalidateQueries({queryKey:P.timelines}),o.invalidateQueries({queryKey:P.status})])}async function g(e){let t=window.prompt(`Reply text`);t?.trim()&&await p.mutateAsync({tweetId:e,text:t.trim()}).catch(()=>{})}let _=d.error;return{meta:s,items:f,loading:d.isPending,error:_?_ instanceof Error?_.message:n:null,replyError:p.error?p.error instanceof Error?p.error.message:`Reply failed`:null,retry:m,refreshLocalView:h,replyToTweet:g,selectedAccountId:c,hasMore:d.hasNextPage,loadingMore:d.isFetchingNextPage,loadMore:()=>d.fetchNextPage().then(()=>void 0)}}export{xt as a,bt as i,yt as n,vt as o,St as r,Et as t};
@@ -1,4 +1,4 @@
1
- import { m as cx, t as avatarChipClass } from "./ui-rDHeS-cc.js";
1
+ import { m as cx, t as avatarChipClass } from "./ui-CL21-Ku0.js";
2
2
  import { useState } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/lib/present.ts
@@ -1,4 +1,4 @@
1
- import { K as emptyStateClass, m as cx } from "./ui-rDHeS-cc.js";
1
+ import { K as emptyStateClass, m as cx } from "./ui-CL21-Ku0.js";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  //#region src/components/BrandMark.tsx
4
4
  function BirdclawMark({ animated = false, className }) {
@@ -1,5 +1,5 @@
1
- import { q as errorCopyClass } from "./ui-rDHeS-cc.js";
2
- import { a as useNdjsonRun, o as MarkdownViewer, r as profileAnalysisStreamEventSchema, t as isTerminalStreamEvent } from "./client-stream-contracts-gtXEreFY.js";
1
+ import { q as errorCopyClass } from "./ui-CL21-Ku0.js";
2
+ import { a as useNdjsonRun, o as MarkdownViewer, r as profileAnalysisStreamEventSchema, t as isTerminalStreamEvent } from "./client-stream-contracts-DVzk8DzM.js";
3
3
  import { n as normalizeProfileHydrationHandle, t as hydrateProfileHandles } from "./profile-hydration-client-GJ4kwJS8.js";
4
4
  import { useCallback, useState } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
- import { Bt as profilePreviewTriggerClass, Ft as profilePreviewClass, It as profilePreviewHandleClass, Lt as profilePreviewHeaderClass, Nt as profilePreviewBioClass, Pt as profilePreviewCardClass, Rt as profilePreviewMetaClass, gn as tweetLinkClass, m as cx, zt as profilePreviewNameClass } from "./ui-rDHeS-cc.js";
2
- import { n as avatarPath, r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-DWag3IzT.js";
1
+ import { Bt as profilePreviewTriggerClass, Ft as profilePreviewClass, It as profilePreviewHandleClass, Lt as profilePreviewHeaderClass, Nt as profilePreviewBioClass, Pt as profilePreviewCardClass, Rt as profilePreviewMetaClass, gn as tweetLinkClass, m as cx, zt as profilePreviewNameClass } from "./ui-CL21-Ku0.js";
2
+ import { n as avatarPath, r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-B5ASnpQ4.js";
3
3
  import { Fragment, useCallback, useEffect, useId, useLayoutEffect, useRef, useState } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/lib/tweet-render.ts
@@ -1,5 +1,5 @@
1
- import { t as SyncNowButton } from "./SyncNowButton-CKuXKYcd.js";
2
- import { a as TimelineSearchField, i as TimelineHeaderSubtitle, n as TimelineFeedHeader, o as TimelineCard, r as TimelineFeedShell, t as useTimelineRouteData } from "./useTimelineRouteData-BmDbGvQ8.js";
1
+ import { t as SyncNowButton } from "./SyncNowButton-CsgOFaO_.js";
2
+ import { a as TimelineSearchField, i as TimelineHeaderSubtitle, n as TimelineFeedHeader, o as TimelineCard, r as TimelineFeedShell, t as useTimelineRouteData } from "./useTimelineRouteData-BWxx9yQl.js";
3
3
  import { useMemo, useState } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/SavedTimelineView.tsx
@@ -1,4 +1,4 @@
1
- import { a as formatShortTimestamp, i as formatExactTimestamp, o as formatSmartTimestamp } from "./AvatarChip-DWag3IzT.js";
1
+ import { a as formatShortTimestamp, i as formatExactTimestamp, o as formatSmartTimestamp } from "./AvatarChip-B5ASnpQ4.js";
2
2
  import { useSyncExternalStore } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/components/SmartTimestamp.tsx
@@ -1,4 +1,4 @@
1
- import { Yt as selectFieldClass, m as cx } from "./ui-rDHeS-cc.js";
1
+ import { Yt as selectFieldClass, m as cx } from "./ui-CL21-Ku0.js";
2
2
  import { c as postSync } from "./query-client-BdauHBgd.js";
3
3
  import { n as setStoredAccountId, r as useSelectedAccountId, t as defaultAccountId } from "./account-selection-CTdFGWRk.js";
4
4
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -1,6 +1,6 @@
1
- import { dn as tabStripClass, ln as tabButtonClass, m as cx, mn as timestampClass, un as tabButtonIndicatorClass } from "./ui-rDHeS-cc.js";
2
- import { t as SyncNowButton } from "./SyncNowButton-CKuXKYcd.js";
3
- import { a as TimelineSearchField, i as TimelineHeaderSubtitle, n as TimelineFeedHeader, o as TimelineCard, r as TimelineFeedShell, t as useTimelineRouteData } from "./useTimelineRouteData-BmDbGvQ8.js";
1
+ import { dn as tabStripClass, ln as tabButtonClass, m as cx, mn as timestampClass, un as tabButtonIndicatorClass } from "./ui-CL21-Ku0.js";
2
+ import { t as SyncNowButton } from "./SyncNowButton-CsgOFaO_.js";
3
+ import { a as TimelineSearchField, i as TimelineHeaderSubtitle, n as TimelineFeedHeader, o as TimelineCard, r as TimelineFeedShell, t as useTimelineRouteData } from "./useTimelineRouteData-BWxx9yQl.js";
4
4
  import { useMemo, useState } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
6
  //#region src/components/TimelineRouteFrame.tsx
@@ -1,5 +1,5 @@
1
- import { gn as tweetLinkClass, hn as tweetHashtagClass, s as bodyCopyClass, yn as tweetMentionClass } from "./ui-rDHeS-cc.js";
2
- import { c as collectTweetSegmentsForText, d as isTweetArticleUrlEntity, f as normalizeTweetUrlEntityRangeForText, s as safeHttpUrl, t as ProfilePreview, u as enrichFallbackUrlEntities } from "./ProfilePreview-Bq-DSUM2.js";
1
+ import { gn as tweetLinkClass, hn as tweetHashtagClass, s as bodyCopyClass, yn as tweetMentionClass } from "./ui-CL21-Ku0.js";
2
+ import { c as collectTweetSegmentsForText, d as isTweetArticleUrlEntity, f as normalizeTweetUrlEntityRangeForText, s as safeHttpUrl, t as ProfilePreview, u as enrichFallbackUrlEntities } from "./ProfilePreview-Dk2CdOOS.js";
3
3
  import { Fragment } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/TweetRichText.tsx
@@ -38,72 +38,72 @@ var tsrStartManifest = () => ({ routes: {
38
38
  ],
39
39
  css: ["/assets/index-bpFrQ5yG.css"],
40
40
  preloads: [
41
- "/assets/index-BR860w88.js",
41
+ "/assets/index-gdLl886E.js",
42
42
  "/assets/rolldown-runtime-B-9mzPXz.js",
43
43
  "/assets/react-BwGzW7mM.js",
44
44
  "/assets/react-dom-DEMAB80t.js",
45
- "/assets/schemas-CntsNLmN.js",
45
+ "/assets/schemas-CMQMhQXI.js",
46
46
  "/assets/createLucideIcon-CMLcIxOz.js",
47
47
  "/assets/circle-check-BCK_qvXt.js",
48
- "/assets/client-stream-contracts-D1QUdWfh.js",
48
+ "/assets/client-stream-contracts-CNz2FSrQ.js",
49
49
  "/assets/sparkles-Gx_BHkDX.js",
50
- "/assets/query-client-DZ5C7UNo.js",
51
- "/assets/AvatarChip-C8zELEVt.js",
52
- "/assets/ProfilePreview-CsiLpFrb.js",
53
- "/assets/SmartTimestamp-BypN4KPq.js",
54
- "/assets/profile-hydration-client-BQyC5--e.js"
50
+ "/assets/query-client-CD880OPj.js",
51
+ "/assets/AvatarChip-DsHj3LT7.js",
52
+ "/assets/ProfilePreview-CaaMHV2N.js",
53
+ "/assets/SmartTimestamp-CXaNLqN7.js",
54
+ "/assets/profile-hydration-client-kffyMcqf.js"
55
55
  ],
56
56
  scripts: [{ attrs: {
57
57
  type: "module",
58
58
  async: !0,
59
- src: "/assets/index-BR860w88.js"
59
+ src: "/assets/index-gdLl886E.js"
60
60
  } }]
61
61
  },
62
62
  "/": {
63
63
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/index.tsx",
64
64
  children: void 0,
65
- preloads: ["/assets/routes-6U4Cc79j.js", "/assets/TimelineRouteFrame-H3D4R0Xu.js"]
65
+ preloads: ["/assets/routes-DYUCTi0s.js", "/assets/TimelineRouteFrame-DUF8ETx2.js"]
66
66
  },
67
67
  "/blocks": {
68
68
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/blocks.tsx",
69
69
  children: void 0,
70
- preloads: ["/assets/blocks-WsAOmHsv.js"]
70
+ preloads: ["/assets/blocks-CLV8UyL1.js"]
71
71
  },
72
72
  "/bookmarks": {
73
73
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/bookmarks.tsx",
74
74
  children: void 0,
75
- preloads: ["/assets/bookmarks-B2I0kAWY.js", "/assets/SavedTimelineView-BSnwnujP.js"]
75
+ preloads: ["/assets/bookmarks-f8mrhE5v.js", "/assets/SavedTimelineView-HNbc1InN.js"]
76
76
  },
77
77
  "/data-sources": {
78
78
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/data-sources.tsx",
79
79
  children: void 0,
80
- preloads: ["/assets/data-sources-DI5W9oVq.js", "/assets/triangle-alert-DJPCW6jQ.js"]
80
+ preloads: ["/assets/data-sources-obqEq3vx.js", "/assets/triangle-alert-DJPCW6jQ.js"]
81
81
  },
82
82
  "/discuss": {
83
83
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/discuss.tsx",
84
84
  children: void 0,
85
- preloads: ["/assets/discuss-t2QxXK0h.js", "/assets/search-C_LqodNa.js"]
85
+ preloads: ["/assets/discuss-IVQmzPlf.js", "/assets/search-C_LqodNa.js"]
86
86
  },
87
87
  "/dms": {
88
88
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/dms.tsx",
89
89
  children: void 0,
90
- preloads: ["/assets/dms-DjyXURaJ.js", "/assets/search-C_LqodNa.js"]
90
+ preloads: ["/assets/dms-Dz53c2A8.js", "/assets/search-C_LqodNa.js"]
91
91
  },
92
92
  "/inbox": {
93
93
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/inbox.tsx",
94
94
  children: void 0,
95
- preloads: ["/assets/inbox-CkHVoykL.js"]
95
+ preloads: ["/assets/inbox-OtMwyDqg.js"]
96
96
  },
97
97
  "/likes": {
98
98
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/likes.tsx",
99
99
  children: void 0,
100
- preloads: ["/assets/likes-CenHqxQG.js", "/assets/SavedTimelineView-BSnwnujP.js"]
100
+ preloads: ["/assets/likes-bYLP-Iur.js", "/assets/SavedTimelineView-HNbc1InN.js"]
101
101
  },
102
102
  "/links": {
103
103
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/links.tsx",
104
104
  children: void 0,
105
105
  preloads: [
106
- "/assets/links-lDqy93u8.js",
106
+ "/assets/links-Calv868h.js",
107
107
  "/assets/repeat-2-CQ0lek01.js",
108
108
  "/assets/search-C_LqodNa.js",
109
109
  "/assets/users-DI3w8Mol.js"
@@ -112,13 +112,13 @@ var tsrStartManifest = () => ({ routes: {
112
112
  "/mentions": {
113
113
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/mentions.tsx",
114
114
  children: void 0,
115
- preloads: ["/assets/mentions-B6BXntri.js", "/assets/TimelineRouteFrame-H3D4R0Xu.js"]
115
+ preloads: ["/assets/mentions-CceV_r9w.js", "/assets/TimelineRouteFrame-DUF8ETx2.js"]
116
116
  },
117
117
  "/network-map": {
118
118
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/network-map.tsx",
119
119
  children: void 0,
120
120
  preloads: [
121
- "/assets/network-map-BCUtBk8G.js",
121
+ "/assets/network-map-7r9If3kD.js",
122
122
  "/assets/search-C_LqodNa.js",
123
123
  "/assets/users-DI3w8Mol.js"
124
124
  ]
@@ -126,22 +126,22 @@ var tsrStartManifest = () => ({ routes: {
126
126
  "/profile-analyze": {
127
127
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/profile-analyze.tsx",
128
128
  children: void 0,
129
- preloads: ["/assets/profile-analyze-YExKd6Lx.js", "/assets/search-C_LqodNa.js"]
129
+ preloads: ["/assets/profile-analyze-BeyDxO7C.js", "/assets/search-C_LqodNa.js"]
130
130
  },
131
131
  "/rate-limits": {
132
132
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/rate-limits.tsx",
133
133
  children: void 0,
134
- preloads: ["/assets/rate-limits-jGxIfvUD.js", "/assets/triangle-alert-DJPCW6jQ.js"]
134
+ preloads: ["/assets/rate-limits-pf5ibAYx.js", "/assets/triangle-alert-DJPCW6jQ.js"]
135
135
  },
136
136
  "/today": {
137
137
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/today.tsx",
138
138
  children: void 0,
139
- preloads: ["/assets/today-COmNSYaE.js"]
139
+ preloads: ["/assets/today-CwzttriK.js"]
140
140
  },
141
141
  "/profiles/$handle": {
142
142
  filePath: "/Users/steipete/Projects/birdclaw/src/routes/profiles.$handle.tsx",
143
143
  children: void 0,
144
- preloads: ["/assets/profiles._handle-idhd3kYo.js"]
144
+ preloads: ["/assets/profiles._handle-BH11vR7-.js"]
145
145
  }
146
146
  } });
147
147
  //#endregion
@@ -1,6 +1,6 @@
1
- import "./ui-rDHeS-cc.js";
1
+ import "./ui-CL21-Ku0.js";
2
2
  import "./query-client-BdauHBgd.js";
3
- import "./AvatarChip-DWag3IzT.js";
3
+ import "./AvatarChip-B5ASnpQ4.js";
4
4
  import { t as validateBlocksSearch } from "./route-search-BUlQ5lGM.js";
5
5
  import "./useDebouncedValue-DOnA6Xcy.js";
6
6
  import "react";
@@ -8,7 +8,7 @@ import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
8
8
  import "react/jsx-runtime";
9
9
  import "@tanstack/react-query";
10
10
  //#region src/routes/blocks.tsx
11
- var $$splitComponentImporter = () => import("./blocks-DKy4yTF-.js");
11
+ var $$splitComponentImporter = () => import("./blocks-VXmcBqKD.js");
12
12
  var Route = createFileRoute("/blocks")({
13
13
  component: lazyRouteComponent($$splitComponentImporter, "component"),
14
14
  validateSearch: validateBlocksSearch
@@ -1,9 +1,9 @@
1
- import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, K as emptyStateClass, Mt as primaryButtonClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, Yt as selectFieldClass, _t as mutedDotClass, a as blockRowClass, fn as textFieldClass, h as dangerButtonClass, i as blockRowBodyClass, m as cx, mn as timestampClass, pn as textFieldShortClass, q as errorCopyClass, sn as statusCopyClass } from "./ui-rDHeS-cc.js";
1
+ import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, K as emptyStateClass, Mt as primaryButtonClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, Yt as selectFieldClass, _t as mutedDotClass, a as blockRowClass, fn as textFieldClass, h as dangerButtonClass, i as blockRowBodyClass, m as cx, mn as timestampClass, pn as textFieldShortClass, q as errorCopyClass, sn as statusCopyClass } from "./ui-CL21-Ku0.js";
2
2
  import { _ as blockListResponseSchema, a as fetchQueryEnvelope, n as queryKeys, r as fetchJson, s as postAction } from "./query-client-BdauHBgd.js";
3
- import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-DWag3IzT.js";
3
+ import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-B5ASnpQ4.js";
4
4
  import { t as validateBlocksSearch } from "./route-search-BUlQ5lGM.js";
5
5
  import { t as useDebouncedValue } from "./useDebouncedValue-DOnA6Xcy.js";
6
- import { t as Route } from "./blocks-CaP_u3mY.js";
6
+ import { t as Route } from "./blocks-DWZAKPAX.js";
7
7
  import { useEffect, useMemo, useState } from "react";
8
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
9
  import { keepPreviousData, useQuery, useQueryClient } from "@tanstack/react-query";
@@ -1,4 +1,4 @@
1
- import { t as SavedTimelineView } from "./SavedTimelineView-Bk9nfnb-.js";
1
+ import { t as SavedTimelineView } from "./SavedTimelineView-BGZvQIYS.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/routes/bookmarks.tsx?tsr-split=component
4
4
  function BookmarksRoute() {
@@ -1,7 +1,7 @@
1
- import { gn as tweetLinkClass, m as cx, yn as tweetMentionClass } from "./ui-rDHeS-cc.js";
2
- import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-DWag3IzT.js";
3
- import { m as renderTweetPlainText, n as useFloatingPreview, r as useAvatarPreload, s as safeHttpUrl, t as ProfilePreview } from "./ProfilePreview-Bq-DSUM2.js";
4
- import { t as SmartTimestamp } from "./SmartTimestamp-C06w_f9J.js";
1
+ import { gn as tweetLinkClass, m as cx, yn as tweetMentionClass } from "./ui-CL21-Ku0.js";
2
+ import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-B5ASnpQ4.js";
3
+ import { m as renderTweetPlainText, n as useFloatingPreview, r as useAvatarPreload, s as safeHttpUrl, t as ProfilePreview } from "./ProfilePreview-Dk2CdOOS.js";
4
+ import { t as SmartTimestamp } from "./SmartTimestamp-sxGoy8Uj.js";
5
5
  import { Fragment, useCallback, useEffect, useRef, useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { z } from "zod";
@@ -1,4 +1,4 @@
1
- import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, m as cx, q as errorCopyClass, sn as statusCopyClass, wt as pageHeaderActionsClass } from "./ui-rDHeS-cc.js";
1
+ import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, m as cx, q as errorCopyClass, sn as statusCopyClass, wt as pageHeaderActionsClass } from "./ui-CL21-Ku0.js";
2
2
  import { S as liveDataSourcesResponseSchema, n as queryKeys, r as fetchJson } from "./query-client-BdauHBgd.js";
3
3
  import { useMemo } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,7 +1,7 @@
1
- import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Mt as primaryButtonClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, Wt as secondaryButtonClass, Yt as selectFieldClass, fn as textFieldClass, m as cx, q as errorCopyClass, wt as pageHeaderActionsClass } from "./ui-rDHeS-cc.js";
2
- import { a as useNdjsonRun, i as searchDiscussionStreamEventSchema, o as MarkdownViewer, t as isTerminalStreamEvent } from "./client-stream-contracts-gtXEreFY.js";
1
+ import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Mt as primaryButtonClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, Wt as secondaryButtonClass, Yt as selectFieldClass, fn as textFieldClass, m as cx, q as errorCopyClass, wt as pageHeaderActionsClass } from "./ui-CL21-Ku0.js";
2
+ import { a as useNdjsonRun, i as searchDiscussionStreamEventSchema, o as MarkdownViewer, t as isTerminalStreamEvent } from "./client-stream-contracts-DVzk8DzM.js";
3
3
  import { n as validateDiscussSearch } from "./route-search-BUlQ5lGM.js";
4
- import { t as Route$1 } from "./discuss-BB8wFy4L.js";
4
+ import { t as Route$1 } from "./discuss-CJ_vThu8.js";
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { CheckCircle2, ChevronDown, Loader2, RefreshCw, Search, Sparkles } from "lucide-react";
@@ -1,12 +1,12 @@
1
- import "./ui-rDHeS-cc.js";
2
- import "./client-stream-contracts-gtXEreFY.js";
1
+ import "./ui-CL21-Ku0.js";
2
+ import "./client-stream-contracts-DVzk8DzM.js";
3
3
  import { n as validateDiscussSearch } from "./route-search-BUlQ5lGM.js";
4
4
  import "react";
5
5
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
6
6
  import "react/jsx-runtime";
7
7
  import "lucide-react";
8
8
  //#region src/routes/discuss.tsx
9
- var $$splitComponentImporter = () => import("./discuss-CVGB4_I0.js");
9
+ var $$splitComponentImporter = () => import("./discuss-4b2z14mT.js");
10
10
  var Route$1 = createFileRoute("/discuss")({
11
11
  component: lazyRouteComponent($$splitComponentImporter, "component"),
12
12
  validateSearch: validateDiscussSearch
@@ -1,11 +1,11 @@
1
- import { A as dmMessageRowClass, At as pillClass, C as dmListNameClass, D as dmMessageBubbleInboundClass, E as dmMessageBubbleClass, F as dmThreadHeaderClass, I as dmThreadNameClass, L as dmThreadSubtitleClass, M as dmMessagesClass, Mt as primaryButtonClass, N as dmShellClass, O as dmMessageBubbleOutboundClass, P as dmThreadClass, R as dmThreadTitleClass, S as dmListItemClass, T as dmListTimestampClass, _ as dmListBodyClass, b as dmListHeaderClass, c as composerBarClass, d as contextStatRowClass, f as contextStatTermClass, g as dmComposerShellClass, jt as pillSoftClass, k as dmMessageMetaClass, kt as pillAlertClass, l as composerInputClass, m as cx, mn as timestampClass, p as contextStatValueClass, v as dmListClass, w as dmListPreviewClass, y as dmListHandleClass } from "./ui-rDHeS-cc.js";
1
+ import { A as dmMessageRowClass, At as pillClass, C as dmListNameClass, D as dmMessageBubbleInboundClass, E as dmMessageBubbleClass, F as dmThreadHeaderClass, I as dmThreadNameClass, L as dmThreadSubtitleClass, M as dmMessagesClass, Mt as primaryButtonClass, N as dmShellClass, O as dmMessageBubbleOutboundClass, P as dmThreadClass, R as dmThreadTitleClass, S as dmListItemClass, T as dmListTimestampClass, _ as dmListBodyClass, b as dmListHeaderClass, c as composerBarClass, d as contextStatRowClass, f as contextStatTermClass, g as dmComposerShellClass, jt as pillSoftClass, k as dmMessageMetaClass, kt as pillAlertClass, l as composerInputClass, m as cx, mn as timestampClass, p as contextStatValueClass, v as dmListClass, w as dmListPreviewClass, y as dmListHandleClass } from "./ui-CL21-Ku0.js";
2
2
  import "./query-client-BdauHBgd.js";
3
- import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-DWag3IzT.js";
3
+ import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-B5ASnpQ4.js";
4
4
  import "./account-selection-CTdFGWRk.js";
5
- import { o as BirdclawEmpty } from "./FeedState-CwzcvP-p.js";
6
- import { t as SmartTimestamp } from "./SmartTimestamp-C06w_f9J.js";
5
+ import { o as BirdclawEmpty } from "./FeedState-YrMZ10Gf.js";
6
+ import { t as SmartTimestamp } from "./SmartTimestamp-sxGoy8Uj.js";
7
7
  import { r as validateDmsSearch } from "./route-search-BUlQ5lGM.js";
8
- import "./SyncNowButton-CKuXKYcd.js";
8
+ import "./SyncNowButton-CsgOFaO_.js";
9
9
  import "./useDebouncedValue-DOnA6Xcy.js";
10
10
  import "react";
11
11
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
@@ -231,7 +231,7 @@ function DmWorkspace({ conversations, selectedConversation, selectedMessages, on
231
231
  }
232
232
  //#endregion
233
233
  //#region src/routes/dms.tsx
234
- var $$splitComponentImporter = () => import("./dms-vbEumuuO.js");
234
+ var $$splitComponentImporter = () => import("./dms-BCI8W9u2.js");
235
235
  var Route$1 = createFileRoute("/dms")({
236
236
  component: lazyRouteComponent($$splitComponentImporter, "component"),
237
237
  validateSearch: validateDmsSearch
@@ -1,10 +1,10 @@
1
- import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Jt as segmentedClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, dn as tabStripClass, ln as tabButtonClass, m as cx, mn as timestampClass, qt as segmentClass, un as tabButtonIndicatorClass } from "./ui-rDHeS-cc.js";
1
+ import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Jt as segmentedClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, dn as tabStripClass, ln as tabButtonClass, m as cx, mn as timestampClass, qt as segmentClass, un as tabButtonIndicatorClass } from "./ui-CL21-Ku0.js";
2
2
  import { a as fetchQueryEnvelope, n as queryKeys, r as fetchJson, s as postAction, v as dmQueryResponseSchema } from "./query-client-BdauHBgd.js";
3
3
  import { r as useSelectedAccountId } from "./account-selection-CTdFGWRk.js";
4
- import { n as FeedError, r as FeedLoading, t as FeedEmpty } from "./FeedState-CwzcvP-p.js";
4
+ import { n as FeedError, r as FeedLoading, t as FeedEmpty } from "./FeedState-YrMZ10Gf.js";
5
5
  import { r as validateDmsSearch } from "./route-search-BUlQ5lGM.js";
6
- import { n as DmWorkspace, t as Route$1 } from "./dms-7NzdyQZQ.js";
7
- import { t as SyncNowButton } from "./SyncNowButton-CKuXKYcd.js";
6
+ import { n as DmWorkspace, t as Route$1 } from "./dms-BAKB1Mia.js";
7
+ import { t as SyncNowButton } from "./SyncNowButton-CsgOFaO_.js";
8
8
  import { t as useDebouncedValue } from "./useDebouncedValue-DOnA6Xcy.js";
9
9
  import { useEffect, useMemo, useState } from "react";
10
10
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,8 +1,8 @@
1
- import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, K as emptyStateClass, Mt as primaryButtonClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, Z as feedClass, dn as tabStripClass, fn as textFieldClass, ln as tabButtonClass, m as cx, mn as timestampClass, pn as textFieldShortClass, un as tabButtonIndicatorClass } from "./ui-rDHeS-cc.js";
1
+ import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, K as emptyStateClass, Mt as primaryButtonClass, Ot as pageTitleClass, Tt as pageHeaderClass, Wt as secondaryButtonClass, Z as feedClass, dn as tabStripClass, fn as textFieldClass, ln as tabButtonClass, m as cx, mn as timestampClass, pn as textFieldShortClass, un as tabButtonIndicatorClass } from "./ui-CL21-Ku0.js";
2
2
  import { a as fetchQueryEnvelope, n as queryKeys, r as fetchJson, s as postAction, y as inboxResponseSchema } from "./query-client-BdauHBgd.js";
3
3
  import { r as useSelectedAccountId } from "./account-selection-CTdFGWRk.js";
4
4
  import { i as validateInboxSearch } from "./route-search-BUlQ5lGM.js";
5
- import { n as InboxCard, t as Route$1 } from "./inbox-UpHhXODd.js";
5
+ import { n as InboxCard, t as Route$1 } from "./inbox-D607zrwZ.js";
6
6
  import { useMemo, useState } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { Sparkles } from "lucide-react";
@@ -1,8 +1,8 @@
1
- import { $ as feedRowBodyClass, At as pillClass, Mt as primaryButtonClass, Wt as secondaryButtonClass, _t as mutedDotClass, c as composerBarClass, ct as feedRowTextClass, et as feedRowClass, it as feedRowNameClass, jt as pillSoftClass, kt as pillAlertClass, l as composerInputClass, lt as feedRowTimestampClass, m as cx, mn as timestampClass, nt as feedRowHandleClass, rt as feedRowHeaderClass, tt as feedRowDotClass, u as composerShellClass, ut as inboxAnalysisClass } from "./ui-rDHeS-cc.js";
1
+ import { $ as feedRowBodyClass, At as pillClass, Mt as primaryButtonClass, Wt as secondaryButtonClass, _t as mutedDotClass, c as composerBarClass, ct as feedRowTextClass, et as feedRowClass, it as feedRowNameClass, jt as pillSoftClass, kt as pillAlertClass, l as composerInputClass, lt as feedRowTimestampClass, m as cx, mn as timestampClass, nt as feedRowHandleClass, rt as feedRowHeaderClass, tt as feedRowDotClass, u as composerShellClass, ut as inboxAnalysisClass } from "./ui-CL21-Ku0.js";
2
2
  import "./query-client-BdauHBgd.js";
3
- import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-DWag3IzT.js";
3
+ import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-B5ASnpQ4.js";
4
4
  import "./account-selection-CTdFGWRk.js";
5
- import { t as SmartTimestamp } from "./SmartTimestamp-C06w_f9J.js";
5
+ import { t as SmartTimestamp } from "./SmartTimestamp-sxGoy8Uj.js";
6
6
  import { i as validateInboxSearch } from "./route-search-BUlQ5lGM.js";
7
7
  import "react";
8
8
  import { Link, createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
@@ -137,7 +137,7 @@ function InboxCard({ item, isReplying, replyDraft, onReplyChange, onReplyToggle,
137
137
  }
138
138
  //#endregion
139
139
  //#region src/routes/inbox.tsx
140
- var $$splitComponentImporter = () => import("./inbox-CBeZctFd.js");
140
+ var $$splitComponentImporter = () => import("./inbox-BJzEE8Aa.js");
141
141
  var Route$1 = createFileRoute("/inbox")({
142
142
  component: lazyRouteComponent($$splitComponentImporter, "component"),
143
143
  validateSearch: validateInboxSearch
@@ -1,4 +1,4 @@
1
- import { t as SavedTimelineView } from "./SavedTimelineView-Bk9nfnb-.js";
1
+ import { t as SavedTimelineView } from "./SavedTimelineView-BGZvQIYS.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/routes/likes.tsx?tsr-split=component
4
4
  function LikesRoute() {
@@ -1,9 +1,9 @@
1
- import "./ui-rDHeS-cc.js";
1
+ import "./ui-CL21-Ku0.js";
2
2
  import { b as linkInsightResponseSchema, n as queryKeys, r as fetchJson } from "./query-client-BdauHBgd.js";
3
- import { r as formatCompactNumber } from "./AvatarChip-DWag3IzT.js";
4
- import "./FeedState-CwzcvP-p.js";
5
- import "./ProfilePreview-Bq-DSUM2.js";
6
- import "./SmartTimestamp-C06w_f9J.js";
3
+ import { r as formatCompactNumber } from "./AvatarChip-B5ASnpQ4.js";
4
+ import "./FeedState-YrMZ10Gf.js";
5
+ import "./ProfilePreview-Dk2CdOOS.js";
6
+ import "./SmartTimestamp-sxGoy8Uj.js";
7
7
  import { t as hydrateProfileHandles } from "./profile-hydration-client-GJ4kwJS8.js";
8
8
  import { a as validateLinksSearch } from "./route-search-BUlQ5lGM.js";
9
9
  import { useEffect, useMemo } from "react";
@@ -231,7 +231,7 @@ function useLinksController(filters, onFiltersChange) {
231
231
  }
232
232
  //#endregion
233
233
  //#region src/routes/links.tsx
234
- var $$splitComponentImporter = () => import("./links-sQ3q2jvO.js");
234
+ var $$splitComponentImporter = () => import("./links-Dz-6bmkg.js");
235
235
  var Route$1 = createFileRoute("/links")({
236
236
  component: lazyRouteComponent($$splitComponentImporter, "component"),
237
237
  validateSearch: validateLinksSearch
@@ -1,10 +1,10 @@
1
- import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Jt as segmentedClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, Wt as secondaryButtonClass, m as cx, qt as segmentClass } from "./ui-rDHeS-cc.js";
2
- import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-DWag3IzT.js";
3
- import { i as LinkSkeletonRows, n as FeedError, r as FeedLoading, t as FeedEmpty } from "./FeedState-CwzcvP-p.js";
4
- import { t as ProfilePreview } from "./ProfilePreview-Bq-DSUM2.js";
5
- import { t as SmartTimestamp } from "./SmartTimestamp-C06w_f9J.js";
1
+ import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Jt as segmentedClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, Wt as secondaryButtonClass, m as cx, qt as segmentClass } from "./ui-CL21-Ku0.js";
2
+ import { r as formatCompactNumber, t as AvatarChip } from "./AvatarChip-B5ASnpQ4.js";
3
+ import { i as LinkSkeletonRows, n as FeedError, r as FeedLoading, t as FeedEmpty } from "./FeedState-YrMZ10Gf.js";
4
+ import { t as ProfilePreview } from "./ProfilePreview-Dk2CdOOS.js";
5
+ import { t as SmartTimestamp } from "./SmartTimestamp-sxGoy8Uj.js";
6
6
  import { a as validateLinksSearch } from "./route-search-BUlQ5lGM.js";
7
- import { a as itemSubtitle, c as mentionCopy, d as ranges, f as youtubeThumbnailUrl, i as isSameProfile, l as mentionHref, n as useLinksController, o as itemTitle, r as commentCount, s as mediaImage, t as Route$1, u as pureShareCount } from "./links-DU-TIHtg.js";
7
+ import { a as itemSubtitle, c as mentionCopy, d as ranges, f as youtubeThumbnailUrl, i as isSameProfile, l as mentionHref, n as useLinksController, o as itemTitle, r as commentCount, s as mediaImage, t as Route$1, u as pureShareCount } from "./links-BU_FRxcz.js";
8
8
  import { useState } from "react";
9
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
10
  import { ChevronDown, ChevronUp, ExternalLink, MessageCircle, Play, Repeat2, Search, Users } from "lucide-react";
@@ -1,4 +1,4 @@
1
- import { t as TimelineRouteFrame } from "./TimelineRouteFrame-Bg3e7X_N.js";
1
+ import { t as TimelineRouteFrame } from "./TimelineRouteFrame-BWWFisJF.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/routes/mentions.tsx?tsr-split=component
4
4
  function mentionsSubtitle(meta) {
@@ -1,6 +1,6 @@
1
- import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Jt as segmentedClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, Wt as secondaryButtonClass, m as cx, q as errorCopyClass, qt as segmentClass, sn as statusCopyClass, wt as pageHeaderActionsClass } from "./ui-rDHeS-cc.js";
1
+ import { Dt as pageSubtitleClass, Et as pageHeaderRowClass, Ht as searchFieldInputClass, Jt as segmentedClass, Ot as pageTitleClass, Tt as pageHeaderClass, Ut as searchFieldShellClass, Vt as searchFieldIconClass, Wt as secondaryButtonClass, m as cx, q as errorCopyClass, qt as segmentClass, sn as statusCopyClass, wt as pageHeaderActionsClass } from "./ui-CL21-Ku0.js";
2
2
  import { o as validateNetworkMapSearch } from "./route-search-BUlQ5lGM.js";
3
- import { a as avatarPath, c as compareClusterFeatures, d as getClusterDisplayAnchor, f as isCluster, i as avatarInitial, l as formatNumber, m as relationshipColor, n as useNetworkMapController, o as buildClusterIndex, p as readViewport, r as WORLD_VIEWPORT, s as clusterGradient, t as Route$1, u as formatRelationship } from "./network-map-B9iOapuB.js";
3
+ import { a as avatarPath, c as compareClusterFeatures, d as getClusterDisplayAnchor, f as isCluster, i as avatarInitial, l as formatNumber, m as relationshipColor, n as useNetworkMapController, o as buildClusterIndex, p as readViewport, r as WORLD_VIEWPORT, s as clusterGradient, t as Route$1, u as formatRelationship } from "./network-map-DvfpJQy1.js";
4
4
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { Globe2, MapPin, RefreshCw, Search, Users, WifiOff } from "lucide-react";