1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2102],{726:e=>{e.exports={shell:"content-type-format-view_shell__aTSYV",header:"content-type-format-view_header__JXszh",chartGrid:"content-type-format-view_chartGrid__qTVBQ",chartCell:"content-type-format-view_chartCell__6cEBm",chartCard:"content-type-format-view_chartCard__6Or0h",fullWidthSection:"content-type-format-view_fullWidthSection__NxvNl",skeletonWrap:"content-type-format-view_skeletonWrap__3UbWp"}},4680:(e,t,a)=>{"use strict";a.d(t,{JZ:()=>p,W$:()=>b,rh:()=>v});var s=a(37876),l=a(14232),r=a(33570),i=a(31930),o=a(66320),n=a(98338),c=a(19228),d=a(15011),m=a.n(d);let h=c.U["video-posting-rate"],u=c.U["aggregate-video-views"],g=e=>String(e||"").replace(/^@/,"").trim().toLowerCase(),p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=new Map(t.map(e=>[g(e.handle||e.username),e])),s=e.map(e=>{let t=a.get(g(e.username)),s=`@${String(e.username||"").replace(/^@/,"")}`;return{...e,account:{handle:t?.handle||s,name:t?.name||e.name,avatarUrl:t?.avatarUrl||e.profileImageUrl||null,avatarText:t?.avatarText||s.replace(/^@/,"").slice(0,2).toUpperCase(),avatarColor:t?.avatarColor||"#dce6ef"}}});return{id:"video-posting-rate",title:"Video posting rate",subtitle:"Percentage of tweets that include video.",tooltipLines:h,valueType:"percentage",labels:s.map(e=>e.name),values:s.map(e=>Number(e.videoPct)||0),entries:s,accounts:s.map(e=>e.account)}},v=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=new Map(t.map(e=>[g(e.handle||e.username),e])),s=new Set;e.forEach(e=>(e.timeseries||[]).forEach(e=>e.period&&s.add(e.period)));let l=[...s].sort();return{id:"aggregate-video-views",title:"Total video views",subtitle:"Total video views, plus per-video breakdown.",tooltipLines:u,labels:l,accounts:e.map(e=>{let t=new Map((e.timeseries||[]).map(e=>[e.period,e])),s=a.get(g(e.username)),r=`@${String(e.username||"").replace(/^@/,"")}`;return{groupId:g(e.username||e.name),label:e.name,handle:s?.handle||r,avatarUrl:s?.avatarUrl||e.profileImageUrl||null,avatarText:s?.avatarText||r.replace(/^@/,"").slice(0,2).toUpperCase(),avatarColor:s?.avatarColor||"#dce6ef",avgViewsPerVideo:l.map(e=>Number(t.get(e)?.avgViewsPerVideo)||0),totalViews:l.map(e=>Number(t.get(e)?.totalVideoViews)||0)}})}};function b(e){let{data:t,accountRows:a=[],themePreset:c="sky",isLoading:d=!1,error:h=null,onRetry:u,hideHeader:g=!1}=e,b=Array.isArray(t?.postingRate)?t.postingRate:[],w=Array.isArray(t?.viewsTimeseries)?t.viewsTimeseries:[],x=(0,l.useMemo)(()=>p(b,a),[a,b]),y=(0,l.useMemo)(()=>v(w,a),[w,a]),j=b.length>0||w.length>0,f=()=>g?null:(0,s.jsxs)("header",{className:m().header,children:[(0,s.jsx)("h2",{children:"Video Performance"}),(0,s.jsx)("p",{className:m().description,children:"Video content punches above its weight on X. See how much this account is investing in video and how it's performing."})]});return d?(0,s.jsxs)("section",{className:m().shell,children:[(0,s.jsx)(f,{}),(0,s.jsxs)("section",{className:m().chartSection,children:[(0,s.jsx)("div",{className:m().chartSkeletonWrap,children:(0,s.jsx)(r.u,{variant:"bar"})}),(0,s.jsx)("div",{className:m().chartSkeletonWrap,children:(0,s.jsx)(r.u,{variant:"bar"})})]})]}):j?(0,s.jsxs)("section",{className:m().shell,children:[(0,s.jsx)(f,{}),(0,s.jsxs)("section",{className:m().chartSection,"aria-label":"Video performance charts",children:[(0,s.jsx)(i.y,{chart:x,themePreset:c}),(0,s.jsx)(o.C,{chart:y,themePreset:c})]})]}):(0,s.jsxs)("section",{className:m().shell,children:[(0,s.jsx)(f,{}),(0,s.jsx)(n.KN,{title:h?.title||"No video performance data",message:h?.message||"Video performance metrics are not available for this report yet.",onRetry:u})]})}},7523:(e,t,a)=>{"use strict";a.d(t,{Kz:()=>x,Nm:()=>j,e8:()=>y,fp:()=>f,vX:()=>p});var s=a(37876),l=a(24130),r=a(85756),i=a(7136),o=a(37125),n=a(26820),c=a(20384);a(33570);var d=a(98338),m=a(44958),h=a(19228),u=a(15531),g=a.n(u);let p={cadence:h.U["posting-behavior-cadence"]?.[0],consistency:h.U["posting-behavior-consistency"]?.[0],consistencyMethod:h.U["posting-behavior-consistency-method"]?.[0],timePattern:h.U["posting-behavior-heatmap"]?.[0],postLength:"Compares the account's average character count per tweet so you can see whether it tends to write shorter or longer posts.",audienceAlignment:h.U["posting-behavior-alignment"]?.[0]},v=e=>String(e||"").replace(/^@/,"").trim().toLowerCase(),b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.trim().toLowerCase();return t.includes("steady")?"steady":t.includes("burst")?"burst":"balanced"};function w(e){let{label:t,content:a}=e;return(0,s.jsx)(l.Kq,{delayDuration:120,children:(0,s.jsxs)(l.bL,{children:[(0,s.jsx)(l.l9,{asChild:!0,children:(0,s.jsx)("span",{type:"button",className:g().infoButton,"aria-label":`${t} information`,children:(0,s.jsx)(r.A,{label:"info",size:18})})}),(0,s.jsx)(l.ZL,{children:(0,s.jsxs)(l.UC,{className:g().tooltipContent,sideOffset:8,side:"top",children:[(0,s.jsx)("div",{className:g().tooltipBody,children:(0,s.jsx)("p",{children:"string"==typeof a?(0,m.d)(a):a})}),(0,s.jsx)(l.i3,{className:g().tooltipArrow})]})})]})})}let x=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{id:"posting-cadence",type:"posting-cadence",title:"Posts per day / cadence",subtitle:"Average tweets posted per day.",tooltipLines:[p.cadence],labels:e.map(e=>e.name),datasets:[{label:"Lifetime Average",data:e.map(e=>Number(e.cadence?.lifetimeAvgPerDay)||0),backgroundColor:"#22384f"},{label:"Last 30 Days Average",data:e.map(e=>Number(e.cadence?.recentAvgPerDay)||0),backgroundColor:"#6f8fae"}]}},y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{id:"average-post-length",title:"Average post length",subtitle:"Average character count per tweet.",tooltipLines:[p.postLength],data:e.map(e=>({name:e.name,username:e.username,profileImageUrl:e.profileImageUrl,value:Number(e.postLength?.avgChars)||0,maxValue:Number(e.postLength?.maxChars)||0,minValue:Number(e.postLength?.minChars)||0}))}};function j(e){let{entries:t=[],accountRows:a=[]}=e,l=new Map(a.map(e=>[v(e.handle),e])),r=Math.max(...t.map(e=>Number(e.consistency?.cv)||0),0);return(0,s.jsxs)("article",{className:`${g().chartCard} ${g().consistencyCard}`,children:[(0,s.jsx)("div",{className:g().cardHeader,children:(0,s.jsxs)("div",{children:[(0,s.jsxs)("div",{className:g().titleRow,children:[(0,s.jsx)("h3",{children:"Posting consistency (steady vs burst)"}),(0,s.jsx)(w,{label:"Posting consistency",content:p.consistency})]}),(0,s.jsx)("p",{children:"Whether this account posts steadily or in bursts."}),(0,s.jsxs)("p",{children:["Based on the last 30 days: a Steady pace tweets at a fairly even daily rate; Burst means its tweets bunch into spikes with quiet gaps in between."," ",(0,s.jsx)(w,{label:"How consistency is calculated",content:p.consistencyMethod})]})]})}),(0,s.jsx)("div",{className:g().consistencyList,children:t.map(e=>{let t=l.get(v(e.username))||{},a=b(e.consistency?.label),i=`${((e,t)=>{let a=Math.max(Number(e)||0,0),s=Math.max(Number(t)||0,0);return s<=0?0:Math.max(0,Math.min(100,a/s*100))})(e.consistency?.cv,r)}%`,o=t.avatarText||e.name.replace(/^@/,"").trim().slice(0,2).toUpperCase();return(0,s.jsxs)("article",{className:g().consistencyItem,children:[(0,s.jsxs)("div",{className:g().accountMeta,children:[(0,s.jsx)("span",{className:g().avatarCircle,style:{backgroundColor:t.avatarUrl||e.profileImageUrl?"transparent":t.avatarColor},children:t.avatarUrl||e.profileImageUrl?(0,s.jsx)("img",{src:t.avatarUrl||e.profileImageUrl,alt:e.name}):o}),(0,s.jsxs)("div",{children:[(0,s.jsx)("strong",{children:e.name}),(0,s.jsxs)("p",{children:["@",v(e.username)]})]})]}),(0,s.jsxs)("div",{className:g().consistencyBarCell,children:[(0,s.jsx)("div",{className:g().consistencyTrack,
1children:(0,s.jsx)("span",{className:g().consistencyFill,"data-tone":a,style:{width:i}})}),(0,s.jsx)("div",{className:g().consistencyMetaRow,children:(0,s.jsxs)("strong",{className:g().consistencyLabel,"data-tone":a,children:[e.consistency?.label||"Steady"," \xb7 CV ",(Number(e.consistency?.cv)||0).toFixed(2)]})})]})]},`${e.twitterProfileId||e.username}-consistency`)})})]})}function f(e){let{data:t,accountRows:a=[],isLoading:l=!1,error:r=null,onRetry:m,hideHeader:h=!1}=e,u=Array.isArray(t?.cadenceConsistency)?t.cadenceConsistency:[],v=Array.isArray(t?.postingTimePattern)?t.postingTimePattern:[],b=Array.isArray(t?.audienceAlignment)?t.audienceAlignment:[],w=u.length>0,f=x(u),N=y(u),k=()=>h?null:(0,s.jsxs)("header",{className:g().header,children:[(0,s.jsx)("h2",{children:"Posting behavior"}),(0,s.jsx)("p",{children:"How often, when, and how consistently this account tweets. The discipline behind its content strategy."})]});return l?(0,s.jsx)("section",{className:g().shell,children:(0,s.jsx)(k,{})}):r&&!w?(0,s.jsxs)("section",{className:g().shell,children:[(0,s.jsx)(k,{}),(0,s.jsx)(d.KN,{title:r.title,message:r.message,onRetry:m})]}):w?(0,s.jsxs)("section",{className:g().shell,children:[(0,s.jsx)(k,{}),(0,s.jsxs)("section",{className:g().chartGrid,children:[(0,s.jsx)("div",{className:g().chartCell,children:(0,s.jsx)(o.C,{chart:f,themePreset:"sky",accountRows:a})}),(0,s.jsx)(j,{entries:u,accountRows:a}),(0,s.jsx)("div",{className:g().fullWidthSection,children:(0,s.jsx)(n.D,{title:"Posting time-of-day pattern",subtitle:"When this account actually tweets, hour by hour, day by day. Pair with the follower online-times heatmap to see whether it posts when its audience is online.",infoTooltip:p.timePattern,data:v,accountRows:a,themePreset:"sky"})}),(0,s.jsx)("div",{className:g().fullWidthSection,children:(0,s.jsx)(i.G,{chart:N,themePreset:"sky",accountRows:a})}),b.length>0&&(0,s.jsx)("div",{className:g().fullWidthSection,children:(0,s.jsx)(c.f,{title:"Posting-vs-audience timing alignment",subtitle:"Score showing how well the account's posts land during its audience's peak hours.",infoTooltip:p.audienceAlignment,data:b,accountRows:a,themePreset:"sky"})})]})]}):(0,s.jsxs)("section",{className:g().shell,children:[(0,s.jsx)(k,{}),(0,s.jsx)(d.KN,{title:"No posting behavior data",message:"Posting behavior metrics are not available for this report yet.",onRetry:m})]})}},7590:(e,t,a)=>{"use strict";a.d(t,{ez:()=>w,k$:()=>b,p2:()=>g,tZ:()=>y,wX:()=>v,zc:()=>p});var s=a(37876),l=a(12740),r=a(67102),i=a(71468),o=a(59013),n=a(33570),c=a(98338),d=a(19228),m=a(41258),h=a.n(m);let u={geographic:d.U["demographics-geographic"],timezone:d.U["demographics-timezone"],gender:d.U["demographics-gender"]?.[0],language:d.U["demographics-language"]?.[0],activeTimes:d.U["demographics-heatmap"]?.[0],bioKeywords:d.U["demographics-wordcloud"]?.[0]},g=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"object"!=typeof e)return[];let a=!!(e.Followers||t.Followers),s=!!(e.Following||t.Following);return a&&s?["Followers","Following"]:[]},p=[{key:"english",label:"ENGLISH"},{key:"chinese",label:"CHINESE"},{key:"german",label:"GERMAN"},{key:"spanish",label:"SPANISH"},{key:"french",label:"FRENCH"},{key:"other",label:"Other"}],v=u,b=(e,t)=>({id:"timezone-distribution",title:"Time-zone distribution",subtitle:"Followers and following clustered by time zone.",toggleLabels:t,scopes:{Followers:e?.Followers,Following:e?.Following},tooltipLinesByScope:u.timezone,...e||{}}),w=(e,t)=>({id:"gender-breakdown",title:"Gender breakdown",subtitle:"Estimated gender breakdown across followers and following",toggleLabels:t,scopes:{Followers:e?.Followers,Following:e?.Following},tooltipLines:[u.gender],...e||{}});function x(){return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("section",{className:h().demographicsSection,children:(0,s.jsx)("div",{className:h().skeletonCard,children:(0,s.jsx)(n.u,{variant:"horizontal"})})}),(0,s.jsxs)("section",{className:h().demographicsTwoColumn,children:[(0,s.jsx)("div",{className:h().demographicsChartCard,children:(0,s.jsx)("div",{className:h().skeletonCard,children:(0,s.jsx)(n.u,{variant:"bar"})})}),(0,s.jsx)("div",{className:h().demographicsChartCard,children:(0,s.jsx)("div",{className:h().skeletonCard,children:(0,s.jsx)(n.u,{variant:"bar"})})})]}),(0,s.jsx)("section",{className:h().demographicsSection,children:(0,s.jsx)("div",{className:h().skeletonCard,children:(0,s.jsx)(n.u,{variant:"horizontal"})})}),(0,s.jsx)("section",{className:h().demographicsSection,children:(0,s.jsx)("div",{className:h().skeletonCard,children:(0,s.jsx)(n.u,{variant:"bar"})})}),(0,s.jsx)("section",{className:h().demographicsSection,children:(0,s.jsx)("div",{className:h().skeletonCard,children:(0,s.jsx)(n.u,{variant:"bar"})})})]})}function y(e){let{demographicsData:t,loadedScopes:a={},accountRows:n=[],themePreset:d="sky",isLoading:m=!1,error:p=null,onRetry:v}=e,{geographicDistribution:b,timezoneDistribution:w,genderBreakdown:y,languageBreakdown:j,activeTimesHeatmap:f,bioKeywords:N}=t||{},k=!!(b||w||y||j||f||N),S=b?.columns||[],C=g(b,a),T=g(w,a),A=g(y,a),P=g(j,a),L=g(f,a),F=g(N,a),R=()=>(0,s.jsxs)("header",{className:h().demographicsHeader,children:[(0,s.jsx)("h2",{children:"Audience Demographics & Geography"}
1),(0,s.jsx)("p",{children:"Who is this audience, and where are they? Understand the demographic and geographic shape of this account's followers, and what it means for the market it's in."})]});return m?(0,s.jsxs)("section",{className:h().demographicsShell,children:[(0,s.jsx)(R,{}),(0,s.jsx)(x,{})]}):p||!k?(0,s.jsxs)("section",{className:h().demographicsShell,children:[(0,s.jsx)(R,{}),(0,s.jsx)(c.KN,{title:p?.title||"No demographics data",message:p?.message||"Audience demographics are not available for this report yet.",onRetry:v})]}):(0,s.jsxs)("section",{className:h().demographicsShell,children:[(0,s.jsx)(R,{}),(0,s.jsx)("section",{className:h().demographicsSection,children:(0,s.jsx)(l.H,{title:"Geographic distribution â region",subtitle:"Followers and following by country/region.",infoTooltipByScope:u.geographic,columns:S,data:b,accountRows:n,themePreset:d,toggleLabels:C})}),(0,s.jsxs)("section",{className:h().demographicsTwoColumn,children:[(0,s.jsx)("div",{className:h().demographicsChartCard,children:(0,s.jsx)(r.v,{chart:{id:"timezone-distribution",title:"Time-zone distribution",subtitle:"Followers and following clustered by time zone.",toggleLabels:T,scopes:{Followers:w?.Followers,Following:w?.Following},tooltipLinesByScope:u.timezone,...w||{}},themePreset:d,accountRows:n,legendPosition:"top",legendLabelOptions:{padding:10,boxWidth:18,boxHeight:8},showAccountCards:!0,showValueInTooltip:!1})}),(0,s.jsx)("div",{className:h().demographicsChartCard,children:(0,s.jsx)(r.v,{chart:{id:"gender-breakdown",title:"Gender breakdown",subtitle:"Estimated gender breakdown across followers and following",toggleLabels:A,scopes:{Followers:y?.Followers,Following:y?.Following},tooltipLines:[u.gender],...y||{}},themePreset:d,accountRows:n,legendPosition:"top",showAccountCards:!0,showValueInTooltip:!1})})]}),(0,s.jsx)("section",{className:h().demographicsSection,children:(0,s.jsx)(l.H,{title:"Language breakdown",subtitle:"Estimated language breakdown across followers and following",infoTooltip:u.language,columns:[{key:"english",label:"ENGLISH"},{key:"chinese",label:"CHINESE"},{key:"german",label:"GERMAN"},{key:"spanish",label:"SPANISH"},{key:"french",label:"FRENCH"},{key:"other",label:"Other"}],data:j,accountRows:n,legendLabelOptions:{padding:6,boxWidth:18,boxHeight:8},themePreset:d,toggleLabels:P})}),(0,s.jsxs)("section",{className:h().demographicsTwoColumn,children:[(0,s.jsx)("div",{className:h().demographicsChartCard,children:(0,s.jsx)(i.i,{title:"Audience active-times heatmap",subtitle:"We check when every one of this account's followers and the accounts it follows actually tweets, hour by hour, day by day. Tweeting times equal online times. Nobody else gives you this data; these are the windows when this audience is online.",infoTooltip:u.activeTimes,data:f,accountRows:n,themePreset:d,toggleLabels:L,height:220})}),(0,s.jsx)("div",{className:h().demographicsChartCard,children:(0,s.jsx)(o.T,{title:"Audience bio keywords",subtitle:"The keywords that appear most in the bios of this account's followers and the accounts it follows. See what this audience is about at a glance.",infoTooltip:u.bioKeywords,data:N,accountRows:n,themePreset:d,toggleLabels:F,height:220})})]})]})}},12018:(e,t,a)=>{"use strict";a.d(t,{Sp:()=>b,bF:()=>p,c6:()=>w,co:()=>v});var s=a(37876),l=a(14232),r=a(84234),i=a(35243),o=a(52155),n=a(33570),c=a(59317),d=a(68463),m=a(45849),h=a(1784),u=a.n(h);function g(e){let t=Math.max(0,e.humanPercent-e.inactivePercent-e.overactivePercent),a=Math.max(0,100-t-e.fakePercent),s=e.total||0,l=s>0?Number((e.verified/s*100).toFixed(1)):e.verifiedPercent||0,r=s>0?Number((e.verifiedBlue/s*100).toFixed(1)):.85*l,i=s>0?Number(((e.verifiedBusiness+e.verifiedGovernment)/s*100).toFixed(1)):.15*l;return{humanFake:[e.humanPercent,e.fakePercent],activeInactive:[e.activePercent,e.inactivePercent],ordinaryOveractive:[e.ordinaryPercent,e.overactivePercent],qualityTiers:[Math.min(t,100),Math.min(a,100),e.fakePercent],verifiedBadge:[l,r,i]}}function p(e){let t=e?.characteristics?.followers,a=e?.characteristics?.following;if(!t)return[];let s=g(t),l=a?g(a):s,r=(t,a)=>({id:null,labels:[e.handle],datasets:t.map((e,t)=>({label:e,data:[a[t]]}))}),i=e=>{let{type:t,title:a,labels:s,followersSubtitle:l,followingSubtitle:i,followersValues:o,followingValues:n}=e;return{type:t,title:a,subtitle:l,toggleLabels:["Followers","Following"],...r(s,o),id:`account-${t}`,scopes:{Following:{subtitle:i,...r(s,n)}}}};return[i({type:"human-vs-fake-breakdown",title:"Human vs Fake/Bot",labels:["Human","Fake/Bot"],followersSubtitle:"How many of this account's followers are real vs suspected fake or bot accounts.",followingSubtitle:"How many of the accounts it follows are real vs suspected fake or bot accounts.",followersValues:s.humanFake,followingValues:l.humanFake}),i({type:"active-inactive-breakdown",title:"Active vs Inactive",labels:["Active","Inactive"],followersSubtitle:"How many of this account's followers actively tweet vs barely tweet, based on each follower's average tweeting frequency.",followingSubtitle:"How many of the accounts it follows actively tweet vs barely tweet, based on each account's average tweeting frequency.",followersValues:s.activeInactive,followingValues:l.activeInactive}),i({type:"ordinary-vs-overactive-breakdown",title:"Ordinary vs Overactive",labels:["Ordinary","Overactive"],followersSubtitle:"How many followers post at normal daily volume vs tweet far more than average per day.",followingSubtitle:"How many of the accounts it follows post at normal daily volume vs tweet far more than average per day.",followersValues:s.ordinaryOveractive,followingValues:l.ordinaryOveractive}),i({type:"quality-tier-breakdown",title:"Quality tiers - High / Medium / Low",labels:["High","Medium","Low"],followersSubtitle:"Followers sorted into High / Medium / Low quality tiers, based on activity, follower-to-following ratio, and account age.",followingSubtitle:"Accounts it follows sorted into High / Medium / Low quality tiers, based on activity, follower-to-following ratio, and account age.",followersValues:s.qualityTiers,followingValues:l.qualityTiers}),i({type:"verified-badge-breakdown",title:"Verified - by Blue / Gold / Gray badge",labels:["Total Verified","Blue","Gold/Gray"],followersSubtitle:"How many of this account's followers are verified, broken down by Blue / Gold / Gray badge.",followingSubtitle:"How many of the accounts it follows are verified, broken down by Blue / Gold / Gray badge.",followersValues:s.verifiedBadge,followingValues:l.verifiedBadge})]}function v(e,t,a){return"verified-badge-breakdown"===e.type?(0,s.jsx)(o.X,{chart:e,themePreset:t,accountRows:a}):"active-inactive-breakdown"===e.type?(0,s.jsx)(i.F,{chart:e,themePreset:t,accountRows:a}):(0,s.jsx)(r.r,{chart:e,themePreset:t,accountRows:a})}function b(e,t){return t&&e.toggleLabels?.includes(t)?{...e,toggleLabels:[t]}:e}function w(e){let{accountRows:t=[],isLoading:a=!1,forcedScope:r=null}=e,[i,o]=(0,l.useState)(m.P0[0]),[h,g]=(0,l.useState)("Followers"),w=r||h,x=t[0],y=x?p(x).map(e=>b(e,r)):[],j=(0,l.useMemo)(()=>(0,m.DG)(t),[t]),f=(0,l.useMemo)(()=>(0,m.L4)(t),[t]),N=j.find(e=>e.value===i)||j[0],k=N?.audience?.[w]||N?.audience?.Followers,S=k?.rows?.slice(0,f.length)||[];return a||!x?(0,s.jsx)("section",{className:u().promotedChartsSection,children:(0,s.jsx)("div",{className:u().chartSkeletonWrapper,children:(0,s.jsx)(n.u,{variant:"bar"})})}):(0,s.jsxs)("section",{className:u().promotedChartsSection,"aria-label":"Audience quality charts",children:[(0,s.jsxs)("div",{className:u().promotedChartsHeader,children:[(0,s.jsx)("h2",{children:"Audience Quality"}),(0,s.jsx)("p",{className:u().promotedChartsSubtitle,children:"Not all followers are equal, and the algorithm cares."}),(0,s.jsx)("p",{className:u().promotedChartsDescription,children:"X recently made its tweet-distribution algorithm public. When the account posts, X first shows the tweet to a small test group of its followers to decide whether to expand reach. If they engage fast, reach grows. If they don't, reach slows or stops. That's why follower quality matters more than follower count, especially for large accounts that have accumulated inactive, dead, or bot followers over the years. X may show the tweet to those accounts first; they don't engage; the algorithm's initial test fails, even when the content is good. Keeping the follower base clean is how that first test is protected. Circleboom's bulk inactive & bot removal saves a huge amount of time here, particularly for large creators. Once the base is clean, the first test becomes far more reliable."}),(0,s.jsx)("strong",{className:u().promotedChartsNote,children:"Below: see how real, active, and engaged this audie
1nce actually is, and where it looks bigger than it really is."})]}),(0,s.jsx)("div",{className:u().promotedChartsGrid,children:y.map((e,a)=>(0,s.jsx)("div",{className:u().promotedChartsItem,children:v(e,"sky",t)},e.type||a))}),(0,s.jsxs)("section",{className:u().behindNumbersSection,"aria-label":"The accounts behind the numbers",children:[(0,s.jsxs)("div",{className:u().sectionTitleRow,children:[(0,s.jsx)("h2",{children:"The Accounts Behind the Numbers"}),(0,s.jsx)("p",{children:"Open any group, bots, influencers, newbies, inactive, verified to see the real accounts inside."})]}),(0,s.jsxs)("div",{className:u().segmentFilterBar,children:[(0,s.jsxs)("div",{className:u().segmentChipGroup,children:[(0,s.jsx)("div",{className:u().segmentChipRow,role:"tablist","aria-label":"Audience account groups",children:m.P0.map(e=>(0,s.jsx)("button",{type:"button",role:"tab","aria-selected":e===i,className:e===i?u().segmentChipActive:u().segmentChip,onClick:()=>o(e),children:e},e))}),(0,s.jsx)("span",{className:u().segmentChipHint,children:"Swipe to see more groups"})]}),!r&&(0,s.jsx)(c.Z,{items:[{value:"Followers",label:"Followers",active:"Followers"===w},{value:"Following",label:"Following",active:"Following"===w}],value:w,onValueChange:g,ariaLabel:"Audience type",size:"sm"})]}),(0,s.jsxs)("div",{className:u().segmentListCard,children:[(0,s.jsxs)("div",{className:u().segmentListHeader,children:[(0,s.jsxs)("div",{className:u().segmentListHeaderTitleRow,children:[(0,s.jsx)("strong",{children:k?.title||"Loading..."}),(0,s.jsx)(d.O,{tooltipId:`behind-numbers-${(0,m.Zu)(i)}`,label:k?.title,scope:w})]}),(0,s.jsx)("p",{children:k?.subtitle||""})]}),(0,s.jsx)("div",{className:u().segmentRows,children:f.map((e,t)=>{let a=S[t]||{percent:0,accounts:0},l=Math.max(0,Math.min(a.percent||0,100)),r=`${l}%`;return(0,s.jsxs)("div",{className:u().segmentRow,children:[(0,s.jsxs)("div",{className:u().segmentAccount,children:[(0,s.jsx)("span",{className:u().avatarCircle,style:{backgroundColor:e.avatarUrl?"transparent":e.avatarColor},children:e.avatarUrl?(0,s.jsx)("img",{src:e.avatarUrl,alt:e.name}):e.avatarText}),(0,s.jsxs)("div",{children:[(0,s.jsx)("strong",{children:e.name}),(0,s.jsx)("p",{children:e.handle})]})]}),(0,s.jsx)("div",{className:u().segmentBarTrack,"aria-hidden":"true",children:(0,s.jsx)("span",{className:u().segmentBarFill,style:{width:r}})}),(0,s.jsxs)("strong",{className:u().segmentPercent,children:[l.toFixed(1),"%"]}),(0,s.jsxs)("span",{className:u().segmentCountText,children:[(a.accounts||0).toLocaleString()," accounts"]})]},e.handle)})})]})]})]})}},34511:(e,t,a)=>{"use strict";a.d(t,{Av:()=>b,YL:()=>p,gi:()=>x});var s=a(37876),l=a(14232),r=a(33570),i=a(10947),o=a(98338),n=a(19228),c=a(94646),d=a(15011),m=a.n(d);let h=n.U["reach-average-impressions-per-tweet"],u=n.U["reach-impressions-over-time"],g=e=>String(e||"").replace(/^@/,"").trim().toLowerCase(),p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=new Set;e.forEach(e=>(e.timeseries||[]).forEach(e=>e.period&&t.add(e.period)));let a=[...t].sort(),s=t=>e.map(e=>{let s=new Map((e.timeseries||[]).map(e=>[e.period,e]));return{label:e.name,username:e.username,accountHandle:`@${String(e.username||"").replace(/^@/,"")}`,data:a.map(e=>Number(s.get(e)?.impressions?.[t])||0)}}),l=s("total"),r=(0,c.aw)(l),{labels:i,datasets:o}=(0,c.SX)(a,l,r),{datasets:n}=(0,c.SX)(a,s("avgPerPost"),r);return{id:"reach-average-impressions-per-tweet",title:"Total impressions overtime",subtitle:"Total impressions: the sum of each tweet's impressions per month.",tooltipLines:h,toggleLabels:["Total","Average"],valueType:"number",labels:i,datasets:o,scopes:{Average:{title:"Average impressions per tweet overtime",subtitle:"See how average impressions per tweet changed over time.",datasets:n}}}},v=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0;return e.map(e=>({label:e[t]||"",value:(Number(e.periodImpressions)||0)/Math.max(Number(e.tweetCount)||0,1)}))},b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=new Set,s=new Set;
1e.forEach(e=>v(e.weeklyTimeseries,"weekStart").forEach(e=>e.label&&a.add(e.label))),t.forEach(e=>(e.timeseries||[]).forEach(e=>e.period&&s.add(e.period)));let l=[...a].sort(),r=[...s].sort(),i=e.map(e=>{let t=new Map(v(e.weeklyTimeseries,"weekStart").map(e=>[e.label,e]));return{label:e.name,username:e.username,accountHandle:`@${String(e.username||"").replace(/^@/,"")}`,data:l.map(e=>Number(t.get(e)?.value)||0)}}),o=(0,c.aw)(i),{labels:n,datasets:d}=(0,c.SX)(l,i,o),m=t.map(e=>{let t=new Map((e.timeseries||[]).map(e=>[e.period,e]));return{label:e.name,username:e.username,accountHandle:`@${String(e.username||"").replace(/^@/,"")}`,data:r.map(e=>Number(t.get(e)?.impressions?.avgPerPost)||0)}}),h=(0,c.aw)(m),{labels:g,datasets:p}=(0,c.SX)(r,m,h);return{id:"reach-impressions-over-time",title:"Impressions over time",subtitle:"Weekly and monthly average impressions per tweet, plotted over time.",tooltipLines:u,toggleLabels:["Weekly","Monthly"],valueType:"number",labels:n,datasets:d,scopes:{Monthly:{labels:g,datasets:p}}}};function w(){return(0,s.jsxs)("section",{className:m().chartSection,children:[(0,s.jsx)("div",{className:m().chartSkeletonWrap,children:(0,s.jsx)(r.u,{variant:"bar"})}),(0,s.jsx)("div",{className:m().chartSkeletonWrap,children:(0,s.jsx)(r.u,{variant:"bar"})})]})}function x(e){let{data:t,accountRows:a=[],themePreset:r="sky",isLoading:n=!1,error:c=null,onRetry:d}=e,h=Array.isArray(t?.monthly)?t.monthly:[],u=Array.isArray(t?.totals)?t.totals:[],v=(0,l.useMemo)(()=>new Map(a.map(e=>[g(e.handle||e.username),e])),[a]),x=(0,l.useMemo)(()=>h.map(e=>({...e,profileImageUrl:v.get(g(e.username))?.avatarUrl||e.profileImageUrl||null})),[v,h]),y=(0,l.useMemo)(()=>u.map(e=>({...e,profileImageUrl:v.get(g(e.username))?.avatarUrl||e.profileImageUrl||null})),[v,u]),j=(0,l.useMemo)(()=>p(x),[x]),f=(0,l.useMemo)(()=>b(y,x),[y,x]),N=x.length>0||y.length>0,k=()=>(0,s.jsxs)("header",{className:m().header,children:[(0,s.jsx)("h2",{children:"Impression/Views"}),(0,s.jsx)("p",{className:m().description,children:"How many eyes actually saw the content. Impressions are the truest visibility metric on X. Engagement is the headline, but impressions are the foundation."})]});return n?(0,s.jsxs)("section",{className:m().shell,children:[(0,s.jsx)(k,{}),(0,s.jsx)(w,{})]}):c||!N?(0,s.jsxs)("section",{className:m().shell,children:[(0,s.jsx)(k,{}),(0,s.jsx)(o.KN,{title:c?.title||"No reach data",message:c?.message||"Reach metrics are not available for this report yet.",onRetry:d})]}):(0,s.jsxs)("section",{className:m().shell,children:[(0,s.jsx)(k,{}),(0,s.jsxs)("section",{className:m().chartSection,"aria-label":"Reach breakdown charts",children:[(0,s.jsx)(i.g,{chart:j,accountRows:a,themePreset:r}),(0,s.jsx)(i.g,{chart:f,accountRows:a,themePreset:r})]})]})}},35708:(e,t,a)=>{"use strict";a.d(t,{Ch:()=>g,Jv:()=>j,vN:()=>u});var s=a(37876),l=a(14232),r=a(24130),i=a(85756),o=a(44958),n=a(1784),c=a.n(n),d=a(77358),m=a.n(d);let h=[{id:"account",gridSize:"minmax(160px, 220px)",alwaysShow:!0},{id:"followers",gridSize:"minmax(80px, 0.7fr)",toggleLabel:"Followers"},{id:"following",gridSize:"minmax(80px, 0.7fr)",toggleLabel:"Following"},{id:"ratio",gridSize:"minmax(100px, 0.8fr)",toggleLabel:"Active Followers",hasTooltip:!0},{id:"age",gridSize:"minmax(120px, 0.9fr)",toggleLabel:"Account Age"},{id:"quality",gridSize:"minmax(120px, 0.9fr)",toggleLabel:"Engagement Rate"},{id:"impressions",gridSize:"minmax(140px, 1fr)",toggleLabel:"Average Impressions"}],u=h.filter(e=>e.toggleLabel),g=(e,t)=>(e?.[t]??!0)===!1||u.filter(t=>(e?.[t.id]??!0)!==!1).length>1,p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.trim(),a=t.match(/^([\d.]+\s?[MK]?)(.*)$/i);return a?{amount:a[1].trim(),suffix:a[2].trim()}:{amount:t,suffix:""}},v=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.match(/^(Joined)\s+(.*)$/i);return t?{prefix:t[1],amount:t[2]}:{prefix:"",amount:e}},b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e?.trim()||"",a=t.match(/^([\d.]+\s?[MK]?)(.*)$/i);return a?{amount:a[1].trim(),suffix:a[2].trim()}:{amount:t,suffix:""}},w=e=>{let t=Math.max(...e,1);return e.map(e=>e/t*100)},x=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"0",t=e.match(/([\d.]+)\s*([MK])?/i);if(!t)return 0;let a=parseFloat(t[1]);return t[2]?.toUpperCase()==="M"&&(a*=1e6),t[2]?.toUpperCase()==="K"&&(a*=1e3),a};function y(e){let{label:t,tooltipId:a}=e,n=(0,o.T)(a),[d,h]=(0,l.useState)(!1),[u,g]=(0,l.useState)(!1);if((0,l.useEffect)(()=>
1{if("function"!=typeof window.matchMedia)return;let e=window.matchMedia("(hover: none), (pointer: coarse)"),t=()=>{let t=e.matches;h(t),t||g(!1)};return(t(),"function"==typeof e.addEventListener)?(e.addEventListener("change",t),()=>e.removeEventListener("change",t)):(e.addListener(t),()=>e.removeListener(t))},[]),!n)return(0,s.jsx)("span",{className:c().headerCell,children:t});let p=(0,s.jsx)("button",{type:"button",className:m().chartInfoButton,"aria-label":`${t} information`,"aria-expanded":d?u:void 0,onClick:d?e=>{e.preventDefault(),g(e=>!e)}:void 0,children:(0,s.jsx)(i.A,{label:"info",size:18})});return(0,s.jsxs)("span",{className:`${c().headerCell} ${c().headerCellWithTooltip}`,children:[(0,s.jsx)("span",{children:t}),(0,s.jsx)(r.Kq,{delayDuration:120*!d,children:(0,s.jsxs)(r.bL,{open:d?u:void 0,onOpenChange:d?void 0:g,children:[(0,s.jsx)(r.l9,{asChild:!0,children:p}),(0,s.jsx)(r.ZL,{children:(0,s.jsxs)(r.UC,{className:m().chartTooltipContent,sideOffset:8,side:"top",onPointerDownOutside:d?()=>g(!1):void 0,onEscapeKeyDown:d?()=>g(!1):void 0,children:[n,(0,s.jsx)(r.i3,{className:m().chartTooltipArrow})]})})]})})]})}function j(e){let{accountRows:t=[],essentialsTitle:a,subTitle:r=null,visibleColumns:i,onToggleColumn:o,showToggles:n=!0,compact:d=!1}=e,[m,j]=(0,l.useState)({followers:!0,following:!0,ratio:!0,age:!0,quality:!0,impressions:!0}),f=void 0!==i,N=f?i:m,k=e=>{let t=h.find(t=>t.id===e);return!!t?.alwaysShow||!1!==N[e]},S=h.filter(e=>k(e.id)).map(e=>e.gridSize).join(" ");if(!t.length)return null;let C=w(t.map(e=>parseInt(e.joined?.match(/(\d+)\s*years?/i)?.[1]||"0",10))),T=w(t.map(e=>x(e.impressions||"0"))),A=w(t.map(e=>x(e.followers||"0")));return(0,s.jsxs)("section",{className:c().essentialsSection,children:[a&&(0,s.jsxs)("div",{className:c().sectionTitleRow,children:[(0,s.jsx)("h2",{children:a}),r&&(0,s.jsx)("h5",{children:r})]}),(0,s.jsxs)("div",{className:c().essentialsTable,children:[(0,s.jsxs)("header",{className:c().essentialsHeader,style:{"--essentials-grid":S},children:[(0,s.jsx)("span",{className:c().headerCell,children:"ACCOUNT"}),k("followers")&&(0,s.jsx)(y,{label:"FOLLOWERS",tooltipId:"essentials-followers"}),k("following")&&(0,s.jsx)(y,{label:"FOLLOWING",tooltipId:"essentials-following"}),k("ratio")&&(0,s.jsx)(y,{label:"ACTIVE FOLLOWERS",tooltipId:"essentials-active"}),k("age")&&(0,s.jsx)("span",{className:c().headerCell,children:"ACCOUNT AGE"}),k("quality")&&(0,s.jsx)(y,{label:"ENGAGEMENT RATE",tooltipId:"essentials-quality"}),k("impressions")&&(0,s.jsx)(y,{label:d?"AVG IMPRESSIONS":"AVERAGE IMPRESSIONS",tooltipId:"essentials-impressions"})]}),t.map((e,t)=>{let a=p(e.followers),l=p(e.following),r=(e=>{let t=e.characteristics?.followers?.activePercent;return Number.isFinite(t)?`${t}%`:"â"})(e),i=v(e.joined),o=b(e.impressions);return(0,s.jsxs)("article",{className:c().essentialRow,style:{"--essentials-grid":S},children:[(0,s.jsxs)("div",{className:c().essentialAccount,children:[(0,s.jsx)("span",{className:c().avatarCircle,style:{backgroundColor:e.avatarUrl?"transparent":e.avatarColor},children:e.avatarUrl?(0,s.jsx)("img",{src:e.avatarUrl,alt:e.name}):e.avatarText}),(0,s.jsxs)("div",{children:[(0,s.jsx)("strong",{children:e.name}),(0,s.jsx)("p",{children:e.handle})]})]}),k("followers")&&(0,s.jsxs)("div",{className:c().metricCellWithProgress,"data-label":"Follower",children:[(0,s.jsx)("span",{className:c().metricValueCell,children:(0,s.jsx)("strong",{children:a.amount.replace(/\s+/g,"")})}),(0,s.jsx)("div",{className:c().progressBarTrack,children:(0,s.jsx)("span",{className:c().progressBarFill,style:{width:`${A[t]}%`}})})]}),k("following")&&(0,s.jsx)("span",{className:c().metricValueCell,"data-label":"Following",children:(0,s.jsx)("strong",{children:l.amount.replace(/\s+/g,"")})}),k("ratio")&&(0,s.jsx)("div",{className:c().engagementCell,"data-label":"Active Followers",children:(0,s.jsx)("strong",{children:r})}),k("age")&&(0,s.jsxs)("div",{className:c().metricCellWithProgress,"data-label":"Account Age",children:[(0,s.jsx)("span",{className:c().metricValueCell,children:(0,s.jsx)("strong",{children:i.amount})}),(0,s.jsx)("div",{className:c().progressBarTrack,children:(0,s.jsx)("span",{className:c().progressBarFill,style:{width:`${C[t]}%`}})})]}),k("quality")&&(0,s.jsx)("div",{className:c().engagementCell,"data-label":"Engagement Rate",children:(0,s.jsxs)("strong",{children:[e.quality,"%"]})}),k("impressions")&&(0,s.jsxs)("div",{className:c().metricCellWithProgress,"data-label":"Average Impressions",children:[(0,s.jsx)("span",{className:c().metricValueCell,children:(0,s.jsx)("strong",{children:(o.amount+o.suffix).replace(/\s+/g,"")})}),(0,s.jsx)("div",{className:c().progressBarTrack,children:(0,s.jsx)("span",{className:c().progressBarFill,style:{width:`${T[t]}%`}})})]})]},e.reportId||`${e.handle}-${t}`)})]}),n&&(0,s.jsx)("div",{className:c().columnToggles,children:u.map(e=>(0,s.jsxs)("label",{className:c().toggleItem,children:[(0,s.jsxs)("span",{className:c().toggleSwitch,children:[(0,s.jsx)("input",{type:"checkbox",checked:!1!==N[e.id],disabled:!g(N,e.id),onChange:()=>{var t;g(N,t=e.id)&&(f?o?.(t):j(e=>({...e,[t]:!e[t]})))}}),(0,s.jsx)("span",{className:c().toggleSlider})]}),e.toggleLabel]},e.id))})]})}},55051:(e,t,a)=>{"use strict";a.d(t,{Y2:()=>w,Zv:()=>u,o6:()=>b,od:()=>v});var s=a(37876),l=a(14232);a(33570);var r=a(10947),i=a(98338),o=a(19228),n=a(94646),c=a(15011),d=a.n(c),m=a(1784),h=a.n(m);let u=[{value:"likes",label:"Likes",totalTitle:"Total Likes Over Time",totalSubtitle:"See total likes over time, month by month.",averageTitle:"Average Likes per Tweet Over Time",averageSubtitle:"See average like
1s per tweet over time, month by month.",valueType:"number",pointAccessor:(e,t)=>"Average"===t?Number(e.likes?.avgPerPost)||0:Number(e.likes?.total)||0},{value:"reposts",label:"Reposts",totalTitle:"Total Reposts Over Time",totalSubtitle:"See total reposts over time, month by month.",averageTitle:"Average Reposts per Tweet Over Time",averageSubtitle:"See average reposts per tweet over time, month by month.",valueType:"number",pointAccessor:(e,t)=>"Average"===t?Number(e.reposts?.avgPerPost)||0:Number(e.reposts?.total)||0},{value:"replies",label:"Replies",totalTitle:"Total Replies Over Time",totalSubtitle:"See total replies over time, month by month.",averageTitle:"Average Replies per Tweet Over Time",averageSubtitle:"See average replies per tweet over time, month by month.",valueType:"number",pointAccessor:(e,t)=>"Average"===t?Number(e.replies?.avgPerPost)||0:Number(e.replies?.total)||0},{value:"quotes",label:"Quotes",totalTitle:"Total Quotes Over Time",totalSubtitle:"See total quotes over time, month by month.",averageTitle:"Average Quotes per Tweet Over Time",averageSubtitle:"See average quotes per tweet over time, month by month.",valueType:"number",pointAccessor:(e,t)=>"Average"===t?Number(e.quotes?.avgPerPost)||0:Number(e.quotes?.total)||0},{value:"bookmarks",label:"Bookmarks",totalTitle:"Total Bookmarks Over Time",totalSubtitle:"See total bookmarks over time, month by month.",averageTitle:"Average Bookmarks per Tweet Over Time",averageSubtitle:"See average bookmarks per tweet over time, month by month.",valueType:"number",pointAccessor:(e,t)=>"Average"===t?Number(e.bookmarks?.avgPerPost)||0:Number(e.bookmarks?.total)||0},{value:"engagements",label:"Total Engagement",totalTitle:"Total Engagement Over Time",totalSubtitle:"See total engagement (likes, reposts, replies, quotes and bookmarks combined) over time, month by month.",averageTitle:"Average Engagement per Tweet Over Time",averageSubtitle:"See average engagement per tweet over time, month by month.",valueType:"number",pointAccessor:(e,t)=>"Average"===t?Number(e.engagements?.avgPerPost)||0:Number(e.engagements?.total)||0},{value:"engagement-rate",label:"Engagement Rate %",noToggle:!0,chartTitle:"Engagement Rate Over Time",chartSubtitle:"See the engagement rate (total engagement divided by total impressions) over time, month by month.",valueType:"percentage",pointAccessor:e=>Number(e.engagementRatePct)||0}],g=e=>new Intl.NumberFormat("en-US",{notation:Math.abs(Number(e)||0)>=1e3?"compact":"standard",maximumFractionDigits:+(Math.abs(Number(e)||0)>=1e3)}).format(Number(e)||0),p=e=>{let t=Number(e)||0;if(Math.abs(t)>=1e3)return g(t);let a=t.toFixed(t>=10?1:2);return a.includes(".")?a.replace(/0+$/,"").replace(/\.$/,""):a};function v(e,t){let a=new Set;e.forEach(e=>(e.timeseries||[]).forEach(e=>e.period&&a.add(e.period)));let s=[...a].sort(),l=a=>e.map(e=>{let l=new Map((e.timeseries||[]).map(e=>[e.period,e]));return{label:e.name,username:e.username,accountHandle:`@${String(e.username||"").replace(/^@/,"")}`,data:s.map(e=>t.pointAccessor(l.get(e)||{},a))}}),r=l("Total"),i=(0,n.aw)(r),{labels:c,datasets:d}=(0,n.SX)(s,r,i);if(t.noToggle)return{id:`engagement-timeseries-${t.value}`,title:t.chartTitle,subtitle:t.chartSubtitle,tooltipLines:o.U[`engagement-${t.value}`],toggleLabels:[],valueType:t.valueType,labels:c,datasets:d};let{datasets:m}=(0,n.SX)(s,l("Average"),i);return{id:`engagement-timeseries-${t.value}`,title:t.totalTitle,subtitle:t.totalSubtitle,tooltipLines:o.U[`engagement-${t.value}`],toggleLabels:["Total","Average"],valueType:t.valueType,labels:c,datasets:d,scopes:{Average:{title:t.averageTitle,subtitle:t.averageSubtitle,datasets:m}}}}function b(e){let{summaryEntries:t=[],accountRows:a=[],compact:l=!1}=e,r=new Map(a.map(e=>[String(e.handle||"").replace(/^@/,"").toLowerCase(),e]));return(0,s.jsxs)("section",{className:d().tableSection,children:[(0,s.jsx)("p",{className:d().tableLead,children:"Every metric below is the average per tweet over the account's last 90 days of activity."}),(0,s.jsxs)("div",{className:`${d().tableShell} ${l?d().compactTable:""}`,children:[(0,s.jsxs)("header",{className:d().tableHeader,children:[(0,s.jsx)("span",{className:d().headerCell,children:"Account"}),(0,s.jsx)("span",{className:d().headerCell,children:"Follower"}),(0,s.jsx)("span",{className:d().headerCell,children:"Avg Likes"}),(0,s.jsx)("span",{className:d().headerCell,children:"Avg Reposts"}),(0,s.jsx)("span",{className:d().headerCell,children:"Avg Replies"}),(0,s.jsx)("span",{className:d().headerCell,children:"Avg Quotes"}),(0,s.jsx)("span",{className:d().headerCell,children:"Avg Bookmarks"}),(0,s.jsx)("span",{className:d().headerCell,children:"Avg Engagement"}),(0,s.jsx)("span",{className:d().headerCell,children:"Engagement Rate %"})]}),t.map((e,t)=>{let a,l=r.get(String(e.username||"").replace(/^@/,"").toLowerCase()),i=l?.avatarText||e.name.slice(0,2).toUpperCase();return(0,s.jsxs)("article",{className:d().tableRow,children:[(0,s.jsxs)("div",{className:d().accountCell,children:[(0,s.jsx)("span",{className:d().avatarCircle,style:{backgroundColor:l?.avatarUrl||e.profileImageUrl?"transparent":l?.avatarColor||"#dce6ef"},children:l?.avatarUrl||e.profileImageUrl?(0,s.jsx)("img",{src:l?.avatarUrl||e.profileImageUrl,alt:e.name}):i}),(0,s.jsxs)("div",{children:[(0,s.jsx)("strong",{children:e.name}),(0,s.jsxs)("p",{children:["@",String(e.username||"").replace(/^@/,"")]})]})]}),(0,s.jsx)("span",{className:d().metricCell,children:g(e.followers)}),(0,s.jsx)("span",{className:d().metricCell,children:p(e.likes?.avgPerPost)}),(0,s.jsx)("span",{className:d().metricCell,children:p(e.reposts?.avgPerPost)}),(0,s.jsx)("span",{className:d().metricCell,children:p(e.replies?.avgPerPost)}),(0,s.jsx)("span",{className:d().metricCell,children:p(e.quotes?.avgPerPost)}),(0,s.jsx)("span",{className:d().metricCell,children:p(e.bookmarks?.avgPerPost)}),(0,s.jsx)("span",{className:d().metricCell,children:p(e.engagements?.avgPerPost)}),(0,s.jsx)("span",{className:d().rateCell,children:(0,s.jsx)("strong",{children:(a=e.engagementRatePct,`${(Number(a)||0).toFixed((Number(a)||0)>=10?1:2).replace(/\.00$/,"")}%`)})})]},`${e.twitterProfileId||e.username||e.name}-${t}`)})]})]})}function w(e){let{data:t,accountRows:a=[],themePreset:o="sky",isLoading:n=!1,error:c=null,onRetry:m}=e,[g,p]=(0,l.useState)(u[0].value),w=Array.isArray(t?.summary)?t.summary:[],x=Array.isArray(t?.timeseries)?t.timeseries:[],y=(0,l.useMemo)(()=>u.find(e=>e.value===g)||u[0],[g]),j=(0,l.useMemo)(()=>v(x,y),[y,x]),f=w.length>0||x.length>0,N=()=>(0,s.jsxs)("header",{className:d().header,children:[(0,s.jsx)("h2",{children:"Engagement"}),(0,s.jsx)("p",{className:d().subtitle,children:"The hard performance numbers, and the test the X algorithm actually runs."}),(0,s.jsx)("p",{className:d().description,children:"X first shows each new tweet to a small group of the account's followers and watches how they respond. Fast like
1s, replies, reposts, and bookmarks expand reach. Slow signals stop reach from growing. The numbers in this section are the data the algorithm sees on that first pass. Totals show scale; per-post averages show whether the content passed the test. A clean, active audience makes this test more reliable; sharper hooks make it pass."})]});return n?(0,s.jsxs)("section",{className:d().shell,children:[(0,s.jsx)(N,{}),(0,s.jsx)("section",{className:d().tableSection,children:(0,s.jsx)("div",{className:d().tableShell,children:(0,s.jsx)("div",{className:d().tableHeaderSkeleton})})})]}):c||!f?(0,s.jsxs)("section",{className:d().shell,children:[(0,s.jsx)(N,{}),(0,s.jsx)(i.KN,{title:c?.title||"No engagement data",message:c?.message||"Engagement metrics are not available for this report yet.",onRetry:m})]}):(0,s.jsxs)("section",{className:d().shell,children:[(0,s.jsx)(N,{}),(0,s.jsx)(b,{summaryEntries:w,accountRows:a}),(0,s.jsxs)("section",{className:d().chartSection,"aria-label":"Engagement breakdown charts",children:[(0,s.jsx)("div",{className:d().chartHeaderSpacer,"aria-hidden":"true"}),(0,s.jsx)("div",{className:h().segmentChipGroup,children:(0,s.jsx)("div",{className:h().segmentChipRow,role:"tablist","aria-label":"Engagement metric tabs",children:u.map(e=>{let t=e.value===g;return(0,s.jsx)("button",{type:"button",role:"tab","aria-selected":t,className:t?h().segmentChipActive:h().segmentChip,onClick:()=>p(e.value),children:e.label},e.value)})})}),(0,s.jsx)(r.g,{chart:j,accountRows:a,themePreset:o})]})]})}},60392:(e,t,a)=>{"use strict";a.d(t,{Lj:()=>u,M1:()=>m,TG:()=>g,Ti:()=>v,iG:()=>d,kJ:()=>p,wH:()=>h});var s=a(37876),l=a(93090),r=a(67102);a(33570);var i=a(98338),o=a(19228),n=a(726),c=a.n(n);let d=[{key:"text",label:"Text"},{key:"image",label:"Image"},{key:"video",label:"Video"},{key:"poll",label:"Poll"}],m=[{key:"original",label:"Original"},{key:"reply",label:"Replies"},{key:"retweet",label:"ReTweets"},{key:"quote",label:"Quotes"}],h={postFormatMix:o.U["post-format-mix"]?.[0],topPerforming:o.U["top-performing-format"]?.[0],linkMediaShare:o.U["link-media-share"]?.[0]},u=e=>{let{id:t,title:a,subtitle:s,tooltip:l,entries:r,dimensions:i,accessor:o,valueAccessor:n}=e;return{id:t,title:a,subtitle:s,tooltipLines:l?[l]:void 0,labels:r.map(e=>e.name),datasets:i.map(e=>({label:e.label,data:r.map(t=>Number(o(t,e.key)?.[n])||0)})),rawDatasets:((e,t,a)=>{let s=t.map(t=>({label:t.label,data:e.map(e=>Number(a(e,t.key)?.count)||0)}));return s.some(e=>e.data.some(e=>e>0))?s:void 0})(r,i,o)}},g=e=>({id:"link-media-share",title:"Link & Media share %",subtitle:"Percentage of tweets that include external links and media.",tooltipLines:h.linkMediaShare?[h.linkMediaShare]:void 0,labels:e.map(e=>e.name),datasets:[{label:"Media",data:e.map(e=>Number(e.mediaShare?.pct)||0)},{label:"Link",data:e.map(e=>Number(e.linkShare?.pct)||0)}],rawDatasets:[{label:"Media",data:e.map(e=>Number(e.mediaShare?.count)||0)},{label:"Link",data:e.map(e=>Number(e.linkShare?.count)||0)}]}),p=e=>({id:"average-hashtags-per-tweet",title:"Average hashtags per 500 tweets",subtitle:"Average number of hashtags per 500 tweets.",labels:e.map(e=>e.name),datasets:[{label:"Avg hashtags / 500 tweets",data:e.map(e=>500*(Number(e.avgHashtagsPerTweet)||0))}],rawDatasets:[{label:"Avg hashtags / 500 tweets",data:e.map(e=>500*(Number(e.avgHashtagsPerTweet)||0))}]});function v(e){let{data:t,accountRows:a=[],themePreset:o="sky",isLoading:n=!1,error:v=null,onRetry:b,hideHeader:w=!1}=e,x=Array.isArray(t?.postFormatMix)?t.postFormatMix:[],y=Array.isArray(t?.linkMediaShare)?t.linkMediaShare:[],j=Array.isArray(t?.hashtagAverage)?t.hashtagAverage:[],f=Array.isArray(t?.tweetTypeDistribution)?t.tweetTypeDistribution:[],N=x.length>0||y.length>0||j.length>0||f.length>0,k=u({id:"post-format-mix",title:"Post Format Distribution",subtitle:"Percentage breakdown of text / image / video / poll.",tooltip:h.postFormatMix,entries:x,dimensions:d,accessor:(e,t)=>e.formatMix?.[t],valueAccessor:"pct"}),S=u({id:"top-performing-format",title:"Top-performing format",subtitle:"Format with the highest engagement rate.",tooltip:h.topPerforming,entries:x,dimensions:d,accessor:(e,t)=>
1e.formatMix?.[t],valueAccessor:"engagementRateSharePct"}),C=g(y),T=p(j),A=u({id:"tweet-type-distribution",title:"Original / Reply / RT / Quote distribution",subtitle:"Percentage breakdown of original tweets, replies, retweets, and quote-tweets.",entries:f,dimensions:m,accessor:(e,t)=>e.distribution?.[t],valueAccessor:"pct"}),P=()=>w?null:(0,s.jsxs)("header",{className:c().header,children:[(0,s.jsx)("h2",{children:"Content type & format"}),(0,s.jsx)("p",{children:"See how this account structures its posts: formats, link and media usage, hashtag intensity, and tweet type distribution."})]});return n?(0,s.jsx)("section",{className:c().shell,children:(0,s.jsx)(P,{})}):v||!N?(0,s.jsxs)("section",{className:c().shell,children:[(0,s.jsx)(P,{}),(0,s.jsx)(i.KN,{title:v?.title||"No content type & format data",message:v?.message||"Content type & format metrics are not available for this report yet.",onRetry:b})]}):(0,s.jsxs)("section",{className:c().shell,children:[(0,s.jsx)(P,{}),(0,s.jsxs)("section",{className:c().chartGrid,children:[(0,s.jsx)("div",{className:c().chartCell,children:(0,s.jsx)(r.v,{chart:k,themePreset:o,accountRows:a,legendPosition:"top",legendLabelOptions:{padding:10,boxWidth:18,boxHeight:8},showAccountCards:!0,showValueInTooltip:!1})}),(0,s.jsx)("div",{className:c().chartCell,children:(0,s.jsx)(r.v,{chart:S,themePreset:o,accountRows:a,legendPosition:"top",legendLabelOptions:{padding:10,boxWidth:18,boxHeight:8},showAccountCards:!0})}),(0,s.jsx)("div",{className:c().fullWidthSection,children:(0,s.jsx)(l.f,{chart:C,themePreset:o,accountRows:a})}),(0,s.jsx)("div",{className:c().chartCell,children:(0,s.jsx)(r.v,{chart:T,themePreset:o,accountRows:a,formatAsPercent:!1,legendPosition:"top",showAccountCards:!0})}),(0,s.jsx)("div",{className:c().chartCell,children:(0,s.jsx)(r.v,{chart:A,themePreset:o,accountRows:a,legendPosition:"top",legendLabelOptions:{padding:10,boxWidth:18,boxHeight:8},showAccountCards:!0,showValueInTooltip:!1})})]})]})}},73520:(e,t,a)=>{"use strict";a.d(t,{H:()=>d,i:()=>u});var s=a(37876),l=a(14232),r=a(98338),i=a(99069),o=a(19228),n=a(32076),c=a.n(n);let d=[{value:"engagements",label:"Engagements",tweetsKey:"topByEngagements",metricKey:"engagements",metricLabel:"Engagements",title:"Top 5 Tweets by Engagements",subtitle:"The 5 highest-engagement tweets in the analyzed window."},{value:"impressions",label:"Impressions",tweetsKey:"topByImpressions",metricKey:"impressions",metricLabel:"Impressions",title:"Top 5 Tweets by Impressions",subtitle:"The 5 most-seen tweets in the analyzed window."},{value:"replies",label:"Replies",tweetsKey:"topByReplies",metricKey:"replies",metricLabel:"Replies",title:"Top 5 Tweets by Replies",subtitle:"The 5 most-replied tweets in the analyzed window."},{value:"bookmarks",label:"Bookmarks",tweetsKey:"topByBookmarks",metricKey:"bookmarks",metricLabel:"Bookmarks",title:"Top 5 Tweets by Bookmarks",subtitle:"The 5 most-bookmarked tweets in the analyzed window."}],m=o.U["content-leaderboards-top-tweets"]?.[0];function h(){return(0,s.jsxs)("div",{className:c().skeletonShell,children:[(0,s.jsx)("span",{className:c().tabSkeleton}),(0,s.jsx)("div",{className:c().card,children:(0,s.jsx)("div",{className:c().cardGridSkeleton,children:[0,1,2].map(e=>(0,s.jsx)("span",{className:c().cardSkeleton},e))})})]})}function u(e){let{data:t,isLoading:a=!1,error:o=null,onRetry:n,hideHeader:u=!1}=e,[g,p]=(0,l.useState)(d[0].value),v=(0,l.useMemo)(()=>d.find(e=>e.value===g)||d[0],[g]);if(a)return(0,s.jsx)("section",{className:c().leaderboardsShell,children:(0,s.jsx)(h,{})});let b=t?.leaderboard?.length>0;return o||!b?(0,s.jsx)("section",{className:c().leaderboardsShell,children:(0,s.jsx)(r.KN,{title:o?.title||"No content leaderboard data",message:o?.message||"Content leaderboards are not available for this report yet.",onRetry:n})}):(0,s.jsxs)("section",{className:c().leaderboardsShell,children:[!u&&(0,s.jsxs)("div",{className:c().introHeader,children:[(0,s.jsx)("h1",{children:"Content leaderboards"}),(0,s.jsx)("p",{children:"The account's top-performing tweets. The fastest way to learn what works for this audie
1nce, and what they might want next."})]}),(0,s.jsx)("div",{className:c().tabBar,role:"tablist","aria-label":"Leaderboard metric",children:d.map(e=>{let t=e.value===g;return(0,s.jsx)("button",{type:"button",role:"tab","aria-selected":t,className:t?c().tabActive:c().tab,onClick:()=>p(e.value),children:e.label},e.value)})}),(0,s.jsx)(i.t,{accounts:t?.leaderboard,tab:v,tooltip:m,truncateLimit:140})]})}},91542:(e,t,a)=>{"use strict";a.d(t,{I6:()=>i,Z_:()=>r,lR:()=>l});let s=e=>e.reportViewOptions.filter(e=>"full-report"!==e.value),l=e=>s(e)[0]?.value||e.selectedReportView,r=e=>e?`Account Analysis report for @${e}`:"Account Analysis report",i=e=>{let{report:t,handle:a,comparisonResults:l,selectedReportView:i,pastReportOptions:o,selectedPastReportIds:n,demographicsData:c,demographicsError:d,hasLoadedDemographics:m,isLoadingDemographics:h,postingBehaviorData:u,postingBehaviorError:g,hasLoadedPostingBehavior:p,isLoadingPostingBehavior:v,contentTypeFormatData:b,contentTypeFormatError:w,hasLoadedContentTypeFormat:x,isLoadingContentTypeFormat:y,engagementData:j,engagementError:f,hasLoadedEngagement:N,isLoadingEngagement:k,reachD
1ata:S,reachError:C,hasLoadedReach:T,isLoadingReach:A,videoPerformanceData:P,videoPerformanceError:L,hasLoadedVideoPerformance:F,isLoadingVideoPerformance:R,contentLeaderboardData:M,contentLeaderboardError:I,isLoadingContentLeaderboard:U,hasLoadedContentLeaderboard:E,loadedDemographicsScopes:H}=e,O=r(a),V=l?.status==="ready",B=l?.resultError||null,$=V&&l?.accounts?.length>0?l.accounts:[],G=s(t.resultView),W=G.some(e=>e.value===i)?i:G[0]?.value;return{...t.resultView,heading:O,reportViewOptions:G,selectedReportView:W,accountRows:$,resultsStatus:l?.status||null,resultError:B,reportDate:l?.searchLog?.searched_at||null,reportParameters:l?.searchLog?.report_parameters||null,pastReportOptions:o||[],selectedPastReportIds:(n||[]).slice(0,4),demographicsData:c,demographicsError:d,hasLoadedDemographics:m,isLoadingDemographics:h,postingBehaviorData:u,postingBehaviorError:g,hasLoadedPostingBehavior:p,isLoadingPostingBehavior:v,contentTypeFormatData:b,contentTypeFormatError:w,hasLoadedContentTypeFormat:x,isLoadingContentTypeFormat:y,engagementData:j,engagementError:f,hasLoadedEngagement:N,isLoadingEngagement:k,reachD
1ata:S,reachError:C,hasLoadedReach:T,isLoadingReach:A,videoPerformanceData:P,videoPerformanceError:L,hasLoadedVideoPerformance:F,isLoadingVideoPerformance:R,contentLeaderboardData:M,contentLeaderboardError:I,isLoadingContentLeaderboard:U,hasLoadedContentLeaderboard:E,loadedDemographicsScopes:{Followers:H?.Followers||!1,Following:H?.Following||!1},sections:t.sections}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.