1import{A as e,C as t,E as n,H as r,I as i,S as a,T as o,W as s,X as c,at as l,b as u,k as d,lt as f,pt as p,rt as m,ut as h,w as g}from"./vendor-core-ByrB1I1z.js";import{Vi as _,da as v,fa as y,la as b,mo as x,oo as S,pa as C,ua as w,wa as T}from"./shared-u6UeEZvS.js";import{t as E}from"./ItemQuestionFields-B6eDryu4.js";var D={class:`mb-1.5 flex items-baseline justify-between gap-3`},O={class:`label !mb-0`},k={key:1,class:`font-normal text-slate-400`},A={key:0,role:`alert`,class:`shrink-0 text-xs font-medium text-red-600`},j={key:0,class:`mb-2 text-xs text-slate-500`},M={key:0,class:`size-4 animate-spin rounded-full border-2 border-slate-300 border-t-slate-600`},N=[`accept`,`disabled`,`aria-required`],P={key:1,class:`mt-2 space-y-1.5`},F={class:`flex min-w-0 items-center gap-2 text-slate-700`},I=[`src`,`onError`],L={class:`truncate`},R={class:`shrink-0 text-slate-400`},z=[`aria-label`,`onClick`],B={key:2,role:`alert`,class:`mt-1.5 text-xs text-red-600`},V={class:`mt-1.5 text-xs text-slate-400`},H={__name:`AttachmentField`,props:i({slug:{type:String,required:!0},serviceId:{type:Number,default:null},productId:{type:Number,default:null},kinds:{type:Array,default:()=>[]},targets:{type:Array,default:null},required:{type:Boolean,default:!1},instructions:{type:String,default:``},missing:{type:Boolean,default:!1},preview:{type:Boolean,default:!1}},{modelValue:{type:Array,default:()=>[]},modelModifiers:{},uploading:{type:Boolean,default:!1},uploadingModifiers:{}}),emits:[`update:modelValue`,`update:uploading`],setup(i){let E=c(i,`modelValue`),H=c(i,`uploading`),U=i,W=l(``),G=a(()=>U.targets?.length?U.targets:[{serviceId:U.serviceId,productId:U.productId,kinds:U.kinds}]),K=a(()=>C(G.value.flatMap(e=>C(e.kinds))));function q(e){let t=v(e.name);return G.value.find(e=>C(e.kinds).includes(t))||G.value[0]}let J=/^image\/(jpeg|png|webp|gif)$/,Y=e=>J.test(e.type)?URL.createObjectURL(e):``,X=m(new Set);async function Z(e){let t=Array.from(e.target.files||[]);e.target.value=``;let{accepted:n,problem:r}=b(t,{existing:E.value.length,max:5,kinds:K.value});if(W.value=r,n.length){H.value=!0;try{for(let e of n){let{serviceId:t,productId:n}=q(e),{data:r}=await T(U.slug,e,{serviceId:t,productId:n});E.value=[...E.value,{...r,preview:Y(e)}]}}catch(e){W.value=S(e,`That file couldn't be uploaded. Please try again.`)}finally{H.value=!1}}}function Q(e){let t=E.value[e]?.preview;t&&URL.revokeObjectURL(t),E.value=E.value.filter((t,n)=>n!==e),W.value=``}return(a,c)=>(r(),n(`div`,null,[t(`div`,D,[t(`p`,O,[c[2]||=d(` Attach files `,-1),i.required?(r(),n(u,{key:0},[c[0]||=t(`span`,{class:`text-red-500`,"aria-hidden":`true`},`*`,-1),c[1]||=t(`span`,{class:`sr-only`},` (required)`,-1)],64)):(r(),n(`span`,k,`(optional)`))]),i.missing&&!E.value.length?(r(),n(`p`,A,` Please attach a file `)):o(``,!0)]),i.instructions?(r(),n(`p`,j,p(i.instructions),1)):o(``,!0),t(`label`,{class:h([`flex cursor-pointer items-center justify-center gap-2 rounded-lg border border-dashed px-4 py-3 text-sm text-slate-500 transition-colors hover:border-slate-400 hover:bg-slate-50`,[i.missing&&!E.value.length?`border-red-400`:`border-slate-300`,{"pointer-events-none opacity-60":H.value||i.preview}]])},[H.value?(r(),n(`span`,M)):(r(),g(x,{key:1,name:`upload`,size:16})),d(` `+p(H.value?`Uploadingâ¦`:`Add ${f(y)(K.value)}`)+` `,1),t(`input`,{type:`file`,class:`sr-only`,multiple:``,accept:f(w)(K.value),disabled:H.value||i.preview,"aria-required":i.required?`true`:void 0,onChange:Z},null,40,N)],2),E.value.length?(r(),n(`ul`,P,[(r(!0),n(u,null,s(E.value,(i,a)=>(r(),n(`li`,{key:i.token||`kept-${i.kept}`,class:`flex items-center justify-between gap-2 rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-xs`},[t(`span`,F,[i.preview&&!X.has(i.preview)?(r(),n(`img`,{key:0,src:i.preview,alt:``,class:`size-9 shrink-0 rounded object-cover`,onError:e=>X.add(i.preview)},null,40,I)):(r(),g(x,{key:1,name:`file-text`,size:14,class:`shrink-0 text-slate-400`})),t(`span`,L,p(i.filename),1),t(`span`,R,`(`+p(f(_)(i.size_bytes))+`)`,1)]),t(`button`,{type:`button`,class:`shrink-0 cursor-pointer p-1 text-slate-400 transition-colors hover:text-red-600`,"aria-label":`Remove ${i.filename}`,onClick:e=>Q(a)},[e(x,{name:`x`,size:14})],8,z)]))),128))])):o(``,!0),W.value?(r(),n(`p`,B,p(W.value),1)):o(``,!0),t(`p`,V,` Up to `+p(f(5))+` files, 10MB each. Only you and this business can open them. `,1)]))}},U={class:`space-y-4`},W={__name:`ItemDetailsFields`,props:i({item:{type:Object,required:!0},kind:{type:String,required:!0},slug:{type:String,required:!0},problem:{type:Object,default:null},currency:{type:String,default:``},holdPrices:{type:Boolean,default:!1},charged:{type:Array,default:()=>[]},preview:{type:Boolean,default:!1}},{answers:{type:Object,default:()=>({})}
1,answersModifiers:{},files:{type:Array,default:()=>[]},filesModifiers:{},uploading:{type:Boolean,default:!1},uploadingModifiers:{}}),emits:[`update:answers`,`update:files`,`update:uploading`],setup(e){let t=c(e,`answers`),i=c(e,`files`),a=c(e,`uploading`);return(s,c)=>(r(),n(`div`,U,[e.item.questions?.length?(r(),g(E,{key:0,modelValue:t.value,"onUpdate:modelValue":c[0]||=e=>t.value=e,questions:e.item.questions,problems:e.problem?.answers||{},currency:e.currency,"hold-prices":e.holdPrices,charged:e.charged},null,8,[`modelValue`,`questions`,`problems`,`currency`,`hold-prices`,`charged`])):o(``,!0),e.item.allow_attachments?(r(),g(H,{key:1,modelValue:i.value,"onUpdate:modelValue":c[1]||=e=>i.value=e,uploading:a.value,"onUpdate:uploading":c[2]||=e=>a.value=e,slug:e.slug,"service-id":e.kind===`service`?e.item.id:null,"product-id":e.kind===`product`?e.item.id:null,kinds:e.item.attachment_types||[],required:!!e.item.require_attachments,instructions:e.item.attachment_instructions||``,missing:!!e.problem?.fileMissing,preview:e.preview},null,8,[`modelValue`,`uploading`,`slug`,`service-id`,`product-id`,`kinds`,`required`,`instructions`,`missing`,`preview`])):o(``,!0)]))}};export{H as n,W as t};
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.