vendor: 1,034 bytes, line 1
1import{r,R as W,u as X,c as V,j as e,a as F,b as $,d as R,e as G,f as Y,P as k,g as C,h as Ee,i as Ae,k as ke,l as _e,L as Q,t as ee}from"./index-CAbc3iKC.js";import{L as K,B as Be}from"./badge-DY1Vh7n1.js";import{B as Z}from"./button-DoDn-Qk4.js";import{E as De}from"./external-link-CDG0YTcY.js";var Me=W[" useId ".trim().toString()]||(()=>{}),Le=0;function te(t){const[s,o]=r.useState(Me());return X(()=>{o(n=>n??String(Le++))},[t]),t||(s?`radix-${s}`:"")}var Pe=W[" useInsertionEffect ".trim().toString()]||X;function se({prop:t,defaultProp:s,onChange:o=()=>{},caller:n}){const[m,d,l]=Oe({defaultProp:s,onChange:o}),u=t!==void 0,v=u?t:m;{const a=r.useRef(t!==void 0);r.useEffect(()=>{const i=a.current;i!==u&&console.warn(`${n} is changing from ${i?"controlled":"uncontrolled"} to ${u?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),a.current=u},[u,n])}const f=r.useCallback(a=>
vendor: 10,135 bytes, lines 1-16
1{if(u){const i=Ge(a)?a(t):a;i!==t&&l.current?.(i)}else d(a)},[u,t,d,l]);return[v,f]}function Oe({defaultProp:t,onChange:s}){const[o,n]=r.useState(t),m=r.useRef(o),d=r.useRef(s);return Pe(()=>{d.current=s},[s]),r.useEffect(()=>{m.current!==o&&(d.current?.(o),m.current=o)},[o,m]),[o,n,d]}function Ge(t){return typeof t=="function"}/** 2 * @license lucide-react v0.453.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const ne=V("FileUp",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M12 12v6",key:"3ahymv"}],["path",{d:"m15 15-3-3-3 3",key:"15xj92"}]]);/** 7 * @license lucide-react v0.453.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const Ue=V("LogOut",[["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}],["polyline",{points:"16 17 21 12 16 7",key:"1gabdz"}],["line",{x1:"21",x2:"9",y1:"12",y2:"12",key:"1uyos4"}]]);/** 12 * @license lucide-react v0.453.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */const oe=V("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]);function ae({className:t,...s}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:e.jsx("table",{"data-slot":"table",className:F("w-full caption-bottom text-sm",t),...s})})}function re({className:t,...s}){return e.jsx("thead",{"data-slot":"table-header",className:F("[&_tr]:border-b",t),...s})}function ce({className:t,...s}){return e.jsx("tbody",{"data-slot":"table-body",className:F("[&_tr:last-child]:border-0",t),...s})}function D({className:t,...s}){return e.jsx("tr",{"data-slot":"table-row",className:F("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",t),...s})}function j({className:t,...s}){return e.jsx("th",{"data-slot":"table-head",className:F("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function N({className:t,...s}){return e.jsx("td",{"data-slot":"table-cell",className:F("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",t),...s})}function Ve(t){const s=t+"CollectionProvider",[o,n]=$(s),[m,d]=o(s,{collectionRef:{current:null},itemMap:new Map}),l=y=>{const{scope:c,children:p}=y,w=R.useRef(null),x=R.useRef(new Map).current;return e.jsx(m,{scope:c,itemMap:x,collectionRef:w,children:p})};l.displayName=s;const u=t+"CollectionSlot",v=Y(u),f=R.forwardRef((y,c)=>{const{scope:p,children:w}=y,x=d(u,p),h=G(c,x.collectionRef);return e.jsx(v,{ref:h,children:w})});f.displayName=u;const a=t+"CollectionItemSlot",i="data-radix-collection-item",b=Y(a),T=R.forwardRef((y,c)=>{const{scope:p,children:w,...x}=y,h=R.useRef(null),E=G(c,h),A=d(a,p);return R.useEffect(()=>(A.itemMap.set(h,{ref:h,...x}),()=>void A.itemMap.delete(h))),e.jsx(b,{[i]:"",ref:E,children:w})});T.displayName=a;function S(y){const c=d(t+"CollectionConsumer",y);return R.useCallback(()=>{const w=c.collectionRef.current;if(!w)return[];const x=Array.from(w.querySelectorAll(`[${i}]`));return Array.from(c.itemMap.values()).sort((A,B)=>x.indexOf(A.ref.current)-x.indexOf(B.ref.current))},[c.collectionRef,c.itemMap])}return[{Provider:l,Slot:f,ItemSlot:T},S,n]}var $e=r.createContext(void 0);function le(t){const s=r.useContext($e);return t||s||"ltr"}var P="rovingFocusGroup.onEntryFocus",Ke={bubbles:!1,cancelable:!0},_="RovingFocusGroup",[U,ie,ze]=Ve(_),[He,de]=$(_,[ze]),[Ye,Qe]=He(_),ue=r.forwardRef((t,s)=>e.jsx(U.Provider,{scope:t.__scopeRovingFocusGroup,children:e.jsx(U.Slot,{scope:t.__scopeRovingFocusGroup,children:e.jsx(Ze,{...t,ref:s})})}));ue.displayName=_;var Ze=r.forwardRef((t,s)=>{const{__scopeRovingFocusGroup:o,orientation:n,loop:m=!1,dir:d,currentTabStopId:l,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:v,onEntryFocus:f,preventScrollOnEntryFocus:a=!1,...i}=t,b=r.useRef(null),T=G(s,b),S=le(d),[y,c]=se({prop:l,defaultProp:u??null,onChange:v,caller:_}),[p,w]=r.useState(!1),x=Ee(f),h=ie(o),E=r.useRef(!1),[A,B]=r.useState(0);return r.useEffect(()=>{const g=b.current;if(g)return g.addEventListener(P,x),()=>g.removeEventListener(P,x)},[x]),e.jsx(Ye,{scope:o,orientation:n,dir:S,loop:m,currentTabStopId:y,onItemFocus:r.useCallback(g=>c(g),[c]),onItemShiftTab:r.useCallback(()=>w(!0),[]),onFocusableItemAdd:r.useCallback(()=>B(g=>g+1),[]),onFocusableItemRemove:r.useCallback(()=>B(g=>g-1),[]),children:e.jsx(k.div,{tabIndex:p||A===0?-1:0,"data-orientation":n,...i,ref:T,style:{outline:"none",...t.style},onMouseDown:C(t.onMouseDown,()=>{E.current=!0}),onFocus:C(t.onFocus,g=>{const Te=!E.current;if(g.target===g.currentTarget&&Te&&!p){const H=new CustomEvent(P,Ke);if(g.currentTarget.dispatchEvent(H),!H.defaultPrevented){const L=h().filter(I=>I.focusable),Ie=L.find(I=>I.active),Re=L.find(I=>I.id===y),Se=[Ie,Re,...L].filter(Boolean).map(I=>I.ref.current);fe(Se,a)}}E.current=!1}),onBlur:C(t.onBlur,()=>w(!1))})})}),me="RovingFocusGroupItem",xe=r.forwardRef((t,s)=>{const{__scopeRovingFocusGroup:o,focusable:n=!0,active:m=!1,tabStopId:d,children:l,...u}=t,v=te(),f=d||v,a=Qe(me,o),i=a.currentTabStopId===f,b=ie(o),{onFocusableItemAdd:T,onFocusableItemRemove:S,currentTabStopId:y}=a;return r.useEffect(()=>{if(n)return T(),()=>S()},[n,T,S]),e.jsx(U.ItemSlot,{scope:o,id:f,focusable:n,active:m,children:e.jsx(k.span,{tabIndex:i?0:-1,"data-orientation":a.orientation,...u,ref:s,onMouseDown:C(t.onMouseDown,c=>{n?a.onItemFocus(f):c.preventDefault()}),onFocus:C(t.onFocus,()=>a.onItemFocus(f)),onKeyDown:C(t.onKeyDown,c=>{if(c.key==="Tab"&&c.shiftKey){a.onItemShiftTab();return}if(c.target!==c.currentTarget)return;const p=We(c,a.orientation,a.dir);if(p!==void 0){if(c.metaKey||c.ctrlKey||c.altKey||c.shiftKey)return;c.preventDefault();let x=b().filter(h=>h.focusable).map(h=>h.ref.current);if(p==="last")x.reverse();else if(p==="prev"||p==="next"){p==="prev"&&x.reverse();const h=x.indexOf(c.currentTarget);x=a.loop?Xe(x,h+1):x.slice(h+1)}setTimeout(()=>fe(x))}}),children:typeof l=="function"?l({isCurrentTabStop:i,hasTabStop:y!=null}):l})})});xe.displayName=me;var qe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Je(t,s){return s!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function We(t,s,o){const n=Je(t.key,o);if(!(s==="vertical"&&["ArrowLeft","ArrowRight"].includes(n))&&!(s==="horizontal"&&["ArrowUp","ArrowDown"].includes(n)))return qe[n]}function fe(t,s=!1){const o=document.activeElement;for(const n of t)if(n===o||(n.focus({preventScroll:s}),document.activeElement!==o))return}function Xe(t,s){return t.map((o,n)=>t[(s+n)%t.length])}var et=ue,tt=xe,M="Tabs",[st]=$(M,[de]),he=de(),[nt,z]=st(M),pe=r.forwardRef((t,s)=>{const{__scopeTabs:o,value:n,onValueChange:m,defaultValue:d,orientation:l="horizontal",dir:u,activationMode:v="automatic",...f}=t,a=le(u),[i,b]=se({prop:n,onChange:m,defaultProp:d??"",caller:M});return e.jsx(nt,{scope:o,baseId:te(),value:i,onValueChange:b,orientation:l,dir:a,activationMode:v,children:e.jsx(k.div,{dir:a,"data-orientation":l,...f,ref:s})})});pe.displayName=M;var be="TabsList",ve=r.forwardRef((t,s)=>{const{__scopeTabs:o,loop:n=!0,...m}=t,d=z(be,o),l=he(o);return e.jsx(et,{asChild:!0,...l,orientation:d.orientation,dir:d.dir,loop:n,children:e.jsx(k.div,{role:"tablist","aria-orientation":d.orientation,...m,ref:s})})});ve.displayName=be;var ge="TabsTrigger",je=r.forwardRef((t,s)=>{const{__scopeTabs:o,value:n,disabled:m=!1,...d}=t,l=z(ge,o),u=he(o),v=we(l.baseId,n),f=Fe(l.baseId,n),a=n===l.value;return e.jsx(tt,{asChild:!0,...u,focusable:!m,active:a,children:e.jsx(k.button,{type:"button",role:"tab","aria-selected":a,"aria-controls":f,"data-state":a?"active":"inactive","data-disabled":m?"":void 0,disabled:m,id:v,...d,ref:s,onMouseDown:C(t.onMouseDown,i=>{!m&&i.button===0&&i.ctrlKey===!1?l.onValueChange(n):i.preventDefault()}),onKeyDown:C(t.onKeyDown,i=>{[" ","Enter"].includes(i.key)&&l.onValueChange(n)}),onFocus:C(t.onFocus,()=>{const i=l.activationMode!=="manual";!a&&!m&&i&&l.onValueChange(n)})})})});je.displayName=ge;var Ne="TabsContent",ye=r.forwardRef((t,s)=>{const{__scopeTabs:o,value:n,forceMount:m,children:d,...l}=t,u=z(Ne,o),v=we(u.baseId,n),f=Fe(u.baseId,n),a=n===u.value,i=r.useRef(a);return r.useEffect(()=>{const b=requestAnimationFrame(()=>i.current=!1);return()=>cancelAnimationFrame(b)},[]),e.jsx(Ae,{present:m||a,children:({present:b})=>e.jsx(k.div,{"data-state":a?"active":"inactive","data-orientation":u.orientation,role:"tabpanel","aria-labelledby":v,hidden:!b,id:f,tabIndex:0,...l,ref:s,style:{...t.style,animationDuration:i.current?"0s":void 0},children:b&&d})})});ye.displayName=Ne;function we(t,s){return`${t}-trigger-${s}`}function Fe(t,s){return`${t}-content-${s}`}var ot=pe,at=ve,rt=je,ct=ye;function lt({className:t,...s}){return e.jsx(ot,{"data-slot":"tabs",className:F("flex flex-col gap-2",t),...s})}function it({className:t,...s}){return e.jsx(at,{"data-slot":"tabs-list",className:F("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",t),...s})}function q({className:t,...s}){return e.jsx(rt,{"data-slot":"tabs-trigger",className:F("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focu
16s-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...s})}function J({className:t,...s}){return e.jsx(ct,{"data-slot":"tabs-content",className:F("flex-1 outline-none",t),...s})}const O="https://d2xsxph8kpxj0f.cloudfront.net/310519663298370200/oGDB83aBTDLfPHoARQ4G4M/simplyflow-logo-transparent_6c6202f4.png";function Ce(t){return new Date(t).toLocaleString("en-SG",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit"})}function dt(t){return t?t==="automate"?"default":t==="interpret"?"outline":t==="execute"?"default":"secondary":"secondary"}function ut(){const{data:t,isLoading:s,error:o}=ee.demo.list.useQuery();return s?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(K,{className:"h-6 w-6 animate-spin text-[#1B4FD8]"})}):o?e.jsxs("div",{className:"py-12 text-center text-sm text-red-500",children:["Failed to load demo requests: ",o.message]}):!t||t.length===0?e.jsxs("div",{className:"py-20 text-center",children:[e.jsx(oe,{className:"h-10 w-10 text-slate-300 mx-auto mb-3"}),e.jsx("p",{className:"text-sm text-slate-500",children:"No demo requests yet."}),e.jsx("p",{className:"text-xs text-slate-400 mt-1",children:"Submissions will appear here as they come in."})]}):e.jsx("div",{className:"rounded-xl border border-black/[0.08] overflow-hidden",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsxs(D,{className:"bg-slate-50",children:[e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Name"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Company"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Email"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Tier Interest"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Order Volume"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Channel"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Submitted"})]})}),e.jsx(ce,{children:t.map(n=>e.jsxs(D,{className:"hover:bg-slate-50/60",children:[e.jsx(N,{className:"font-medium text-[#0B1220]",children:n.name}),e.jsx(N,{children:n.company}),e.jsx(N,{children:e.jsx("a",{href:`mailto:${n.email}`,className:"text-[#1B4FD8] hover:underline",children:n.email})}),e.jsx(N,{children:n.interestedTier?e.jsx(Be,{variant:dt(n.interestedTier),children:n.interestedTier}):e.jsx("span",{className:"text-slate-400 text-xs",children:"â"})}),e.jsx(N,{className:"text-sm text-slate-600",children:n.orderVolume??e.jsx("span",{className:"text-slate-400",children:"â"})}),e.jsx(N,{className:"text-sm text-slate-600",children:n.primaryChannel??e.jsx("span",{className:"text-slate-400",children:"â"})}),e.jsx(N,{className:"text-xs text-slate-500 whitespace-nowrap",children:Ce(n.createdAt)})]},n.id))})]})})}function mt(){const{data:t,isLoading:s,error:o}=ee.upload.allUploads.useQuery();return s?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(K,{className:"h-6 w-6 animate-spin text-[#1B4FD8]"})}):o?e.jsxs("div",{className:"py-12 text-center text-sm text-red-500",children:["Failed to load uploads: ",o.message]}):!t||t.length===0?e.jsxs("div",{className:"py-20 text-center",children:[e.jsx(ne,{className:"h-10 w-10 text-slate-300 mx-auto mb-3"}),e.jsx("p",{className:"text-sm text-slate-500",children:"No file uploads yet."})]}):e.jsx("div",{className:"rounded-xl border border-black/[0.08] overflow-hidden",children:e.jsxs(ae,{children:[e.jsx(re,{children:e.jsxs(D,{className:"bg-slate-50",children:[e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"File Name"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Type"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Size"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Label"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Uploaded"}),e.jsx(j,{className:"font-semibold text-[#0B1220]",children:"Link"})]})}),e.jsx(ce,{children:t.map(n=>e.jsxs(D,{className:"hover:bg-slate-50/60",children:[e.jsx(N,{className:"font-medium text-[#0B1220] max-w-[200px] truncate",children:n.originalName}),e.jsx(N,{className:"text-xs text-slate-500",children:n.mimeType}),e.jsx(N,{className:"text-sm text-slate-600",children:n.sizeBytes?`${(n.sizeBytes/1024).toFixed(1)} KB`:"â"}),e.jsx(N,{className:"text-sm text-slate-600",children:n.label??e.jsx("span",{className:"text-slate-400",children:"â"})}
16),e.jsx(N,{className:"text-xs text-slate-500 whitespace-nowrap",children:Ce(n.createdAt)}),e.jsx(N,{children:e.jsxs("a",{href:n.url,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-[#1B4FD8] hover:underline text-xs",children:["View ",e.jsx(De,{className:"h-3 w-3"})]})})]},n.id))})]})})}function vt(){const{user:t,loading:s,isAuthenticated:o,logout:n}=ke();return s?e.jsx("div",{className:"min-h-screen flex items-center justify-center bg-[#F8FAFC]",children:e.jsx(K,{className:"h-8 w-8 animate-spin text-[#1B4FD8]"})}):o?t?.role!=="admin"?e.jsxs("div",{className:"min-h-screen flex flex-col items-center justify-center bg-[#F8FAFC] gap-4",children:[e.jsx("img",{src:O,alt:"SimplyFlow",className:"h-8 w-auto mb-2"}),e.jsx("p",{className:"text-[#475569] text-sm",children:"You do not have permission to access this page."}),e.jsx(Q,{href:"/",className:"text-[#1B4FD8] text-sm hover:underline",children:"â Back to home"})]}):e.jsxs("div",{className:"min-h-screen bg-[#F8FAFC]",children:[e.jsx("header",{className:"bg-white border-b border-black/[0.06] sticky top-0 z-50",children:e.jsxs("div",{className:"container max-w-[1400px] mx-auto px-8 h-16 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(Q,{href:"/",children:e.jsx("img",{src:O,alt:"SimplyFlow",className:"h-7 w-auto"})}),e.jsx("span",{className:"text-[0.75rem] font-semibold uppercase tracking-[0.1em] text-[#1B4FD8] bg-[#EFF6FF] px-2.5 py-1 rounded-full border border-[#BFDBFE]",children:"Admin"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"text-[0.875rem] text-[#475569]",children:t?.name??t?.email}),e.jsxs(Z,{variant:"outline",size:"sm",onClick:n,className:"gap-1.5 text-[0.8rem]",children:[e.jsx(Ue,{className:"h-3.5 w-3.5"}),"Sign out"]})]})]})}),e.jsxs("main",{className:"container max-w-[1400px] mx-auto px-8 py-12",children:[e.jsxs("div",{className:"mb-10",children:[e.jsx("h1",{className:"text-[1.75rem] font-bold text-[#0B1220] tracking-[-0.02em] mb-1",children:"Leads Dashboard"}),e.jsx("p",{className:"text-[0.9rem] text-[#64748B]",children:"All demo requests and file uploads submitted through the SimplyFlow website."})]}),e.jsxs(lt,{defaultValue:"demos",children:[e.jsxs(it,{className:"mb-6",children:[e.jsxs(q,{value:"demos",className:"gap-2",children:[e.jsx(oe,{className:"h-4 w-4"}),"Demo Requests"]}),e.jsxs(q,{value:"uploads",className:"gap-2",children:[e.jsx(ne,{className:"h-4 w-4"}),"File Uploads"]})]}),e.jsx(J,{value:"demos",children:e.jsx(ut,{})}),e.jsx(J,{value:"uploads",children:e.jsx(mt,{})})]})]})]}):e.jsxs("div",{className:"min-h-screen flex flex-col items-center justify-center bg-[#F8FAFC] gap-4",children:[e.jsx("img",{src:O,alt:"SimplyFlow",className:"h-8 w-auto mb-2"}),e.jsx("p",{className:"text-[#475569] text-sm",children:"You must be signed in to access the admin area."}),e.jsx(Z,{onClick:()=>{window.location.href=_e()},className:"bg-[#1B4FD8] hover:bg-[#1641b0] text-white",children:"Sign In"})]})}export{vt 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.