mirror of
https://github.com/samvallad33/vestige.git
synced 2026-06-22 21:28:08 +02:00
Some checks failed
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
Test Suite / Unit Tests (push) Has been cancelled
Test Suite / MCP E2E Tests (push) Has been cancelled
Test Suite / Dashboard Build (push) Has been cancelled
Test Suite / Code Coverage (push) Has been cancelled
CI / Release Build (aarch64-apple-darwin) (push) Has been cancelled
CI / Release Build (x86_64-unknown-linux-gnu) (push) Has been cancelled
CI / Release Build (x86_64-apple-darwin) (push) Has been cancelled
Test Suite / User Journey Tests (push) Has been cancelled
Concrete search, irreversible purge, first-class contradictions tool, vestige update CLI, dense dream persistence fix, embedding-model upgrade repair, and a /dashboard/waitlist Pro early-access preview. 25 MCP tools. SQLite migration v13. Backwards compatible: 'delete' remains as a 'purge' alias. Closes #50, #51.
3 lines
20 KiB
JavaScript
3 lines
20 KiB
JavaScript
import"../chunks/Bzak7iHL.js";import{o as Ut}from"../chunks/GG5zm9kr.js";import{p as Et,d as r,e as a,r as e,t as N,g as t,u as L,a as Rt,s as rt,h as F,f as Ht,c as Vt}from"../chunks/CpWkWWOo.js";import{d as Lt,s as o,a as at,e as Mt}from"../chunks/BlVfL1ME.js";import{i as Y}from"../chunks/B4yTwGkE.js";import{e as V,i as Yt}from"../chunks/CGEBXrjl.js";import{a as _,c as Jt,f as y}from"../chunks/CHOnp4oo.js";import{s as ht}from"../chunks/A7po6GxK.js";import{s as bt}from"../chunks/aVbAZ-t7.js";import{s as wt}from"../chunks/Cx-f-Pzo.js";function Xt(h,x,A=3){const g={};for(const p of h){g[p]={};for(const u of h)g[p][u]={count:0,topNames:[]}}for(const p of x){const u=p.origin_project;if(g[u])for(const I of p.transferred_to)g[u][I]&&(g[u][I].count+=1,g[u][I].topNames.push(p.name))}const l=Math.max(0,A);for(const p of h)for(const u of h)g[p][u].topNames=g[p][u].topNames.slice(0,l);return g}function te(h,x){let A=0;for(const g of h){const l=x[g];if(l)for(const p of h){const u=l[p];u&&u.count>A&&(A=u.count)}}return A}function ee(h,x){var g;const A=[];for(const l of h)for(const p of h){const u=(g=x[l])==null?void 0:g[p];u&&u.count>0&&A.push({from:l,to:p,count:u.count,topNames:u.topNames})}return A.sort((l,p)=>p.count-l.count)}function re(h){return h?h.length>12?h.slice(0,11)+"…":h:""}var ae=y('<th class="h-20 min-w-16 max-w-20 align-bottom"><div class="mx-auto flex h-20 w-6 items-end justify-center" style="writing-mode: vertical-rl; transform: rotate(180deg);"><span class="text-[11px] text-dim font-medium tracking-wide"> </span></div></th>'),se=y('<td class="p-0"><button type="button" class="group relative h-10 w-full min-w-12 rounded-md border transition-all duration-200 hover:scale-110 hover:z-10 focus:outline-none focus:ring-2 focus:ring-synapse-glow"><span> </span></button></td>'),ne=y('<tr><td class="w-24 pr-2 text-right text-[11px] text-dim"> </td><!></tr>'),oe=y('<div class="truncate text-text"> </div>'),ie=y('<div class="space-y-1 border-t border-synapse/10 pt-2"><div class="text-[10px] uppercase tracking-wider text-muted">Top patterns</div> <!></div>'),ce=y('<div class="text-muted">No transfers recorded</div>'),de=y('<div class="glass-panel pointer-events-none fixed z-50 max-w-xs rounded-lg p-3 text-xs shadow-2xl"><div class="mb-1 flex items-center gap-2"><span class="font-mono text-dim"> </span> <span class="text-synapse-glow">→</span> <span class="font-mono text-bright"> </span></div> <div class="mb-2 text-lg font-semibold text-bright"> <span class="text-xs font-normal text-dim"> </span></div> <!></div>'),le=y('<div class="rounded-lg bg-white/[0.02] p-4 text-center text-xs text-muted">No cross-project transfers recorded yet.</div>'),pe=y('<div class="truncate text-[11px] text-muted"> </div>'),ue=y('<button type="button"><div class="flex min-w-0 flex-col items-start gap-0.5"><div class="flex items-center gap-1.5 text-xs"><span class="font-mono text-dim"> </span> <span class="text-synapse-glow">→</span> <span class="font-mono text-bright"> </span></div> <!></div> <span class="ml-3 flex-shrink-0 rounded-full bg-synapse/15 px-2 py-0.5 text-xs font-semibold text-synapse-glow"> </span></button>'),ve=y('<div class="glass-panel relative rounded-2xl p-5"><div class="hidden md:block"><div class="mb-3 flex items-center justify-between"><div class="text-xs text-dim">Rows = origin project · Columns = destination project</div> <div class="flex items-center gap-2"><span class="text-[10px] text-muted">0</span> <div class="h-2 w-32 rounded-full" style="background: linear-gradient(to right, rgba(255,255,255,0.05), rgba(99,102,241,0.5), rgba(168,85,247,0.85));"></div> <span class="text-[10px] text-muted"> </span></div></div> <div class="overflow-x-auto"><table class="w-full border-separate" style="border-spacing: 4px;"><thead><tr><th class="w-24"></th><!></tr></thead><tbody></tbody></table></div> <!></div> <div class="space-y-2 md:hidden"><div class="mb-2 text-xs text-dim"> </div> <!></div></div>');function fe(h,x){Et(x,!0);const A=L(()=>Xt(x.projects,x.patterns)),g=L(()=>te(x.projects,t(A))||1);let l=rt(null);function p(n){if(n===0)return"background: rgba(255,255,255,0.02); border-color: rgba(99,102,241,0.05);";const s=n/t(g),v=.1+s*.7;if(s<.5)return`background: rgba(99, 102, 241, ${v.toFixed(3)}); border-color: rgba(129, 140, 248, ${(v*.6).toFixed(3)}); box-shadow: 0 0 ${(s*14).toFixed(1)}px rgba(129, 140, 248, ${(s*.45).toFixed(3)});`;{const f=(s-.5)*2,d=Math.round(99+69*f),C=Math.round(102+-17*f),b=Math.round(241+6*f);return`background: rgba(${d}, ${C}, ${b}, ${v.toFixed(3)}); border-color: rgba(192, 132, 252, ${(v*.7).toFixed(3)}); box-shadow: 0 0 ${(6+s*18).toFixed(1)}px rgba(192, 132, 252, ${(s*.55).toFixed(3)});`}}function u(n){if(n===0)return"text-muted";const s=n/t(g);return s>=.5?"text-bright font-semibold":s>=.2?"text-text":"text-dim"}function I(n,s,v){const d=n.currentTarget.getBoundingClientRect();F(l,{from:s,to:v,x:d.left+d.width/2,y:d.top},!0)}function j(){F(l,null)}const B=re;function st(n,s){return x.selectedCell!==null&&x.selectedCell.from===n&&x.selectedCell.to===s}const G=L(()=>ee(x.projects,t(A)));var Q=ve(),J=r(Q),X=r(J),nt=a(r(X),2),ot=a(r(nt),4),jt=r(ot,!0);e(ot),e(nt),e(X);var it=a(X,2),gt=r(it),q=r(gt),tt=r(q),ct=a(r(tt));V(ct,16,()=>x.projects,n=>n,(n,s)=>{var v=ae(),f=r(v),d=r(f),C=r(d,!0);e(d),e(f),e(v),N(b=>{ht(v,"title",s),o(C,b)},[()=>B(s)]),_(n,v)}),e(tt),e(q);var xt=a(q);V(xt,20,()=>x.projects,n=>n,(n,s)=>{var v=ne(),f=r(v),d=r(f,!0);e(f);var C=a(f);V(C,16,()=>x.projects,b=>b,(b,$)=>{const P=L(()=>t(A)[s][$]),W=L(()=>s===$);var M=se(),S=r(M),E=r(S),U=r(E,!0);e(E),e(S),e(M),N((R,Z,k)=>{wt(S,`${R??""} ${Z??""} ${t(W)&&t(P).count>0?"border-style: dashed;":""}`),ht(S,"aria-label",`${t(P).count??""} patterns from ${s??""} to ${$??""}`),bt(E,1,`text-[11px] ${k??""}`),o(U,t(P).count||"")},[()=>p(t(P).count),()=>st(s,$)?"outline: 2px solid var(--color-dream-glow); outline-offset: 1px;":"",()=>u(t(P).count)]),at("click",S,()=>x.onCellClick(s,$)),Mt("mouseenter",S,R=>I(R,s,$)),Mt("mouseleave",S,j),_(b,M)}),e(v),N(b=>{ht(f,"title",s),o(d,b)},[()=>B(s)]),_(n,v)}),e(xt),e(gt),e(it);var kt=a(it,2);{var Tt=n=>{const s=L(()=>t(A)[t(l).from][t(l).to]);var v=de(),f=r(v),d=r(f),C=r(d,!0);e(d);var b=a(d,4),$=r(b,!0);e(b),e(f);var P=a(f,2),W=r(P),M=a(W),S=r(M);e(M),e(P);var E=a(P,2);{var U=Z=>{var k=ie(),O=a(r(k),2);V(O,17,()=>t(s).topNames,Yt,(K,lt)=>{var pt=oe(),_t=r(pt);e(pt),N(()=>o(_t,`· ${t(lt)??""}`)),_(K,pt)}),e(k),_(Z,k)},R=Z=>{var k=ce();_(Z,k)};Y(E,Z=>{t(s).topNames.length>0?Z(U):Z(R,!1)})}e(v),N((Z,k)=>{wt(v,`left: ${t(l).x??""}px; top: ${t(l).y-12}px; transform: translate(-50%, -100%);`),o(C,Z),o($,k),o(W,`${t(s).count??""} `),o(S,`${t(s).count===1?"pattern":"patterns"} transferred`)},[()=>B(t(l).from),()=>B(t(l).to)]),_(n,v)};Y(kt,n=>{t(l)&&n(Tt)})}e(J);var mt=a(J,2),dt=r(mt),i=r(dt);e(dt);var c=a(dt,2);{var m=n=>{var s=le();_(n,s)},T=n=>{var s=Jt(),v=Ht(s);V(v,17,()=>t(G),f=>f.from+"->"+f.to,(f,d)=>{var C=ue(),b=r(C),$=r(b),P=r($),W=r(P,!0);e(P);var M=a(P,4),S=r(M,!0);e(M),e($);var E=a($,2);{var U=k=>{var O=pe(),K=r(O,!0);e(O),N(lt=>o(K,lt),[()=>t(d).topNames.join(" · ")]),_(k,O)};Y(E,k=>{t(d).topNames.length>0&&k(U)})}e(b);var R=a(b,2),Z=r(R,!0);e(R),e(C),N((k,O,K)=>{bt(C,1,`flex w-full items-center justify-between rounded-lg border border-synapse/10 bg-white/[0.02] p-3 transition hover:border-synapse/30 hover:bg-white/[0.04] ${k??""}`),o(W,O),o(S,K),o(Z,t(d).count)},[()=>st(t(d).from,t(d).to)?"ring-1 ring-dream-glow":"",()=>B(t(d).from),()=>B(t(d).to)]),at("click",C,()=>x.onCellClick(t(d).from,t(d).to)),_(f,C)}),_(n,s)};Y(c,n=>{t(G).length===0?n(m):n(T,!1)})}e(mt),e(Q),N(()=>{o(jt,t(g)),o(i,`${t(G).length??""} transfer pair${t(G).length===1?"":"s"} · tap to filter`)}),_(h,Q),Rt()}Lt(["click"]);var ge=y('<button type="button"><span class="h-1.5 w-1.5 rounded-full"></span> </button>'),xe=y(`<div class="glass-panel flex flex-col items-center gap-3 rounded-2xl p-10 text-center"><div class="text-sm text-decay">Couldn't load pattern transfers</div> <div class="max-w-md text-xs text-muted"> </div> <button type="button" class="mt-2 rounded-lg bg-synapse/20 px-4 py-2 text-xs font-medium text-synapse-glow transition hover:bg-synapse/30">Retry</button></div>`),me=y('<div class="grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_340px]"><div class="glass-subtle h-[520px] animate-pulse rounded-2xl"></div> <div class="glass-subtle h-[520px] animate-pulse rounded-2xl"></div></div>'),_e=y('<div class="glass-subtle flex items-center justify-between rounded-xl px-4 py-2.5 text-xs"><div class="flex items-center gap-2"><span class="text-muted">Filtered to</span> <span class="font-mono text-bright"> </span> <span class="text-synapse-glow">→</span> <span class="font-mono text-bright"> </span></div> <button type="button" class="rounded-md bg-white/[0.04] px-2 py-1 text-dim transition hover:bg-white/[0.08] hover:text-text">Clear</button></div>'),ye=y('<div class="flex flex-1 flex-col items-center justify-center gap-2 py-10 text-center"><div class="text-xs font-medium text-dim">No matching patterns</div> <div class="max-w-[220px] text-[11px] text-muted"> </div></div>'),he=y('<li class="rounded-lg border border-synapse/5 bg-white/[0.02] p-3 transition hover:border-synapse/20 hover:bg-white/[0.04]"><div class="flex items-start justify-between gap-2"><div class="min-w-0 flex-1 space-y-1.5"><div class="truncate text-xs font-medium text-bright"> </div> <div class="flex flex-wrap items-center gap-1.5"><span class="rounded-full border px-1.5 py-0.5 text-[10px] font-medium"> </span> <span class="text-[10px] text-muted"> </span></div> <div class="flex items-center gap-1.5 text-[11px] text-dim"><span class="font-mono text-text"> </span> <span class="text-synapse-glow">→</span> <span class="text-muted"> </span></div></div> <div class="flex flex-shrink-0 flex-col items-end gap-1"><span class="rounded-full bg-synapse/15 px-2 py-0.5 text-xs font-semibold text-synapse-glow"> </span> <span class="text-[10px] text-muted"> </span></div></div></li>'),be=y('<ul class="flex-1 space-y-2 overflow-y-auto pr-1" style="max-height: 560px;"></ul>'),we=y('<div class="grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_340px]"><div class="space-y-4"><!> <!></div> <aside class="glass-panel flex flex-col rounded-2xl p-4"><div class="mb-3 flex items-center justify-between"><h2 class="text-sm font-semibold text-bright">Top Transferred Patterns</h2> <span class="text-[11px] text-muted"> </span></div> <!></aside></div> <footer class="glass-subtle flex flex-wrap items-center justify-between gap-3 rounded-xl px-4 py-3 text-xs text-dim"><div><span class="font-semibold text-bright"> </span> <span class="font-semibold text-bright"> </span> <span class="font-semibold text-bright"> </span> </div> <div class="text-muted"> </div></footer>',1),je=y('<div class="relative mx-auto max-w-7xl space-y-6 p-6"><header class="space-y-2"><h1 class="text-xl font-semibold text-bright">Cross-Project Intelligence</h1> <p class="text-sm text-dim">Patterns learned here, applied there.</p></header> <div class="glass-panel flex flex-wrap items-center gap-1.5 rounded-2xl p-2"><button type="button">All</button> <!></div> <!></div>');function Me(h,x){Et(x,!0);const A=["ErrorHandling","AsyncConcurrency","Testing","Architecture","Performance","Security"],g={ErrorHandling:"var(--color-decay)",AsyncConcurrency:"var(--color-synapse-glow)",Testing:"var(--color-recall)",Architecture:"var(--color-dream-glow)",Performance:"var(--color-warning)",Security:"var(--color-node-pattern)"};let l=rt("All"),p=rt(Vt({projects:[],patterns:[]})),u=rt(!0),I=rt(null),j=rt(null);async function B(){return await new Promise(m=>setTimeout(m,420)),{projects:["vestige","api-gateway","desktop-app","model-runner","game-sim","security-dashboard","benchmark-suite"],patterns:[{name:"Result<T, E> with thiserror context",category:"ErrorHandling",origin_project:"vestige",transferred_to:["api-gateway","desktop-app","model-runner","security-dashboard"],transfer_count:4,last_used:"2026-04-18T14:22:00Z",confidence:.94},{name:"Axum error middleware with tower-http",category:"ErrorHandling",origin_project:"api-gateway",transferred_to:["vestige","security-dashboard"],transfer_count:2,last_used:"2026-04-17T09:10:00Z",confidence:.88},{name:"Graceful shutdown on SIGINT/SIGTERM",category:"ErrorHandling",origin_project:"vestige",transferred_to:["vestige","desktop-app","security-dashboard"],transfer_count:3,last_used:"2026-04-15T22:01:00Z",confidence:.82},{name:"Python try/except with contextual re-raise",category:"ErrorHandling",origin_project:"benchmark-suite",transferred_to:["model-runner"],transfer_count:1,last_used:"2026-04-10T11:30:00Z",confidence:.7},{name:"Arc<Mutex<Connection>> reader/writer split",category:"AsyncConcurrency",origin_project:"vestige",transferred_to:["api-gateway","desktop-app"],transfer_count:2,last_used:"2026-04-14T16:42:00Z",confidence:.91},{name:"tokio::select! for cancellation propagation",category:"AsyncConcurrency",origin_project:"desktop-app",transferred_to:["vestige","security-dashboard"],transfer_count:2,last_used:"2026-04-19T08:05:00Z",confidence:.86},{name:"Bounded mpsc channel with backpressure",category:"AsyncConcurrency",origin_project:"desktop-app",transferred_to:["vestige","api-gateway"],transfer_count:2,last_used:"2026-04-12T13:18:00Z",confidence:.83},{name:"asyncio.gather with return_exceptions",category:"AsyncConcurrency",origin_project:"model-runner",transferred_to:["benchmark-suite"],transfer_count:1,last_used:"2026-04-08T20:45:00Z",confidence:.72},{name:"Property-based tests with proptest",category:"Testing",origin_project:"vestige",transferred_to:["api-gateway","desktop-app"],transfer_count:2,last_used:"2026-04-11T10:22:00Z",confidence:.89},{name:"Snapshot testing with insta",category:"Testing",origin_project:"api-gateway",transferred_to:["vestige"],transfer_count:1,last_used:"2026-04-16T14:00:00Z",confidence:.81},{name:"Vitest + Playwright dashboard harness",category:"Testing",origin_project:"vestige",transferred_to:["api-gateway","desktop-app"],transfer_count:2,last_used:"2026-04-19T18:30:00Z",confidence:.87},{name:"One-variable-at-a-time Kaggle submission",category:"Testing",origin_project:"benchmark-suite",transferred_to:["model-runner","game-sim"],transfer_count:2,last_used:"2026-04-20T07:15:00Z",confidence:.95},{name:"Kaggle pre-flight Input-panel screenshot",category:"Testing",origin_project:"benchmark-suite",transferred_to:["model-runner","game-sim"],transfer_count:2,last_used:"2026-04-20T06:50:00Z",confidence:.98},{name:"SvelteKit 2 + Svelte 5 runes dashboard",category:"Architecture",origin_project:"vestige",transferred_to:["api-gateway","security-dashboard"],transfer_count:2,last_used:"2026-04-19T12:10:00Z",confidence:.92},{name:"glass-panel + cosmic-dark design system",category:"Architecture",origin_project:"vestige",transferred_to:["api-gateway","security-dashboard","desktop-app"],transfer_count:3,last_used:"2026-04-20T09:00:00Z",confidence:.9},{name:"Tauri 2 + Rust/Axum sidecar",category:"Architecture",origin_project:"desktop-app",transferred_to:["security-dashboard"],transfer_count:1,last_used:"2026-04-13T19:44:00Z",confidence:.78},{name:"MCP server with 23 stateful tools",category:"Architecture",origin_project:"vestige",transferred_to:["desktop-app"],transfer_count:1,last_used:"2026-04-17T11:05:00Z",confidence:.85},{name:"USearch HNSW index for vector search",category:"Performance",origin_project:"vestige",transferred_to:["api-gateway"],transfer_count:1,last_used:"2026-04-09T15:20:00Z",confidence:.88},{name:"SQLite WAL mode for concurrent reads",category:"Performance",origin_project:"vestige",transferred_to:["api-gateway","desktop-app","security-dashboard"],transfer_count:3,last_used:"2026-04-18T21:33:00Z",confidence:.93},{name:"vLLM prefix caching at 0.35 mem util",category:"Performance",origin_project:"benchmark-suite",transferred_to:["model-runner"],transfer_count:1,last_used:"2026-04-11T08:00:00Z",confidence:.84},{name:"Cross-encoder rerank at k=30",category:"Performance",origin_project:"vestige",transferred_to:["api-gateway"],transfer_count:1,last_used:"2026-04-14T17:55:00Z",confidence:.79},{name:"Rotated auth token in env var",category:"Security",origin_project:"vestige",transferred_to:["api-gateway","desktop-app","security-dashboard"],transfer_count:3,last_used:"2026-04-16T20:12:00Z",confidence:.96},{name:"Parameterized SQL via rusqlite params!",category:"Security",origin_project:"vestige",transferred_to:["api-gateway"],transfer_count:1,last_used:"2026-04-10T13:40:00Z",confidence:.89},{name:"664-pattern secret scanner",category:"Security",origin_project:"api-gateway",transferred_to:["vestige","security-dashboard","desktop-app"],transfer_count:3,last_used:"2026-04-20T05:30:00Z",confidence:.97},{name:"CSP header with nonce-based script allow",category:"Security",origin_project:"api-gateway",transferred_to:["security-dashboard"],transfer_count:1,last_used:"2026-04-05T16:08:00Z",confidence:.8}]}}async function st(){F(u,!0),F(I,null);try{F(p,await B(),!0)}catch(i){F(I,i instanceof Error?i.message:"Failed to load pattern transfers",!0),F(p,{projects:[],patterns:[]},!0)}finally{F(u,!1)}}Ut(()=>st());const G=L(()=>t(l)==="All"?t(p).patterns:t(p).patterns.filter(i=>i.category===t(l))),Q=L(()=>[...t(j)?t(G).filter(c=>c.origin_project===t(j).from&&c.transferred_to.includes(t(j).to)):t(G)].sort((c,m)=>m.transfer_count-c.transfer_count)),J=L(()=>t(G).reduce((i,c)=>i+c.transferred_to.length,0)),X=L(()=>t(p).projects.length),nt=L(()=>t(G).length);function ot(i){F(l,i,!0),F(j,null)}function jt(i,c){t(j)&&t(j).from===i&&t(j).to===c?F(j,null):F(j,{from:i,to:c},!0)}function it(){F(j,null)}function gt(i){const c=new Date(i).getTime(),m=Date.now(),T=Math.floor((m-c)/864e5);return T<=0?"today":T===1?"1d ago":T<30?`${T}d ago`:`${Math.floor(T/30)}mo ago`}var q=je(),tt=a(r(q),2),ct=r(tt),xt=a(ct,2);V(xt,16,()=>A,i=>i,(i,c)=>{var m=ge(),T=r(m),n=a(T);e(m),N(()=>{bt(m,1,`flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium transition ${t(l)===c?"bg-synapse/25 text-synapse-glow":"text-dim hover:bg-white/[0.04] hover:text-text"}`),wt(T,`background: ${g[c]??""}`),o(n,` ${c??""}`)}),at("click",m,()=>ot(c)),_(i,m)}),e(tt);var kt=a(tt,2);{var Tt=i=>{var c=xe(),m=a(r(c),2),T=r(m,!0);e(m);var n=a(m,2);e(c),N(()=>o(T,t(I))),at("click",n,st),_(i,c)},mt=i=>{var c=me();_(i,c)},dt=i=>{var c=we(),m=Ht(c),T=r(m),n=r(T);fe(n,{get projects(){return t(p).projects},get patterns(){return t(G)},get selectedCell(){return t(j)},onCellClick:jt});var s=a(n,2);{var v=D=>{var H=_e(),z=r(H),w=a(r(z),2),ut=r(w,!0);e(w);var vt=a(w,4),ft=r(vt,!0);e(vt),e(z);var et=a(z,2);e(H),N(()=>{o(ut,t(j).from),o(ft,t(j).to)}),at("click",et,it),_(D,H)};Y(s,D=>{t(j)&&D(v)})}e(T);var f=a(T,2),d=r(f),C=a(r(d),2),b=r(C);e(C),e(d);var $=a(d,2);{var P=D=>{var H=ye(),z=a(r(H),2),w=r(z,!0);e(z),e(H),N(()=>o(w,t(j)?"No patterns transferred from this origin to this destination.":"No patterns in this category.")),_(D,H)},W=D=>{var H=be();V(H,21,()=>t(Q),z=>z.name,(z,w)=>{var ut=he(),vt=r(ut),ft=r(vt),et=r(ft),Gt=r(et,!0);e(et);var Ct=a(et,2),yt=r(Ct),Ot=r(yt,!0);e(yt);var Pt=a(yt,2),Dt=r(Pt,!0);e(Pt),e(Ct);var St=a(Ct,2),Zt=r(St),zt=r(Zt,!0);e(Zt);var Nt=a(Zt,4),Kt=r(Nt);e(Nt),e(St),e(ft);var $t=a(ft,2),At=r($t),Bt=r(At,!0);e(At);var Ft=a(At,2),Qt=r(Ft);e(Ft),e($t),e(vt),e(ut),N((Wt,qt)=>{ht(et,"title",t(w).name),o(Gt,t(w).name),wt(yt,`border-color: ${g[t(w).category]??""}66; color: ${g[t(w).category]??""}; background: ${g[t(w).category]??""}1a;`),o(Ot,t(w).category),o(Dt,Wt),o(zt,t(w).origin_project),o(Kt,`${t(w).transferred_to.length??""}
|
|
${t(w).transferred_to.length===1?"project":"projects"}`),o(Bt,t(w).transfer_count),o(Qt,`${qt??""}%`)},[()=>gt(t(w).last_used),()=>(t(w).confidence*100).toFixed(0)]),_(z,ut)}),e(H),_(D,H)};Y($,D=>{t(Q).length===0?D(P):D(W,!1)})}e(f),e(m);var M=a(m,2),S=r(M),E=r(S),U=r(E,!0);e(E);var R=a(E),Z=a(R),k=r(Z,!0);e(Z);var O=a(Z),K=a(O),lt=r(K,!0);e(K);var pt=a(K);e(S);var _t=a(S,2),It=r(_t,!0);e(_t),e(M),N(()=>{o(b,`${t(Q).length??""}
|
|
${t(Q).length===1?"pattern":"patterns"}`),o(U,t(nt)),o(R,` pattern${t(nt)===1?"":"s"} across `),o(k,t(X)),o(O,` project${t(X)===1?"":"s"}, `),o(lt,t(J)),o(pt,` total transfer${t(J)===1?"":"s"}`),o(It,t(l)==="All"?"All categories":t(l))}),_(i,c)};Y(kt,i=>{t(I)?i(Tt):t(u)?i(mt,1):i(dt,!1)})}e(q),N(()=>bt(ct,1,`rounded-lg px-3 py-1.5 text-xs font-medium transition ${t(l)==="All"?"bg-synapse/25 text-synapse-glow":"text-dim hover:bg-white/[0.04] hover:text-text"}`)),at("click",ct,()=>ot("All")),_(h,q),Rt()}Lt(["click"]);export{Me as component};
|