PageSourceSearch

https://socialloop.ai/_next/static/chunks/820.11f44a50a300aaa3.js

js socialloop.ai collected 2026-10-05 12:45:58 UTC 23,589 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[820],{13827:(e,t,s)=>{s.d(t,{h:()=>n,n:()=>r});let r=new Set(["cancelled","revoked","transferred","gifted","resold"]);function n(e){return!r.has(e||"")}},54283:(e,t,s)=>{s.d(t,{A:()=>a});var r=s(95155),n=s(12115),i=s(12711);function a(e){let{onScan:t,disabled:a}=e,l=(0,n.useRef)(null),c=(0,n.useRef)(null),d=(0,n.useRef)(0),[o,u]=(0,n.useState)(!1),[m,h]=(0,n.useState)(!1),[x,p]=(0,n.useState)(null),[g,f]=(0,n.useState)(""),b=(0,n.useRef)(t);b.current=t;let k=(0,n.useCallback)(()=>{var e;d.current++,null==(e=c.current)||e.destroy(),c.current=null,u(!1),h(!1)},[]),v=(0,n.useCallback)(async()=>{let e=++d.current;p(null),h(!0);let t=null;try{let{default:r}=await s.e(3743).then(s.bind(s,53743));if(e!==d.current||!l.current)return;if(c.current=t=new r(l.current,t=>{e===d.current&&b.current(t.data)},{preferredCamera:"environment",maxScansPerSecond:10,returnDetailedScanResult:!0,calculateScanRegion:e=>({x:0,y:0,width:e.videoWidth,height:e.videoHeight,downScaledWidth:Math.min(1024,e.videoWidth),downScaledHeight:Math.round(e.videoHeight*Math.min(1,1024/e.videoWidth))})}),await t.start(),e!==d.current)return void t.destroy();u(!0)}catch(r){if(null==t||t.destroy(),e!==d.current)return;c.current=null;let s=r instanceof Error?r.message:String(r);p(/denied|permission|notallowed/i.test(s)?"Allow camera access in your browser settings, then try again.":"Could not start the camera. Check your camera connection or enter the ticket reference below.")}finally{e===d.current&&h(!1)}},[]);return(0,n.useEffect)(()=>()=>{var e;d.current++,null==(e=c.current)||e.destroy()},[]),(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"relative bg-black/40 border border-white/[0.06] rounded-xl overflow-hidden aspect-video flex items-center justify-center",children:[(0,r.jsx)("video",{ref:l,className:"w-full h-full object-cover ".concat(o?"":"absolute opacity-0 pointer-events-none"),playsInline:!0,muted:!0}),o?(0,r.jsx)("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none",children:(0,r.jsx)("div",{className:"w-48 h-48 border-2 border-white/30 rounded-2xl"})}):(0,r.jsxs)("div",{className:"text-center p-8",children:[(0,r.jsx)("div",{className:"w-16 h-16 mx-auto mb-4 rounded-2xl bg-white/[0.04] flex items-center justify-center",children:(0,r.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"w-8 h-8 text-t3",children:[(0,r.jsx)("path",{d:"M6.827 6.175A2.31 2.31 0 015.186 7.23c-.38.054-.757.112-1.134.175C2.999 7.58 2.25 8.507 2.25 9.574V18a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9.574c0-1.067-.75-1.994-1.802-2.169a47.865 47.865 0 00-1.134-.175 2.31 2.31 0 01-1.64-1.055l-.822-1.316a2.192 2.192 0 00-1.736-1.039 48.774 48.774 0 00-5.232 0 2.192 2.192 0 00-1.736 1.039l-.821 1.316z"}),(0,r.jsx)("path",{d:"M16.5 12.75a4.5 4.5 0 11-9 0 4.5 4.5 0 019 0zM18.75 10.5h.008v.008h-.008V10.5z"})]})}),x?(0,r.jsx)("p",{className:"text-sm text-negative-ink mb-3",children:x}):(0,r.jsx)("p",{className:"studio-body mb-3",children:"Start the camera to scan QR codes"}),(0,r.jsx)(i.$n,{onClick:v,disabled:m,children:m?"Starting camera…":"Start Camera"})]}),o&&(0,r.jsx)("button",{onClick:k,className:"absolute top-3 right-3 px-3 py-1.5 rounded-lg bg-black/60 text-white/70 text-xs font-medium hover:bg-black/80 hover:text-white transition",children:"Stop"})]}),(0,r.jsxs)("form",{onSubmit:e=>{e.preventDefault();let s=g.trim();s&&!a&&(t(s),f(""))},className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"text","aria-label":"Ticket reference",placeholder:"Ticket reference, e.g. #AB12CD34",autoCapitalize:"characters",autoCorrect:"off",value:g,onChange:e=>f(e.target.value),disabled:a,className:"flex-1 px-4 py-2.5 rounded-xl bg-card border border-card text-sm text-t1 placeholder:text-t3 outline-none focus:border-white/[0.12] transition disabled:opacity-50"}),(0,r.jsx)(i.$n,{type:"submit",disabled:a||!g.trim(),size:"lg",children:"Check In"})]})]})}},90820:(e,t,s)=>{s.r(t),s.d(t,{default:()=>q});var r=s(95155),n=s(12115),i=s(37401),a=s(82146),l=s(39390),c=s(14585),d=s(8683),o=s(12180),u=s(29213),m=s(4912),h=s(13827),x=s(43601);function p(e){if("string"!=typeof e)return null;let t=e.split("|");if(2!==t.length)return null;let[s,r]=t;if(!s)return null;let n=r.split(":");if(5!==n.length)return null;let[i,a,l,c,d]=n;return i&&a&&l&&d&&/^\d+$/.test(c)?{kind:"SLW1"===s?"wallet":"presentation",shortToken:s,ticketId:i,eventRef:a,holderRef:l,timestampSeconds:Number(c),hmac:d}:null}function g(e,t,s,r){return!!t&&!!s&&("wallet"!==e?t===s:s.length===r&&(t===s||t.slice(-r)===s))}var f=s(82075),b=s(12353);function k(e){return e?e instanceof Date?e:"object"==typeof e&&null!==e&&"toDate"in e?e.toDate():null:null}async function v(e,t){if(!t||t.length>4096)return{reject:"Invalid QR code"};let s=(0,l.collection)(c.db,"events",e,"tickets"),r=p(t);if(r){if(!g(r.kind,e,r.eventRef,8))return{reject:"This ticket is for a different event"};let t=await f.qY.verifyTicketHmac(function(e){let t="".concat(e.ticketId,":").concat(e.eventRef,":").concat(e.holderRef,":").concat(e.timestampSeconds);return"wallet"===e.kind?"wallet:".concat(t):t}(r),r.hmac);return"unavailable"===t?((0,b.V9)("ticket-qr",Error("door scanner could not verify a ticket QR — HMAC ke
1y unavailable"),{eventId:e,kind:r.kind}),{reject:"Could not verify this ticket on this device — reload the page and try again",unverifiable:!0}):"mismatch"===t?{reject:"Invalid QR code"}:!function(e,t,s){let r=s/1e3-t;return!(r<-300)&&("wallet"===e||r<17)}(r.kind,r.timestampSeconds,Date.now())?{reject:"This QR code has expired — ask the guest to reopen their ticket"}:{ticketId:r.ticketId,qr:r}}if(t.includes("|")||t.length>4096)return{reject:"Invalid QR code"};if(/^tkt_[a-zA-Z0-9_-]{6,128}$/.test(t))return{ticketId:t};let n=t.replace(/^#\s*/,""),i=[...new Set([n,n.toLowerCase(),n.toUpperCase()])],[a,d]=await (0,m.w)(Promise.all([(0,l.getDocs)((0,l.query)(s,(0,l.where)("qrToken","==",t),(0,l.limit)(2))),(0,l.getDocs)((0,l.query)(s,(0,l.where)("shortTicketId","in",i),(0,l.limit)(2)))]),1e4),o=new Map([...a.docs,...d.docs].map(e=>[e.id,e]));if(o.size>1)return{reject:"More than one ticket has this reference — scan the guest’s QR code"};let u=o.keys().next().value;return u?{ticketId:u}:{reject:"Ticket not found — enter the reference shown below the QR code"}}async function j(e,t,s){let r=await v(e,t.trim());if("reject"in r)return{success:!1,guestName:"",message:r.reject,...r.unverifiable?{unverifiable:!0}:{}};try{return await (0,l.runTransaction)(c.db,async t=>{var n,i,a;let d=(0,l.doc)(c.db,"events",e,"tickets",r.ticketId),o=await t.get(d);if(!o.exists())return{success:!1,guestName:"",message:"Ticket not found"};let u={id:o.id,data:o.data()},m=u.data,p=function(e){var t;let s=e.guestFirstName,r=e.guestLastName;return s?"".concat(s," ").concat(r||"").trim():e.name||(null==(t=e.metadata)?void 0:t.holderDisplayName)||"Guest"}(m),f={ticketId:u.id,ticketClassName:"string"==typeof u.data.ticketClassName?u.data.ticketClassName:void 0,shortTicketId:"string"==typeof u.data.shortTicketId?u.data.shortTicketId:void 0},b=m.holderAccountId||m.userId;if(r.qr&&(!b||!g(r.qr.kind,b,r.qr.holderRef,10)))return{success:!1,guestName:p,message:"This QR code does not match the ticket holder",...f};if(!(0,h.h)("string"==typeof m.status?m.status:null)||null!=m.status&&"active"!==m.status&&"redeemed"!==m.status)return{success:!1,guestName:p,message:"This ticket is no longer valid",...f};let v=(0,x.tc)((a=u.id,{id:a,orderId:"string"==typeof m.orderId?m.orderId:null,orderIndex:"number"==typeof m.orderIndex?m.orderIndex:null,orderLine:"number"==typeof m.orderLine?m.orderLine:null,orderSeat:"number"==typeof m.orderSeat?m.orderSeat:null,orderQuantity:"number"==typeof m.orderQuantity?m.orderQuantity:null,status:"string"==typeof m.status?m.status:null}),[]),j=v?{...v,checkedIn:null}:null;if(m.isCheckedIn||"redeemed"===m.status)return{success:!1,guestName:p,message:"Already checked in",alreadyCheckedIn:!0,...f,order:j,orderId:m.orderId,checkedInAt:null!=(i=k(m.checkedInAt))?i:k(null==(n=m.redemption)?void 0:n.redeemedAt)};let y=l.Timestamp.now();return t.update(d,{isCheckedIn:!0,checkedInAt:y,checkedInBy:s,status:"redeemed",redemption:{redeemedAt:y,scannerId:s},updatedAt:y}),{success:!0,guestName:p,message:"".concat(p," checked in!"),...f,order:j,orderId:m.orderId}})}catch(t){let e=t.code;if("permission-denied"===e||"firestore/permission-denied"===e)return{success:!1,guestName:"",permissionDenied:!0,message:"You don't have permission to check guests in — ask the host"};throw t}}async function y(e,t){if(!t.order||!t.orderId||!t.ticketId)return null;try{let s=await (0,m.w)((0,l.getDocs)((0,l.query)((0,l.collection)(c.db,"events",e,"tickets"),(0,l.where)("orderId","==",t.orderId),(0,l.limit)(20))),5e3);return{...t.order,checkedIn:s.docs.filter(e=>e.id!==t.ticketId&&"redeemed"===e.data().status).length}}catch(e){return null}}async function w(e){let t=(0,l.collection)(c.db,"events",e,"tickets"),s=(await (0,l.getDocs)(t)).docs.filter(e=>!e.data().qrToken);if(0===s.length)return 0;for(let t=0;t<s.length;t+=450){let r=s.slice(t,t+450),n=(0,l.writeBatch)(c.db);r.forEach(t=>{n.update((0,l.doc)(c.db,"events",e,"tickets",t.id),{qrToken:(0,u.q)()})}),await n.commit()}return s.length}async function N(e){let t=(0,l.collection)(c.db,"events",e,"tickets"),s=(0,l.query)(t,(0,l.limit)(2e3));return(await (0,l.getDocs)(s)).docs.filter(e=>e.data().qrToken).map(e=>{var t;let s=e.data(),r=s.guestFirstName||s.firstName||"",n=s.guestLastName||s.lastName||"";return{id:e.id,name:(r&&n?"".concat(r," ").concat(n):r||n)||s.name||"Guest",email:s.guestEmail||s.email||"",qrToken:s.qrToken,checkedIn:null!=(t=s.isCheckedIn)&&t,ticketClassName:s.ticketClassName}})}var C=s(54283);class I{begin(e,t){var s,r;let n=null!=(r=null==(s=p(e))?void 0:s.ticketId)?r:e.trim().toLowerCase();if(n===this.lastIdentity){let e=t-this.lastSeen;if(this.lastSeen=t,this.busy||e<3e3)return null}else if(this.busy)return null;return this.lastIdentity=n,this.lastSeen=t,this.busy=!0,++this.sequence}isCurrent(e){return e===this.sequence}finish(e){this.isCurrent(e)&&(this.busy=!1)}reset(){this.sequence++,this.busy=!1,this.lastIdentity="",this.lastSeen=-1/0}constructor(){this.sequence=0,this.busy=!1,this.lastIdentity="",this.lastSeen=-1/0}}var S=s(12834),T=s(12711);function R(e){let{eventId:t}
1=e,[s,i]=(0,n.useState)([]),[a,l]=(0,n.useState)(!1),[c,u]=(0,n.useState)(!1),[m,h]=(0,n.useState)(!1),x=(0,n.useCallback)(async()=>{l(!0);try{let e=await N(t);i(e),u(!0)}catch(e){(0,o.WL)("QRCodeGrid")(e)}finally{l(!1)}},[t]),p=(0,n.useCallback)(async()=>{h(!0);try{await w(t)>0&&await x()}catch(e){(0,o.WL)("QRCodeGrid")(e)}finally{h(!1)}},[t,x]);return c?(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("p",{className:"studio-body",children:[s.length," guest",1!==s.length?"s":""," with QR codes"]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(T.$n,{variant:"secondary",onClick:p,disabled:m,icon:m?(0,r.jsx)("div",{className:"w-3.5 h-3.5 border-2 border-white/30 border-t-white rounded-full animate-spin"}):void 0,children:"Generate QR Codes"}),(0,r.jsx)(T.$n,{variant:"secondary",onClick:x,disabled:a,children:"Refresh"}),(0,r.jsx)(T.$n,{onClick:()=>{window.print()},children:"Print All"})]})]}),0===s.length?(0,r.jsx)("div",{className:"bg-card border border-card rounded-xl px-5 py-16 text-center",children:(0,r.jsx)("p",{className:"studio-body",children:'No guests have QR codes yet. Click "Generate QR Codes" to create them.'})}):(0,r.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 print:grid-cols-3 print:gap-2",children:s.map(e=>(0,r.jsxs)("div",{className:"bg-card border border-card rounded-xl p-4 flex flex-col items-center gap-3 print:bg-white print:border-gray-200 print:rounded-lg print:p-3",children:[(0,r.jsx)("div",{className:"bg-white rounded-lg p-2",children:(0,r.jsx)(S.h,{value:e.qrToken,size:140,level:"M",includeMargin:!1})}),(0,r.jsxs)("div",{className:"text-center min-w-0 w-full",children:[(0,r.jsx)("p",{className:"studio-body-strong truncate print:text-black",children:e.name}),e.email&&(0,r.jsx)("p",{className:"studio-caption truncate print:text-gray-500",children:e.email}),e.ticketClassName&&(0,r.jsx)("p",{className:"studio-caption mt-0.5 print:text-gray-600",children:e.ticketClassName})]}),e.checkedIn?(0,r.jsxs)("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-medium bg-emerald-500/15 text-positive-ink print:bg-emerald-100 print:text-emerald-700",children:[(0,r.jsx)(d.Sr,{className:"w-3 h-3"}),"Checked In"]}):(0,r.jsx)("span",{className:"px-2 py-0.5 rounded-full text-[11px] font-medium bg-white/[0.06] text-t2 print:bg-gray-100 print:text-gray-600",children:"Not Checked In"})]},e.id))})]}):(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center py-16",children:[(0,r.jsx)("p",{className:"studio-body mb-4",children:"Load QR codes for all guests with tokens"}),(0,r.jsx)(T.$n,{onClick:x,disabled:a,size:"lg",icon:a?(0,r.jsx)("div",{className:"w-4 h-4 border-2 border-white/30 border-t-[rgb(var(--surface-base))] rounded-full animate-spin"}):void 0,children:"Load QR Codes"})]})}let L=e=>e.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"});function q(){var e,t,s,m,h;let{user:p,notify:g}=(0,i.Y)(),{eventId:f}=(0,a._)(),[b,k]=(0,n.useState)("scanner"),[v,w]=(0,n.useState)(!1),[N,S]=(0,n.useState)([]),[T,q]=(0,n.use
1State)(null),[Q,A]=(0,n.useState)(x.dd),[M,D]=(0,n.useState)(null),W=(0,n.useRef)(new I);(0,n.useEffect)(()=>(W.current.reset(),A(x.dd),q(null),S([]),w(!1),D(null),()=>W.current.reset()),[f]);let z=function(e){let[t,s]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let t,r=!1;if(s(null),!e)return;let n=(0,l.collection)(c.db,"events",e,"tickets"),i=async()=>{try{if("visible"===document.visibilityState){let[e,t]=await Promise.all([(0,l.getCountFromServer)((0,l.query)(n,(0,l.where)("status","in",["active","redeemed"]))),(0,l.getCountFromServer)((0,l.query)(n,(0,l.where)("status","==","redeemed")))]);r||s({total:e.data().count,checkedIn:t.data().count})}}catch(e){}finally{r||(t=setTimeout(i,15e3))}};return i(),()=>{r=!0,clearTimeout(t)}},[e]),t}(f),E=z?{...z,remaining:Math.max(0,z.total-z.checkedIn),pct:z.total>0?Math.round(z.checkedIn/z.total*100):0}:null,B=(0,n.useCallback)(async e=>{if(!f||!p)return;let t=W.current.begin(e,Date.now());if(null!==t){w(!0);try{var s;let r=await j(f,e,p.uid);if(!W.current.isCurrent(t))return;let n=r.success?"redeemed":r.unverifiable?"unverifiable":r.permissionDenied?"denied":r.alreadyCheckedIn?"duplicate":"rejected",i=new Date;S(e=>[{id:(0,u.k)(),guestName:r.guestName,success:r.success,message:r.message,time:i},...e].slice(0,50));let a=(0,u.k)();q({id:a,outcome:n,guestName:r.guestName,message:r.message,ticketClassName:r.ticketClassName,shortTicketId:r.shortTicketId,orderLine:r.order?(0,x.MP)(r.order):null,checkedInAt:null!=(s=r.checkedInAt)?s:null,time:i}),A(e=>(0,x.gN)(e,n)),y(f,r).then(e=>{e&&W.current.isCurrent(t)&&q(t=>(null==t?void 0:t.id)===a?{...t,orderLine:(0,x.MP)(e)}:t)}),r.success?(D("success"),g({type:"success",message:r.message})):r.permissionDenied||r.unverifiable?(D("notice"),g({type:"info",message:r.message})):(D("error"),g({type:"error",message:r.message})),setTimeout(()=>{W.current.isCurrent(t)&&D(null)},1500)}catch(e){if(!W.current.isCurrent(t))return;(0,o.WL)("CheckIn")(e),g({type:"error",message:"Could not confirm check-in. Check the connection and try again."}),q(null),D("error"),setTimeout(()=>{W.current.isCurrent(t)&&D(null)},1500)}finally{W.current.isCurrent(t)&&(W.current.finish(t),w(!1))}}},[f,p,g]);return f?(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("h1",{className:"text-2xl font-bold bg-gradient-to-b from-white to-white/50 bg-clip-text text-transparent",children:"Check-in"}),(0,r.jsx)("p",{className:"studio-body mt-1",children:"Scan QR codes or manage guest check-ins"})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-3 gap-3",children:[(0,r.jsxs)("div",{className:"bg-card border border-card rounded-xl p-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,r.jsx)(d.c2,{className:"w-4 h-4 text-t3"}),(0,r.jsx)("span",{className:"studio-label",children:"Total Tickets"})]}),(0,r.jsx)("p",{className:"text-t1 text-2xl font-bold",children:null!=(e=null==E?void 0:E.total)?e:"—"})]}),(0,r.jsxs)("div",{className:"bg-card border border-card rounded-xl p-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,r.jsx)(d.Sr,{className:"w-4 h-4 text-t3"}),(0,r.jsx)("span",{className:"studio-label",children:"Checked In"})]}),(0,r.jsxs)("p",{className:"text-t1 text-2xl font-bold",children:[null!=(t=null==E?void 0:E.checkedIn)?t:"—",(0,r.jsx)("span",{className:"text-sm font-normal text-t2 ml-1",children:E?"(".concat(null!=(s=null==E?void 0:E.pct)?s:0,"%)"):""})]}),(0,r.jsx)("div",{className:"mt-2 h-[2px] rounded-full bg-white/[0.06] overflow-hidden",children:(0,r.jsx)("div",{className:"h-full rounded-full bg-emerald-500/30 transition-all duration-300",style:{width:"".concat(null!=(m=null==E?void 0:E.pct)?m:0,"%")}})})]}),(0,r.jsxs)("div",{className:"bg-card border border-card rounded-xl p-4",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"w-4 h-4 text-t3",children:(0,r.jsx)("path",{d:"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z"})}),(0,r.jsx)("span",{className:"studio-label",children:"Remaining"})]}),(0,r.jsx)("p",{className:"text-t1 text-2xl font-bold",children:null!=(h=null==E?void 0:E.remaining)?h:"—"})]})]}),(0,r.jsx)("p",{className:"studio-caption",children:"Event totals update every 15 seconds. Your scan count updates immediately."}),(0,r.jsx)("div",{className:"flex items-center gap-1 bg-card border border-card rounded-xl p-1 w-fit",children:[{key:"scanner",label:"Scanner"},{key:"qr-codes",label:"QR Codes"}].map(e=>(0,r.jsx)("button",{onClick:()=>k(e.key),className:"px-4 py-2 rounded-lg text-sm font-medium transition ".concat(b===e.key?"bg-white/10 text-t1":"text-t2 hover:text-t1 hover:bg-white/[0.04]"),children:e.label},e.key))}),"scanner"===b?(0,r.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"relative",children:[M&&(0,r.jsx)("div",{className:"absolute inset-0 z-10 rounded-xl pointer-events-none transition-opacity duration-300 ".concat("success"===M?"bg-emerald-500/20":"notice"===M?"bg-amber-500/20":"bg-red-500/20")}),(0,r.jsx)(C.A,{onScan:B,disabled:v})]}),v&&(0,r.jsx)("p",{className:"studio-caption mt-3",role:"status",children:"Checking ticket…"}),(0,r.jsx)("p",{className:"studio-caption mt-3","aria-live":"polite","data-testid":"scan-tally",children:(0,x.wt)(Q)}),T&&(0,r.jsx)("div",{role:"status","data-testid":"scan-result","data-outcome":T.outcome,className:"mt-3 rounded-xl border p-4 ".concat("redeemed"===T.outcome?"border-emerald-500/30 bg-emerald-500/[0.08]":"duplicate"===T.outcome||"denied"===T.outcome||"unverifiable"===T.outcome?"border-amber-500/30 bg-amber-500/[0.08]":"border-red-500/30 bg-red-500/[0.08]"),style:{animation:"fadeIn 200ms ease-out"},children:(0,r.jsxs)("div",{className:"flex items-start gap-3",children:[(0,r.jsx)("div",{className:"w-9 h-9 rounded-lg flex items-center justify-center flex-shrink-0 ".concat("redeemed"===T.outcome?"bg-emerald-500/15 text-positive-ink":"duplicate"===T.outcome||"denied"===T.outcome||"unverifiable"===T.outcome?"bg-amber-500/15 text-attention-ink":"bg-red-500/15 text-negative-ink"),"aria-hidden":"true",children:"redeemed"===T.outcome?(0,r.jsx)(d.Sr,{className:"w-5 h-5"}):"duplicate"===T.outcome?(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"w-5 h-5",children:(0,r.jsx)("path",{d:"M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z"})}):(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"w-5 h-5",children:(0,r.jsx)("path",{d:"M6 18L18 6M6 6l12 12"})})}),(0,r.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,r.jsx)("p",{className:"studio-body-strong truncate","data-testid":"scan-result-name",children:T.guestName||"Unknown ticket"}),(0,r.jsxs)("p",{className:"text-xs mt-0.5 ".concat("redeemed"===T.outcome?"text-positive-ink/80":"duplicate"===T.outcome?"text-attention-ink/80":"text-negative-ink/80"),"data-testid":"scan-result-message",children:[T.message,"duplicate"===T.outcome&&T.checkedInAt?" \xb7 ".concat(L(T.checkedInAt)):""]}),(T.ticketClassName||T.shortTicketId)&&(0,r.jsx)("p",{className:"text-xs text-t2 mt-1.5","data-testid":"scan-result-ticket",children:[T.ticketClassName,T.shortTicketId?"#".concat(T.shortTicketId):null].filter(
1Boolean).join(" \xb7 ")}),T.orderLine&&(0,r.jsx)("p",{className:"text-xs text-t2 mt-0.5","data-testid":"scan-result-order",children:T.orderLine})]}),(0,r.jsx)("span",{className:"studio-caption flex-shrink-0",children:L(T.time)})]})},T.id)]}),(0,r.jsxs)("div",{className:"bg-card border border-card rounded-xl overflow-hidden",children:[(0,r.jsx)("div",{className:"px-4 py-3 border-b border-white/[0.06]",children:(0,r.jsx)("h3",{className:"studio-body-strong",children:"Recent Check-ins"})}),0===N.length?(0,r.jsx)("div",{className:"px-4 py-12 text-center",children:(0,r.jsx)("p",{className:"studio-body",children:"No check-ins yet. Scan a QR code to get started."})}):(0,r.jsx)("div",{className:"divide-y divide-white/[0.06] max-h-[400px] overflow-y-auto",children:N.map(e=>(0,r.jsxs)("div",{className:"px-4 py-3 flex items-center gap-3",children:[(0,r.jsx)("div",{className:"w-7 h-7 rounded-lg flex items-center justify-center flex-shrink-0 ".concat(e.success?"bg-emerald-500/15 text-positive-ink":"bg-red-500/15 text-negative-ink"),children:e.success?(0,r.jsx)(d.Sr,{className:"w-4 h-4"}):(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"w-4 h-4",children:(0,r.jsx)("path",{d:"M6 18L18 6M6 6l12 12"})})}),(0,r.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,r.jsx)("p",{className:"studio-body-strong truncate",children:e.guestName||"Unknown"}),(0,r.jsx)("p",{className:"text-xs ".concat(e.success?"text-positive-ink/70":"text-negative-ink/70"),children:e.message})]}),(0,r.jsx)("span",{className:"studio-caption flex-shrink-0",children:e.time.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})})]},e.id))})]})]}):(0,r.jsx)(R,{eventId:f})]}):(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center h-80 text-center",children:[(0,r.jsx)("div",{className:"w-16 h-16 rounded-2xl bg-white/[0.04] flex items-center justify-center mb-4",children:(0,r.jsx)(d.yV,{className:"w-8 h-8 text-t3"})}),(0,r.jsx)("h2",{className:"studio-subtitle",children:"No Event Selected"}),(0,r.jsx)("p",{className:"studio-body mt-1 max-w-sm",children:"Select an event from the dropdown above to manage check-ins."})]})}}}]);

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.