PageSourceSearch

https://arcanes.be/assets/AdminFeatureUpdates-R17AZgab.js

js arcanes.be collected 2026-10-03 18:18:14 UTC 19,020 bytes, 1 lines download raw bytes

1import{r as t,s as y,j as e,I as C,B as g,i as je,c0 as pe,X as fe,c1 as le,J as N,O as ge,P as ve,Q as _e,R as Ne,k as Z,g as d,c2 as be,c3 as ye,c4 as ie,a as we,c as Ce,Y as Ae,a2 as Se,c5 as Te,E as De,ac as Ee}from"./index-lHrFFjsB.js";import{C as $,a as G,d as K,b as Q,c as Fe}from"./card-Czj189Ds.js";import{T as ke,a as Le,b as te,c as R,d as Ie,e as z}from"./table-Bv3GMUgt.js";import{B as Be}from"./badge-Cwf2-rCT.js";import{T as ae}from"./textarea-D5vLaari.js";import{S as Re}from"./switch-DkDNeVxo.js";import{T as ze,a as Pe,b as W,c as X,S as Me}from"./tabs-BLELZkMO.js";import{P as ee}from"./plus-BNIIk6AT.js";import{T as se}from"./trash-2-Cktf1HWc.js";import{A as Ve,h as Oe,a as qe,b as He,c as Ue,d as Je,e as $e,f as Ge,g as Qe}from"./alert-dialog-C1NUJdK7.js";import{A as We}from"./arrow-left-DIm2rE-2.js";import"./index-BpB38B3W.js";const Xe=()=>{const[h,o]=t.useState(!1),[w,a]=t.useState(!0);return t.useEffect(()=>{const m=async()=>{try{const{data:{user:u}}=await y.auth.getUser();if(!u){o(!1),a(!1);return}const{data:p,error:x}=await y.from("profiles").select("is_admin").eq("id",u.id).single();x?(console.error("Error checking admin status:",x),o(!1)):o((p==null?void 0:p.is_admin)??!1)}catch(u){console.error("Error checking admin status:",u),o(!1)}finally{a(!1)}};m();const{data:{subscription:j}}=y.auth.onAuthStateChange(()=>{m()});return()=>j.unsubscribe()},[]),{isAdmin:h,isLoading:w}},Ye=()=>{const[h,o]=t.useState(!1),[w,a]=t.useState(!0),[m,j]=t.useState(null);return t.useEffect(()=>{(async()=>{try{const{data:{user:x}}=await y.auth.getUser();j(x),o(!!x)}catch(x){console.error("Error checking auth:",x),o(!1),j(null)}finally{a(!1)}})();const{data:{subscription:p}}=y.auth.onAuthStateChange((x,v)=>{j((v==null?void 0:v.user)??null),o(!!(v!=null&&v.user)),a(!1)});return()=>p.unsubscribe()},[]),{isAuthenticated:h,isLoading:w,user:m}};function Ke({value:h,onChange:o,bucket:w="feature-updates-media",folder:a="banners",placeholder:m="URL de l'image ou télécharger..."}){const[j,u]=t.useState(!1),p=t.useRef(null),x=async f=>{var D;const b=(D=f.target.files)==null?void 0:D[0];if(b){if(!b.type.startsWith("image/")){N.error("Seules les images sont autorisées");return}if(b.size>5*1024*1024){N.error("L'image ne doit pas dépasser 5MB");return}u(!0);try{const A=b.name.split(".").pop(),I=`${a}/${Date.now()}-${Math.random().toString(36).substring(7)}.${A}`,{error:F}=await y.storage.from(w).upload(I,b,{cacheControl:"3600",upsert:!1});if(F)throw F;const{data:{publicUrl:_}}=y.storage.from(w).getPublicUrl(I);o(_),N.success("Image téléchargée")}catch(A){console.error("Upload error:",A),N.error("Erreur lors du téléchargement")}finally{u(!1),p.current&&(p.current.value="")}}},v=()=>{o("")};return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(C,{placeholder:m,value:h,onChange:f=>o(f.target.value),className:"flex-1"}),e.jsx("input",{type:"file",ref:p,onChange:x,accept:"image/*",className:"hidden"}),e.jsx(g,{type:"button",variant:"outline",size:"icon",onClick:()=>{var f;return(f=p.current)==null?void 0:f.click()},disabled:j,children:j?e.jsx(je,{className:"h-4 w-4 animate-spin"}):e.jsx(pe,{className:"h-4 w-4"})}),h&&e.jsx(g,{type:"button",variant:"ghost",size:"icon",onClick:v,children:e.jsx(fe,{className:"h-4 w-4"})})]}),h&&e.jsx("div",{className:"relative rounded-lg overflow-hidden border border-border bg-muted/50",children:e.jsx("img",{src:h,alt:"Preview",className:"w-full h-32 object-cover",onError:f=>{f.target.style.display="none"}})}),!h&&e.jsx("div",{className:"flex items-center justify-center h-32 border border-dashed border-border rounded-lg bg-muted/30",children:e.jsxs("div",{className:"text-center text-muted-foreground",children:[e.jsx(le,{className:"h-8 w-8 mx-auto mb-2 opacity-50"}),e.jsx("p",{className:"text-xs",children:"Aucune image"})]})})]})}const Y={icon:"sparkles",title_fr:"",title_nl:"",description_fr:"",description_nl:"",link_url:""},Ze={label_fr:"",label_nl:"",url:"",variant:"primary"},es=({open:h,onClose:o,onSaved:w,editingUpdate:a})=>{const[m,j]=t.useState(""),[u,p]=t.useState(""),[x,v]=t.useState(""),[f,b]=t.useState(""),[D,A]=t.useState(""),[I,F]=t.useState(!0),[_,P]=t.useState(""),[k,V]=t.useState(""),[O,q]=t.useState(""),[S,L]=t.useState([{...Y}]),[E,B]=t.useState([]),[H,s]=t.useState(!1),[c,U]=t.useState("general"),[ne,re]=t.useState(!1);t.useEffect(()=>{if(a){j(a.version),p(a.title_fr),v(a.title_nl),b(a.description_fr),A(a.description_nl),F(a.is_active??!0),P(a.banner_image_url||""),V(a.video_url||""),q(a.video_type||"");const r=a.features;L(r&&r.length>0?r:[{...Y}]);const l=a.action_buttons;B(l&&l.length>0?l:[])}else ce()},[a,h]);const ce=()=>{j(""),p(""),v(""),b(""),A(""),F(!0),P(""),V(""),q(""),L([{...Y}]),B([]),U("general")},oe=()=>{L([...S,{...Y}])},de=r=>{S.length>1&&L(S.filter((l,i)=>i!==r))},M=(r,l,i)=>{const T=[...S];T[r]={...T[r],[l]:i},L(T)},ue=()=>{B([...E,{...Ze}])},he=r=>{B(E.filter((l,i)=>i!==r))},J=(r,l,i)=>{const T=[...E];T[r]={...T[r],[l]:i},B(T)},me=()=>
1({id:(a==null?void 0:a.id)||"preview",version:m,title_fr:u,title_nl:x,description_fr:f,description_nl:D,features:S.filter(r=>r.title_fr||r.title_nl),published_at:new Date().toISOString(),banner_image_url:_||null,video_url:k||null,video_type:O||null,action_buttons:E.filter(r=>r.label_fr&&r.url)}),xe=async r=>{if(r.preventDefault(),!m||!u||!x||!f||!D){N.error("Veuillez remplir tous les champs obligatoires");return}s(!0);try{const l=S.filter(n=>n.title_fr||n.title_nl).map(n=>({icon:n.icon,title_fr:n.title_fr,title_nl:n.title_nl,description_fr:n.description_fr,description_nl:n.description_nl,link_url:n.link_url||null})),i=E.filter(n=>n.label_fr&&n.url).map(n=>({label_fr:n.label_fr,label_nl:n.label_nl,url:n.url,variant:n.variant})),T={version:m,title_fr:u,title_nl:x,description_fr:f,description_nl:D,is_active:I,features:l,published_at:new Date().toISOString(),banner_image_url:_||null,video_url:k||null,video_type:O||null,action_buttons:i};if(a){const{error:n}=await y.from("feature_updates").update(T).eq("id",a.id);if(n)throw n;N.success("Mise à jour modifiée")}else{const{error:n}=await y.from("feature_updates").insert(T);if(n)throw n;N.success("Mise à jour créée")}w()}catch(l){console.error("Error saving update:",l),N.error("Erreur lors de l'enregistrement")}finally{s(!1)}};return e.jsxs(e.Fragment,{children:[e.jsx(ge,{open:h,onOpenChange:o,children:e.jsxs(ve,{className:"max-w-3xl max-h-[90vh] overflow-y-auto",children:[e.jsx(_e,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(Ne,{children:a?"Modifier la mise à jour":"Nouvelle mise à jour"}),e.jsxs(g,{type:"button",variant:"outline",size:"sm",onClick:()=>re(!0),className:"gap-2",children:[e.jsx(Z,{className:"h-4 w-4"}),"Prévisualiser"]})]})}),e.jsxs("form",{onSubmit:xe,children:[e.jsxs(ze,{value:c,onValueChange:U,className:"w-full",children:[e.jsxs(Pe,{className:"grid w-full grid-cols-4",children:[e.jsx(W,{value:"general",children:"Général"}),e.jsx(W,{value:"media",children:"Médias"}),e.jsx(W,{value:"features",children:"Fonctionnalités"}),e.jsx(W,{value:"actions",children:"Actions"})]}),e.jsxs(X,{value:"general",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{htmlFor:"version",children:"Version *"}),e.jsx(C,{id:"version",placeholder:"1.0.0",value:m,onChange:r=>j(r.target.value)})]}),e.jsxs("div",{className:"flex items-center gap-2 pt-6",children:[e.jsx(Re,{id:"is_active",checked:I,onCheckedChange:F}),e.jsx(d,{htmlFor:"is_active",children:"Actif"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{htmlFor:"title_fr",children:"Titre (FR) *"}),e.jsx(C,{id:"title_fr",placeholder:"🚀 Nouvelle fonctionnalité",value:u,onChange:r=>p(r.target.value)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{htmlFor:"title_nl",children:"Titre (NL) *"}),e.jsx(C,{id:"title_nl",placeholder:"🚀 Nieuwe functie",value:x,onChange:r=>v(r.target.value)})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{htmlFor:"description_fr",children:"Description (FR) *"}),e.jsx(ae,{id:"description_fr",placeholder:"Description de la mise à jour...",value:f,onChange:r=>b(r.target.value),rows:4})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{htmlFor:"description_nl",children:"Description (NL) *"}),e.jsx(ae,{id:"description_nl",placeholder:"Beschrijving van de update...",value:D,onChange:r=>A(r.target.value),rows:4})]})]})]}),e.jsxs(X,{value:"media",className:"space-y-6 mt-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{children:"Image bannière"}),e.jsx(Ke,{value:_,onChange:P,folder:"banners",placeholder:"URL de l'image bannière..."})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(d,{children:"Vidéo intégrée"}),e.jsx(be,{url:k,type:O,onUrlChange:V,onTypeChange:q})]})]}),e.jsxs(X,{value:"features",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(d,{children:"Fonctionnalités"}),e.jsxs(g,{type:"button",variant:"outline",size:"sm",onClick:oe,children:[e.jsx(ee,{className:"h-4 w-4 mr-1"}),"Ajouter"]})]}),S.map((r,l)=>e.jsxs("div",{className:"p-4 border rounded-lg space-y-3 relative bg-muted/30",children:[S.length>1&&e.jsx(g,{type:"button",variant:"ghost",size:"icon",className:"absolute top-2 right-2",onClick:()=>de(l),children:e.jsx(se,{className:"h-4 w-4 text-destructive"})}),e.jsxs("div",{className:"grid grid-cols-4 gap-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Icône"}
1),e.jsx(ye,{value:r.icon,onChange:i=>M(l,"icon",i)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Titre FR"}),e.jsx(C,{placeholder:"Titre",value:r.title_fr,onChange:i=>M(l,"title_fr",i.target.value)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Titre NL"}),e.jsx(C,{placeholder:"Titel",value:r.title_nl,onChange:i=>M(l,"title_nl",i.target.value)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Lien (optionnel)"}),e.jsx(C,{placeholder:"https://...",value:r.link_url||"",onChange:i=>M(l,"link_url",i.target.value)})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Description FR"}),e.jsx(C,{placeholder:"Description",value:r.description_fr,onChange:i=>M(l,"description_fr",i.target.value)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Description NL"}),e.jsx(C,{placeholder:"Beschrijving",value:r.description_nl,onChange:i=>M(l,"description_nl",i.target.value)})]})]})]},l))]}),e.jsxs(X,{value:"actions",className:"space-y-4 mt-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(d,{children:"Boutons d'action"}),e.jsxs(g,{type:"button",variant:"outline",size:"sm",onClick:ue,children:[e.jsx(ee,{className:"h-4 w-4 mr-1"}),"Ajouter"]})]}),E.length===0&&e.jsx("p",{className:"text-muted-foreground text-sm text-center py-4",children:`Aucun bouton d'action. Cliquez sur "Ajouter" pour créer des liens vers des pages ou ressources.`}),E.map((r,l)=>e.jsxs("div",{className:"p-4 border rounded-lg space-y-3 relative bg-muted/30",children:[e.jsx(g,{type:"button",variant:"ghost",size:"icon",className:"absolute top-2 right-2",onClick:()=>he(l),children:e.jsx(se,{className:"h-4 w-4 text-destructive"})}),e.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Label FR"}),e.jsx(C,{placeholder:"En savoir plus",value:r.label_fr,onChange:i=>J(l,"label_fr",i.target.value)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Label NL"}),e.jsx(C,{placeholder:"Meer weten",value:r.label_nl,onChange:i=>J(l,"label_nl",i.target.value)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"Style"}),e.jsxs("select",{className:"w-full h-9 px-3 rounded-md border border-input bg-background text-sm",value:r.variant,onChange:i=>J(l,"variant",i.target.value),children:[e.jsx("option",{value:"primary",children:"Principal"}),e.jsx("option",{value:"secondary",children:"Secondaire"}),e.jsx("option",{value:"link",children:"Lien"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(d,{className:"text-xs",children:"URL"}),e.jsx(C,{placeholder:"https://... ou /chemin",value:r.url,onChange:i=>J(l,"url",i.target.value)})]})]},l))]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-6 border-t mt-6",children:[e.jsx(g,{type:"button",variant:"outline",onClick:o,children:"Annuler"}),e.jsx(g,{type:"submit",disabled:H,children:H?"Enregistrement...":a?"Modifier":"Créer"})]})]})]})}),e.jsx(ie,{open:ne,onClose:()=>re(!1),update:me()})]})},ms=()=>{const h=we(),{isAuthenticated:o,isLoading:w,user:a}=Ye(),{isAdmin:m,isLoading:j}=Xe(),[u,p]=t.useState([]),[x,v]=t.useState(!0),[f,b]=t.useState(!1),[D,A]=t.useState(null),[I,F]=t.useState(0),[_,P]=t.useState(null);t.useEffect(()=>{!w&&!o&&h("/login")},[w,o,h]),t.useEffect(()=>{!j&&!m&&o&&(N.error("Accès refusé"),h("/dashboard"))},[j,m,o,h]),t.useEffect(()=>{m&&k()},[m]),t.useEffect(()=>{(async()=>{if(a)try{const{data:c}=await y.rpc("get_total_credits",{p_user_id:a.id});F(c||0)}catch(c){console.error("Error fetching credits:",c)}})()},[a]);const k=async()=>{try{const{data:s,error:c}=await y.from("feature_updates").select("*").order("published_at",{ascending:!1});if(c)throw c;p(s||[])}catch(s){console.error("Error fetching updates:",s),N.error("Erreur lors du chargement des mises à jour")}finally{v(!1)}},V=async s=>{try{const{error:c}=await y.from("feature_updates").delete().eq("id",s);if(c)throw c;N.success("Mise à jour supprimée"),k()}catch(c){console.error("Error deleting update:",c),N.error("Erreur lors de la suppression")}},O=async s=>{try{const{error:c}=await y.from("feature_updates").update({is_active:!s.is_active}).eq("id",s.id);if(c)throw c;N.success(s.is_active?"Mise à jour désactivée":"Mise à jour activée"),k()}catch(c){console.error("Error toggling update:",c),N.error("Erreur lors de la modification")}},q=s=>{A(s),b(!0)},S=()=>{A(null),b(!0)},L=()=>{b(!1),A(null)},E=()=>
1{L(),k()},B=s=>{const c=Array.isArray(s.features)?s.features:[],U=Array.isArray(s.action_buttons)?s.action_buttons:[];P({...s,features:c,action_buttons:U})},H=u.reduce((s,c)=>s+(c.view_count||0),0);return w||j?e.jsx("div",{className:"min-h-screen bg-background flex items-center justify-center",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}):m?e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(Ce,{title:"Admin — Feature Updates | Arcanes",description:"Gestion des mises à jour",noIndex:!0}),e.jsx(Ae,{isLoggedIn:o,totalCredits:I}),e.jsxs("main",{className:"container mx-auto px-4 py-8 pt-24",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-6",children:[e.jsx(g,{variant:"ghost",size:"icon",onClick:()=>h("/dashboard"),children:e.jsx(We,{className:"h-5 w-5"})}),e.jsx("h1",{className:"text-2xl font-bold",children:"Gestion des Mises à jour"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mb-6",children:[e.jsx($,{children:e.jsxs(G,{className:"pb-2",children:[e.jsx(K,{children:"Total des mises à jour"}),e.jsx(Q,{className:"text-3xl",children:u.length})]})}),e.jsx($,{children:e.jsxs(G,{className:"pb-2",children:[e.jsx(K,{children:"Mises à jour actives"}),e.jsx(Q,{className:"text-3xl text-primary",children:u.filter(s=>s.is_active).length})]})}),e.jsx($,{children:e.jsxs(G,{className:"pb-2",children:[e.jsxs(K,{className:"flex items-center gap-1",children:[e.jsx(Se,{className:"h-4 w-4"}),"Total des vues"]}),e.jsx(Q,{className:"text-3xl",children:H})]})})]}),e.jsxs($,{children:[e.jsxs(G,{className:"flex flex-row items-center justify-between",children:[e.jsx(Q,{children:"Feature Updates"}),e.jsxs(g,{onClick:S,children:[e.jsx(ee,{className:"h-4 w-4 mr-2"}),"Nouvelle mise à jour"]})]}),e.jsx(Fe,{children:x?e.jsx("div",{className:"flex justify-center py-8",children:e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary"})}):u.length===0?e.jsx("p",{className:"text-muted-foreground text-center py-8",children:"Aucune mise à jour créée"}):e.jsxs(ke,{children:[e.jsx(Le,{children:e.jsxs(te,{children:[e.jsx(R,{children:"Version"}),e.jsx(R,{children:"Titre (FR)"}),e.jsx(R,{children:"Médias"}),e.jsx(R,{children:"Statut"}),e.jsx(R,{children:"Vues"}),e.jsx(R,{children:"Date"}),e.jsx(R,{className:"text-right",children:"Actions"})]})}),e.jsx(Ie,{children:u.map(s=>e.jsxs(te,{children:[e.jsx(z,{className:"font-mono",children:s.version}),e.jsx(z,{className:"max-w-[200px] truncate",children:s.title_fr}),e.jsx(z,{children:e.jsxs("div",{className:"flex items-center gap-1",children:[s.banner_image_url&&e.jsx(le,{className:"h-4 w-4 text-muted-foreground"}),s.video_url&&e.jsx(Te,{className:"h-4 w-4 text-muted-foreground"}),!s.banner_image_url&&!s.video_url&&e.jsx("span",{className:"text-muted-foreground text-xs",children:"-"})]})}),e.jsx(z,{children:e.jsx(Be,{variant:s.is_active?"default":"secondary",children:s.is_active?"Actif":"Inactif"})}),e.jsx(z,{children:e.jsx("span",{className:"text-muted-foreground",children:s.view_count||0})}),e.jsx(z,{children:s.published_at?new Date(s.published_at).toLocaleDateString("fr-BE"):"-"}),e.jsx(z,{className:"text-right",children:e.jsxs("div",{className:"flex justify-end gap-1",children:[e.jsx(g,{variant:"ghost",size:"icon",onClick:()=>B(s),title:"Prévisualiser",children:e.jsx(Z,{className:"h-4 w-4"})}),e.jsx(g,{variant:"ghost",size:"icon",onClick:()=>O(s),title:s.is_active?"Désactiver":"Activer",children:s.is_active?e.jsx(De,{className:"h-4 w-4"}):e.jsx(Z,{className:"h-4 w-4 text-muted-foreground"})}),e.jsx(g,{variant:"ghost",size:"icon",onClick:()=>q(s),children:e.jsx(Me,{className:"h-4 w-4"})}),e.jsxs(Ve,{children:[e.jsx(Oe,{asChild:!0,children:e.jsx(g,{variant:"ghost",size:"icon",children:e.jsx(se,{className:"h-4 w-4 text-destructive"})})}),e.jsxs(qe,{children:[e.jsxs(He,{children:[e.jsx(Ue,{children:"Confirmer la suppression"}),e.jsxs(Je,{children:['Êtes-vous sûr de vouloir supprimer la mise à jour "',s.version,'"? Cette action est irréversible.']})]}),e.jsxs($e,{children:[e.jsx(Ge,{children:"Annuler"}),e.jsx(Qe,{onClick:()=>V(s.id),children:"Supprimer"})]})]})]})]})})]},s.id))})]})})]})]}),e.jsx(Ee,{}),e.jsx(es,{open:f,onClose:L,onSaved:E,editingUpdate:D}),_&&e.jsx(ie,{open:!!_,onClose:()=>P(null),update:{..._,features:Array.isArray(_.features)?_.features:[],action_buttons:Array.isArray(_.action_buttons)?_.action_buttons:[],published_at:_.published_at||new Date().toISOString()}})]}):null};export{ms 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.