PageSourceSearch

https://buildnextgen.ai/assets/PrivacyDashboard-CCUAjIfE.js

js buildnextgen.ai collected 2026-10-05 12:12:35 UTC 19,946 bytes, 3 lines download raw bytes

1import{d as X,e as he,r as l,b as V,f as M,j as e,S as Q,B as v,a3 as T,ab as E,ac as L,aC as D,aa as C,g as Y,s as ue,A as me,al as g,a1 as se,a2 as te,a4 as ae,a5 as ie,a6 as ne,an as re,i as x,I as K,T as W,a7 as le,aE as pe}from"./index-B013RvM6.js";import{S as Z}from"./switch-BD51GXkp.js";import{T as je,a as ye,b as $,c as z}from"./tabs-C5IUKViM.js";import{T as F,a as q,b as j,c as i,d as G,e as n}from"./table-DnHVBh7r.js";import{K as ge}from"./key-DUxXgMXc.js";import{E as ve}from"./eye-Cw7mEiCB.js";import{T as J}from"./triangle-alert-7AQ7nBxu.js";import{T as be,P as Ne}from"./trash-2-DkucO6jX.js";import{L as ce}from"./lock-BSLv6TX_.js";const ke=["email","phone","ssn","card","name","address","ip","iban"],de={email:"Email Addresses",phone:"Phone Numbers",ssn:"Social Security Numbers",card:"Credit Card Numbers",name:"Personal Names",address:"Street Addresses",ip:"IP Addresses",iban:"Bank Account Numbers (IBAN)"},_={email:"bg-blue-100 text-blue-800",phone:"bg-green-100 text-green-800",ssn:"bg-red-100 text-red-800",card:"bg-red-100 text-red-800",name:"bg-purple-100 text-purple-800",address:"bg-orange-100 text-orange-800",ip:"bg-gray-100 text-gray-800",iban:"bg-yellow-100 text-yellow-800"};function U({title:o,value:h,subtitle:c,icon:u,color:m}){return e.jsx(T,{children:e.jsx(C,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground","data-testid":`stat-label-${o.toLowerCase().replace(/\s+/g,"-")}`,children:o}),e.jsx("p",{className:"text-3xl font-bold mt-1","data-testid":`stat-value-${o.toLowerCase().replace(/\s+/g,"-")}`,children:h}),c&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:c})]}),e.jsx("div",{className:`p-3 rounded-full ${m}`,children:e.jsx(u,{className:"h-6 w-6 text-white"})})]})})})}function we({onCreated:o}){const{toast:h}=X(),[c,u]=l.useState(!1),[m,b]=l.useState(""),[N,k]=l.useState(!0),[y,S]=l.useState(new Set(["email","phone"])),[w,r]=l.useState(24),[A,H]=l.useState(""),[d,B]=l.useState(""),[I,R]=l.useState(""),[O,s]=l.useState("owner,admin"),[a,p]=l.useState(!0);function f(t){return t.split(/[\n,]/).map(P=>P.trim()).filter(Boolean)}const{mutate:oe,isPending:ee}=M({mutationFn:()=>g("POST","/api/privacy/policies",{name:m,enabled:N,entityTypes:[...y],tokenTtlHours:w,blueprintId:A?Number(A):void 0,allowlist:f(d),denylistPatterns:f(I),detokenizeForRoles:f(O),storeTokensInTraces:a}),onSuccess:()=>{h({title:"Policy created"}),u(!1),b(""),S(new Set(["email","phone"])),B(""),R(""),s("owner,admin"),p(!0),o()},onError:t=>h({title:"Error",description:t.message,variant:"destructive"})}),xe=t=>{const P=new Set(y);P.has(t)?P.delete(t):P.add(t),S(P)};return e.jsxs(se,{open:c,onOpenChange:u,children:[e.jsx(te,{asChild:!0,children:e.jsxs(v,{"data-testid":"button-create-policy",children:[e.jsx(Ne,{className:"h-4 w-4 mr-2"})," New Policy"]})}),e.jsxs(ae,{className:"max-w-lg max-h-[90vh] overflow-y-auto",children:[e.jsxs(ie,{children:[e.jsx(ne,{children:"Create Tokenization Policy"}),e.jsx(re,{children:"Define which PII entity types to tokenize before sending to model providers."})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{htmlFor:"policy-name",children:"Policy Name"}),e.jsx(K,{id:"policy-name","data-testid":"input-policy-name",value:m,onChange:t=>b(t.target.value),placeholder:"e.g. Customer PII Policy"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{htmlFor:"blueprint-id",children:"Blueprint ID (leave blank for org-wide)"}),e.jsx(K,{id:"blueprint-id","data-testid":"input-blueprint-id",value:A,onChange:t=>H(t.target.value),placeholder:"Optional — restricts to one agent",type:"number"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{htmlFor:"ttl",children:"Token TTL (hours)"}),e.jsx(K,{id:"ttl","data-testid":"input-token-ttl",type:"number",value:w,onChange:t=>r(Number(t.target.value)),min:1,max:8760})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(x,{children:"Entity types to tokenize"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:ke.map(t=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(pe,{id:`type-${t}`,"data-testid":`checkbox-entity-${t}`,checked:y.has(t),onCheckedChange:()=>xe(t)}),e.jsx(x,{htmlFor:`type-${t}`,className:"text-sm cursor-pointer",children:de[t]})]},t))})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{htmlFor:"allowlist",children:"Allowlist (never tokenize — one value per line or comma-separated)"}),e.jsx(W,{id:"allowlist","data-testid":"textarea-allowlist",value:d,onChange:t=>B(t.target.value),placeholder:`e.g. [email protected]
2[email protected]`,rows:3,className:"text-sm font-mono"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Values in this list are passed through without tokenization even if they match a PII pattern."})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{htmlFor:"denylist",children:"Denylist patterns (always tokenize — regex, one per line)"}),e.jsx(W,{id:"denylist","data-testid":"textarea-denylist",value:I,onChange:t=>R(t.target.value),placeholder:`e.g. CUST-\\d{6}
3EMP-[A-Z]{3}\\d{4}`,rows:3,className:"text-sm font-mono"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Regex patterns — any match is force-tokenized regardless of entity type detection or allowlist."})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{htmlFor:"detokenize-roles",children:"Roles that can detokenize (comma-separated)"}),e.jsx(K,{id:"detokenize-roles","data-testid":"input-detokenize-roles",value:O,onChange:t=>s(t.target.value),placeholder:"e.g. owner,admin"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Only users with these roles see original PII in responses."})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Z,{id:"store-traces","data-testid":"switch-store-traces",checked:a,onCheckedChange:p}),e.jsx(x,{htmlFor:"store-traces",children:"Store token placeholders in run traces"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Z,{id:"enabled","data-testid":"switch-policy-enabled",checked:N,onCheckedChange:k}),e.jsx(x,{htmlFor:"enabled",children:"Enabled"})]})]}),e.jsxs(le,{children:[e.jsx(v,{variant:"outline",onClick:()=>u(!1),children:"Cancel"}),e.jsx(v,{"data-testid":"button-save-policy",onClick:()=>oe(),disabled:ee||!m||y.size===0,children:ee?"Creating…":"Create Policy"})]})]})]})}function fe(){const{toast:o}=X(),[h,c]=l.useState(!1),[u,m]=l.useState(""),[b,N]=l.useState(""),[k,y]=l.useState(null),{mutate:S,isPending:w}=M({mutationFn:async()=>(await g("POST","/api/privacy/break-glass",{token:u,reason:b})).json(),onSuccess:r=>{y(r.original),o({title:"Break-glass access logged",description:"Original value retrieved and access recorded."})},onError:r=>o({title:"Access denied",description:r.message,variant:"destructive"})});return e.jsxs(se,{open:h,onOpenChange:r=>{c(r),r||(y(null),m(""),N(""))},children:[e.jsx(te,{asChild:!0,children:e.jsxs(v,{variant:"destructive",size:"sm","data-testid":"button-break-glass",children:[e.jsx(ce,{className:"h-4 w-4 mr-2"})," Break Glass"]})}),e.jsxs(ae,{children:[e.jsxs(ie,{children:[e.jsxs(ne,{className:"flex items-center gap-2 text-destructive",children:[e.jsx(J,{className:"h-5 w-5"}
3)," Break-Glass Access"]}),e.jsx(re,{children:"This action retrieves the original PII value and is permanently logged with your identity and reason. Requires owner or admin role."})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{children:"Token"}),e.jsx(K,{"data-testid":"input-break-glass-token",value:u,onChange:r=>m(r.target.value),placeholder:"[PIItok:EMAIL:abc123...]"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(x,{children:"Reason for access (required)"}),e.jsx(W,{"data-testid":"input-break-glass-reason",value:b,onChange:r=>N(r.target.value),placeholder:"Legal hold, incident investigation, customer request...",rows:3})]}),k!==null&&e.jsxs("div",{className:"bg-yellow-50 border border-yellow-200 rounded p-3",children:[e.jsx("p",{className:"text-xs text-yellow-700 font-medium mb-1",children:"Original value (do not share unnecessarily):"}),e.jsx("p",{className:"font-mono text-sm break-all","data-testid":"text-break-glass-result",children:k})]})]}),e.jsxs(le,{children:[e.jsx(v,{variant:"outline",onClick:()=>c(!1),children:"Close"}),k===null&&e.jsx(v,{variant:"destructive","data-testid":"button-confirm-break-glass",onClick:()=>S(),disabled:w||!u||b.length<5,children:w?"Retrieving…":"Retrieve Original Value"})]})]})]})}function ze(){const{toast:o}=X(),h=he(),[c,u]=l.useState(30),{data:m,isLoading:b}=V({queryKey:["/api/privacy/dashboard",c],queryFn:async()=>(await g("GET",`/api/privacy/dashboard?windowDays=${c}`)).json()}),{data:N,isLoading:k}=V({queryKey:["/api/privacy/policies"],queryFn:async()=>(await g("GET","/api/privacy/policies")).json()}),{data:y}=V({queryKey:["/api/privacy/vault"],queryFn:async()=>(await g("GET","/api/privacy/vault?limit=100")).json()}),{data:S}=V({queryKey:["/api/privacy/break-glass/logs"],queryFn:async()=>(await g("GET","/api/privacy/break-glass/logs")).json()}),{mutate:w}=M({mutationFn:s=>g("DELETE",`/api/privacy/policies/${s}`),onSuccess:()=>{o({title:"Policy deleted"}),h.invalidateQueries({queryKey:["/api/privacy/policies"]})},onError:s=>o({title:"Error",description:s.message,variant:"destructive"})}),{mutate:r}=M({mutationFn:({id:s,enabled:a})=>g("PATCH",`/api/privacy/policies/${s}`,{enabled:a}),onSuccess:()=>h.invalidateQueries({queryKey:["/api/privacy/policies"]}),onError:s=>o({title:"Error",description:s.message,variant:"destructive"})}),{mutate:A,isPending:H}=M({mutationFn:async()=>(await g("POST","/api/privacy/vault/purge-expired")).json(),onSuccess:s=>{o({title:"Vault purged",description:`${s.purged} expired token(s) removed.`}),h.invalidateQueries({queryKey:["/api/privacy/vault"]})}}),d=m?.stats,B=m?.recentLeaks??[],I=N??[],R=y??[],O=S??[];return e.jsxs("div",{className:"container mx-auto py-8 px-4 max-w-6xl space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center gap-2",children:[e.jsx(Q,{className:"h-8 w-8 text-primary"}),"Privacy Gateway"]}),e.jsx("p",{className:"text-muted-foreground mt-1",children:"PII tokenization, token vault, and break-glass access control"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(fe,{}),e.jsx(we,{onCreated:()=>h.invalidateQueries({queryKey:["/api/privacy/policies"]})})]})]}),e.jsx("div",{className:"flex gap-2",children:[7,30,90].map(s=>e.jsxs(v,{variant:c===s?"default":"outline",size:"sm","data-testid":`button-window-${s}`,onClick:()=>u(s),children:[s,"d"]},s))}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsx(U,{title:"Tokens Minted",value:d?.totalMinted??0,subtitle:`Last ${c} days`,icon:ge,color:"bg-primary"}),e.jsx(U,{title:"Detokenizations",value:d?.totalDetokenized??0,subtitle:"Authorized restorations",icon:ve,color:"bg-green-500"}),e.jsx(U,{title:"Leak Detections",value:d?.leakAttempts??0,subtitle:"Raw PII in model output",icon:J,color:"bg-red-500"}),e.jsx(U,{title:"Active Policies",value:I.filter(s=>s.enabled).length,subtitle:"Tokenization rules",icon:Q,color:"bg-blue-500"})]}),e.jsxs(je,{defaultValue:"policies",children:[e.jsxs(ye,{"data-testid":"tabs-privacy",children:[e.jsx($,{value:"policies","data-testid":"tab-policies",children:"Policies"}),e.jsx($,{value:"vault","data-testid":"tab-vault",children:"Token Vault"}),e.jsx($,{value:"leaks","data-testid":"tab-leaks",children:"Leak Detections"}),e.jsx($,{value:"break-glass","data-testid":"tab-break-glass",children:"Break-Glass Log"}),e.jsx($,{value:"by-type","data-testid":"tab-by-type",children:"By Entity Type"}),e.jsx($,{value:"by-blueprint","data-testid":"tab-by-blueprint",children:"By Agent"})]}),e.jsx(z,{value:"policies",children:e.jsxs(T,{children:[e.jsxs(E,{children:[e.jsx(L,{children:"Tokenization Policies"}),e.jsx(D,{children:"Define which PII entity types are tokenized per agent or org
3-wide before prompts reach model providers."})]}),e.jsx(C,{children:k?e.jsx("p",{className:"text-muted-foreground text-sm",children:"Loading…"}):I.length===0?e.jsxs("div",{className:"text-center py-12 text-muted-foreground",children:[e.jsx(Q,{className:"h-12 w-12 mx-auto mb-3 opacity-30"}),e.jsx("p",{children:"No policies yet. Create one to start tokenizing PII."})]}):e.jsxs(F,{children:[e.jsx(q,{children:e.jsxs(j,{children:[e.jsx(i,{children:"Name"}),e.jsx(i,{children:"Scope"}),e.jsx(i,{children:"Entity Types"}),e.jsx(i,{children:"TTL"}),e.jsx(i,{children:"Status"}),e.jsx(i,{})]})}),e.jsx(G,{children:I.map(s=>e.jsxs(j,{"data-testid":`row-policy-${s.id}`,children:[e.jsx(n,{className:"font-medium",children:s.name}),e.jsx(n,{className:"text-sm text-muted-foreground",children:s.blueprintId?`Blueprint #${s.blueprintId}`:"Org-wide"}),e.jsx(n,{children:e.jsx("div",{className:"flex flex-wrap gap-1",children:(s.entityTypes??[]).map(a=>e.jsx(Y,{variant:"secondary",className:`text-xs ${_[a]??""}`,children:a},a))})}),e.jsxs(n,{className:"text-sm",children:[s.tokenTtlHours,"h"]}),e.jsx(n,{children:e.jsx(Z,{"data-testid":`switch-policy-${s.id}`,checked:s.enabled,onCheckedChange:a=>r({id:s.id,enabled:a})})}),e.jsx(n,{children:e.jsx(v,{size:"sm",variant:"ghost","data-testid":`button-delete-policy-${s.id}`,onClick:()=>{confirm("Delete this policy?")&&w(s.id)},children:e.jsx(be,{className:"h-4 w-4 text-destructive"})})})]},s.id))})]})})]})}),e.jsx(z,{value:"vault",children:e.jsxs(T,{children:[e.jsxs(E,{className:"flex flex-row items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(L,{children:"Token Vault"}),e.jsx(D,{children:"Active tokens — encrypted original values never shown here. Use Break-Glass for authorized retrieval."})]}),e.jsxs(v,{variant:"outline",size:"sm","data-testid":"button-purge-expired",onClick:()=>A(),disabled:H,children:[e.jsx(ue,{className:`h-4 w-4 mr-2 ${H?"animate-spin":""}`}),"Purge Expired"]})]}),e.jsx(C,{children:R.length===0?e.jsx("p",{className:"text-center text-muted-foreground py-8",children:"No active tokens in vault."}):e.jsxs(F,{children:[e.jsx(q,{children:e.jsxs(j,{children:[e.jsx(i,{children:"Token"}),e.jsx(i,{children:"Type"}),e.jsx(i,{children:"Blueprint"}),e.jsx(i,{children:"Access Count"}),e.jsx(i,{children:"Expires"})]})}),e.jsx(G,{children:R.map(s=>e.jsxs(j,{"data-testid":`row-vault-${s.id}`,children:[e.jsx(n,{className:"font-mono text-xs",children:s.token}),e.jsx(n,{children:e.jsx(Y,{variant:"secondary",className:`text-xs ${_[s.entityType]??""}`,children:s.entityType})}),e.jsx(n,{className:"text-sm text-muted-foreground",children:s.blueprintId?`#${s.blueprintId}`:"org-wide"}),e.jsx(n,{"data-testid":`text-access-count-${s.id}`,children:s.accessCount}),e.jsx(n,{className:"text-sm text-muted-foreground",children:new Date(s.expiresAt).toLocaleString()})]},s.id))})]})})]})}),e.jsx(z,{value:"leaks",children:e.jsxs(T,{children:[e.jsxs(E,{children:[e.jsxs(L,{className:"flex items-center gap-2",children:[e.jsx(J,{className:"h-5 w-5 text-destructive"}),"Leak Detections"]}),e.jsx(D,{children:"Incidents where a model response contained raw PII that should have been tokenized."})]}),e.jsx(C,{children:B.length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:[e.jsx(Q,{className:"h-10 w-10 mx-auto mb-2 text-green-500 opacity-60"}),e.jsx("p",{children:"No leak detections. All clear."})]}):e.jsxs(F,{children:[e.jsx(q,{children:e.jsxs(j,{children:[e.jsx(i,{children:"Detected At"}),e.jsx(i,{children:"Blueprint"}),e.jsx(i,{children:"Count"}),e.jsx(i,{children:"Details"})]})}),e.jsx(G,{children:B.map((s,a)=>e.jsxs(j,{"data-testid":`row-leak-${a}`,children:[e.jsx(n,{className:"text-sm",children:new Date(s.createdAt).toLocaleString()}),e.jsx(n,{className:"text-sm",children:s.blueprintId?`#${s.blueprintId}`:"org-wide"}),e.jsx(n,{children:e.jsx(Y,{variant:"destructive",children:s.tokenCount})}),e.jsx(n,{className:"text-xs text-muted-foreground font-mono",children:s.details&&(s.details.leaks??[]).map(p=>`${p.entityType}:${p.fingerprint}`).join(", ")||"—"})]},a))})]})})]})}),e.jsx(z,{value:"break-glass",children:e.jsxs(T,{children:[e.jsxs(E,{children:[e.jsxs(L,{className:"flex items-center gap-2",children:[e.jsx(ce,{className:"h-5 w-5 text-destructive"}),"Break-Glass Audit Log"]}),e.jsx(D,{children:"Every authorized retrieval of original PII values is logged here permanently."})]}),e.jsx(C,{children:O.length===0?e.jsx("p",{className:"text-center text-muted-foreground py-8",children:"No break-glass accesses on record."}):e.jsxs(F,{children:[e.jsx(q,{children:e.jsxs(j,{children:[e.jsx(i,{children:"Timestamp"}),e.jsx(i,{children:"Actor"}),e.jsx(i,{children:"Token"}),e.jsx(i,{children:"Type"}),e.jsx(i,{children:"Reason"})]})}),e.jsx(G,{children:O.map((s,a)=>e.jsxs(j,{"data-testid":`row-break-glass-${a}`,children:[e.jsx(n,{className:"text-sm",children:new Date(s.createdAt).toLocaleStr
3ing()}),e.jsx(n,{className:"text-sm font-mono text-xs",children:s.actorUserId}),e.jsx(n,{className:"font-mono text-xs",children:s.token}),e.jsx(n,{children:s.entityType&&e.jsx(Y,{variant:"secondary",className:`text-xs ${_[s.entityType]??""}`,children:s.entityType})}),e.jsx(n,{className:"text-sm max-w-xs truncate",children:s.reason})]},a))})]})})]})}),e.jsx(z,{value:"by-type",children:e.jsxs(T,{children:[e.jsxs(E,{children:[e.jsx(L,{children:"Tokens Minted by Entity Type"}),e.jsxs(D,{children:["Last ",c," days"]})]}),e.jsx(C,{children:!d||Object.keys(d.byType).length===0?e.jsx("p",{className:"text-center text-muted-foreground py-8",children:"No tokenization events in this window."}):e.jsx("div",{className:"space-y-3",children:Object.entries(d.byType).sort(([,s],[,a])=>a-s).map(([s,a])=>{const p=Math.max(...Object.values(d.byType)),f=p>0?a/p*100:0;return e.jsxs("div",{className:"space-y-1","data-testid":`bar-entity-${s}`,children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"font-medium",children:de[s]??s}),e.jsx("span",{className:"text-muted-foreground",children:a.toLocaleString()})]}),e.jsx("div",{className:"h-2 bg-muted rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-primary rounded-full transition-all",style:{width:`${f}%`}})})]},s)})})})]})}),e.jsx(z,{value:"by-blueprint",children:e.jsxs(T,{children:[e.jsxs(E,{children:[e.jsx(L,{children:"Tokens Minted by Agent"}),e.jsxs(D,{children:["Per-blueprint breakdown — last ",c," days"]})]}),e.jsx(C,{children:!d||Object.keys(d.byBlueprint??{}).length===0?e.jsx("p",{className:"text-center text-muted-foreground py-8",children:"No per-agent tokenization data in this window."}):e.jsxs(F,{children:[e.jsx(q,{children:e.jsxs(j,{children:[e.jsx(i,{children:"Agent (Blueprint ID)"}),e.jsx(i,{className:"text-right",children:"Tokens Minted"})]})}),e.jsx(G,{children:Object.entries(d.byBlueprint??{}).sort(([,s],[,a])=>a-s).map(([s,a])=>{const p=Math.max(...Object.values(d.byBlueprint??{}).map(Number)),f=p>0?Number(a)/p*100:0;return e.jsxs(j,{"data-testid":`row-blueprint-${s}`,children:[e.jsx(n,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(me,{className:"h-4 w-4 text-muted-foreground flex-shrink-0"}),e.jsxs("div",{className:"flex-1 space-y-1",children:[e.jsx("span",{className:"text-sm font-medium",children:s==="org-wide"?"Org-wide policy":`Blueprint #${s}`}),e.jsx("div",{className:"h-1.5 bg-muted rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-primary rounded-full transition-all",style:{width:`${f}%`}})})]})]})}),e.jsx(n,{className:"text-right font-mono text-sm","data-testid":`text-blueprint-count-${s}`,children:Number(a).toLocaleString()})]},s)})})]})})]})})]})]})}export{ze 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.