PageSourceSearch

https://sortir.eu/assets/SourcesDuplicates-D68UJKv-.js

js sortir.eu collected 2026-10-02 11:14:42 UTC 19,605 bytes, 1 lines download raw bytes

1import{r,j as e}from"./vendor-react-De19kUq8.js";import{L as W,a as se}from"./vendor-app-DH33cvx6.js";import{a1 as g,h as Me,a4 as j,a as h,I as Ee,x as Pe,b4 as Be,z as Le,B as c,a0 as $e,$ as Re,E as De,O as ae,Z as te,ax as ne,a6 as D,C as re,X as Ge,L as xe,ab as qe,f as He,s as le}from"./index-BNqnZmmX.js";import{P as Oe}from"./page-header-BpDM-DGv.js";import{L as ce}from"./label-BdtRRvBI.js";import{S as G,a as q,b as H,c as O,d as _}from"./select-_TqDQ6Qg.js";import{T as Qe,a as We,b as ie,c as de}from"./tabs-B4YiQNNO.js";import{u as Xe}from"./useEventDuplicates-C1_rLYco.js";import{g as he,a as Ye,u as Ze}from"./useVenueDuplicates-4BtdH01R.js";import{C as Je}from"./checkbox-DiNeIMRN.js";import{V as Ke}from"./VenueMergeModal-sUCGia24.js";import{I as Ue}from"./image-CIxpgXG-.js";import{G as es}from"./globe-AyAqPi9g.js";import{M as w}from"./merge-CGPyuGxb.js";import{F as Q}from"./filter-BTtr7B1B.js";import{S as ss}from"./square-check-big-lUXBIeth.js";import"./vendor-ui-pO556hdz.js";import"./vendor-supabase-Bm92Y2YK.js";import"./index-BdQq_4o_.js";import"./chevron-up-DYPkkba5.js";import"./dialog-C7CvZ_Sl.js";import"./textarea-3NynhvNH.js";import"./scroll-area-DCNBx8wk.js";function as({group:a,onMerge:i,isMerging:v,isSelected:d,onToggleSelect:u}){const[l,p]=r.useState(!1),f=he(a),A=a.match_type==="exact_city"?"Nom + ville identiques":a.match_type==="exact_postal"?"Nom + CP identiques":a.match_type==="exact_address"?"Adresse + ville identiques":a.match_type==="addr_as_name"?"Adresse utilisée comme nom":a.match_type==="exact_name_only"?"Nom identique":`Similarité ${Math.round(a.similarity_score*100)}%`,V=a.match_type.startsWith("exact")?"destructive":a.match_type==="addr_as_name"?"default":"secondary";return e.jsxs(e.Fragment,{children:[e.jsx(g,{className:Me("glass-card overflow-hidden transition-colors",d&&"border-primary/50 bg-primary/5"),children:e.jsxs(j,{className:"p-4 space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[u&&e.jsx(Je,{checked:d,onCheckedChange:u,className:"h-5 w-5"}),e.jsx(h,{variant:V,children:A}),e.jsxs("span",{className:"text-sm text-muted-foreground",children:[a.venue_ids.length," lieux"]})]}),e.jsx("div",{className:"space-y-2",children:a.venue_ids.map((k,t)=>{const N=t===f;return Ye(a,t),e.jsxs("div",{className:`p-3 rounded-lg border space-y-1 ${N?"border-primary/40 bg-primary/5":"border-border/50 bg-muted/30"}`,children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(W,{to:`/app/venues/${k}`,className:"font-medium text-sm hover:text-primary",children:a.venue_names[t]}),N&&e.jsxs(h,{variant:"outline",className:"text-xs text-green-600 border-green-500/30 bg-green-500/5",children:[e.jsx(Ee,{className:"h-3 w-3 mr-1"}),"Recommandé"]})]}),e.jsxs("div",{className:"flex flex-wrap gap-x-3 gap-y-1 text-xs text-muted-foreground",children:[a.venue_cities[t]&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(Pe,{className:"h-3 w-3"}),a.venue_cities[t],a.venue_postal_codes[t]&&` (${a.venue_postal_codes[t]})`]}),e.jsxs("span",{children:[a.venue_event_counts[t]," évén."]}),e.jsxs("span",{children:[a.venue_occurrence_counts[t]," séances"]}),e.jsxs("span",{children:[a.venue_source_counts[t]," sources"]})]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[a.venue_has_coords[t]&&e.jsxs(h,{variant:"outline",className:"text-xs py-0",children:[e.jsx(Be,{className:"h-3 w-3 mr-1"}),"GPS"]}),a.venue_has_image[t]&&e.jsxs(h,{variant:"outline",className:"text-xs py-0",children:[e.jsx(Ue,{className:"h-3 w-3 mr-1"}),"Image"]}),a.venue_has_website[t]&&e.jsxs(h,{variant:"outline",className:"text-xs py-0",children:[e.jsx(es,{className:"h-3 w-3 mr-1"}),"Site"]}),a.venue_has_contact[t]&&e.jsxs(h,{variant:"outline",className:"text-xs py-0",children:[e.jsx(Le,{className:"h-3 w-3 mr-1"}),"Contact"]})]})]},k)})}),e.jsxs(c,{className:"w-full",onClick:()=>p(!0),disabled:v,children:[e.jsx(w,{className:"h-4 w-4 mr-2"}),"Fusionner ces lieux"]})]})}),e.jsx(Ke,{open:l,onOpenChange:p,group:a,onMerge:i,isMerging:v})]})}function oe({label:a,subtitle:i}){const[v,d]=r.useState(0);return r.useEffect(()=>{const u=setInterval(()=>d(l=>l+1),1e3);return()=>clearInterval(u)},[]),e.jsx(g,{className:"glass-card",children:e.jsxs(j,{className:"flex flex-col items-center justify-center py-16",children:[e.jsx(xe,{className:"h-10 w-10 animate-spin text-primary mb-4"}),e.jsxs("h3",{className:"text-lg font-medium",children:["Analyse des ",a," en cours…"]}),e.jsxs("p",{className:"text-sm text-muted-foreground mt-2 text-center max-w-md",children:[i," Cette opération peut prendre jusqu'à 30 secondes."]}),e.jsxs(h,{variant:"outline",className:"mt-4 animate-pulse",children:[v,"s écoulées"]})]})})}function ks({initialTab:a="events"}){const[i,v]=r.useState(""),[d,u]=r.useState({}),[l,p]=r.useState(""),[f,A]=r.useState("");r.useEffect(()=>{const s=setTimeout(()=>A(i.trim()),400);return()=>clearTimeout(s)},[i]);const[V,k]=r.useState(a),[t,N]=r.useState(new Set),[I,X]=r.useState(!1),[Y,Z]=r.useState({current:0,total:0}),[C,T]=r.useState({}),[M,ve]=r.useState(""),S=r.useMemo(()=>({...C,search:M.trim()||void 0}),[C,M]),J=!!(S.regionId||S.sourceId||S.venueId||S.search),{duplicatePairs:b,isLoading:E,isError:ge,error:P,refetch:je,dismissPair:pe,mergePair:fe,isMerging:Ne,page:z,hasMore:B,nextPage:be,prevPage:_e}=Xe(S,J),{data:L}=se({queryKey:["sources-list-minimal"],queryFn:async()=>{const{data:s}=await le.from("sources").select("id, name").order("name");return s||[]},staleTime:3e5}),{data:o}=se({queryKey:["regions-list"],queryFn:async()=>{const{data:s}=await le.from("regions").select("id, name, code").order("name");return s||[]},staleTime:3e5});r.useEffect(()=>{!l&&o&&o.length>0&&p(o[0].id)},[o,l]);const ye=r.useMemo(()=>{const s={...d,search:f||void 0};return l==="all"?{...s,mode:"all-regions-chunked",allRegionIds:(o??[]).map(n=>n.id),regionId:void 0}:l==="unassigned"?{...s,mode:"unassigned",regionId:void 0}:{...s,mode:"single",regionId:l||void 0}},[d,f,l,o]),{groups:x,isLoading:we,isError:Ce,error:$,refetch:R,progress:F,mergeVenues:Se,mergeVenuesAsync:K,isMerging:ke}=Ze(ye),Ie=r.useCallback(s=>{N(n=>{const m=new Set(n);return m.has(s)?m.delete(s):m.add(s),m})},[]),ze=r.useCallback(()=>{N(s=>s.size===x.length?new Set:new Set(x.map(n=>n.group_key)))},[x]),Fe=r.useCallback(async()=>{const s=x.filter(m=>t.has(m.group_key));if(!s.length)return;X(!0),Z({current:0,total:s.length});let n=0;for(let m=0;m<s.length;m++){const y=s[m],U=he(y),Ae=y.venue_ids[U],Ve=y.venue_ids.filter((ee,Te)=>Te!==U);Z({current:m+1,total:s.length});try{await K({targetId:Ae,sourceIds:Ve,reason:"Batch merge"}),n++}catch(ee){console.error(`[BatchMerge] Failed group ${y.group_key}:`,ee)}}X(!1),N(new Set),n>0&&$e.success(`${n}/${s.length} groupe(s) fusionné(s)`)},[x,t,K]);return e.jsxs("div",{className:"space-y-6 animate-fade-in",children:[e.jsx(Oe,{title:"Doublons & fusion",description:"Détectez et fusionnez les doublons d'événements et de lieux"}),e.jsx(c,{variant:"ghost",size:"sm",asChild:!0,className:"mb-4",children:e.jsxs(W,{to:a==="venues"?"/app/venues":"/app/sources",children:[e.jsx(Re,{className:"h-4 w-4 mr-2"}),a==="venues"?"Retour aux lieux":"Retour aux sources"]})}),e.jsxs(Qe,{value:V,onValueChange:s=>k(s),children:[e.jsxs(We,{className:"grid w-full grid-cols-2",children:[e.jsxs(ie,{value:"events",children:["Événements",b.length>0&&` (${b.length}${B?"+":""})`]}),e.jsxs(ie,{value:"venues",children:[e.jsx(De,{className:"h-4 w-4 mr-1"}),"Lieux",x.length>0&&` (${x.length})`]})]}
1),e.jsxs(de,{value:"events",className:"space-y-4 mt-4",children:[e.jsx(g,{className:"glass-card",children:e.jsx(j,{className:"py-4",children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(Q,{className:"h-4 w-4"}),"Filtres"]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(ae,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e.jsx(te,{placeholder:"Rechercher par titre…",value:M,onChange:s=>ve(s.target.value),className:"pl-9"})]}),e.jsxs(G,{value:C.sourceId||"all",onValueChange:s=>T(n=>({...n,sourceId:s==="all"?void 0:s})),children:[e.jsx(q,{children:e.jsx(H,{placeholder:"Toutes les sources"})}),e.jsxs(O,{children:[e.jsx(_,{value:"all",children:"Toutes les sources"}),L==null?void 0:L.map(s=>e.jsx(_,{value:s.id,children:s.name},s.id))]})]}),e.jsxs(G,{value:C.regionId||"all",onValueChange:s=>T(n=>({...n,regionId:s==="all"?void 0:s})),children:[e.jsx(q,{children:e.jsx(H,{placeholder:"Toutes les régions"})}),e.jsxs(O,{children:[e.jsx(_,{value:"all",children:"Toutes les régions"}),o==null?void 0:o.map(s=>e.jsx(_,{value:s.id,children:s.name},s.id))]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ne,{id:"include-archived",checked:C.includeArchived||!1,onCheckedChange:s=>T(n=>({...n,includeArchived:s}))}),e.jsx(ce,{htmlFor:"include-archived",className:"text-sm",children:"Inclure archivés"})]})]})]})})}),J?E?e.jsx(oe,{label:"événements",subtitle:"Comparaison des titres, dates et lieux pour détecter les doublons."}):ge?e.jsx(g,{className:"glass-card border-destructive/30",children:e.jsxs(j,{className:"flex flex-col items-center justify-center py-16",children:[e.jsx("div",{className:"p-4 rounded-full bg-destructive/10 mb-4",children:e.jsx(D,{className:"h-12 w-12 text-destructive"})}),e.jsx("h3",{className:"text-lg font-medium mb-2",children:"Erreur de détection"}),e.jsx("p",{className:"text-muted-foreground text-center max-w-md mb-4",children:(P==null?void 0:P.message)||"Impossible d'analyser les doublons d'événements. Réessayez."}),e.jsx(c,{variant:"outline",onClick:()=>je(),children:"Réessayer"})]})}):b.length===0?e.jsx(g,{className:"glass-card",children:e.jsxs(j,{className:"flex flex-col items-center justify-center py-16",children:[e.jsx("div",{className:"p-4 rounded-full bg-green-500/10 mb-4",children:e.jsx(re,{className:"h-12 w-12 text-green-500"})}),e.jsx("h3",{className:"text-lg font-medium mb-2",children:"Aucun doublon détecté"}),e.jsx("p",{className:"text-muted-foreground text-center max-w-md",children:"Aucune paire d'événements similaires trouvée avec ces filtres."})]})}):e.jsxs("div",{className:"space-y-3",children:[e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Page ",z+1," · ",b.length," paire",b.length>1?"s":""," affichée",b.length>1?"s":""]}),b.map(s=>e.jsx(ts,{pair:s,onMerge:(n,m)=>fe({sourceId:n,targetId:m}),onDismiss:()=>pe({eventAId:s.event_a_id,eventBId:s.event_b_id}),isMerging:Ne},`${s.event_a_id}-${s.event_b_id}`)),(z>0||B)&&e.jsxs("div",{className:"flex items-center justify-center gap-3 pt-4",children:[e.jsx(c,{variant:"outline",size:"sm",disabled:z===0||E,onClick:_e,children:"Précédent"}),e.jsxs("span",{className:"text-sm text-muted-foreground tabular-nums",children:["Page ",z+1]}),e.jsx(c,{variant:"outline",size:"sm",disabled:!B||E,onClick:be,children:"Suivant"})]})]}):e.jsx(g,{className:"glass-card border-primary/20",children:e.jsxs(j,{className:"flex flex-col items-center justify-center py-16",children:[e.jsx("div",{className:"p-4 rounded-full bg-primary/10 mb-4",children:e.jsx(Q,{className:"h-10 w-10 text-primary"})}),e.jsx("h3",{className:"text-lg font-medium mb-2",children:"Filtrez pour lancer l'analyse"}),e.jsxs("p",{className:"text-muted-foreground text-center max-w-md",children:["Sélectionnez une ",e.jsx("strong",{children:"région"}),", une ",e.jsx("strong",{children:"source"})," ou saisissez un ",e.jsx("strong",{children:"mot-clé"})," pour lancer la détection de doublons. L'analyse sur l'ensemble des événements est trop volumineuse."]})]})})]}
1),e.jsxs(de,{value:"venues",className:"space-y-4 mt-4",children:[e.jsx(g,{className:"glass-card",children:e.jsx(j,{className:"py-4",children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-muted-foreground",children:[e.jsx(Q,{className:"h-4 w-4"}),"Filtres"]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(ae,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),e.jsx(te,{placeholder:"Rechercher un lieu…",value:i,onChange:s=>v(s.target.value),className:"pl-9"})]}),e.jsxs(G,{value:l||"",onValueChange:s=>p(s),children:[e.jsx(q,{children:e.jsx(H,{placeholder:"Choisir une région"})}),e.jsxs(O,{children:[o==null?void 0:o.map(s=>e.jsx(_,{value:s.id,children:s.name},s.id)),e.jsx(_,{value:"unassigned",children:"Lieux sans région"}),e.jsx(_,{value:"all",children:"Toutes les régions (lent)"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ne,{id:"include-archived-venues",checked:d.includeArchived||!1,onCheckedChange:s=>u(n=>({...n,includeArchived:s}))}),e.jsx(ce,{htmlFor:"include-archived-venues",className:"text-sm",children:"Inclure archivés"})]})]})]})})}),we?e.jsx(oe,{label:"lieux",subtitle:F&&F.total>0?`Analyse région par région (${F.current}/${F.total})…`:"Comparaison des noms et adresses pour détecter les doublons."}):Ce?e.jsx(g,{className:"glass-card border-destructive/30",children:e.jsxs(j,{className:"flex flex-col items-center justify-center py-16",children:[e.jsx("div",{className:"p-4 rounded-full bg-destructive/10 mb-4",children:e.jsx(D,{className:"h-12 w-12 text-destructive"})}),e.jsx("h3",{className:"text-lg font-medium mb-2",children:"Erreur de détection"}),e.jsx("p",{className:"text-muted-foreground text-center max-w-md mb-4",children:($==null?void 0:$.message)||"Impossible d'analyser les doublons de lieux. Réessayez."}),e.jsxs("div",{className:"flex gap-2",children:[l==="all"&&o&&o.length>0&&e.jsx(c,{onClick:()=>p(o[0].id),children:"Filtrer par région"}),e.jsx(c,{variant:"outline",onClick:()=>R(),children:"Réessayer"})]})]})}):x.length===0?e.jsx(g,{className:"glass-card",children:e.jsxs(j,{className:"flex flex-col items-center justify-center py-16",children:[e.jsx("div",{className:"p-4 rounded-full bg-primary/10 mb-4",children:e.jsx(re,{className:"h-12 w-12 text-primary"})}),e.jsx("h3",{className:"text-lg font-medium mb-2",children:"Aucun doublon de lieu détecté"}),e.jsx("p",{className:"text-muted-foreground text-center max-w-md mb-4",children:i.trim()||l?"Aucun doublon trouvé avec ces filtres.":"Tous les lieux semblent uniques."}),e.jsx(c,{variant:"outline",onClick:()=>R(),children:"Relancer l'analyse"})]})}):e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 rounded-lg bg-amber-500/5 border border-amber-500/30 flex items-start gap-3",children:[e.jsx(D,{className:"h-5 w-5 text-amber-500 shrink-0 mt-0.5"}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("p",{className:"font-medium text-foreground",children:[x.length," groupe(s) de lieux en doublon détectés"]}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Fusionnez les doublons pour consolider événements, séances et références."})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(c,{variant:"outline",size:"sm",onClick:ze,children:[e.jsx(ss,{className:"h-4 w-4 mr-1"}),t.size===x.length?"Désélectionner":"Tout sélectionner"]}),e.jsx(c,{variant:"ghost",size:"sm",onClick:()=>R(),children:"Relancer"})]})]}),x.map(s=>e.jsx(as,{group:s,onMerge:(n,m,y)=>Se({targetId:n,sourceIds:m,reason:y}),isMerging:ke||I,isSelected:t.has(s.group_key),onToggleSelect:()=>Ie(s.group_key)},s.group_key)),t.size>0&&e.jsx("div",{className:"fixed bottom-0 left-0 right-0 z-40 backdrop-blur-xl bg-background/80 border-t border-border/50 animate-slide-up",children:e.jsxs("div",{className:"max-w-6xl mx-auto px-4 py-3 flex items-center justify-between gap-3",children:[e.jsxs("span",{className:"text-sm font-medium",children:[t.size," groupe(s) sélectionné(s)"]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(c,{variant:"outline",size:"sm",onClick:()=>N(new Set),disabled:I,children:[e.jsx(Ge,{className:"h-4 w-4 mr-1"}),"Annuler"]}),e.jsx(c,{size:"sm",onClick:Fe,disabled:I,className:"bg-gradient-to-r from-accent to-primary text-primary-foreground",children:I?e.jsxs(e.Fragment,{children:[e.jsx(xe,{className:"h-4 w-4 mr-1 animate-spin"}),"Fusion ",Y.current,"/",Y.total,"…"]}):e.jsxs(e.Fragment,{children:[e.jsx(w,{className:"h-4 w-4 mr-1"}),"Fusionner la sélection (",t.size,")"]})})]})]})})]})]})]})]})}const me={duplicate_strong:{label:"Doublon fort",className:"bg-destructive/15 text-destructive border-destructive/30"},sibling_event:{label:"Événement frère",className:"bg-primary/15 text-primary border-primary/30"},duplicate_review:{label:"À vérifier",className:"bg-warning/15 text-warning border-warning/30"}};function ts({pair:a,onMerge:i,onDismiss:v,isMerging:d}){const u=f=>{if(!f)return"—";try{return qe(new Date(f),"dd/MM/yyyy HH:mm",{locale:He})}catch{return"—"}},l=Math.round(a.similarity_score*100),p=me[a.match_type]||me.duplicate_review;return e.jsx(g,{className:"glass-card overflow-hidden",children:e.jsxs(j,{className:"p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 mb-3",children:[e.jsx(h,{className:p.className,children:p.label}),e.jsxs(h,{variant:l>=80?"destructive":"secondary",children:[l,"%"]}),a.same_venue&&e.jsx(h,{variant:"outline",className:"text-xs border-primary/30 bg-primary/5",children:"Même lieu"}),a.match_reason&&e.jsx("span",{className:"text-xs text-muted-foreground hidden sm:inline",children:a.match_reason})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[e.jsx(ue,{id:a.event_a_id,title:a.event_a_title,status:a.event_a_status,datetime:u(a.event_a_datetime),venue:a.event_a_venue,source:a.event_a_source}),e.jsx(ue,{id:a.event_b_id,title:a.event_b_title,status:a.event_b_status,datetime:u(a.event_b_datetime),venue:a.event_b_venue,source:a.event_b_source})]}),e.jsxs("div",{className:"flex flex-col sm:flex-row gap-2 mt-3",children:[a.match_type==="sibling_event"?e.jsxs(e.Fragment,{children:[e.jsxs(c,{size:"sm",variant:"outline",className:"flex-1",disabled:d,onClick:()=>i(a.event_b_id,a.event_a_id),children:[e.jsx(w,{className:"h-4 w-4 mr-1"}),"Enrichir A depuis B"]}),e.jsxs(c,{size:"sm",variant:"outline",className:"flex-1",disabled:d,onClick:()=>
1i(a.event_a_id,a.event_b_id),children:[e.jsx(w,{className:"h-4 w-4 mr-1"}),"Enrichir B depuis A"]})]}):e.jsxs(e.Fragment,{children:[e.jsxs(c,{size:"sm",variant:"default",className:"flex-1",disabled:d,onClick:()=>i(a.event_b_id,a.event_a_id),children:[e.jsx(w,{className:"h-4 w-4 mr-1"}),"Garder A, fusionner B"]}),e.jsxs(c,{size:"sm",variant:"outline",className:"flex-1",disabled:d,onClick:()=>i(a.event_a_id,a.event_b_id),children:[e.jsx(w,{className:"h-4 w-4 mr-1"}),"Garder B, fusionner A"]})]}),e.jsx(c,{size:"sm",variant:"ghost",onClick:v,children:"Ignorer"})]})]})})}function ue({id:a,title:i,status:v,datetime:d,venue:u,source:l}){return e.jsxs("div",{className:"p-3 bg-muted/30 rounded-lg border border-border/50 space-y-1",children:[e.jsx(W,{to:`/app/events/${a}`,className:"font-medium text-sm hover:text-primary line-clamp-2",children:i}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:e.jsx(h,{variant:"outline",className:"text-xs",children:v})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:d}),u&&e.jsxs("p",{className:"text-xs text-muted-foreground",children:["📍 ",u]}),l&&e.jsxs("p",{className:"text-xs text-muted-foreground",children:["🔗 ",l]})]})}export{ks 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.