PageSourceSearch

https://nopicnic.vercel.app/_next/static/chunks/pages/admin-22b0817e957df64d.js

js nopicnic.vercel.app collected 2026-10-03 07:24:36 UTC 48,774 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[964],{8195:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/admin",function(){return n(6093)}])},6093:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return S}});var i=n(5893),r=n(7294),s=n(9008),o=n.n(s),l=n(1163);function a(e){return"$"+(e||0).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g,",")}function d(e){return new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function c(e){return new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric"})}function p(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=e.replace(/\s/g,"");return/^1Z/i.test(t)?"UPS":/^9\d{19,21}$/.test(t)?"USPS":/^\d{12}$|^\d{15}$|^\d{20,22}$/.test(t)?"FedEx":/^\d{10}$/.test(t)?"DHL":""}function h(e,t){let n=(t||"").replace(/\s/g,"");if(!n)return null;let i=(e||"").toUpperCase();return"USPS"===i?"https://tools.usps.com/go/TrackConfirmAction?tLabels=".concat(n):"UPS"===i?"https://www.ups.com/track?tracknum=".concat(n):"FEDEX"===i||"FEDEX"===i?"https://www.fedex.com/fedextrack/?tracknumbers=".concat(n):"DHL"===i?"https://www.dhl.com/us-en/home/tracking.html?tracking-id=".concat(n):null}function u(){return{date:new Date().toISOString().slice(0,10),recipient:{name:"",address:"",eori:"",vatId:""},items:[{name:"",qty:1,unitPrice:0,discount:0,productId:""}],tracking:"",carrier:"",via:"",shippingCost:"",notes:""}}let g={sacramento:"#162114",pine:"#294122",salmon:"#FFBBA6",tangerine:"#EB3D00",chiffon:"#FFEDD2"};function m(e){let{data:t,valueKey:n,color:s="#111",height:o=100}=e,[l,d]=(0,r.useState)(null);if(!t||0===t.length)return(0,i.jsx)("div",{style:{height:o,lineHeight:o+"px",textAlign:"center",color:"#aaa",fontSize:12},children:"No data yet"});let p=Math.max(...t.map(e=>e[n]||0),.01),h=Math.max(4,Math.floor(600/t.length)-2);return(0,i.jsxs)("div",{style:{position:"relative"},children:[(0,i.jsx)("svg",{width:"100%",viewBox:"0 0 ".concat(600," ").concat(o),style:{display:"block",overflow:"visible"},children:t.map((e,r)=>{let l=e[n]||0,a=l/p*(o-4),c=600/t.length*r,u=o-a;return(0,i.jsx)("rect",{x:c+1,y:u,width:h,height:a,fill:s,opacity:.85,style:{cursor:"default"},onMouseEnter:()=>d({i:r,d:e,val:l}),onMouseLeave:()=>d(null)},e.date)})}),l&&(0,i.jsxs)("div",{style:{position:"absolute",top:0,left:"".concat(l.i/t.length*100,"%"),transform:"translateX(-50%)",background:"#111",color:"#fff",fontSize:11,padding:"4px 8px",pointerEvents:"none",whiteSpace:"nowrap",zIndex:10},children:[c(l.d.date),": ","revenue"===n?a(l.val):l.val]}),(0,i.jsx)("div",{style:{display:"flex",justifyContent:"space-between",marginTop:4},children:t.filter((e,n)=>n%Math.ceil(t.length/6)==0||n===t.length-1).map(e=>(0,i.jsx)("span",{style:{fontSize:10,color:"#999"},children:c(e.date)},e.date))})]})}function x(e){let{label:t,value:n,sub:r,prev:s,prevLabel:o}=e,l=null;if(null!=s){let e=parseFloat(n.replace(/[^0-9.-]/g,""))-parseFloat(s),t=String(n).startsWith("$");l=(0,i.jsxs)("div",{style:{fontSize:11,color:e>=0?"#1a6e3c":"#b91c1c",marginTop:2},children:[e>=0?"+":"",t?a(e):e.toFixed(0)," vs ",o||"prior"]})}return(0,i.jsxs)("div",{style:C.card,children:[(0,i.jsx)("div",{style:C.cardLabel,children:t}),(0,i.jsx)("div",{style:C.cardValue,children:n}),r&&(0,i.jsx)("div",{style:C.cardSub,children:r}),l]})}function f(e){let t,n,{orders:s,shipments:o=[]}=e,[l,c]=(0,r.useState)(null),[u,g]=(0,r.useState)("this_month"),[m,x]=(0,r.useState)({col:"date",dir:"desc"}),[f,y]=(0,r.useState)({}),[j,v]=(0,r.useState)(new Set),[b,S]=(0,r.useState)(new Set),[k,T]=(0,r.useState)(new Set),[z,I]=(0,r.useState)(null),[B,N]=(0,r.useState)(""),[D,F]=(0,r.useState)(0);async function L(e){let t=(f[e]||"").trim(),n=p(t);v(t=>new Set([...t,e]));try{let i=await fetch("/api/admin/shipments",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e,trackingNumber:t||void 0,carrier:n||void 0})});if(i.ok)await i.json().catch(()=>({})),S(t=>new Set([...t,e]));else{let e=await i.json().catch(()=>({}));alert("Shipping email failed: "+(e.error||"unknown error"))}}finally{v(t=>{let n=new Set(t);return n.delete(e),n})}}async function P(e){let t=(f[e]||"").trim(),n=p(t);v(t=>new Set([...t,e]));try{let i=await fetch("/api/admin/shipments",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:e,trackingNumber:t||void 0,carrier:n||void 0,recordOnly:!0})});if(i.ok)S(t=>new Set([...t,e]));else{let e=await i.json().catch(()=>({}));alert("Record failed: "+(e.error||"unknown error"))}}finally{v(t=>{let n=new Set(t);return n.delete(e),n})}}async function W(e){T(t=>new Set([...t,e]));try{let t=await fetch("/api/admin/buy-label",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({stripeSessionId:e})}),n=await t.json();if(!t.ok){alert("Label purchase failed: "+(n.error||"unknown error"));return}n.trackingNumber&&y(t=>({...t,[e]:n.trackingNumber})),n.labelUrl&&window.open(n.labelUrl,"_blank");let i=n.rate?"$".concat(parseFloat(n.rate).toFixed(2)," ").concat(n.currency||"USD"):null,r=[n.carrier,n.service].filter(
1Boolean).join(" — ");alert("Label purchased".concat(r?": "+r:"").concat(i?" \xb7 "+i:""))}finally{T(t=>{let n=new Set(t);return n.delete(e),n})}}(0,r.useEffect)(()=>{F(0)},[u,B,m.col,m.dir]);let O=new Date;"this_month"===u?(t=new Date(O.getFullYear(),O.getMonth(),1).getTime(),n=Date.now()):"last_month"===u?(t=new Date(O.getFullYear(),O.getMonth()-1,1).getTime(),n=new Date(O.getFullYear(),O.getMonth(),1).getTime()):(t=new Date(O.getFullYear(),0,1).getTime(),n=Date.now());let E=B.toLowerCase().trim(),A=e=>(e.items||[]).reduce((e,t)=>e+(t.quantity||1),0),H="asc"===m.dir?1:-1,_=s.filter(e=>{let i=new Date(e.date).getTime();return i>=t&&i<n}).filter(e=>{var t,n,i,r,s,o,l,a,d,c,p,h,u,g,m;return!E||e.orderNumber&&String(e.orderNumber).includes(E)||((null===(t=e.customer)||void 0===t?void 0:t.name)||"").toLowerCase().includes(E)||((null===(n=e.customer)||void 0===n?void 0:n.email)||"").toLowerCase().includes(E)||(e.items||[]).some(e=>(e.name||"").toLowerCase().includes(E))||((null===(i=e.shipping)||void 0===i?void 0:i.name)||"").toLowerCase().includes(E)||((null===(s=e.shipping)||void 0===s?void 0:null===(r=s.address)||void 0===r?void 0:r.line1)||"").toLowerCase().includes(E)||((null===(l=e.shipping)||void 0===l?void 0:null===(o=l.address)||void 0===o?void 0:o.line2)||"").toLowerCase().includes(E)||((null===(d=e.shipping)||void 0===d?void 0:null===(a=d.address)||void 0===a?void 0:a.city)||"").toLowerCase().includes(E)||((null===(p=e.shipping)||void 0===p?void 0:null===(c=p.address)||void 0===c?void 0:c.state)||"").toLowerCase().includes(E)||((null===(u=e.shipping)||void 0===u?void 0:null===(h=u.address)||void 0===h?void 0:h.postal_code)||"").toLowerCase().includes(E)||((null===(m=e.shipping)||void 0===m?void 0:null===(g=m.address)||void 0===g?void 0:g.country)||"").toLowerCase().includes(E)}).sort((e,t)=>"order"===m.col?H*((e.orderNumber||0)-(t.orderNumber||0)):"items"===m.col?H*(A(e)-A(t)):H*(new Date(e.date)-new Date(t.date))),M=_.filter(e=>{var t;if(!(null===(t=e.shipping)||void 0===t?void 0:t.address))return!1;let n=e.tracking||o.find(t=>t.sessionId===e.stripeSessionId);return!b.has(e.stripeSessionId)&&!n}),R=_.filter(e=>!M.includes(e)),$=s.filter(e=>{var t,n;return(null===(n=e.shipping)||void 0===n?void 0:null===(t=n.address)||void 0===t?void 0:t.country)==="US"&&!e.tracking&&!o.find(t=>t.sessionId===e.stripeSessionId)&&!b.has(e.stripeSessionId)}).length,q=Math.ceil(R.length/25),U=R.slice(25*D,(D+1)*25);if(0===s.length)return(0,i.jsx)("p",{style:{color:"#999",fontSize:13},children:"No orders found in this period."});function V(e){let{label:t,count:n}=e;return(0,i.jsx)("tr",{children:(0,i.jsxs)("td",{colSpan:8,style:{padding:"10px 12px 6px",fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",color:"#888",borderTop:"1px solid #e8e8e8",background:"#fafafa"},children:[t," ",(0,i.jsxs)("span",{style:{fontWeight:400},children:["(",n,")"]})]})})}return(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{style:{display:"flex",gap:8,marginBottom:16,alignItems:"center",flexWrap:"wrap"},children:[[["this_month","This month"],["last_month","Last month"],["this_year","This year"]].map(e=>{let[t,n]=e;return(0,i.jsx)("button",{onClick:()=>{g(t),F(0)},style:{...C.filterBtn,...u===t?C.filterBtnActive:{}},children:n},t)}),$>0&&(0,i.jsxs)("a",{href:"/api/admin/pirateship-csv",title:"Every unshipped US order, for Pirate Ship's spreadsheet import",style:{...C.filterBtn,textDecoration:"none"},children:["Pirate Ship CSV (",$,") ↓"]}),(0,i.jsx)("input",{type:"search",placeholder:"Search name, email, address, order #…",value:B,onChange:e=>{N(e.target.value),F(0)},style:{marginLeft:"auto",border:"1px solid #ddd",padding:"4px 10px",fontSize:12,fontFamily:w,outline:"none",width:220,background:"#fff",color:"#111"}}),(0,i.jsxs)("span",{style:{fontSize:12,color:"#888",whiteSpace:"nowrap"},children:[_.length," order",1!==_.length?"s":""]})]}),(0,i.jsx)("div",{style:{overflowX:"auto"},children:(0,i.jsxs)("table",{style:C.table,children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:["Order #","Date","Customer","Items","Subtotal","Tax","Ship","Total"].map(e=>{let t="Order #"===e?"order":"Date"===e?"date":"Items"===e?"items":null,n=t&&m.col===t;return(0,i.jsxs)("th",{style:{...C.th,...t?{cursor:"pointer",userSelect:"none"}:{}},onClick:t?()=>{x(e=>e.col===t?{col:t,dir:"desc"===e.dir?"asc":"desc"}:{col:t,dir:"desc"})}:void 0,children:[e,n?"desc"===m.dir?" ↓":" ↑":""]},e)})})}),(0,i.jsxs)("tbody",{children:[M.length>0&&(0,i.jsx)(V,{label:"Needs shipping",count:M.length}),M.map(e=>(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("tr",{style:{...C.tr,cursor:"pointer"},onClick:()=>c(l===e.stripeSessionId?null:e.stripeSessionId),children:[(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("span",{style:{fontFamily:"monospace",fontWeight:600},children:e.orderNumber?"#".concat(e.orderNumber):"—"})}),(0,i.jsx)("td",{style:C.td,children:d(e.date)}),(0,i.jsxs)("td",{style:C.td,children:[(0,i.jsx)("div",{style:{fontWeight:500},children:e.customer.name||"—"}),(0,i.jsx)("div",{style:{fontSize:11,color:"#888"},children:e.customer.email})]}),(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("span",{style:{fontSize:12,color:"#444"},children:e.items.map(e=>"".concat(e.name).concat(e.quantity>1?" \xd7".concat(e.quantity):"")).join(", ")||"—"})}),(0,i.jsx)("td",{style:C.tdNum,children:a(e.subtotal)}),(0,i.jsx)("td",{style:C.tdNum,children:e.tax>0?a(e.tax):"—"}),(0,i.jsx)("td",{style:C.tdNum,children:e.shippingCost>0?a(e.shippingCost):"—"}),(0,i.jsxs)("td",{style:{...C.tdNum,fontWeight:600},children:[a(e.total),e.refunded>0&&(0,i.jsxs)("div",{style:{fontSize:11,fontWeight:400,color:"#b3261e"},children:["−",a(e.refunded)," refunded"]})]})]},e.stripeSessionId),l===e.stripeSessionId&&(0,i.jsx)("tr",{children:(0,i.jsx)("td",{colSpan:8,style:C.expandedCell,children:(0,i.jsxs)("div",{style:{...C.expandedContent,gridTemplateColumns:e.shipping.address?"1fr 1fr 1fr 1fr":"1fr 1fr 1fr"}
1,children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{style:{...C.expandLabel,display:"flex",alignItems:"center",gap:4},children:["Ship to",e.shipping.address&&(0,i.jsx)("button",{title:"Copy address",onClick:()=>{let t=e.shipping.address,n=[e.shipping.name,t.line1,t.line2,"".concat(t.city,", ").concat(t.state," ").concat(t.postal_code),t.country].filter(Boolean);navigator.clipboard.writeText(n.join("\n")),I(e.stripeSessionId),setTimeout(()=>I(null),1500)},style:{background:"none",border:"none",cursor:"pointer",padding:0,lineHeight:1,color:z===e.stripeSessionId?"#2a2":"#aaa"},children:z===e.stripeSessionId?"✓":(0,i.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:[(0,i.jsx)("path",{d:"M4 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H6z"}),(0,i.jsx)("path",{d:"M2 5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1v1H2z"})]})})]}),e.shipping.address?(0,i.jsxs)("div",{style:{fontSize:12,lineHeight:1.6},children:[e.shipping.name&&(0,i.jsx)("div",{children:e.shipping.name}),(0,i.jsx)("div",{children:e.shipping.address.line1}),e.shipping.address.line2&&(0,i.jsx)("div",{children:e.shipping.address.line2}),(0,i.jsxs)("div",{children:[e.shipping.address.city,", ",e.shipping.address.state," ",e.shipping.address.postal_code]}),(0,i.jsx)("div",{children:e.shipping.address.country}),e.shipping.method&&(0,i.jsx)("div",{style:{color:"#888",marginTop:2},children:e.shipping.method})]}):(0,i.jsx)("span",{style:{fontSize:12,color:"#999"},children:"No address (digital)"})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:C.expandLabel,children:"Line items"}),e.items.map((e,t)=>(0,i.jsxs)("div",{style:{fontSize:12,display:"flex",justifyContent:"space-between",gap:32},children:[(0,i.jsxs)("span",{children:[e.name,e.quantity>1?" \xd7".concat(e.quantity):""]}),(0,i.jsx)("span",{style:{fontFamily:"monospace"},children:a(e.amount)})]},t))]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:C.expandLabel,children:"Stripe"}),(0,i.jsx)("a",{href:"https://dashboard.stripe.com/payments/".concat(e.stripeSessionId),target:"_blank",rel:"noreferrer",style:{fontSize:12,color:"#5469d4"},children:"View in Stripe ↗"})]}),e.shipping.address&&(()=>{var t;let n=e.stripeSessionId,r=e.tracking||o.find(e=>e.sessionId===n),s=b.has(n)||!!r,l=j.has(n),a=f[n]||"",c=a?p(a):"";return(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:C.expandLabel,children:"Shipment"}),s?(0,i.jsxs)("div",{style:{fontSize:12,lineHeight:1.6},children:[(0,i.jsx)("span",{style:{color:"#1a6e3c",fontWeight:600},children:"Ship email sent ✓"}),(null==r?void 0:r.trackingNumber)&&(()=>{let e=r.trackingUrl||h(r.carrier,r.trackingNumber);return(0,i.jsxs)("div",{style:{marginTop:4},children:[(0,i.jsxs)("div",{style:{color:"#555",marginBottom:4,fontFamily:"monospace",fontSize:11},children:[r.carrier&&(0,i.jsxs)("span",{style:{color:"#888",fontFamily:"inherit"},children:[r.carrier," "]}),r.trackingNumber]}),e&&(0,i.jsx)("a",{href:e,target:"_blank",rel:"noreferrer",style:{display:"inline-block",fontSize:11,color:"#5469d4",border:"1px solid #c5cae9",padding:"2px 10px",textDecoration:"none",letterSpacing:"0.03em"},children:"Track →"})]})})(),(null==r?void 0:r.shippedAt)&&(0,i.jsx)("div",{style:{color:"#999",fontSize:11,marginTop:4},children:d(r.shippedAt)})]}):(0,i.jsxs)("div",{children:[(null===(t=e.shipping.address)||void 0===t?void 0:t.country)&&"US"!==e.shipping.address.country&&(0,i.jsx)("button",{onClick:()=>W(n),disabled:k.has(n)||l,style:{...C.filterBtn,marginBottom:8,opacity:k.has(n)||l?.5:1,background:"#1a6e3c",color:"#fff",borderColor:"#1a6e3c"},children:k.has(n)?"Buying…":"Buy label →"}),(0,i.jsx)("input",{value:a,onChange:e=>y(t=>({...t,[n]:e.target.value})),placeholder:"Tracking # (optional)",style:{border:"1px solid #ddd",padding:"5px 8px",fontSize:12,fontFamily:w,width:"100%",outline:"none",background:"#fff",color:"#111",marginBottom:6,boxSizing:"border-box"}}),c&&(0,i.jsxs)("div",{style:{fontSize:11,color:"#888",marginBottom:6},children:[c," detected"]}),(0,i.jsx)("button",{onClick:()=>L(n),disabled:l,style:{...C.filterBtn,opacity:l?.5:1},children:l?"Sending…":"Send ship email →"}),(0,i.jsx)("button",{onClick:()=>P(n),disabled:l,style:{...C.filterBtn,marginTop:4,opacity:l?.5:1,color:"#888",borderColor:"#ddd"},children:"Record (no email) →"})]})]})})()]})})},e.stripeSessionId+"-detail")]})),R.length>0&&(0,i.jsx)(V,{label:"Shipped & digital",count:R.length}),U.map(e=>(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("tr",{style:{...C.tr,cursor:"pointer"},onClick:()=>c(l===e.stripeSessionId?null:e.stripeSessionId),children:[(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("span",{style:{fontFamily:"monospace",fontWeight:600},children:e.orderNumber?"#".concat(e.orderNumber):"—"})}),(0,i.jsx)("td",{style:C.td,children:d(e.date)}),(0,i.jsxs)("td",{style:C.td,children:[(0,i.jsx)("div",{style:{fontWeight:500},children:e.customer.name||"—"}),(0,i.jsx)("div",{style:{fontSize:11,color:"#888"},children:e.customer.email})]}),(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("span",{style:{fontSize:12,color:"#444"},children:e.items.map(e=>"".concat(e.name).concat(e.quantity>1?" \xd7".concat(e.quantity):"")).join(", ")||"—"})}),(0,i.jsx)("td",{style:C.tdNum,children:a(e.subtotal)}),(0,i.jsx)("td",{style:C.tdNum,children:e.tax>0?a(e.tax):"—"}),(0,i.jsx)("td",{style:C.tdNum,children:e.shippingCost>0?a(e.shippingCost):"—"}),(0,i.jsxs)("td",{style:{...C.tdNum,fontWeight:600},children:[a(e.total),e.refunded>0&&(0,i.jsxs)("div",{style:{fontSize:11,fontWeight:400,color:"#b3261e"},children:["−",a(e.refunded)," refunded"]})]})]},e.stripeSessionId),l===e.stripeSessionId&&(0,i.jsx)("tr",{children:(0,i.jsx)("td",{colSpan:8,style:C.expandedCell,children:(0,i.jsxs)("div",{style:{...C.expandedContent,gridTemplateColumns:e.shipping.address?"1fr 1fr 1fr 1fr":"1fr 1fr 1fr"}
1,children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("div",{style:{...C.expandLabel,display:"flex",alignItems:"center",gap:4},children:["Ship to",e.shipping.address&&(0,i.jsx)("button",{title:"Copy address",onClick:()=>{let t=e.shipping.address,n=[e.shipping.name,t.line1,t.line2,"".concat(t.city,", ").concat(t.state," ").concat(t.postal_code),t.country].filter(Boolean);navigator.clipboard.writeText(n.join("\n")),I(e.stripeSessionId),setTimeout(()=>I(null),1500)},style:{background:"none",border:"none",cursor:"pointer",padding:0,lineHeight:1,color:z===e.stripeSessionId?"#2a2":"#aaa"},children:z===e.stripeSessionId?"✓":(0,i.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 16 16",fill:"currentColor",children:[(0,i.jsx)("path",{d:"M4 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H6z"}),(0,i.jsx)("path",{d:"M2 5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1v1H2z"})]})})]}),e.shipping.address?(0,i.jsxs)("div",{style:{fontSize:12,lineHeight:1.6},children:[e.shipping.name&&(0,i.jsx)("div",{children:e.shipping.name}),(0,i.jsx)("div",{children:e.shipping.address.line1}),e.shipping.address.line2&&(0,i.jsx)("div",{children:e.shipping.address.line2}),(0,i.jsxs)("div",{children:[e.shipping.address.city,", ",e.shipping.address.state," ",e.shipping.address.postal_code]}),(0,i.jsx)("div",{children:e.shipping.address.country}),e.shipping.method&&(0,i.jsx)("div",{style:{color:"#888",marginTop:2},children:e.shipping.method})]}):(0,i.jsx)("span",{style:{fontSize:12,color:"#999"},children:"No address (digital)"})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:C.expandLabel,children:"Line items"}),e.items.map((e,t)=>(0,i.jsxs)("div",{style:{fontSize:12,display:"flex",justifyContent:"space-between",gap:32},children:[(0,i.jsxs)("span",{children:[e.name,e.quantity>1?" \xd7".concat(e.quantity):""]}),(0,i.jsx)("span",{style:{fontFamily:"monospace"},children:a(e.amount)})]},t))]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:C.expandLabel,children:"Stripe"}),(0,i.jsx)("a",{href:"https://dashboard.stripe.com/payments/".concat(e.stripeSessionId),target:"_blank",rel:"noreferrer",style:{fontSize:12,color:"#5469d4"},children:"View in Stripe ↗"})]}),e.shipping.address&&(()=>{let t=e.stripeSessionId,n=e.tracking||o.find(e=>e.sessionId===t),r=b.has(t)||!!n,s=j.has(t),l=f[t]||"",a=l?p(l):"";return(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:C.expandLabel,children:"Shipment"}),r?(0,i.jsxs)("div",{style:{fontSize:12,lineHeight:1.6},children:[(0,i.jsx)("span",{style:{color:"#1a6e3c",fontWeight:600},children:"Ship email sent ✓"}),(null==n?void 0:n.trackingNumber)&&(()=>{let e=n.trackingUrl||h(n.carrier,n.trackingNumber);return(0,i.jsxs)("div",{style:{marginTop:4},children:[(0,i.jsxs)("div",{style:{color:"#555",marginBottom:4,fontFamily:"monospace",fontSize:11},children:[n.carrier&&(0,i.jsxs)("span",{style:{color:"#888",fontFamily:"inherit"},children:[n.carrier," "]}),n.trackingNumber]}),e&&(0,i.jsx)("a",{href:e,target:"_blank",rel:"noreferrer",style:{display:"inline-block",fontSize:11,color:"#5469d4",border:"1px solid #c5cae9",padding:"2px 10px",textDecoration:"none",letterSpacing:"0.03em"},children:"Track →"})]})})(),(null==n?void 0:n.shippedAt)&&(0,i.jsx)("div",{style:{color:"#999",fontSize:11,marginTop:4},children:d(n.shippedAt)})]}):(0,i.jsxs)("div",{children:[(0,i.jsx)("input",{value:l,onChange:e=>y(n=>({...n,[t]:e.target.value})),placeholder:"Tracking # (optional)",style:{border:"1px solid #ddd",padding:"5px 8px",fontSize:12,fontFamily:w,width:"100%",outline:"none",background:"#fff",color:"#111",marginBottom:6,boxSizing:"border-box"}}),a&&(0,i.jsxs)("div",{style:{fontSize:11,color:"#888",marginBottom:6},children:[a," detected"]}),(0,i.jsx)("button",{onClick:()=>L(t),disabled:s,style:{...C.filterBtn,opacity:s?.5:1},children:s?"Sending…":"Send ship email →"}),(0,i.jsx)("button",{onClick:()=>P(t),disabled:s,style:{...C.filterBtn,marginTop:4,opacity:s?.5:1,color:"#888",borderColor:"#ddd"},children:"Record (no email) →"})]})]})})()]})})},e.stripeSessionId+"-detail")]}))]})]})}),q>1&&(0,i.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",justifyContent:"flex-end",marginTop:12},children:[(0,i.jsx)("button",{onClick:()=>F(e=>Math.max(0,e-1)),disabled:0===D,style:{...C.filterBtn,opacity:0===D?.4:1},children:"← Prev"}),(0,i.jsxs)("span",{style:{fontSize:12,color:"#888"},children:["Page ",D+1," of ",q]}),(0,i.jsx)("button",{onClick:()=>F(e=>Math.min(q-1,e+1)),disabled:D===q-1,style:{...C.filterBtn,opacity:D===q-1?.4:1},children:"Next →"})]})]})}function y(e){let{products:t,onToggle:n,stock:s,onSetStock:o}=e,[l,d]=(0,r.useState)({}),[c,p]=(0,r.useState)({}),[h,u]=(0,r.useState)({});async function m(e,t){d(t=>({...t,[e]:!0})),await n(e,!t),d(t=>({...t,[e]:!1}))}async function x(e){let t=c[e];void 0!==t&&""!==t&&(u(t=>({...t,[e]:!0})),await o(e,Number(t)),u(t=>({...t,[e]:!1})))}return(0,i.jsxs)("div",{style:{overflowX:"auto"},children:[(0,i.jsx)("p",{style:{fontSize:12,color:"#999",marginBottom:12},children:"In Stock toggle commits to GitHub and redeploys in ~30 seconds. QTY is saved instantly."}),(0,i.jsxs)("table",{style:C.table,children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:["Product","Price","Weight","QTY","Type","In Stock"].map(e=>(0,i.jsx)("th",{style:C.th,children:e},e))})}),(0,i.jsx)("tbody",{children:t.map(e=>
1{let t=!e.isDigital&&!e.isService&&!e.isBundle,n=s[e.id],r=e.id in c?c[e.id]:void 0!==n?String(n):"";return(0,i.jsxs)("tr",{style:C.tr,children:[(0,i.jsxs)("td",{style:C.td,children:[(0,i.jsx)("div",{style:{fontWeight:500},children:e.name}),(0,i.jsx)("div",{style:{fontSize:11,color:"#888",fontFamily:"monospace"},children:e.id})]}),(0,i.jsx)("td",{style:C.td,children:a(e.price)}),(0,i.jsx)("td",{style:C.td,children:e.productWeightOz?"".concat(e.productWeightOz," oz"):"—"}),(0,i.jsx)("td",{style:C.td,children:t?(0,i.jsxs)("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[(0,i.jsx)("input",{type:"number",min:"0",value:r,onChange:t=>p(n=>({...n,[e.id]:t.target.value})),style:{width:56,border:"1px solid #ddd",padding:"4px 6px",fontSize:12,fontFamily:"monospace",outline:"none",color:0===n?"#c00":"#111"},placeholder:"—"}),(0,i.jsx)("button",{onClick:()=>x(e.id),disabled:h[e.id],style:{fontSize:11,padding:"4px 8px",border:"1px solid #ddd",background:"#f8f8f8",cursor:"pointer",fontFamily:"monospace"},children:h[e.id]?"…":"Set"})]}):(0,i.jsx)("span",{style:{color:"#aaa"},children:"—"})}),(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("span",{style:{fontSize:11,color:"#888"},children:e.isDigital?"Digital":e.isService?"Service":"Physical"})}),(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("button",{onClick:()=>m(e.id,e.inStock),disabled:l[e.id],style:{...C.toggleBtn,background:e.inStock?g.pine:"#e0e0e0",color:e.inStock?g.chiffon:"#666",opacity:l[e.id]?.5:1},children:l[e.id]?"…":e.inStock?"In Stock":"Out of Stock"})})]},e.id)})})]})]})}function j(e){let{orders:t}=e,[n,s]=(0,r.useState)("month"),o=864e5*({week:7,month:30,year:365,all:1/0})[n],l=Date.now(),d=t.filter(e=>"all"===n||l-new Date(e.date).getTime()<=o),c={};for(let e of d)for(let t of e.items)c[t.name]||(c[t.name]={units:0,revenue:0}),c[t.name].units+=t.quantity||1,c[t.name].revenue+=t.amount||0;let p=Object.entries(c).map(e=>{let[t,{units:n,revenue:i}]=e;return{name:t,units:n,revenue:i}}).sort((e,t)=>t.revenue-e.revenue),h=p.reduce((e,t)=>e+t.revenue,0);return(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{style:{display:"flex",gap:8,marginBottom:16,alignItems:"center"},children:[["week","Week"],["month","Month"],["year","Year"],["all","All time"]].map(e=>{let[t,r]=e;return(0,i.jsx)("button",{onClick:()=>s(t),style:{...C.filterBtn,...n===t?C.filterBtnActive:{}},children:r},t)})}),0===p.length?(0,i.jsx)("p",{style:{color:"#999",fontSize:13},children:"No orders in this period."}):(0,i.jsxs)("table",{style:{...C.table,tableLayout:"auto"},children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{style:C.th,children:"Product"}),(0,i.jsx)("th",{style:{...C.th,textAlign:"right"},children:"Units sold"}),(0,i.jsx)("th",{style:{...C.th,textAlign:"right"},children:"Revenue"}),(0,i.jsx)("th",{style:{...C.th,width:200},children:"Share"})]})}),(0,i.jsx)("tbody",{children:p.map(e=>{let{name:t,units:n,revenue:r}=e;return(0,i.jsxs)("tr",{style:C.tr,children:[(0,i.jsx)("td",{style:C.td,children:t}),(0,i.jsx)("td",{style:C.tdNum,children:n}),(0,i.jsx)("td",{style:C.tdNum,children:a(r)}),(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("div",{style:{height:6,background:g.tangerine,width:"".concat(h>0?r/h*100:0,"%"),minWidth:2}})})]},t)})})]})]})}function v(e){var t;let{pages:n}=e;if(!n||0===n.length)return(0,i.jsx)("p",{style:{color:"#999",fontSize:13},children:"No page view data yet. Data will appear after your first tracked visit."});let r=(null===(t=n[0])||void 0===t?void 0:t.views)||1;return(0,i.jsxs)("table",{style:{...C.table,tableLayout:"auto"},children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{style:C.th,children:"Page"}),(0,i.jsx)("th",{style:{...C.th,textAlign:"right"},children:"Views"}),(0,i.jsx)("th",{style:{...C.th,width:200},children:"Share"})]})}),(0,i.jsx)("tbody",{children:n.map(e=>{let{page:t,views:n}=e;return(0,i.jsxs)("tr",{style:C.tr,children:[(0,i.jsx)("td",{style:{...C.td,fontFamily:"monospace",fontSize:12},children:t}),(0,i.jsx)("td",{style:{...C.tdNum},children:n}),(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("div",{style:{height:6,background:g.pine,width:"".concat(n/r*100,"%"),minWidth:2}})})]},t)})})]})}function b(e){let{orders:t,onChange:n,inventory:s}=e,[o,l]=(0,r.useState)(!1),[c,h]=(0,r.useState)(null),[m,x]=(0,r.useState)(""),[f,y]=(0,r.useState)(u()),[j,v]=(0,r.useState)(!1);
1function b(e,t){y(n=>{let i={...n},r=e.split("."),s=i;for(let e=0;e<r.length-1;e++)s[r[e]]={...s[r[e]]},s=s[r[e]];return s[r[r.length-1]]=t,i})}function S(e,t,n){y(i=>{let r=i.items.map((i,r)=>r===e?{...i,[t]:n}:i);return{...i,items:r}})}function T(){l(!1),h(null),y(u()),x("")}async function z(){if(!f.recipient.name||!f.items.length){alert("Recipient name and at least one item are required.");return}v(!0);try{let e={...f,shippingCost:parseFloat(f.shippingCost)||0};if(c){let i=await fetch("/api/admin/manual-orders?id=".concat(encodeURIComponent(c)),{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!i.ok)throw Error("Save failed");let{order:r}=await i.json();n(t.map(e=>e.id===c?r:e)),T()}else{let i=await fetch("/api/admin/manual-orders",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!i.ok)throw Error("Save failed");let{order:r}=await i.json();n([r,...t]),T(),window.open("/admin/invoice/".concat(r.id),"_blank")}}catch(e){alert("Error saving order.")}v(!1)}async function I(e){confirm("Delete order ".concat(e,"? This cannot be undone."))&&(await fetch("/api/admin/manual-orders?id=".concat(encodeURIComponent(e)),{method:"DELETE"})).ok&&n(t.filter(t=>t.id!==e))}let B=(s||[]).filter(e=>!e.isDigital&&!e.isService&&!e.isBundle),N={border:"1px solid #ddd",padding:"6px 8px",fontSize:13,fontFamily:w,width:"100%",outline:"none",background:"#fff",color:"#111"},D={display:"block",fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.07em",color:"#888",marginBottom:4},F=p(f.tracking);return(0,i.jsxs)("div",{style:{...C.section,marginTop:40},children:[(0,i.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:16},children:[(0,i.jsx)("h2",{style:C.sectionHeading,children:"Manual Orders"}),(0,i.jsx)("button",{onClick:()=>{o?T():l(!0)},style:{...C.filterBtn,...o?{background:g.pine,color:g.chiffon,border:"1px solid ".concat(g.pine)}:{}},children:o?"Cancel":"+ New Manual Order"})]}),o&&(0,i.jsxs)("div",{style:{background:"#fff",border:"1px solid #e0e0e0",padding:"24px 24px 28px",marginBottom:24},children:[c&&(0,i.jsxs)("div",{style:{marginBottom:16,fontSize:12,color:"#888",fontFamily:w},children:["Editing ",c]}),(0,i.jsxs)("div",{style:{marginBottom:20},children:[(0,i.jsx)("label",{style:D,children:"Paste to fill"}),(0,i.jsx)("textarea",{value:m,rows:5,onChange:e=>x(e.target.value),placeholder:"17 DEC 2025\nBuchhandlung Walther K\xf6nig\nDieselstr. 2\n50996 K\xf6ln\nRun Studio Run (RSR2)\n3 @ $25.00\n50%\n9449050206...\nWoodland Group\n$5.97",style:{...N,resize:"vertical",lineHeight:1.5}}),(0,i.jsx)("button",{onClick:function(){if(!m.trim())return;let e=function(e){let t=e.split(/\n/).map(e=>e.trim()).filter(Boolean),n={date:new Date().toISOString().slice(0,10),recipient:{name:"",address:"",eori:"",vatId:""},items:[],tracking:"",carrier:"",via:"",shippingCost:0,notes:""},i=/(?:qty:\s*)?(\d+)\s*@\s*\$?([\d.]+)/i,r=!1,s=[];for(let e=0;e<t.length;e++){let o=t[e];if(/^(To:|: Order|: Shipping|: Total|: Payment|Make check|Or Paypal|Many thanks)/i.test(o))continue;let l=o.match(/^(\d{1,2})\s+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\s+(\d{4})$/i);if(l){let e={jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};n.date=new Date(+l[3],e[l[2].toLowerCase()],+l[1]).toISOString().slice(0,10),r=!1;continue}if(/^\d{4}-\d{2}-\d{2}$/.test(o)){n.date=o,r=!1;continue}let a=o.match(/^EORI\s+(.+)$/i);if(a){n.recipient.eori=a[1],r=!1;continue}let d=o.match(/^VAT\s+ID[:\s]+(.+)$/i);if(d){n.recipient.vatId=d[1],r=!1;continue}let c=o.match(i);if(c){let i={name:"",qty:+c[1],unitPrice:+c[2],discount:0};if(s.length>0&&(i.name=s.pop()),e+1<t.length){let n=t[e+1].match(/^x?\s*(\d+(?:\.\d+)?)\s*%/i);n&&(i.discount=+n[1],e++)}n.items.push(i),r=!1;continue}let h=o.match(/^(1Z[A-Z0-9]+|\d{10,})$/i);if(h){n.tracking=h[1],n.carrier=p(h[1]),r=!0;continue}if(r){let e=o.match(/^\$?([\d.]+)$/);if(!e){n.via=o,r=!1;continue}n.shippingCost=+e[1],r=!1;continue}let u=o.match(/^via\s+(.+)$/i);if(u){n.via=u[1],r=!1;continue}let g=o.match(/^\$?([\d.]+)$/);if(g&&!n.shippingCost){let e=+g[1];if(e>0&&e<500){n.shippingCost=e,r=!1;continue}}s.push(o),r=!1}return s.length>0&&(n.recipient.name=s[0],n.recipient.address=s.slice(1).join("\n")),n}(m);0===e.items.length?e.items=[{name:"",qty:1,unitPrice:0,discount:0,productId:""}]:e.items=e.items.map(e=>({productId:"",...e})),y(e)},style:{marginTop:8,...C.filterBtn,background:g.pine,color:g.chiffon,border:"1px solid ".concat(g.pine)},children:"Parse"})]}),(0,i.jsxs)("div",{style:{borderTop:"1px solid #eee",paddingTop:20,display:"grid",gap:16},children:[(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"160px 1fr 1fr",gap:12},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("label",{style:D,children:"Date"}),(0,i.jsx)("input",{type:"date",value:f.date,onChange:e=>b("date",e.target.value),style:N})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("label",{style:D,children:"Recipient name / company"}),(0,i.jsx)("input",{value:f.recipient.name,onChange:e=>b("recipient.name",e.target.value),style:N})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("label",{style:D,children:"Address"}),(0,i.jsx)("textarea",{value:f.recipient.address,rows:2,onChange:e=>b("recipient.address",e.target.value),style:{...N,resize:"none",lineHeight:1.4}})]})]}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 2fr",gap:12},children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("label",{style:D,children:["EORI ",(0,i.jsx)("span",{style:{fontWeight:400,textTransform:"none"},children:"(optional)"})]}),(0,i.jsx)("input",{value:f.recipient.eori,onChange:e=>b("recipient.eori",e.target.value),style:N,placeholder:"De 7542917"})]}),(0,i.jsxs)("div",{children:[(0,i.jsxs)("label",{style:D,children:["VAT ID ",(0,i.jsx)("span",{style:{fontWeight:400,textTransform:"none"},children:"(optional)"})]}),(0,i.jsx)("input",{value:f.recipient.vatId,onChange:e=>b("recipient.vatId",e.target.value),style:N,placeholder:"DE122788828"})]})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("label",{style:D,children:"Line Items"}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"150px 2fr 56px 90px 72px 28px",gap:6,marginBottom:4,fontSize:11,color:"#aaa",textTransform:"uppercase",letterSpacing:"0.05em"},children:[(0,i.jsx)("span",{children:"Catalog"}),(0,i.jsx)("span",{children:"Name"}),(0,i.jsx)("span",{children:"Qty"}),(0,i.jsx)("span",{children:"Unit $"}),(0,i.jsx)("span",{children:"Disc %"}),(0,i.jsx)("span",{})]}),f.items.map((e,t)=>(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"150px 2fr 56px 90px 72px 28px",gap:6,marginBottom:6},children:[(0,i.jsxs)("select",{value:e.productId||"",onChange:e=>{let n=e.target.value,i=B.find(e=>e.id===n);
1y(e=>{let r=e.items.map((e,r)=>{if(r!==t)return e;let s={...e,productId:n};return i&&(s.name=i.name,s.unitPrice=i.price),s});return{...e,items:r}})},style:{...N,color:e.productId?"#111":"#aaa"},children:[(0,i.jsx)("option",{value:"",children:"Custom"}),B.map(e=>(0,i.jsx)("option",{value:e.id,children:e.name},e.id))]}),(0,i.jsx)("input",{value:e.name,onChange:e=>S(t,"name",e.target.value),placeholder:"Run Studio Run (RSR2)",style:N}),(0,i.jsx)("input",{type:"number",min:"1",value:e.qty,onChange:e=>S(t,"qty",+e.target.value),style:N}),(0,i.jsx)("input",{type:"number",min:"0",step:"0.01",value:e.unitPrice,onChange:e=>S(t,"unitPrice",+e.target.value),style:N,placeholder:"25.00"}),(0,i.jsx)("input",{type:"number",min:"0",max:"100",value:e.discount,onChange:e=>S(t,"discount",+e.target.value),style:N,placeholder:"0"}),(0,i.jsx)("button",{onClick:()=>S.length>1&&y(e=>({...e,items:e.items.filter((e,n)=>n!==t)})),style:{background:"none",border:"none",cursor:"pointer",color:"#bbb",fontSize:18,padding:0,lineHeight:1},children:"\xd7"})]},t)),(0,i.jsx)("button",{onClick:()=>y(e=>({...e,items:[...e.items,{name:"",qty:1,unitPrice:0,discount:0,productId:""}]})),style:{fontSize:12,color:g.pine,background:"none",border:"none",cursor:"pointer",padding:0,marginTop:2},children:"+ Add item"})]}),(0,i.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"2fr 1fr 120px",gap:12},children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("label",{style:D,children:"Tracking number"}),(0,i.jsxs)("div",{style:{position:"relative"},children:[(0,i.jsx)("input",{value:f.tracking,onChange:e=>b("tracking",e.target.value),style:N,placeholder:"9449050206217019961368"}),F&&(0,i.jsx)("span",{style:{position:"absolute",right:8,top:"50%",transform:"translateY(-50%)",fontSize:11,color:"#888",pointerEvents:"none"},children:F})]})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("label",{style:D,children:"Shipper / via"}),(0,i.jsx)("input",{value:f.via,onChange:e=>b("via",e.target.value),style:N,placeholder:"Woodland Group"})]}),(0,i.jsxs)("div",{children:[(0,i.jsx)("label",{style:D,children:"Shipping $"}),(0,i.jsx)("input",{type:"number",min:"0",step:"0.01",value:f.shippingCost,onChange:e=>b("shippingCost",e.target.value),style:N,placeholder:"5.97"})]})]}),(0,i.jsx)("div",{style:{display:"flex",justifyContent:"flex-end"},children:(0,i.jsx)("button",{onClick:z,disabled:j,style:{background:g.tangerine,color:g.chiffon,border:"none",padding:"9px 24px",fontSize:12,fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",fontFamily:k,cursor:j?"wait":"pointer"},children:j?"Saving…":c?"Save Changes":"Save & Open Invoice"})})]})]}),t.length>0?(0,i.jsxs)("table",{style:C.table,children:[(0,i.jsx)("thead",{children:(0,i.jsx)("tr",{children:["Order #","Date","Recipient","Items","Total",""].map(e=>(0,i.jsx)("th",{style:C.th,children:e},e))})}),(0,i.jsx)("tbody",{children:t.map(e=>(0,i.jsxs)("tr",{style:C.tr,children:[(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("span",{style:{fontFamily:w,fontWeight:600},children:e.id})}),(0,i.jsx)("td",{style:C.td,children:d(e.date+"T12:00:00")}),(0,i.jsx)("td",{style:C.td,children:e.recipient.name}),(0,i.jsx)("td",{style:C.td,children:(0,i.jsx)("span",{style:{fontSize:12,color:"#444"},children:(e.items||[]).map(e=>"".concat(e.qty,"\xd7 ").concat(e.name)).join(", ")})}),(0,i.jsx)("td",{style:C.tdNum,children:a((e.items||[]).reduce((e,t)=>{let n=(t.qty||0)*(t.unitPrice||0);return e+(t.discount>0?n*(1-t.discount/100):n)},0)+(e.shippingCost||0))}),(0,i.jsxs)("td",{style:{...C.td,whiteSpace:"nowrap"},children:[(0,i.jsx)("a",{href:"/admin/invoice/".concat(e.id),target:"_blank",rel:"noreferrer",style:{color:g.tangerine,textDecoration:"none",fontSize:12,fontWeight:600},children:"Invoice"}),(0,i.jsx)("span",{style:{color:"#ddd",margin:"0 6px"},children:"\xb7"}),(0,i.jsx)("button",{onClick:()=>{var t,n,i,r,s;h(e.id),y({date:e.date||"",recipient:{name:(null===(t=e.recipient)||void 0===t?void 0:t.name)||"",address:(null===(n=e.recipient)||void 0===n?void 0:n.address)||"",eori:(null===(i=e.recipient)||void 0===i?void 0:i.eori)||"",vatId:(null===(r=e.recipient)||void 0===r?void 0:r.vatId)||""},items:(e.items||[]).map(e=>({name:e.name||"",qty:e.qty||1,unitPrice:e.unitPrice||0,discount:e.discount||0,productId:e.productId||""})),tracking:e.tracking||"",carrier:e.carrier||"",via:e.via||"",shippingCost:null!==(s=e.shippingCost)&&void 0!==s?s:0,notes:e.notes||""}),x(""),l(!0)},style:{background:"none",border:"none",cursor:"pointer",color:g.pine,fontSize:12,padding:0,fontWeight:600},children:"Edit"}),(0,i.jsx)("span",{style:{color:"#ddd",margin:"0 6px"},children:"\xb7"}),(0,i.jsx)("button",{onClick:()=>I(e.id),style:{background:"none",border:"none",cursor:"pointer",color:"#bbb",fontSize:12,padding:0},children:"Delete"})]})]},e.id))})]}):!o&&(0,i.jsx)("p",{style:{color:"#999",fontSize:13},children:"No manual orders yet."})]})}function S(){let e=(0,l.useRouter)(),[t,n]=(0,r.useState)("orders"),[s,d]=(0,r.useState)(null),[c,p]=(0,r.useState)(null),[h,u]=(0,r.useState)(null),[S,k]=(0,r.useState)(null),[w,T]=(0,r.useState)({}),[z,I]=(0,r.useState)(!0),[B,N]=(0,r.useState)(null),[D,F]=(0,r.useState)([]),[L,P]=(0,r.useState)([]),W=(0,r.useCallback)(async function(){let{fresh:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};I(!0),N(null);try{let t={cache:"no-store"},n=e?"refresh=1":"",[i,r,s,o,l,a,c]=await Promise.all([fetch("/api/admin/stats".concat(n?"?".concat(n):""),t),fetch("/api/admin/orders?days=365".concat(n?"&".concat(n):""),t),fetch("/api/admin/analytics?days=30".concat(n?"&".concat(n):""),t),fetch("/api/admin/inventory",t),fetch("/api/admin/manual-orders",t),fetch("/api/admin/stock",t),fetch("/api/admin/shipments",t)]);if(!i.ok||!r.ok)throw Error("Failed to load data");let[h,g,m,x,f,y,j]=await Promise.all([i.json(),r.json(),s.ok?s.json():{daily:[],topPages:[],totalViews:0},o.ok?o.json():{products:[]},l.ok?l.json():{orders:[]},a.ok?a.json():{stock:{}},c.ok?c.json():{shipments:[]}]);d(h),p(g.orders),u(m),k(x.products),F(f.orders),T(y.stock),P(j.shipments||[])}catch(e){N(e.message)}finally{I(!1)}},[]);async function O(){await fetch("/api/admin/auth",{method:"DELETE"}).catch(()=>{}
1),document.cookie="npp-admin-session=; Path=/; Max-Age=0",e.push("/admin/login")}async function E(e,t){let n=await fetch("/api/admin/inventory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({productId:e,inStock:t})});n.ok?k(n=>n.map(n=>n.id===e?{...n,inStock:t}:n)):alert("Error: "+(await n.json()).error)}async function A(e,t){let n=await fetch("/api/admin/stock",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({productId:e,qty:t})});n.ok?T(n=>({...n,[e]:t})):alert("Error: "+(await n.json()).error)}return(0,r.useEffect)(()=>{W()},[W]),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(o(),{children:[(0,i.jsx)("title",{children:"Admin — No Picnic Press"}),(0,i.jsx)("meta",{name:"robots",content:"noindex"})]}),(0,i.jsxs)("div",{style:C.root,children:[(0,i.jsx)("header",{style:C.header,children:(0,i.jsxs)("div",{style:C.headerInner,children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14},children:[(0,i.jsx)("img",{src:"/images/npp-logo.png",alt:"No Picnic Press",style:{height:22,filter:"invert(1)",display:"block"}}),(0,i.jsx)("span",{style:C.headerAdmin,children:"Admin"})]}),(0,i.jsx)("button",{onClick:O,style:C.logoutBtn,children:"Sign out"})]})}),(0,i.jsxs)("div",{style:C.body,children:[(0,i.jsxs)("nav",{style:C.tabNav,children:[[["overview","Overview"],["orders","Orders"],["inventory","Inventory"]].map(e=>{let[r,s]=e;return(0,i.jsx)("button",{onClick:()=>n(r),style:{...C.tabBtn,...t===r?C.tabBtnActive:{}},children:s},r)}),(0,i.jsx)("button",{onClick:()=>W({fresh:!0}),disabled:z,style:{...C.tabBtn,marginLeft:"auto",opacity:z?.4:1},children:z?"↻":"↻ Refresh"})]}),z&&(0,i.jsx)("div",{style:{textAlign:"center",padding:"80px 0",color:"#999",fontSize:13},children:"Loading…"}),B&&(0,i.jsxs)("div",{style:{background:"#fff0f0",border:"1px solid #f5c0c0",padding:16,fontSize:13,color:"#c00",marginBottom:24},children:["Error: ",B,(0,i.jsx)("button",{onClick:W,style:{marginLeft:12,textDecoration:"underline",background:"none",border:"none",cursor:"pointer",color:"#c00",fontSize:13},children:"Retry"})]}),!z&&s&&"overview"===t&&(0,i.jsxs)("div",{children:[(()=>{let e=s.periods,t=c?c.filter(e=>{var t;return(null===(t=e.shipping)||void 0===t?void 0:t.address)&&!e.tracking&&!L.find(t=>t.sessionId===e.stripeSessionId)}).length:null,n=new Date,r=new Date(n.getFullYear(),n.getMonth(),1).getTime(),o=n.getDate(),l=new Date(n.getFullYear(),n.getMonth()+1,0).getDate(),d=(c||[]).filter(e=>new Date(e.date).getTime()>=r).reduce((e,t)=>e+(t.total||0),0);return(0,i.jsxs)("div",{style:C.kpiGrid,children:[(0,i.jsx)(x,{label:"Revenue today",value:a(e.today.revenue),sub:"".concat(e.today.orders," order").concat(1!==e.today.orders?"s":""),prev:e.yesterday.revenue,prevLabel:"yesterday"}),(0,i.jsx)(x,{label:"Revenue this week",value:a(e.week.revenue),sub:"".concat(e.week.orders," orders"),prev:e.lastWeek.revenue,prevLabel:"last week"}),(0,i.jsx)(x,{label:"Revenue this month",value:a(e.month.revenue),sub:"".concat(e.month.orders," orders \xb7 on pace for ").concat(a(o>0?d/o*l:0)),prev:e.lastMonth.revenue,prevLabel:"last month"}),(0,i.jsx)(x,{label:"Avg order value",value:a(s.totals.avgOrderValue),sub:"30 days",prev:e.lastMonth.avgOrderValue,prevLabel:"last month"}),null!==t&&(0,i.jsx)(x,{label:"Pending shipments",value:t,sub:1===t?"order needs shipping":"orders need shipping"})]})})(),(0,i.jsxs)("div",{style:C.chartsGrid,children:[(0,i.jsxs)("div",{style:C.chartCard,children:[(0,i.jsx)("div",{style:C.chartTitle,children:"Revenue — last 30 days"}),(0,i.jsx)(m,{data:s.daily,valueKey:"revenue",color:g.tangerine})]}),(0,i.jsxs)("div",{style:C.chartCard,children:[(0,i.jsx)("div",{style:C.chartTitle,children:"Page views — last 30 days"}),h&&h.daily.length>0?(0,i.jsx)(m,{data:h.daily,valueKey:"totalViews",color:g.pine}):(0,i.jsx)("div",{style:{fontSize:12,color:"#aaa",paddingTop:8},children:"No data yet — tracking will start after your next visit to the site."})]})]}),(0,i.jsxs)("div",{style:C.section,children:[(0,i.jsx)("h2",{style:C.sectionHeading,children:"Top pages (30 days)"}),h&&(0,i.jsx)(v,{pages:h.topPages})]}),(0,i.jsxs)("div",{style:C.section,children:[(0,i.jsx)("h2",{style:C.sectionHeading,children:"Sales by product"}),c&&c.length>0?(0,i.jsx)(j,{orders:c}):(0,i.jsx)("p",{style:{color:"#999",fontSize:13},children:"No orders yet."})]})]}),!z&&c&&"orders"===t&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)("div",{style:C.section,children:[(0,i.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:16},children:[(0,i.jsx)("h2",{style:C.sectionHeading,children:"Orders"}),c.some(e=>null===e.orderNumber)&&(0,i.jsxs)("span",{style:{fontSize:12,color:"#999"},children:["Orders without a # were placed before the dashboard was installed. New orders auto-number from #"," ",Math.max(...c.filter(e=>null!==e.orderNumber).map(e=>e.orderNumber),2683)+1,"."]}
1)]}),(0,i.jsx)(f,{orders:c,shipments:L})]}),(0,i.jsx)(b,{orders:D,onChange:F,inventory:S})]}),!z&&S&&"inventory"===t&&(0,i.jsxs)("div",{style:C.section,children:[(0,i.jsx)("h2",{style:C.sectionHeading,children:"Inventory"}),(0,i.jsx)(y,{products:S,onToggle:E,stock:w,onSetStock:A})]})]})]})]})}g.sacramento,g.chiffon,g.pine,g.chiffon,g.salmon,g.sacramento,g.tangerine,g.chiffon,g.chiffon,g.sacramento,S.noLayout=!0;let k="var(--font-display),'Helvetica Neue',Helvetica,Arial,sans-serif",w="var(--font-body),'Courier New',Courier,monospace",C={root:{minHeight:"100vh",background:"#f5f5f5",fontFamily:k,color:"#111"},header:{background:"#111",color:"#fff",position:"sticky",top:0,zIndex:100},headerInner:{maxWidth:1200,margin:"0 auto",padding:"0 24px",height:52,display:"flex",alignItems:"center",justifyContent:"space-between"},headerAdmin:{fontSize:10,fontWeight:600,letterSpacing:"0.14em",textTransform:"uppercase",color:"rgba(255,255,255,0.45)",fontFamily:k},logoutBtn:{background:"transparent",border:"1px solid rgba(255,255,255,0.25)",color:"#fff",fontSize:11,padding:"5px 12px",cursor:"pointer",fontFamily:k,letterSpacing:"0.06em"},body:{maxWidth:1200,margin:"0 auto",padding:"24px 24px 80px"},tabNav:{display:"flex",gap:0,marginBottom:28,borderBottom:"1px solid #ddd"},tabBtn:{background:"none",border:"none",borderBottom:"2px solid transparent",padding:"10px 18px",fontSize:13,cursor:"pointer",fontFamily:k,color:"#888",fontWeight:500,marginBottom:-1,letterSpacing:"0.03em"},tabBtnActive:{color:"#111",borderBottom:"2px solid ".concat(g.tangerine)},kpiGrid:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(180px, 1fr))",gap:16,marginBottom:24},card:{background:"#fff",border:"1px solid #e0e0e0",padding:"18px 20px"},cardLabel:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.08em",color:"#999",marginBottom:8},cardValue:{fontSize:26,fontWeight:400,fontFamily:w,letterSpacing:"-0.01em",lineHeight:1,marginBottom:4},cardSub:{fontSize:12,color:"#aaa",marginTop:4},funnelCard:{background:"#fff",border:"1px solid #e0e0e0",padding:"20px 24px",marginBottom:24},funnelTip:{fontSize:12,color:"#666",background:"#fffbea",border:"1px solid #f5e7a0",padding:"8px 12px",marginTop:16},chartsGrid:{display:"grid",gridTemplateColumns:"3fr 2fr",gap:16,marginBottom:24},chartCard:{background:"#fff",border:"1px solid #e0e0e0",padding:"18px 20px"},chartTitle:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.08em",color:"#999",marginBottom:12},section:{marginBottom:32},sectionHeading:{fontSize:13,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.08em",color:"#999",marginBottom:16},sectionLabel:{fontSize:12,color:"#888"},table:{width:"100%",borderCollapse:"collapse",fontSize:13,background:"#fff",border:"1px solid #e0e0e0"},th:{textAlign:"left",padding:"10px 14px",fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.07em",color:"#888",borderBottom:"1px solid #e0e0e0",background:"#fafafa",whiteSpace:"nowrap"},tr:{borderBottom:"1px solid #f0f0f0"},td:{padding:"11px 14px",verticalAlign:"top",lineHeight:1.4},tdNum:{padding:"11px 14px",fontFamily:"monospace",textAlign:"right",verticalAlign:"top",whiteSpace:"nowrap"},expandedCell:{padding:"0",background:"#fafafa",borderBottom:"1px solid #e0e0e0"},expandedContent:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:24,padding:"16px 20px"},expandLabel:{fontSize:11,fontWeight:600,textTransform:"uppercase",letterSpacing:"0.07em",color:"#999",marginBottom:6},filterBtn:{background:"none",border:"1px solid #ddd",padding:"4px 12px",fontSize:12,cursor:"pointer",fontFamily:k,color:"#666"},filterBtnActive:{background:g.pine,color:g.chiffon,border:"1px solid ".concat(g.pine)},toggleBtn:{padding:"5px 12px",fontSize:11,fontWeight:600,letterSpacing:"0.06em",textTransform:"uppercase",border:"none",cursor:"pointer",fontFamily:k,transition:"opacity 0.15s"}}},9008:function(e,t,n){e.exports=n(3867)}},function(e){e.O(0,[888,774,179],function(){return e(e.s=8195)}),_N_E=e.O()}]);

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.