1import{f as z}from"./vendor-vue-BIDZeepx.js";import{A as O}from"./AsyncState-C1wY1NSf.js";import{C as _}from"./ChromeButton-DmiFifbd.js";import{C as w}from"./ChromeCard-DkvfllPh.js";import{S as B}from"./SectionHeader-60mU8zeF.js";import{u as U,b as K}from"./useExtensions-C8noBZjH.js";import{p as M,i as F,_ as G}from"./index-BNPflmqD.js";import{k as J,r as Q,c as j,C as f,D as a,u as o,y as s,K as r,Q as u,G as d,H as c,z as i,J as l,P as W,A as L,L as y}from"./vendor-misc-5pJBpqhN.js";import"./creatorFieldHelp-BrZsjpkG.js";import"./vendor-tanstack-B6ELLr_Q.js";import"./vendor-sentry-84cD2ryj.js";import"./vendor-utils-CxkvrZ9U.js";const X={class:"extensions-hub"},Y={class:"hub-summary"},Z={key:0,class:"hint"},x={class:"extension-grid"},ee={class:"card-top"},ne={class:"desc"},te={class:"meta"},se={key:0},re={key:1},oe={class:"actions"},ae=["href"],ie=["href"],le=["href"],de={key:0,class:"hint"},ce=J({__name:"ExtensionsHubPage",setup(ue){const E=M(),D=F(),N=D?"Install and connect browser extensions. Data Sync keeps Claude MCP numbers current; kits generate in Chrome on the same account; Trace is linked separately.":"Install and connect browser extensions. Data Sync feeds your dashboard; kits add specialized AI tools that share the same account.",{extensions:b,registryLoading:S,registryError:P,pairedCount:A,refresh:I,requestSync:R,isDomInstalled:p}=U(),g=Q(null),C=j(()=>b.value.filter(n=>p(n.slug)&&!k(n)&&!m(n)));function m(n){return!!(n.requires_pro&&!n.entitled)}function k(n){return!!(n.paired||n.last_active_at)}function V(n){return m(n)?"Pro required":k(n)?"Connected":p(n.slug)?"Installed":"Not installed"}function $(n){return m(n)?"badge-warn":k(n)?"badge-ok":p(n.slug)?"badge-neutral":"badge-muted"}function H(n){try{return new Date(n).toLocaleString()}catch{return n}}function h(n){const t=K(n.slug,n.extension_id);window.open(t,"_blank","noopener,noreferrer")}function T(){for(const n of C.value)h(n)}async function q(n){g.value=n;try{await R(n)}finally{g.value=null}}return(n,t)=>(s(),f(O,{loading:o(S),error:o(P),skeleton:"page",onRetry:o(I)},{default:a(()=>[r("div",X,[u(w,null,{default:a(()=>[u(B,{title:`${o(E)} extensions`,"hint-key":"section_extensions_hub",description:o(N)},null,8,["title","description"]),r("p",Y,[d(c(o(A))+" of "+c(o(b).length)+" extensions paired. ",1),u(_,{variant:"ghost",loading:o(S),onClick:o(I)},{default:a(()=>[...t[0]||(t[0]=[d(" Refresh ",-1)])]),_:1},8,["loading","onClick"])]),o(D)?(s(),i("p",Z," Install from Chrome, then Connect so this account pairs with the extension. Data Sync keeps My numbers and Claude current â use Sync when stats look stale. Kits run in Chrome on the same login; Trace is linked here but works from its own flow. ")):l("",!0)]),_:1}),r("div",x,[(s(!0),i(y,null,W(o(b),e=>(s(),f(w,{key:e.slug,class:"extension-card"},{default:a(()=>[r("div",ee,[r("h3",null,c(e.name),1),r("span",{class:L(["badge",$(e)])},c(V(e)),3)]),r("p",ne,c(e.description),1),r("dl",te,[e.last_active_at?(s(),i("div",se,[t[1]||(t[1]=r("dt",null,"Last active",-1)),r("dd",null,c(H(e.last_active_at)),1)])):l("",!0),e.version?(s(),i("div",re,[t[2]||(t[2]=r("dt",null,"Version",-1)),r("dd",null,c(e.version),1)])):l("",!0)]),r("div",oe,[m(e)?(s(),f(o(z),{key:0,to:"/account/billing",class:"link-btn link-btn--primary"},{default:a(()=>[...t[3]||(t[3]=[d(" Upgrade for Pro ",-1)])]),_:1})):k(e)?(s(),i(y,{key:1},[e.slug==="datasync"?(s(),f(_,{key:0,variant:"primary",loading:g.value===e.slug,onClick:v=>q(e.slug)},{default:a(()=>[...t[4]||(t[4]=[d(" Sync ",-1)])]),_:1},8,["loading","onClick"])):l("",!0),e.chrome_web_store_url?(s(),i("a",{key:1,href:e.chrome_web_store_url,target:"_blank",rel:"noopener noreferrer",class:L(e.slug==="datasync"?"link-btn":"link-btn link-btn--primary")}," Open ",10,ae)):l("",!0),e.extension_id?(s(),f(_,{key:2,variant:e.slug==="datasync"||e.chrome_web_store_url?"ghost":"primary",onClick:v=>h(e)},{default:a(()=>[...t[5]||(t[5]=[d(" Reconnect ",-1)])]),_:1},8,["variant","onClick"])):l("",!0)],64)):o(p)(e.slug)?(s(),i(y,{key:2}
1,[u(_,{variant:"primary",disabled:!e.extension_id,onClick:v=>h(e)},{default:a(()=>[...t[6]||(t[6]=[d(" Connect ",-1)])]),_:1},8,["disabled","onClick"]),e.chrome_web_store_url?(s(),i("a",{key:0,href:e.chrome_web_store_url,target:"_blank",rel:"noopener noreferrer",class:"link-btn"}," Open store ",8,ie)):l("",!0)],64)):(s(),i(y,{key:3},[e.chrome_web_store_url?(s(),i("a",{key:0,href:e.chrome_web_store_url,target:"_blank",rel:"noopener noreferrer",class:"link-btn link-btn--primary"}," Install ",8,le)):l("",!0),u(_,{variant:e.chrome_web_store_url?"secondary":"primary",disabled:!e.extension_id,onClick:v=>h(e)},{default:a(()=>[...t[7]||(t[7]=[d(" Connect ",-1)])]),_:1},8,["variant","disabled","onClick"])],64))]),!e.extension_id&&!m(e)?(s(),i("p",de," Extension ID not configured for this environment â Install still works; Connect needs a store ID. ")):l("",!0)]),_:2},1024))),128))]),C.value.length?(s(),f(w,{key:0,class:"batch-card"},{default:a(()=>[u(B,{title:"Connect installed extensions"}),t[8]||(t[8]=r("p",{class:"hint"}," Opens pairing for each extension detected in this browser (one tab at a time). ",-1)),u(_,{variant:"secondary",onClick:T},{default:a(()=>[d(" Connect "+c(C.value.length)+" detected ",1)]),_:1})]),_:1})):l("",!0)])]),_:1},8,["loading","error","onRetry"]))}}),De=G(ce,[["__scopeId","data-v-fbffcfde"]]);export{De as default};
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.