1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["_next/static/chunks/browser-CQixfpkX.js","_next/static/chunks/browser-CGwu9ti5.js"])))=>i.map(i=>d[i]); 2import{r as e}from"./rolldown-runtime-C60lm6uB.js";import{i as t,r as n}from"./framework-BgSIrAUN.js";import{r}from"./index-C-GGUI9Q.js";import{c as i,i as a,o,r as s,s as c}from"./components-BLNKeQui.js";import{_ as l,b as u,d,l as f,o as p,s as m}from"./factory-model-COB57B9a.js";import{a as h,c as g,t as _}from"./order-product-detail-CyplbRYZ.js";var v=t(),y=e(n(),1);function b(e){let t=typeof e?.profile==`string`?JSON.parse(e.profile||`{}`):e?.profile||{},n={id:`primary`,name:e?.name||``,company:e?.company||``,email:e?.email||``,phone:e?.phone||``,address1:t.address1||``,address2:t.address2||``,city:t.city||``,state:t.state||``,zip:t.zip||``,country:t.country||`United States`},r=Array.isArray(t.addresses)&&t.addresses.length?t.addresses:[n];return{addresses:r,billing:r.find(e=>e.id===t.billingId)||r[0],shipping:r.find(e=>e.id===t.shippingId)||r[0]}}function x(e){let t=b(e),n=t=>Object.fromEntries([`name`,`company`,`email`,`phone`,`address1`,`address2`,`city`,`state`,`zip`,`country`].map(n=>[n,String(t[n]||(n===`email`?e.email:``)||``).trim().slice(0,300)]));return{billingAddress:n(t.billing),shippingAddress:n(t.shipping)}}var S=[`White`,`Clear`,`Chrome`],C=[`Gloss`,`Matte`],ee=e=>/^DC-(LAX|FB)-001$/.test(e?.sku||``);function w(e,t){if(!S.includes(e))throw Error(`Choose White, Clear, or Chrome media.`);if(!C.includes(t))throw Error(`Choose Gloss or Matte overlaminate.`);return{options:{media:e.toLowerCase(),overlaminate:t.toLowerCase()},labels:{Media:e,Overlaminate:t}}}var T={Warrior:[`Burn XC`],Cascade:[`Z`,`XRS-Pro`,`XRS-Pro Youth`,`S`,`R`,`CPVr`,`CS-R`],STX:[`Aero`]};function te(e,t){if(!Object.hasOwn(T,e))throw Error(`Choose a helmet brand.`);if(!T[e].includes(t))throw Error(`Choose a model for the selected helmet brand.`);return{options:{helmetBrand:e,helmetModel:t},labels:{"Helmet Brand":e,"Helmet Model":t}}}var ne=()=>({options:{helmetModel:`Generic Football`},labels:{"Helmet Model":`Generic Football`}});function re(e){return[`Import Review`,`Preliminary Order`,`Awaiting Customer Approval`].includes(e?.status)}function ie(e){if(Array.isArray(e.roster))return{...e,artwork:e.artwork?.length?e.artwork:e.image?[{url:e.image}]:[]};let t=Object.entries(e.sizes||{}).filter(([,e])=>Number(e)>0).map(([t,n],r)=>({id:String(e.id)+`-size-`+r,group:`Group 1`,name:``,number:``,size:t,quantity:Number(n)}));return!t.length&&Number(e.quantity)>0&&t.push({id:String(e.id)+`-unmapped-size`,group:`Group 1`,name:``,number:``,size:``,quantity:Number(e.quantity)}),{...e,artwork:e.artwork?.length?e.artwork:e.image?[{url:e.image}]:[],roster:t,groupNames:e.groupNames?.length?e.groupNames:[`Group 1`]}}function ae(e){return e?.status===`Preliminary Order`&&e.data?.customerReorder===!0&&!e.data.customerReorderSubmittedAt}function E(e,t){let n=(e.roster||Object.entries(e.sizes||{}).map(([e,t])=>({id:crypto.randomUUID(),group:`Group 1`,name:``,number:``,size:e,quantity:t}))).map(e=>({...e,size:t[e.size]||e.size})),r={};for(let e of n)r[e.size]=(r[e.size]||0)+Number(e.quantity);return{...e,roster:n,sizes:r,quantity:n.reduce((e,t)=>e+Number(t.quantity),0)}}function oe({order:e,item:t,onSaved:n,disabled:r=!1,showSummary:i=!1}){let[a,o]=(0,y.useState)(null),[l,u]=(0,y.useState)({}),[d,f]=(0,y.useState)(``),[p,m]=(0,y.useState)(!1),[h,_]=(0,y.useState)(!1);(0,y.useEffect)(()=>{let n=!0;return o(null),c(`forged/size-mapping/`+e.id).then(e=>{if(!n)return;let r=e.find(e=>e.itemId===t.id);o(r),u(Object.fromEntries((r?.rows||[]).map(e=>[e.source,e.target]))),_(!1),f(``)}).catch(e=>{n&&f(e.message)}),()=>{n=!1}},[e.id,e.version,t.id]);let b=a?.rows.filter(e=>!a.options.includes(e.source))||[];async function x(){m(!0),f(``);try{let r=e.data.items.map(e=>e.productId===t.productId?E(e,l):e);await c(`records/`+e.id,`PATCH`,{version:e.version,data:{...e.data,items:r}});let i=await c(`records/`+e.id);_(!1),n(i)}catch(e){f(e.message)}finally{m(!1)}}return(0,v.jsxs)(`section`,{style:{width:`100%`,marginTop:16},"aria-label":`Size mapping for `+t.name,children:[(0,v.jsx)(g,{active:h,keepsDraft:!1}),(0,v.jsx)(`h3`,{style:{background:`#e6edf4`,padding:`12px 16px`,margin:`0 0 12px`},children:`Size Mapping`}),(0,v.jsx)(s,{error:d}),a?.catalogName&&(0,v.jsxs)(`p`,{children:[(0,v.jsx)(`strong`,{children:`Catalog product:`}),` `,a.catalogName,a.catalogSku?` · `+a.catalogSku:``]}),!a&&!d?(0,v.jsx)(`p`,{children:`Checking garment sizesâ¦`}):a&&!a.options.length?(0,v.jsx)(`p`,{role:`alert`,style:{color:`#D30000`},children:`Add sizes to this garmentâs catalog size menu before continuing.`}):a&&a.rows.length?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`p`,{children:`Review the imported sizes and their catalog size mapping. Adjust any mapping before applying it.`}),a.rows.map(e=>(0,v.jsxs)(`label`,{style:{display:`block`,marginBottom:12},children:[(0,v.jsx)(`strong`,{style:{color:l[e.source]?void 0:`#D30000`},children:e.source}),` · `,e.quantity,` items`,(0,v.jsxs)(`select`,{"aria-label":`Map size `+e.source+` for `+t.name,style:{display:`block`,width:`100%`,maxWidth:360,marginTop:6},value:l[e.source]||``,disabled:r||p,onChange:t=>{u({...l,[e.source]:t.target.value}),_(!0)},children:[(0,v.jsx)(`option`,{value:``,children:`Select garment size`}),a.options.map(e=>(0,v.jsx)(`option`,{children:e},e))]})]},e.source)),(0,v.jsx)(`button`,{className:`pa-btn`,type:`button`,disabled:r||p||a.rows.some(e=>!l[e.source])||!h&&!b.length,onClick:()=>void x(),children:p?`Savingâ¦`:`Apply Size Mapping`}),(0,v.jsx)(`p`,{className:`pa-muted`,children:`Quantities are combined by size. The total stays the same.`})]}):a?(0,v.jsx)(`p`,{children:`All imported sizes match this garment.`}):null,i&&(0,v.jsxs)(`table`,{className:`pa-table`,style:{width:`100%`,marginTop:12},children:[(0,v.jsx)(`thead`,{children:(0,v.jsxs)(`tr`,{children:[(0,v.jsx)(`th`,{children:`Size`}),(0,v.jsx)(`th`,{children:`Quantity`})]})}),(0,v.jsx)(`tbody`,{children:Object.entries(t.sizes||{}).map(([e,t])=>(0,v.jsxs)(`tr`,{children:[(0,v.jsx)(`td`,{children:e}),(0,v.jsx)(`td`,{children:Number(t)})]},e))}),(0,v.jsx)(`tfoot`,{children:(0,v.jsxs)(`tr`,{children:[(0,v.jsx)(`th`,{children:`Total Count`}),(0,v.jsx)(`td`,{children:t.quantity})]})})]})]})}
2function se({item:e,onChange:t,disabled:n=!1,readOnly:r=!1}){let[i,a]=(0,y.useState)({buttonColor:[],embroideryColor:[]}),[o,l]=(0,y.useState)(!r),[u,p]=(0,y.useState)(``);function h(){l(!0),p(``),c(`garment-colors`).then(e=>a(e.banks)).catch(e=>p(e.message)).finally(()=>l(!1))}return(0,y.useEffect)(()=>{r||h()},[r]),(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(s,{error:u}),u&&(0,v.jsx)(`button`,{className:`pa-btn pa-secondary`,type:`button`,onClick:h,children:`Retry colors`}),(0,v.jsx)(`div`,{className:`pa-garment-color-grid`,children:m(e).map(a=>{let s=String(e.forgedFabrics?.[a.key]||``),c=s.trim(),l=d(s),u=!!f(e,a.key),p=i[a.key].filter(e=>e.active),m=p.find(e=>e.name.toLowerCase()===c.toLowerCase()),h=n=>t({...e.forgedFabrics,[a.key]:n});return(0,v.jsxs)(`div`,{className:`pa-garment-color`,children:[(0,v.jsxs)(`label`,{children:[(0,v.jsxs)(`strong`,{style:{color:u?void 0:`#D30000`},children:[a.label,` *`]}),l?(0,v.jsx)(`input`,{"aria-label":a.label+` Pantone reference`,"aria-required":`true`,"aria-invalid":!u,disabled:n||r,maxLength:92,value:s.replace(/^pantone\s?/i,``),placeholder:`e.g. 186 C or 19-1664 TCX`,onChange:e=>h(`Pantone `+e.target.value)}):(0,v.jsxs)(`select`,{"aria-label":a.label,"aria-required":`true`,"aria-invalid":!u,disabled:n||r||o,value:m?.name||c,onChange:e=>h(e.target.value),children:[(0,v.jsx)(`option`,{value:``,children:o?`Loading colorsâ¦`:`Select color`}),p.map(e=>(0,v.jsx)(`option`,{value:e.name,children:e.name},e.id)),c&&!m&&(0,v.jsxs)(`option`,{value:c,children:[c,` (Saved color)`]})]})]}),!r&&(0,v.jsx)(`button`,{type:`button`,className:`pa-color-mode-link`,disabled:n,"aria-label":(l?`Choose a listed color for `:`Enter a Pantone color for `)+a.label,onClick:e=>{let t=e.currentTarget.parentElement;h(l?``:`Pantone `),requestAnimationFrame(()=>(t?.querySelector(`input,select`))?.focus())},children:l?`Choose a listed color`:`Enter a Pantone color`}),!u&&(0,v.jsxs)(`span`,{className:`pa-garment-color-error`,children:[l?`Enter a Pantone reference.`:`Select a color or enter a Pantone reference.`,` Required before SEND for Approval.`]})]},a.key)})})]})}function ce(){let e=Promise.resolve();return function(t){let n=e.then(t,t);return e=n.catch(()=>{}),n}}function le(e,t=!1){for(let t of[`buttonColor`,`embroideryColor`]){let n=e.forgedFabrics?.[t];if(n!==void 0&&(typeof n!=`string`||n.length>100))throw Error(`Garment colors must be text of up to 100 characters.`)}let n=e.groupNames||[...new Set((e.roster||[]).map(e=>e.group||`Group 1`))];if(!Array.isArray(n)||n.length>200||n.some(e=>typeof e!=`string`||!t&&!e.trim()||e.length>200)||!t&&new Set(n).size!==n.length)throw Error(`Use unique group names of up to 200 characters.`);let r=(e.roster||[]).map((t,n)=>({...t,id:t.id||String(e.id)+`-`+n,group:t.group??`Group 1`,name:String(t.name||``),number:String(t.number||``)}));if(r.length>5e3)throw Error(`Use no more than 5,000 roster rows.`);if(new Set(r.map(e=>e.id)).size!==r.length||r.some(e=>typeof e.id!=`string`||!e.id||e.id.length>200))throw Error(`Use unique roster row identifiers.`);let i=new Map,a=0,o=!1;for(let e of r){if([e.name,e.number,e.size].some(e=>typeof e!=`string`||e.length>200)||typeof e.quantity!=`number`||!Number.isFinite(e.quantity))throw Error(`Invalid roster data`);if(!n.includes(e.group)||!Number.isSafeInteger(e.quantity)||e.quantity<1||typeof e.size!=`string`||!e.size.trim()||[e.name,e.number,e.size].some(e=>e.length>200)){if(!t)throw Error(`Every roster row needs a group, size, and positive whole quantity.`);o=!0;continue}a+=e.quantity,i.set(e.size,(i.get(e.size)||0)+e.quantity)}if(a>1e5&&!t)throw Error(`A product can contain at most 100,000 units.`);if(e.productNote!==void 0&&(typeof e.productNote!=`string`||e.productNote.length>1e4))throw Error(`Product notes must be 10,000 characters or less.`);return{...e,groupNames:n,roster:r,quantity:a,sizes:Object.fromEntries(i),image:e.artwork?.[0]?.url||``,artwork:(e.artwork||[]).map((e,t)=>({...e,position:t})),detailsPending:o||a>1e5||!a||!e.artwork?.length}}function ue(e,t=`,`){let n=[],r=[],i=``,a=!1;for(let o=0;o<e.length;o++){let s=e[o];s===`"`?a&&e[o+1]===`"`?(i+=`"`,o++):a=!a:s===t&&!a?(r.push(i),i=``):(s===` 3`||s===`\r`)&&!a?(s===`\r`&&e[o+1]===` 4`&&o++,r.push(i),n.push(r),r=[],i=``):i+=s}if(a)throw Error(`The CSV contains an unclosed quoted field.`);return r.push(i),r.some(Boolean)&&n.push(r),n}var D=[`name`,`number`,`size`,`quantity`,`group`],O=e=>String(e??``).trim(),k=e=>O(e).toLowerCase().replace(/[^a-z0-9]/g,``),de={name:[`proname`,`name`,`playername`,`itemname`,`fullname`,`athletename`],number:[`pronumber`,`number`,`jerseynumber`,`playernumber`,`uniformnumber`,`jerseyno`,`no`],size:[`size`,`uniformsize`,`shirtsize`,`jerseysize`],quantity:[`quantity`,`qty`,`
4count`,`units`],group:[`group`,`groupname`,`team`,`teamname`]},A=e=>JSON.stringify(e.map(k));function j(e,t){return Object.fromEntries(D.map(n=>{let r=t?.[n];if(Number.isInteger(r)&&r>=-1&&r<e.length)return[n,r];let i=e.map((e,t)=>de[n].includes(k(e))?t:-1).filter(e=>e>=0);return[n,i.length===1?i[0]:-1]}))}function M(e){let t=e.trim().toLowerCase().replace(/\bsize\b\s*:?\s*/g,``).replace(/[\s._-]+/g,``),n=``,r=t.match(/^(adult|youth)/),i=t.match(/(adult|youth)$/);r?(n=r[1][0],t=t.slice(r[0].length)):i?(n=i[1][0],t=t.slice(0,-i[0].length)):/^[ay](?:x|[2-6]|s|m|l)/.test(t)&&(n=t[0],t=t.slice(1));let a={s:`s`,sm:`s`,sml:`s`,small:`s`,m:`m`,md:`m`,med:`m`,medium:`m`,l:`l`,lg:`l`,lrg:`l`,large:`l`,xs:`xs`,xsmall:`xs`,extrasmall:`xs`,xl:`xl`,xlarge:`xl`,extralarge:`xl`};if(a[t])return{category:n,size:a[t]};let o=t.match(/^([2-6])x(?:l|large)?$/);if(o)return{category:n,size:o[1]+`xl`};let s=t.match(/^(x{2,6})(?:l|large)$/);if(s)return{category:n,size:s[1].length+`xl`};let c=t.match(/^((?:extra){2,6})large$/);return c?{category:n,size:c[1].length/5+`xl`}:null}function N(e,t){let n=e.trim().toLowerCase();if(!n)return[];let r=M(e),i=[...new Set(t)];return r?i.filter(e=>{let t=M(e);return t?.size===r.size&&(!r.category||t.category===r.category)}):i.filter(e=>e.trim().toLowerCase()===n)}function P(e,t){let n=N(e,t);return n.length===1?n[0]:``}function F(e,t,n,r){return e.slice(1).map((e,t)=>({row:e,index:t})).filter(({row:e})=>e.some(e=>O(e)!==``)).map(({row:e,index:i})=>{let a=n=>O(e[t[n]]),o=a(`size`),s=a(`group`);return{id:String(i),sourceRow:i+2,name:a(`name`),number:a(`number`),quantity:t.quantity<0?`1`:a(`quantity`),size:P(o,n),sourceSize:o,group:t.group<0?r:s,sourceGroup:t.group<0?r:s,excluded:!1}})}function I(e,t,n=[]){let r=e.filter(e=>!e.excluded),i={},a=0;for(let e of r){let n=[],r=Number(e.quantity);!e.quantity.trim()||!Number.isSafeInteger(r)||r<1||r>1e5?n.push(`Enter a positive whole quantity.`):a+=r,(!e.size||!t.includes(e.size))&&n.push(`Choose an available size.`),(!e.group.trim()||e.group.length>200)&&n.push(`Enter a team of 1â200 characters.`),(e.name.length>200||e.number.length>200)&&n.push(`Name and Number must be 200 characters or less.`),n.length&&(i[e.id]=n)}let o=[];return r.length||o.push(`Include at least one row.`),r.length+n.length>5e3&&o.push(`This product can contain at most 5,000 roster rows.`),a+n.reduce((e,t)=>e+t.quantity,0)>1e5&&o.push(`This product can contain at most 100,000 items.`),new Set([...n.map(e=>e.group),...r.map(e=>e.group.trim())]).size>200&&o.push(`Use no more than 200 teams.`),{active:r,errors:i,quantity:a,teams:new Set(r.map(e=>e.group.trim()).filter(Boolean)).size,issueCount:Object.keys(i).length,globalErrors:o}}function fe(e,t=!0,n=!0){return{...e,name:t?e.name:``,number:n?e.number:``}}function L(e,t,n=!0,r=!0){return[`name`,`number`].filter(i=>{if(i===`name`?n:r)return!1;let a=new Set([t[i],...(e[0]||[]).flatMap((e,t)=>j([e])[i]===0?[t]:[])]);return a.delete(-1),e.slice(1).some(e=>[...a].some(t=>String(e[t]??``).trim()!==``))})}function R({hasName:e=!0,hasNumber:t=!0,row:n,sizes:r,teams:i,matchingSizeCount:a,onApplySize:o,onSave:c,onExclude:l}){let[u,d]=(0,y.useState)(n),[f,p]=(0,y.useState)(``),[m,h]=(0,y.useState)(!1),g=(0,y.useRef)(n);(0,y.useEffect)(()=>{let e=g.current;d(t=>({...t,...Object.fromEntries(Object.entries(n).filter(([t,n])=>n!==e[t]))})),g.current=n,p(``)},[n]);let _=I([u],r).errors[u.id]||[],b=Number(u.quantity),x={quantity:!u.quantity.trim()||!Number.isSafeInteger(b)||b<1||b>1e5,name:u.name.length>200,number:u.number.length>200,size:!u.size||!r.includes(u.size),group:!u.group.trim()||u.group.length>200};function S(){if(_.length){p(_.join(` `));return}c({...u,name:u.name.trim(),number:u.number.trim(),group:u.group.trim(),teamOverride:n.teamOverride||u.group.trim()!==n.group})}return(0,v.jsxs)(`section`,{className:`pa-import-row-correction`,"aria-label":`Correct spreadsheet row `+n.sourceRow,children:[(0,v.jsxs)(`h4`,{children:[`Spreadsheet row `,n.sourceRow,n.name?` â `+n.name:``]}),(0,v.jsx)(`p`,{children:_.length?_.join(` `):`Ready to save corrections.`}),(0,v.jsx)(s,{error:f}),(0,v.jsxs)(`div`,{className:`pa-import-column-grid`,children:[(0,v.jsxs)(`label`,{children:[(0,v.jsx)(`span`,{className:x.quantity?`pa-correction-label-error`:void 0,children:`Quantity (required)`}),(0,v.jsx)(`input`,{"aria-invalid":x.quantity,"aria-label":`Quantity for row `+n.sourceRow,inputMode:`numeric`,value:u.quantity,onChange:e=>d({...u,quantity:e.target.value})})]}),e&&(0,v.jsxs)(`label`,{children:[(0,v.jsx)(`span`,{className:x.name?`pa-correction-label-error`:void 0,children:`N
4ame (optional)`}),(0,v.jsx)(`input`,{"aria-invalid":x.name,"aria-label":`Name for row `+n.sourceRow,maxLength:200,value:u.name,onChange:e=>d({...u,name:e.target.value})})]}),t&&(0,v.jsxs)(`label`,{children:[(0,v.jsx)(`span`,{className:x.number?`pa-correction-label-error`:void 0,children:`Number (optional)`}),(0,v.jsx)(`input`,{"aria-invalid":x.number,"aria-label":`Number for row `+n.sourceRow,maxLength:200,value:u.number,onChange:e=>d({...u,number:e.target.value})})]}),(0,v.jsxs)(`label`,{children:[(0,v.jsx)(`span`,{className:x.size?`pa-correction-label-error`:void 0,children:`Size (required)`}),(0,v.jsxs)(`select`,{"aria-invalid":x.size,"aria-label":`Size for row `+n.sourceRow,value:u.size,onChange:e=>{d({...u,size:e.target.value}),h(!!e.target.value&&e.target.value!==n.size&&a>0)},children:[(0,v.jsx)(`option`,{value:``,children:`Choose size`}),r.map(e=>(0,v.jsx)(`option`,{children:e},e))]}),n.sourceSize&&(0,v.jsxs)(`small`,{children:[`Uploaded value: `,n.sourceSize]})]}),(0,v.jsxs)(`label`,{children:[(0,v.jsx)(`span`,{className:x.group?`pa-correction-label-error`:void 0,children:`Team (required)`}),(0,v.jsx)(`input`,{"aria-invalid":x.group,"aria-label":`Team for row `+n.sourceRow,list:`row-team-options-`+n.id,maxLength:200,value:u.group,onChange:e=>d({...u,group:e.target.value})}),(0,v.jsx)(`datalist`,{id:`row-team-options-`+n.id,children:i.map(e=>(0,v.jsx)(`option`,{value:e},e))})]})]}),m&&a>0&&(0,v.jsxs)(`div`,{className:`pa-size-reuse`,role:`group`,"aria-label":`Apply size mapping for row `+n.sourceRow,children:[(0,v.jsxs)(`p`,{children:[`Apply `,(0,v.jsx)(`strong`,{children:u.size}),` to the `,a,` other `,a===1?`row`:`rows`,` with uploaded size `,(0,v.jsx)(`strong`,{children:n.sourceSize||`(blank)`}),` that still `,a===1?`needs`:`need`,` a size?`]}),(0,v.jsxs)(`div`,{className:`pa-row-correction-actions`,children:[(0,v.jsx)(`button`,{type:`button`,className:`pa-btn`,onClick:()=>{h(!1),o({...u,teamOverride:n.teamOverride||u.group.trim()!==n.group})},children:`Apply to all matching rows`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>h(!1),children:`Only this row`})]})]}),(0,v.jsxs)(`div`,{className:`pa-row-correction-actions`,children:[(0,v.jsxs)(`button`,{type:`button`,className:`pa-btn`,disabled:m&&a>0,onClick:S,children:[`Save row `,n.sourceRow]}),(0,v.jsxs)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:l,children:[`Exclude row `,n.sourceRow,` from import`]})]})]})}var z=e=>e.trim().toLocaleLowerCase().replace(/\s+/g,``),pe=e=>e.trim().replace(/\s+/g,` `);function me(e,t=!1){let n=[...e].sort((e,t)=>{let n=e=>(/\s/.test(e)?4:0)+(/[A-Z]/.test(e)&&/[a-z]/.test(e)?2:0);return n(t)-n(e)||e.localeCompare(t)})[0];return t&&n===n.toLowerCase()?n.replace(/(^|\s)\p{L}/gu,e=>e.toUpperCase()):n}function B(e,t){let n=Array.from({length:t.length+1},(e,t)=>t);for(let r=1;r<=e.length;r++){let i=[r];for(let a=1;a<=t.length;a++)i[a]=Math.min(i[a-1]+1,n[a]+1,n[a-1]+(e[r-1]===t[a-1]?0:1));if(Math.min(...i)>2)return 3;n=i}return n[t.length]}function V(e,t){if(JSON.stringify(e.match(/\d+/g)||[])!==JSON.stringify(t.match(/\d+/g)||[]))return!0;let n=e=>pe(e.replace(/([a-z])([A-Z])/g,`$1 $2`)).toLowerCase().match(/^(.*?)\s+([a-z]{1,2})$/),r=n(e),i=n(t);return r&&i&&z(r[1])===z(i[1])&&r[2]!==i[2]?!0:!!(r&&z(r[1])===z(t)||i&&z(i[1])===z(e))}function H(e,t){let n=new Map;for(let t of e)n.set(t,(n.get(t)||0)+1);let r=new Map;for(let[e,t]of n){let n=z(e);r.has(n)||r.set(n,{names:[],count:0,existing:[]});let i=r.get(n);i.names.push(pe(e)),i.count+=t}for(let e of t.filter(e=>e.trim())){let t=z(e);r.has(t)||r.set(t,{names:[],count:0,existing:[]}),r.get(t).existing.push(e)}let i=[...r].map(([e,t])=>({key:e,count:t.count,known:!!t.existing.length,name:me(t.existing.length?t.existing:t.names,!t.existing.length)})).sort((e,t)=>Number(t.known)-Number(e.known)||t.count-e.count||e.name.localeCompare(t.name));return[...n].map(([e,t])=>{let n=i.findIndex(t=>t.key===z(e)),r=i[n],a=r.known?[]:i.slice(0,n).filter(e=>!V(r.name,e.name)&&r.key.length>=4&&r.key.length<=200&&Math.abs(r.key.length-e.key.length)<=2).map(e=>({name:e.name,distance:B(r.key,e.key)})).filter(e=>e.distance<=(r.key.length>=8?2:1)).sort((e,t)=>
4e.distance-t.distance).slice(0,3).map(e=>e.name);return{source:e,count:t,destination:r.name,suggestions:a,needsReview:a.length>0}})}function U(e){let t=new Map;for(let n of e){let e=n.destination.trim();e&&t.set(e,(t.get(e)||0)+n.count)}return[...t].map(([e,t])=>({name:e,count:t}))}var he=`pa-import-columns-v1`,ge={name:`Name`,number:`Number`,size:`Size`,quantity:`Quantity`,group:`Team`};function _e({hasName:e=!0,hasNumber:t=!0,sizes:n,groups:a,activeGroup:o,existing:c,onClose:l,onImport:u}){let[d,f]=(0,y.useState)([]),[p,m]=(0,y.useState)(()=>j([])),[h,g]=(0,y.useState)([]),[_,b]=(0,y.useState)(``),[x,S]=(0,y.useState)(!1),[C,ee]=(0,y.useState)(``),[w,T]=(0,y.useState)(!0),[te,ne]=(0,y.useState)(!1),[re,ie]=(0,y.useState)({}),[ae,E]=(0,y.useState)([]),[oe,se]=(0,y.useState)(!0),[ce,le]=(0,y.useState)(null),[O,k]=(0,y.useState)(``),[de,M]=(0,y.useState)(!1),P=L(d,p,e,t),[pe,me]=(0,y.useState)(0),B=(0,y.useRef)(null),V=(0,y.useRef)(0),_e=(0,y.useRef)(null),W=[...new Set(n.filter(Boolean))],G=I(h,W,c);(0,y.useEffect)(()=>{let e=document.activeElement,t=document.body.style.overflow;document.body.style.overflow=`hidden`,B.current?.querySelector(`button`)?.focus();let n=e=>{if(e.key===`Escape`){e.preventDefault(),l();return}if(e.key!==`Tab`)return;let t=Array.from(B.current?.querySelectorAll(`button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea,summary,a[href]`)||[]).filter(e=>e.getClientRects().length>0);e.shiftKey&&document.activeElement===t[0]?(e.preventDefault(),t.at(-1)?.focus()):!e.shiftKey&&document.activeElement===t.at(-1)&&(e.preventDefault(),t[0]?.focus())},r=B.current;return r?.addEventListener(`keydown`,n),()=>{V.current++,document.body.style.overflow=t,r?.removeEventListener(`keydown`,n),e?.focus()}},[]),(0,y.useEffect)(()=>{d.length&&_e.current?.focus()},[d]);function ve(e){let t=e.slice(Math.max(0,e.findIndex(e=>e.some(e=>String(e??``).trim()!==``)))),n=t.filter(e=>e.some(e=>String(e??``).trim()!==``));if(n.length<2||n.length>5001)throw Error(`Include column headers and between 1 and 5,000 data rows.`);if(n[0].length>100)throw Error(`Use a spreadsheet with at most 100 columns.`);let r;try{r=JSON.parse(localStorage.getItem(he)||`{}`)[A(t[0])]}catch{}let i=j(t[0],r);M(!1),f(t),m(i),K(t,i),ne(!!r),ie({}),b(``)}async function ye(e){if(!e)return;let t=++V.current;S(!0),b(``);try{if(e.size>2097152)throw Error(`Choose an Excel or CSV file up to 2 MB.`);let n;if(e.name.toLowerCase().endsWith(`.csv`))n=ue(await e.text());else if(e.name.toLowerCase().endsWith(`.xlsx`)){let{readSheet:t}=await r(async()=>{let{readSheet:e}=await import(`./browser-CQixfpkX.js`);return{readSheet:e}},__vite__mapDeps([0,1]));n=await t(e)}else throw Error(`Use an .xlsx or .csv file.`);t===V.current&&ve(n)}catch(e){t===V.current&&b(e.message)}finally{t===V.current&&S(!1)}}function be(){try{if(C.length>2097152)throw Error(`Paste up to 2 MB of spreadsheet data.`);ve(ue(C,C.includes(` `)?` `:`,`))}catch(e){b(e.message)}}function K(n,r){let i=F(n,r,W,o).map(n=>fe(n,e,t)),s=r.group>=0?H(i.map(e=>e.sourceGroup).filter(Boolean),a):[],c=new Map(s.map(e=>[e.source,e.destination]));g(i.map(e=>({...e,group:c.get(e.sourceGroup)||e.group}))),E(s),se(!0),le(null),k(``),me(0)}function q(e,t){let n=t.trim();if(!n||n.length>200){b(`Enter a team name of 1â200 characters.`);return}E(t=>t.map(t=>t.source===e?{...t,destination:n,needsReview:!1}:t)),g(t=>t.map(t=>t.sourceGroup===e&&!t.teamOverride?{...t,group:n}:t)),le(null),k(``),b(``)}function xe(e){M(!1),m(e),K(d,e),ie({}),b(``)}function J(n=!1){try{if(G.issueCount||G.globalErrors.length||Z.length)throw Error(`Resolve the highlighted issues before importing.`);if(P.length&&!n){M(!0),requestAnimationFrame(()=>B.current?.querySelector(`[aria-label="Confirm excluded personalization"]`)?.focus());return}u(G.active.map(n=>({id:crypto.randomUUID(),name:e?n.name.trim():``,number:t?n.number.trim():``,size:n.size,quantity:Number(n.quantity),group:n.group.trim()})));try{let e=JSON.parse(localStorage.getItem(he)||`{}`),t=Object.entries(e).filter(([e])=>e!==A(d[0])).slice(-19);w&&t.push([A(d[0]),p]),localStorage.setItem(he,JSON.stringify(Object.fromEntries(t)))}catch{}}catch(e){b(e.message)}}let Y=[...new Set(h.filter(e=>!e.excluded&&!e.size).map(e=>e.sourceSize))],X=ae.map(e=>({...e,count:G.active.filter(t=>!t.teamOverride&&t.sourceGroup===e.source).length})).filter(e=>e.count>0),Z=X.filter(e=>e.needsReview),Se=U(G.active.map(e=>({source:e.sourceGroup,count:1,destination:e.group,suggestions:[],needsReview:!1}))),Ce=[...new Set([...a,...ae.map(e=>e.destination),...ae.map(e=>e.source),...G.active.map(e=>
4e.group)])].filter(Boolean).sort((e,t)=>e.localeCompare(t)),Q=h.filter(e=>!!G.errors[e.id]),we=h.filter(e=>e.excluded),$=Math.min(pe,Math.max(0,Math.ceil(Q.length/5)-1));function Te(e){g(t=>t.map(t=>t.id===e.id?e:t)),b(``)}return(0,v.jsx)(`div`,{className:`pa-import-overlay`,children:(0,v.jsxs)(`section`,{ref:B,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`import-title`,className:`pa-import-dialog`+(d.length?` pa-import-review`:``)+(Q.length?` pa-import-has-corrections`:``),children:[(0,v.jsxs)(`header`,{className:`pa-import-header`,children:[(0,v.jsx)(`h2`,{id:`import-title`,children:d.length?`Review and Import`:`Import roster`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-import-close`,"aria-label":`Close import`,onClick:l,children:`Ã`})]}),(0,v.jsxs)(`div`,{className:`pa-import-body`,children:[(0,v.jsx)(s,{error:_}),de&&(0,v.jsxs)(`section`,{className:`pa-import-fixes`,role:`alert`,tabIndex:-1,"aria-label":`Confirm excluded personalization`,children:[(0,v.jsx)(`h3`,{children:`Spreadsheet data will not be imported`}),(0,v.jsxs)(`p`,{children:[`There is `,P.map(e=>e===`name`?`name`:`number`).join(` and `),` data in the spreadsheet, but `,P.length===2?`Names and Numbers are`:P[0]===`name`?`Names are`:`Numbers are`,` set to No for this product. This data will not be imported. Do you want to continue?`]}),(0,v.jsxs)(`div`,{className:`pa-actions`,children:[(0,v.jsx)(`button`,{type:`button`,className:`pa-btn`,onClick:()=>{M(!1),J(!0)},children:`Yes, import allowed data`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>M(!1),children:`No, return to review`})]})]}),d.length?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`h3`,{ref:_e,tabIndex:-1,className:`pa-import-summary`,children:[G.active.length,` `,G.active.length===1?`row`:`rows`,` · `,G.quantity,` `,G.quantity===1?`item`:`items`,` · `,G.teams,` `,G.teams===1?`team`:`teams`,` · `,G.issueCount+G.globalErrors.length+Z.length,` `,G.issueCount+G.globalErrors.length+Z.length===1?`issue`:`issues`,` to resolve`]}),G.globalErrors.map(e=>(0,v.jsx)(s,{error:e},e)),!!Q.length&&(0,v.jsxs)(`section`,{className:`pa-import-row-issues`,"aria-labelledby":`row-issues-title`,children:[(0,v.jsxs)(`h3`,{id:`row-issues-title`,children:[`Rows needing correction (`,Q.length,`)`]}),(0,v.jsx)(`p`,{children:`Enter the missing or invalid values below, or exclude a row from this import. Only enabled Name and Number fields are available. Showing up to 5 problem rows at a time.`}),Q.slice($*5,$*5+5).map(n=>(0,v.jsx)(R,{hasName:e,hasNumber:t,row:n,sizes:W,teams:Ce,matchingSizeCount:h.filter(e=>e.id!==n.id&&!e.excluded&&e.sourceSize===n.sourceSize&&!W.includes(e.size)).length,onApplySize:e=>{W.includes(e.size)&&(g(t=>t.map(t=>t.id===e.id?e:!t.excluded&&t.sourceSize===e.sourceSize&&!W.includes(t.size)?{...t,size:e.size}:t)),b(``))},onSave:Te,onExclude:()=>{g(e=>e.map(e=>e.id===n.id?{...e,excluded:!0}:e)),b(``)}},n.id)),Q.length>5&&(0,v.jsxs)(`div`,{className:`pa-row-correction-actions`,children:[(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,disabled:$===0,onClick:()=>me($-1),children:`Previous problem rows`}),(0,v.jsxs)(`span`,{children:[$+1,` / `,Math.ceil(Q.length/5)]}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,disabled:($+1)*5>=Q.length,onClick:()=>me($+1),children:`Next problem rows`})]})]}),!!we.length&&(0,v.jsxs)(`p`,{role:`status`,children:[we.length,` `,we.length===1?`row excluded`:`rows excluded`,` from import. `,(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>{g(e=>e.map(e=>({...e,excluded:!1}))),me(0)},children:`Restore excluded rows`})]}),(0,v.jsxs)(`details`,{className:`pa-import-columns`,open:p.size<0||void 0,children:[(0,v.jsxs)(`summary`,{children:[`Column matching`,te?` · saved choices applied`:``]}),(0,v.jsx)(`p`,{children:`Changing a column resets row corrections, exclusions, and size and team matching.`}),(0,v.jsx)(`div`,{className:`pa-import-column-grid`,children:D.filter(n=>(n!==`name`||e)&&(n!==`number`||t)).map(e=>(0,v.jsxs)(`label`,{children:[ge[e],e===`size`?` (required)`:``,(0,v.jsxs)(`select`,{"aria-label":ge[e]+` column`,value:p[e],onChange:t=>xe({...p,[e]:Number(t.target.value)}),children:[(0,v.jsx)(`option`,{value:`-1`,children:e===`quantity`?`1 per row`:e===`group`?`Current group`:e===`size`?`Choose column`:`Not mapped`}),d[0].map((e,t)=>(0,v.jsx)(`option`,{value:t,children:String(e||`Column `+(t+1))},t))]})]},e))})]}),(0,v.jsxs)(`p`,{role:`status`,children:[G.active.filter(e=>!!e.size).length,` of `,G.active.length,` rows have matched sizes`,Y.length?`. Only unclear sizes need review.`:`. No size matching needed.`]}),!!Y.length&&(0,v.jsxs)(`div`,{className:`pa-import-fixes`,children:[(0,v.jsxs)(`h3`,{children:[`Sizes needing review (`,Y.length,`)`]}),(0,v.jsx)(`p`,{children:`Clear matches are filled automatically. Choose once below to update every unresolved row with that size.`}),(0,v.jsx)(`div`,{className:`pa-import-column-grid`,children:Y.map(e=>(0,v.jsxs)(`label`,{children:[e||`Missing size`,(0,v.jsx)(`small`,{children:N(e,W).length>1?`More than one size could match.`:e?`No clear match found.`:`A size is required.`}),(0,v.jsxs)(`select`,{"aria-label":`Match size `+(e||`missing`),value:re[e]||``,onChange:t=>{let n=t.target.value;ie({...re,[e]:n}),g(t=>t.map(t=>t.sourceSize===e&&!t.size?{...t,size:n}:t))},children:[(0,v.jsx)(`option`,{value:``,children:`Choose size`}),N(e,W).length>1?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`optgroup`,{label:`Possible matches`,children:N(e,W).map(e=>(0,v.jsx)(`option`,{children:e},e))}),(0,v.jsx)(`optgroup`,{label:`Other sizes`,children:W.filter(t=>!N(e,W).includes(t)).map(e=>(0,v.jsx)(`option`,{children:e},e))})]}):W.map(e=>(0,v.jsx)(`option`,{children:e},e))]})]},e))})]}),p.group>=0&&(0,v.jsxs)(`section`,{className:`pa-import-teams`,"aria-labelledby":`team-matching-title`,children:[(0,v.jsx)(`h3`,{id:`team-matching-title`,children:`Team Matching`}),(0,v.jsxs)(`p`,{children:[Z.length?`${Z.length}
4 uploaded team ${Z.length===1?`name needs`:`names need`} confirmation.`:`All team names are matched.`,` Spacing and capitalization differences are combined automatically.`]}),(0,v.jsx)(`p`,{children:`Choose a destination for each uploaded team. Select the same destination to combine teams, or keep different destinations to leave them separate.`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>se(!oe),children:oe?`Show only uncertain matches`:`View all team mappings (${X.length})`}),(0,v.jsx)(`div`,{className:`pa-import-column-grid`,children:(oe?X:Z).map(e=>(0,v.jsxs)(`div`,{className:`pa-team-match`,children:[(0,v.jsx)(`strong`,{children:e.source}),(0,v.jsxs)(`span`,{children:[e.count,` `,e.count===1?`row`:`rows`]}),e.needsReview&&(0,v.jsxs)(`div`,{className:`pa-team-suggestions`,children:[(0,v.jsx)(`p`,{children:`Possible spelling match â confirm before combining:`}),e.suggestions.map(t=>(0,v.jsxs)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>q(e.source,t),children:[`Use `,t]},t)),(0,v.jsxs)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>q(e.source,e.destination),children:[`Keep `,e.destination,` separate`]})]}),(0,v.jsxs)(`label`,{children:[`Destination team`,(0,v.jsxs)(`select`,{"aria-label":`Destination team for `+e.source,value:ce===e.source?`new`:`team:`+e.destination,onChange:t=>{t.target.value===`new`?(le(e.source),k(``)):q(e.source,t.target.value.slice(5))},children:[Ce.map(e=>(0,v.jsx)(`option`,{value:`team:`+e,children:e},e)),(0,v.jsx)(`option`,{value:`new`,children:`Enter a new team nameâ¦`})]})]}),ce===e.source&&(0,v.jsxs)(`div`,{className:`pa-team-new`,children:[(0,v.jsxs)(`label`,{children:[`New team name`,(0,v.jsx)(`input`,{"aria-label":`New team name for `+e.source,value:O,maxLength:200,onChange:e=>k(e.target.value)})]}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn`,disabled:!O.trim(),onClick:()=>q(e.source,Ce.find(e=>z(e)===z(O))||O),children:`Use team name`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>{le(null),k(``)},children:`Cancel`})]})]},e.source))}),(0,v.jsxs)(`details`,{className:`pa-team-totals`,open:Se.length<=5,children:[(0,v.jsxs)(`summary`,{children:[`Resulting teams (`,Se.length,`)`,Z.length?` · awaiting confirmation`:``]}),(0,v.jsx)(`ul`,{children:Se.map(e=>(0,v.jsxs)(`li`,{children:[(0,v.jsx)(`strong`,{children:e.name}),` â `,e.count,` `,e.count===1?`row`:`rows`]},e.name))})]})]}),(0,v.jsxs)(`label`,{className:`pa-import-remember`,children:[(0,v.jsx)(`input`,{type:`checkbox`,checked:w,onChange:e=>T(e.target.checked)}),` Remember column choices for this format on this browser`]})]}):(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`label`,{className:`pa-import-file`,children:[`Excel or CSV file`,(0,v.jsx)(`input`,{type:`file`,accept:`.xlsx,.csv`,disabled:x,onChange:e=>void ye(e.target.files?.[0])})]}),(0,v.jsx)(`p`,{className:`pa-muted`,children:`Include column headers. Enabled Name and Number fields are optional; Quantity defaults to 1.`}),x&&(0,v.jsx)(`p`,{role:`status`,children:`Reading spreadsheetâ¦`}),(0,v.jsxs)(`details`,{className:`pa-import-paste`,children:[(0,v.jsx)(`summary`,{children:`Or paste rows from Excel`}),(0,v.jsxs)(`label`,{children:[`Spreadsheet rows`,(0,v.jsx)(`textarea`,{value:C,onChange:e=>ee(e.target.value),rows:6,placeholder:`Paste column headers and rows here`})]}),(0,v.jsx)(`button`,{className:`pa-btn`,disabled:x||!C.trim(),onClick:be,children:`Review rows`})]}),(0,v.jsx)(`button`,{className:`pa-import-template`,onClick:()=>i(`roster-template.csv`,[[`Quantity`,...e?[`pro_name`]:[],...t?[`pro_number`]:[],`Size`,`Team`],[1,...e?[`Player`]:[],...t?[`07`]:[],W[0]||`Adult Medium`,o]]),children:`Download CSV template`})]})]}),(0,v.jsx)(`footer`,{className:`pa-import-footer`,children:d.length>0?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`button`,{className:`pa-btn pa-secondary`,onClick:()=>{V.current++,f([]),g([]),ee(``),S(!1),b(``)},children:`Choose another file`}),(0,v.jsxs)(`button`,{className:`pa-btn`,disabled:!!G.issueCount||!!G.globalErrors.length||!!Z.length||ce!==null&&X.some(e=>e.source===ce),onClick:()=>J(),children:[`Import `,G.active.length,` `,G.active.length===1?`row`:`rows`]})]}):(0,v.jsx)(`button`,{className:`pa-btn pa-secondary`,onClick:l,children:`Cancel`})})]})})}function W({order:e,itemId:t,back:n,onSaved:r,customerMode:i=!1,readOnly:d=!1}){let f=e.data.items.find(e=>String(e.id)===t),b=f&&ie(f),[x,S]=(0,y.useState)(()=>b?ve({...b,groupNames:b.groupNames||[...new Set((b.roster||[]).map(e=>
4e.group||`Group 1`)),`Group 1`].filter((e,t,n)=>n.indexOf(e)===t)}):null),C=(0,y.useRef)(e),w=(0,y.useRef)(x),T=(0,y.useRef)(0),te=(0,y.useRef)(0),ne=(0,y.useRef)(ce()),[re,E]=(0,y.useState)(``),[ue,D]=(0,y.useState)(``),[O,k]=(0,y.useState)(``),[de,A]=(0,y.useState)(`Saved`),[j,M]=(0,y.useState)(!1),[N,P]=(0,y.useState)(!1),[F,I]=(0,y.useState)(x?.groupNames[0]||``),[L,R]=(0,y.useState)(null),[z,pe]=(0,y.useState)(``),[me,B]=(0,y.useState)([]),[V,H]=(0,y.useState)(``),[U,he]=(0,y.useState)(b?.rosterEntryDraft||{quantity:1,name:``,number:``,size:``}),[ge,W]=(0,y.useState)(``),[ye,be]=(0,y.useState)(!1);(0,y.useEffect)(()=>{if(ee(b)){B([`Standard`]);return}if(b?.forgedFabrics&&!i){c(`forged/size-mapping/`+e.id).then(e=>B(e.find(e=>e.itemId===b.id)?.options||[])).catch(e=>k(e.message));return}if(i){c(`order-item-sizes/`+e.id+`?item=`+encodeURIComponent(t)).then(e=>B(e.sizes)).catch(e=>k(`Unable to load product sizes. Please reload the page. `+e.message));return}c(`records?kind=attribute`).then(e=>{B(e.find(e=>e.title.toLowerCase()===`size`&&e.status!==`Deleted`&&e.data.group===`Product`)?.data.values||[])}).catch(e=>k(e.message))},[]);function K(e){if(!d)try{let t=ve(e);w.current=t,T.current++,S(t),P(!0),A(`Waiting to saveâ¦`),k(``)}catch(e){k(e.message)}}async function q(e=w.current,n=T.current){if(n<=te.current)return;if(e.roster.some(e=>String(e.id).endsWith(`-unmapped-size`)&&!e.size.trim()))throw Error(`Choose a size for the existing quantity before saving.`);A(`Savingâ¦`);let a=C.current;if(!a.data.items.some(e=>String(e.id)===t))throw Error(`This product was removed. Return to the order.`);await c(i&&ae(a)?`customer-reorder/`+a.id:`records/`+a.id+(i?`/customer-edit`:``),`PATCH`,i?{version:a.version,itemId:t,groupNames:e.groupNames,roster:e.roster}:{version:a.version,data:{...a.data,items:a.data.items.map(n=>String(n.id)===t?e:n)}});let o=await c(`records/`+a.id);C.current=o,r(o),te.current=n,n===T.current?(P(!1),A(`Saved`)):A(`Waiting to saveâ¦`)}function xe(){return ne.current(()=>q()).catch(e=>{k(e.message),A(`Not saved`)})}if((0,y.useEffect)(()=>{if(!N||j||d)return;let e=x,t=T.current,n=setTimeout(()=>{ne.current(()=>q(e,t)).catch(e=>{k(e.message),A(`Not saved`)})},500);return()=>clearTimeout(n)},[x,j]),!x)return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`p`,{children:`Product not found.`}),(0,v.jsx)(`a`,{href:n,children:`Back to order`})]});let J=x.groupNames,Y=x.roster,X=x.artwork||[],Z=Y.filter(e=>e.group===F),Se=[...new Set([...me,...Y.map(e=>e.size)])];function Ce(e){if(e.preventDefault(),!J.length)return;if(!U.size.trim()){E(`Select a size before adding a quantity.`);return}E(``);let t={quantity:1,name:``,number:``,size:U.size};K({...x,roster:[...Y,{...U,name:x.hasName===!1?``:U.name,number:x.hasNumber===!1?``:U.number,id:crypto.randomUUID(),group:F}],rosterEntryDraft:t}),he(t)}function Q(e){e.size.trim()&&E(``),he(e),K({...w.current,rosterEntryDraft:e})}function we(e,t){K({...w.current,roster:w.current.roster.map(n=>n.id===e?{...n,...t}:n)})}function $(e){e.preventDefault();let t=z.trim(),n=w.current;if(!t){D(`Enter a group name.`);return}if(n.groupNames.some(e=>(L===`add`||e!==F)&&e.toLowerCase()===t.toLowerCase())){D(`A group with this name already exists. Choose a different name.`);return}if(L===`add`&&n.groupNames.length>=200){D(`Use no more than 200 groups.`);return}K({...n,groupNames:L===`add`?[...n.groupNames,t]:n.groupNames.map(e=>e===F?t:e),roster:L===`rename`?n.roster.map(e=>e.group===F?{...e,group:t}:e):n.roster}),I(t),H(``),R(null),D(``)}function Te(){let e=w.current,t=e.roster.filter(e=>e.group===F);if(!window.confirm(`Delete group "`+F+`"`+(t.length?` and its `+t.length+` roster row`+(t.length===1?``:`s`):``)+`? This cannot be undone.`))return;let n=e.groupNames.filter(e=>e!==F),r=e.groupNames.indexOf(F);K({...e,groupNames:n,roster:e.roster.filter(e=>e.group!==F)}),I(n[Math.min(r,n.length-1)]||``),H(``),R(null),D(``),E(``)}function Ee(){window.confirm(`Delete all groups and their roster rows from this product?`)&&(K({...w.current,groupNames:[],roster:[]}),I(``),H(``),R(null),D(``))}async function De(t){if(!t?.length)return;let n=Array.from(t);if(X.length+n.length>20||n.some(e=>![`image/png`,`image/jpeg`,`image/webp`].includes(e.type)||!e.size||e.size>10485760)){k(`Use up to 20 PNG, JPG, or WebP images, at most 10 MB each.`);return}M(!0),k(``);let i=[];try{await ne.current(()=>q());for(let t of n){let n=new FormData;n.append(`recordId`,String(e.id)),n.append(`file`,t);let a=await fetch(`/api/local/files`,{method:`POST`,body:n}),o=await a.json();if(!a.ok)throw Error(o.error||`Upload failed`);i.push({id:o.id,name:t.name,url:`/api/local/files/`+o.id}),C.current=await c(`records/`+e.id),r(C.current)}}catch(e){k(e.message)}finally{i.length&&K({...w.current,artwork:[...w.current.artwork,...i]}),M(!1)}}function Oe(e){e=e.map(e=>fe(e,w.current.hasName!==!1,w.current.hasNumber!==!1));let t=w.current,n=[...t.roster,...e],r=e.some(e=>e.group!==`Group 1`)&&!n.some(e=>e.group===`Group 1`),i=[...new Set([...t.groupNames,...e.map(e=>e.group)])].filter(e=>!r||e!==`Group 1`);if(t.roster.length+e.length>5e3)throw Error(`This product can contain at most 5,000 roster rows.`);if(i.length>200)throw Error(`Use no more than 200 teams.`);if([...t.roster,...e].reduce((e,t)=>
4e+t.quantity,0)>1e5)throw Error(`This product can contain at most 100,000 items.`);K(le({...t,groupNames:i,roster:[...t.roster,...e]},!0)),i.includes(F)||I(e[0]?.group||i[0]||``),be(!1),xe()}return d?(0,v.jsxs)(`div`,{className:`pa-new-order pa-item-detail`,children:[(0,v.jsxs)(`div`,{className:`pa-title-row`,children:[(0,v.jsxs)(`h1`,{children:[e.id,` â `,e.title,` : `,x.name]}),(0,v.jsx)(`a`,{className:`pa-btn pa-close-blue`,href:n.split(`#`)[0]+`#top`,children:`Close`})]}),(0,v.jsxs)(a,{title:`Artwork`,children:[(0,v.jsx)(h,{images:X,name:x.name}),x.sku&&(0,v.jsxs)(`p`,{children:[(0,v.jsx)(`strong`,{children:`Product SKU:`}),` `,x.sku]}),(0,v.jsx)(p,{value:x.fabricMaterial}),x.designId&&(0,v.jsxs)(`p`,{children:[(0,v.jsx)(`strong`,{children:`Design ID:`}),` `,x.designId]})]}),m(x).length>0&&(0,v.jsx)(a,{title:`Garment Specifications`,children:(0,v.jsx)(se,{item:x,readOnly:!0,onChange:()=>{}})}),(0,v.jsx)(a,{title:`Design Name`,children:(0,v.jsx)(`p`,{children:x.designName||`Not specified`})}),(0,v.jsx)(a,{title:`Summary Breakdown`,children:(0,v.jsx)(_,{item:x,orderId:e.id})}),J.map(e=>(0,v.jsx)(a,{title:e,children:(0,v.jsx)(o,{rows:Y.filter(t=>t.group===e),columns:[{key:`quantity`,title:`Quantity`},{key:`name`,title:`Name`},{key:`number`,title:`Number`},{key:`size`,title:`Size`}].filter(e=>(e.key!==`name`||x.hasName!==!1)&&(e.key!==`number`||x.hasNumber!==!1))})},e)),x.productNote&&(0,v.jsx)(a,{title:`Product Notes`,children:(0,v.jsx)(`p`,{style:{whiteSpace:`pre-wrap`},children:x.productNote})}),(0,v.jsx)(`div`,{className:`pa-detail-close-footer`,children:(0,v.jsx)(`a`,{className:`pa-btn pa-close-blue`,href:n.split(`#`)[0]+`#top`,children:`Close`})})]}):(0,v.jsxs)(`div`,{className:`pa-new-order pa-item-detail`,children:[(0,v.jsx)(g,{active:N||j||ye||!!L,keepsDraft:!1}),(0,v.jsxs)(`div`,{className:`pa-title-row`,children:[(0,v.jsxs)(`h1`,{children:[e.status===`Import Review`?`Import Review`:e.id,` â `,e.title,` : `,x.name]}),(0,v.jsx)(`a`,{className:`pa-btn pa-close-blue`,href:n.split(`#`)[0]+`#top`,children:`Close`})]}),(0,v.jsx)(s,{error:O}),(0,v.jsxs)(`p`,{role:`status`,children:[j?`Uploading artworkâ¦`:de,de===`Not saved`&&(0,v.jsx)(`button`,{className:`pa-btn pa-secondary`,onClick:()=>void xe(),children:`Retry save`})]}),(0,v.jsxs)(`fieldset`,{disabled:d,style:{border:0,padding:0,margin:0,minWidth:0},children:[(0,v.jsx)(a,{title:`CUSTOMER INFORMATION`,children:(0,v.jsxs)(`div`,{className:`pa-order-definition-grid`,children:[(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h2`,{children:`Billing Address`}),(0,v.jsx)(G,{address:e.data.billingAddress})]}),(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h2`,{children:`Shipping Address`}),(0,v.jsx)(G,{address:e.data.shippingAddress})]}),(0,v.jsxs)(`section`,{children:[(0,v.jsx)(`h2`,{children:`Schedule`}),(0,v.jsxs)(`dl`,{className:`pa-detail-schedule`,children:[(0,v.jsx)(`dt`,{children:`Factory`}),(0,v.jsx)(`dd`,{children:e.data.factory}),(0,v.jsx)(`dt`,{children:`Created On`}),(0,v.jsx)(`dd`,{children:u(e.created)}),(0,v.jsx)(`dt`,{children:`Dispatch Window`}),(0,v.jsx)(`dd`,{children:l(e.data.dispatchWindow,e.data.dispatch)}),(0,v.jsx)(`dt`,{children:`Delivery Date`}),(0,v.jsx)(`dd`,{children:u(e.data.delivery)})]})]})]})}),(0,v.jsxs)(a,{title:`Product Information`,children:[(0,v.jsxs)(`p`,{children:[(0,v.jsx)(`strong`,{children:`SKU:`}),` `,x.sku||`Not specified`]}),x.designId&&(0,v.jsxs)(`p`,{children:[(0,v.jsx)(`strong`,{children:`Design ID:`}),` `,x.designId]}),(0,v.jsx)(p,{value:x.fabricMaterial}),x.forgedFabrics?.atvFile&&(0,v.jsxs)(`p`,{children:[(0,v.jsx)(`strong`,{children:`ATV File:`}),` `,x.forgedFabrics.atvFile]}),x.forgedFabrics?.printsheetPdfUrl&&(0,v.jsx)(`a`,{href:x.forgedFabrics.printsheetPdfUrl,target:`_blank`,rel:`noreferrer`,children:`Printsheet PDF`})]}),m(x).length>0&&(0,v.jsxs)(a,{title:`Garment Specifications`,children:[(0,v.jsx)(`p`,{children:`Choose a color or enter a Pantone reference before sending this order for approval.`}),(0,v.jsx)(se,{item:x,disabled:j,readOnly:i,onChange:e=>K({...x,forgedFabrics:e})}),(0,v.jsxs)(`label`,{children:[`Other options`,(0,v.jsx)(`textarea`,{rows:3,maxLength:1e3,readOnly:i,disabled:j,value:x.forgedFabrics?.otherOptions||``,onChange:e=>K({...x,forgedFabrics:{...x.forgedFabrics,otherOptions:e.target.value}})})]})]}),(0,v.jsxs)(`fieldset`,{disabled:j,className:`pa-detail-fields`,children:[i?(0,v.jsx)(a,{title:`Artwork`,children:(0,v.jsx)(h,{images:X,name:x.name})}):(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(a,{title:`Artwork`,children:[(0,v.jsx)(h,{images:X,name:x.name,renderControls:e=>(0,v.jsx)(o,{showRecordInfo:!1,rows:[e],columns:[{key:`position`,title:`Display order`,render:e=>
4ge===e.id?(0,v.jsx)(`input`,{"aria-label":`Artwork display order`,type:`number`,min:`0`,max:X.length-1,value:e.position,onChange:t=>{let n=Math.max(0,Math.min(X.length-1,Math.trunc(Number(t.target.value)||0))),r=[...X];r.splice(n,0,r.splice(r.findIndex(t=>t.id===e.id),1)[0]),K({...x,artwork:r})}}):e.position},{key:`edit`,title:`Edit`,render:e=>(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>W(ge===e.id?``:e.id),children:ge===e.id?`Done`:`Edit`})},{key:`delete`,title:`Delete`,render:e=>(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>{window.confirm(`Remove this artwork from the product?`)&&K({...x,artwork:X.filter(t=>t.id!==e.id)})},children:`Delete`})}]})}),(0,v.jsxs)(`label`,{className:`pa-artwork-upload`,children:[`Upload files`,(0,v.jsx)(`input`,{type:`file`,multiple:!0,accept:`image/png,image/jpeg,image/webp`,onChange:e=>{De(e.target.files),e.target.value=``}})]}),(0,v.jsx)(`p`,{className:`pa-muted`,children:`Display order 0 is the product thumbnail. Upload PNG, JPG, or WebP images up to 10 MB each.`})]}),(0,v.jsx)(a,{title:`Product Notes`,children:(0,v.jsx)(`textarea`,{"aria-label":`Product Notes`,rows:4,maxLength:1e4,value:x.productNote||``,onChange:e=>K({...x,productNote:e.target.value})})}),(0,v.jsx)(a,{title:`Design Name`,children:(0,v.jsx)(`textarea`,{"aria-label":`Design Name`,rows:3,maxLength:200,value:x.designName||``,placeholder:`Optional`,onChange:e=>K({...x,designName:e.target.value})})})]}),!i&&x.forgedFabrics&&(0,v.jsx)(oe,{order:C.current,item:x,disabled:j||N,onSaved:e=>{C.current=e;let t=e.data.items.find(e=>e.id===x.id);w.current=t,S(t),r(e)}}),(0,v.jsx)(_,{item:x,orderId:e.id}),(0,v.jsxs)(a,{title:`Sizes & Quantities`,children:[(0,v.jsxs)(`div`,{className:`pa-title-row`,children:[(0,v.jsx)(`div`,{role:`tablist`,"aria-label":`Product groups`,className:`pa-group-tabs`,children:J.map(e=>(0,v.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":F===e,className:`pa-btn `+(F===e?``:`pa-secondary`),onClick:()=>{I(e),H(``),R(null),D(``)},children:e},e))}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,disabled:!J.length,onClick:Ee,children:`Delete All Groups`})]}),(0,v.jsxs)(`div`,{className:`pa-actions`,children:[(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>{let e=J.length+1;for(;J.includes(`Group `+e);)e++;let t=`Group `+e;R(`add`),pe(t),D(``)},children:`Add Group`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,disabled:!J.length,onClick:()=>{R(`rename`),pe(F),D(``)},children:`Rename Group`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-delete-red`,disabled:!J.length,onClick:Te,children:`Delete Group`})]}),L&&(0,v.jsxs)(`form`,{className:`pa-detail-inline`,onSubmit:$,noValidate:!0,children:[(0,v.jsxs)(`label`,{children:[`Group Name`,(0,v.jsx)(`input`,{autoFocus:!0,value:z,maxLength:200,"aria-invalid":!!ue,"aria-describedby":ue?`group-name-error`:void 0,onChange:e=>{pe(e.target.value),D(``)}}),ue&&(0,v.jsx)(`span`,{id:`group-name-error`,role:`alert`,style:{color:`#D30000`},children:ue})]}),(0,v.jsx)(`button`,{type:`submit`,className:`pa-btn`,children:`Save Group`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>{R(null),D(``)},children:`Cancel`})]}),(0,v.jsx)(s,{error:re}),(0,v.jsxs)(`form`,{noValidate:!0,className:`pa-roster-add`,onSubmit:Ce,children:[(0,v.jsxs)(`label`,{children:[`Quantity`,(0,v.jsx)(`input`,{type:`number`,step:`any`,value:U.quantity===0?``:U.quantity,onChange:e=>Q({...U,quantity:Number(e.target.value)})})]}),x.hasName!==!1&&(0,v.jsxs)(`label`,{children:[`Name (optional)`,(0,v.jsx)(`input`,{value:U.name,maxLength:200,onChange:e=>Q({...U,name:e.target.value})})]}),x.hasNumber!==!1&&(0,v.jsxs)(`label`,{children:[`Number (optional)`,(0,v.jsx)(`input`,{value:U.number,maxLength:200,onChange:e=>Q({...U,number:e.target.value})})]}),(0,v.jsxs)(`label`,{children:[`Size (required)`,(0,v.jsxs)(`select`,{required:!0,"aria-invalid":!!re,value:U.size,onChange:e=>Q({...U,size:e.target.value}),children:[(0,v.jsx)(`option`,{value:``,children:`Select size`}),Se.filter(Boolean).map(e=>(0,v.jsx)(`option`,{children:e},e))]})]}),(0,v.jsx)(`button`,{className:`pa-btn`,disabled:!J.length,children:`Add`}),(0,v.jsxs)(`div`,{className:`pa-roster-tools`,children:[(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-import-green`,disabled:!J.length,onClick:()=>be(!0),children:`Import`}),(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-delete-red`,disabled:!Z.length,onClick:()=>{window.confirm(`Delete all roster rows in `+F+`?`)&&(K({...x,roster:Y.filter(e=>e.group!==F)}),H(``))},children:`Delete All`})]})]}),(0,v.jsx)(o,{initialSize:15,rows:Z,columns:[{key:`quantity`,title:`Quantity`,render:e=>V===e.id?(0,v.jsx)(`input`,{"aria-label":`Row quantity`,type:`number`,step:`any`,value:e.quantity===0?``:e.quantity,onChange:t=>we(e.id,{quantity:Number(t.target.value)})}):e.quantity},{key:`name`,title:`Item Name`,render:e=>V===e.id?(0,v.jsx)(`input`,{"aria-label":`Row name`,maxLength:200,value:e.name,onChange:t=>we(e.id,{name:t.target.value})}):e.name},{key:`number`,title:`Number`,render:e=>V===e.id?(0,v.jsx)(`input`,{"aria-label":`Row number`,maxLength:200,value:e.number,onChange:t=>we(e.id,{number:t.target.value})}):e.number},{key:`size`,title:`Size`,render:e=>V===e.id?(0,v.jsxs)(`select`,{"aria-label":`Row size`,value:e.size,onChange:t=>we(e.id,{size:t.target.value}),children:[(0,v.jsx)(`option`,{value:``,children:`Select size`}),Se.filter(Boolean).map(e=>(0,v.jsx)(`option`,{children:e},e))]}):e.size},{key:`edit`,title:`Edit`,render:e=>(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>H(V===e.id?``:e.id),children:V===e.id?`Done`:`Edit`})},{key:`delete`,title:`Delete`,render:e=>(0,v.jsx)(`button`,{type:`button`,className:`pa-btn pa-secondary`,onClick:()=>{window.confirm(`Delete this roster row?`)&&(K({...x,roster:Y.filter(t=>t.id!==e.id)}),V===e.id&&H(``))},children:`Delete`})}].filter(e=>(e.key!==`name`||x.hasName!==!1)&&(e.key!==`number`||x.hasNumber!==!1))})]})]}),(0,v.jsx)(`div`,{className:`pa-detail-close-footer`,children:(0,v.jsx)(`a`,{className:`pa-btn pa-close-blue`,href:n.split(`#`)[0]+`#top`,children:`Close`})}),ye&&(0,v.jsx)(_e,{hasName:x.hasName!==!1,hasNumber:x.hasNumber!==!1,sizes:Se,groups:J,activeGroup:F,existing:Y,onClose:()=>be(!1),onImport:Oe})]})]})}function G({address:e}){return e?(0,v.jsxs)(`address`,{children:[e.name,(0,v.jsx)(`br`,{}),e.company&&(0,v.jsxs)(v.Fragment,{children:[e.company,(0,v.jsx)(`br`,{})]}),e.address1,(0,v.jsx)(`br`,{}),e.address2&&(0,v.jsxs)(v.Fragment,{children:[e.address2,(0,v.jsx)(`br`,{})]}),e.city,` `,e.state,` `,e.zip,(0,v.jsx)(`br`,{}),e.country,(0,v.jsx)(`br`,{}),e.phone,(0,v.jsx)(`br`,{}),e.email]}):(0,v.jsx)(`p`,{children:`No address available.`})}function ve(e){let t=le(e,!0),n=(e.roster||[]).filter(e=>String(e.id).endsWith(`-unmapped-size`)&&!e.size.trim());return n.length?{...t,quantity:t.quantity+n.reduce((e,t)=>
4e+Number(t.quantity||0),0)}:t}export{S as a,ne as c,T as d,b as f,re as i,te as l,ce as n,C as o,x as p,ae as r,w as s,W as t,ee as u};
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.