1import{A as e,B as t,C as n,E as r,H as i,Q as a,R as o,S as s,T as c,W as l,at as u,b as d,ft as f,g as ee,h as p,k as m,lt as h,pt as g,rt as _,tt as v,ut as y,w as b,x as te,y as x}from"./vendor-core-ByrB1I1z.js";import{s as S}from"./vendor-gMPUZDQY.js";import{Bi as ne,Di as re,Ei as ie,Fa as C,Fi as ae,Gi as w,Hi as T,Ia as E,Jr as oe,La as D,Mi as O,Na as k,Oa as A,Pa as j,Si as se,bo as ce,ii as le,in as ue,ja as M,li as N,mo as P,na as de,oa as F,oo as fe,vo as I,vr as pe,xa as me,xi as L,ya as R,zn as he}from"./shared-u6UeEZvS.js";import{n as ge,t as z}from"./ItemDetailsFields-CIx9WUPp.js";import{t as _e}from"./ItemQuestionFields-B6eDryu4.js";var B={class:`rounded-xl border border-slate-200 p-3`},ve={class:`mb-2 flex items-center justify-between`},ye=[`disabled`],be={class:`text-sm font-semibold text-slate-900`,"aria-live":`polite`},xe={class:`grid grid-cols-7 gap-1 text-center`,"aria-hidden":`true`},V=[`title`],H=[`aria-label`],U={key:0,"aria-hidden":`true`},W=[`data-date`,`tabindex`,`aria-pressed`,`aria-disabled`,`aria-label`,`title`,`onClick`],Se={__name:`BookingCalendar`,props:{modelValue:{type:String,default:``},min:{type:String,required:!0},isAvailable:{type:Function,default:()=>!0},weekStart:{type:Number,default:1}},emits:[`update:modelValue`],setup(t,{emit:c}){let f=t,ee=c,p=e=>String(e).padStart(2,`0`);function m(e){let[t,n,r]=String(e).split(`-`).map(Number);return{year:t,month:n-1,day:r}}function h(e,t,n){let r=new Date(e,t,n);return`${r.getFullYear()}-${p(r.getMonth()+1)}-${p(r.getDate())}`}function _(e,t){let{year:n,month:r,day:i}=m(e);return h(n,r,i+t)}let v=e=>e>=f.min&&f.isAvailable(e);function b(){let e=f.min;for(let t=0;t<366;t+=1){if(v(e))return e;e=_(e,1)}return f.min}let te=m(f.modelValue||b()),x=u({year:te.year,month:te.month}),S=u(f.modelValue||b()),ne=u(null);a(()=>f.modelValue,e=>{e&&(S.value=e)});let re=s(()=>new Date(x.value.year,x.value.month,1).toLocaleDateString(void 0,{month:`long`,year:`numeric`})),ie=s(()=>Array.from({length:7},(e,t)=>{let n=new Date(2024,0,7+(t+f.weekStart)%7);return{short:n.toLocaleDateString(void 0,{weekday:`narrow`}),long:n.toLocaleDateString(void 0,{weekday:`long`})}})),C=s(()=>{let{year:e,month:t}=x.value,n=(new Date(e,t,1).getDay()-f.weekStart+7)%7,r=new Date(e,t+1,0).getDate();return[...Array.from({length:n},(e,t)=>({key:`lead-${t}`})),...Array.from({length:r},(n,r)=>{let i=h(e,t,r+1),a=i<f.min;return{key:i,date:i,day:r+1,past:a,open:!a&&f.isAvailable(i),label:new Date(e,t,r+1).toLocaleDateString(void 0,{weekday:`long`,day:`numeric`,month:`long`})}})]}),ae=s(()=>{let e=m(f.min);return x.value.year*12+x.value.month>e.year*12+e.month}),w=s(()=>{let e=C.value.filter(e=>e.date);return e.some(e=>e.date===S.value)?S.value:(e.find(e=>e.open)||e.find(e=>!e.past)||e[0])?.date});function T(e){let t=new Date(x.value.year,x.value.month+e,1);x.value={year:t.getFullYear(),month:t.getMonth()}}function E(e){e.open&&ee(`update:modelValue`,e.date)}let oe={ArrowLeft:-1,ArrowRight:1,ArrowUp:-7,ArrowDown:7};function D(e){let t=oe[e.key];if(!t)return;e.preventDefault();let n=_(w.value||S.value,t);if(n<f.min)return;S.value=n;let{year:r,month:i}=m(n);x.value={year:r,month:i},o(()=>ne.value?.querySelector(`[data-date="${n}"]`)?.focus())}return(a,o)=>(i(),r(`div`,B,[n(`div`,ve,[n(`button`,{type:`button`,class:`flex size-8 cursor-pointer items-center justify-center rounded-lg text-slate-600 hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-30`,disabled:!ae.value,"aria-label":`Previous month`,onClick:o[0]||=e=>T(-1)},[e(P,{name:`chevron-left`,size:16})],8,ye),n(`p`,be,g(re.value),1),n(`button`,{type:`button`,class:`flex size-8 cursor-pointer items-center justify-center rounded-lg text-slate-600 hover:bg-slate-100`,"aria-label":`Next month`,onClick:o[1]||=e=>T(1)},[e(P,{name:`chevron-right`,size:16})])]),n(`div`,xe,[(i(!0),r(d,null,l(ie.value,e=>(i(),r(`abbr`,{key:e.long,title:e.long,class:`py-1 text-[11px] font-semibold text-slate-400 no-underline`},g(e.short),9,V))),128))]),n(`div`,{ref_key:`grid`,ref:ne,role:`group`,"aria-label":`Choose a date, ${re.value}`,class:`grid grid-cols-7 gap-1`,onKeydown:D},[(i(!0),r(d,null,l(C.value,e=>(i(),r(d,{key:e.key},[e.date?(i(),r(`button`,{key:1,type:`button`,"data-date":e.date,tabindex:e.date===w.value?0:-1,"aria-pressed":e.date===t.modelValue,"aria-disabled":!e.open,"aria-label":e.open?e.label:`${e.label}, unavailable`,title:!e.open&&!e.past?`Closed`:void 0,class:y([`flex h-9 items-center justify-center rounded-lg text-sm tabular-nums transition-colors focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-[var(--primary,var(--tenant-default-primary))]`,e.date===t.modelValue?`bg-[var(--primary,var(--tenant-default-primary))] font-semibold text-[var(--primary-fg,#fff)]`:e.open?`cursor-pointer font-medium text-slate-800 hover:bg-[var(--primary-subtle,#eff6ff)]`:e.past?`cursor-not-allowed text-slate-300`:`cursor-not-allowed text-slate-300 line-through`]),onClick:t=>E(e)},g(e.day),11,W)):(i(),r(`span`,U))],64))),128))],40,H)]))}},Ce={class:`flex items-center justify-between border-b border-slate-100 px-6 py-4`},we={class:`text-sm text-slate-500`},Te={key:0,class:`text-slate-400`},Ee={key:0,class:`px-6 py-12 text-center`},De={class:`mx-auto flex size-14 items-center justify-center rounded-full bg-green-50 text-green-600`},Oe={class:`mx-auto mt-2 max-w-sm text-sm text-slate-500`},ke={class:`grow space-y-4 overflow-y-auto px-6 py-5`},Ae={class:`grid gap-4 sm:grid-cols-2`},je=[`role`],Me={key:0},Ne={class:`divide-y divide-slate-100 rounded-lg border border-slate-200`},Pe={class:`min-w-0 flex-1`},Fe={class:`block truncate font-medium text-slate-900`},Ie={class:`block text-xs text-slate-500`},Le=[`aria-label`,`onClick`],Re={key:0,class:`mt-1.5 text-xs text-slate-500`},ze=[`value`],Be={key:1,class:`space-y-2`,"aria-label":`Times you're suggesting`},Ve=[`aria-pressed`,`onClick`],He={class:`w-12 shrink-0 text-xs font-semibold text-slate-500`},Ue=[`aria-label`,`onClick`],We=[`aria-invalid`],Ge={class:`mb-1.5 flex items-baseline justify-between gap-3`},Ke={id:`appointment-date-label`,class:`label !mb-0`},qe={key:0,role:`alert`,class:`shrink-0 text-xs font-medium text-red-600`},Je={key:0,class:`mt-1.5 text-xs text-slate-500`},Ye={class:`label`,for:`appointment-time`},Xe={key:0,class:`text-red-500`},Ze=[`disabled`,`aria-invalid`],Qe=[`disabled`],$e=[`value`],et={key:2,class:`mt-1.5 text-xs font-medium text-amber-800`},tt={key:3,role:`alert`,class:`mt-1.5 text-xs text-red-600`},nt={key:4,class:`mt-1.5 text-xs text-red-600`},rt={key:2},it={key:0,class:`mt-1.5 text-xs text-slate-500`},at={key:0,class:`mb-2 text-sm font-semibold text-slate-900`},ot={class:`border-t border-slate-100 px-6 py-4`},st={key:0,role:`alert`,class:`mb-3 text-sm text-red-600`},ct={key:1,class:`mb-3 flex items-baseline justify-between text-sm`},lt={class:`font-semibold text-slate-900`},ut=[`disabled`],dt={key:0,class:`size-4 animate-spin rounded-full border-2 border-white/40 border-t-white`},ft=3,pt=4,G={__name:`AppointmentModal`,props:{service:{type:Object,required:!0},slug:{type:String,required:!0},defaultCountry:{type:String,default:`US`},openingHours:{type:Object,default:null},timeZone:{type:String,default:``},services:{type:Array,default:null},currency:{type:String,default:``}},emits:[`close`],setup(O,{emit:A}){let z=O,B=A,ve=S(),ye=ie(),be=u(null),xe=u(null);re(be,xe);let V=[`First`,`Second`,`Third`],H=_({customer_name:``,customer_email:``,customer_phone:``,message:``}),U=_({});le(H,U,{related:{customer_email:[`contact`],customer_phone:[`contact`]}});let W=_([{date:``,time:``}]),G=u(0),K=s(()=>W[G.value]),mt=u(z.services||[]),q=u([]),ht=u(``);t(async()=>
1{if(!z.services)try{mt.value=(await R(z.slug)).data}catch(e){console.error(e)}});let J=s(()=>[z.service,...q.value]),gt=s(()=>mt.value.filter(e=>L(e)&&!J.value.some(t=>t.id===e.id))),_t=s(()=>gt.value.length>0&&q.value.length<pt),vt=s(()=>J.value.reduce((e,t)=>e+(Number(t.duration_minutes)||0),0)),yt=s(()=>J.value.every(e=>Number(e.duration_minutes)>0)),bt=s(()=>J.value.map(e=>e.name).join(` + `));function xt(){let e=gt.value.find(e=>e.id===Number(ht.value));e&&q.value.push(e),ht.value=``}function St(e){q.value=q.value.filter(t=>t.id!==e)}function Ct(e){let t=Math.floor(e/60),n=e%60;return t?n?`${t} hr ${n} min`:`${t} hr`:`${n} min`}function wt(e){return[e.duration_minutes?Ct(Number(e.duration_minutes)):``,se(e,z.currency)].filter(Boolean).join(` · `)}let Y=u({}),X=u([]),Tt=u(!1),Z=u(null),Q=s(()=>T(J.value)),Et=s(()=>[{questions:Q.value.shared},...J.value.map(e=>({...e,questions:Q.value.perItem.find(t=>t.item.id===e.id)?.questions||[]}))]),Dt=s(()=>J.value.filter(e=>e.allow_attachments)),Ot=s(()=>Dt.value.some(e=>e.require_attachments)),kt=s(()=>Dt.value.map(e=>({serviceId:e.id,kinds:e.attachment_types||[]}))),At=s(()=>Dt.value.find(e=>e.attachment_instructions)?.attachment_instructions||``);a([Y,X],()=>{Z.value=null});let jt=s(()=>F(J.value,Y.value)),Mt=s(()=>jt.value?J.value.reduce((e,t)=>e+(Number(t.price)||0),0)+jt.value:0);function Nt(){let e={...Y.value};for(let t of Q.value.shared){let n=t.twins.map(t=>e[t]).find(w);n!==void 0&&t.twins.forEach(t=>{e[t]=n})}Y.value=e}let $=u(!1),Pt=u(!1),Ft=s(()=>z.timeZone||null),It=s(()=>j(z.openingHours)),Lt=I(z.timeZone||void 0);function Rt(e){return M(z.openingHours,e,{duration:vt.value,after:e===Lt?E(new Date,Ft.value):-1})}function zt(e){return!It.value||C(z.openingHours,e)&&(e!==Lt||Rt(e).length>0)}let Bt=s(()=>It.value&&K.value.date?Rt(K.value.date):[]);a(()=>K.value.date,()=>{It.value&&K.value.time&&!Bt.value.includes(K.value.time)&&(K.value.time=``)});let Vt=u(``);a(vt,()=>{if(!It.value)return;let e=W.filter(e=>e.date&&e.time&&!Rt(e.date).includes(e.time));e.length&&(Vt.value=e.length===1?`${he(e[0].date,e[0].time)} no longer leaves time for everything before we close. Please choose another time.`:`Some of your times no longer leave room for everything before we close. Please choose them again.`,e.forEach(e=>{e.time=``}))});let Ht=(e,t)=>!!(e.date&&(t===0||e.time)),Ut=s(()=>W.some((e,t)=>e.date&&W.findIndex(t=>t.date===e.date&&t.time===e.time)!==t)),Wt=s(()=>!!K.value.date&&W.some((e,t)=>t!==G.value&&e.date===K.value.date&&e.time===K.value.time)),Gt=s(()=>W.length<ft&&W.every(Ht)&&!Ut.value);function Kt(){W.push({date:``,time:``}),G.value=W.length-1}function qt(e){W.splice(e,1),G.value>=e&&(G.value=Math.max(0,G.value-1))}let Jt=s(()=>D(z.openingHours)),Yt=s(()=>W.filter((e,t)=>t===0||e.date)),Xt=s(()=>he(W[0].date,W[0].time)),Zt=u(``);a([H,W,Y,X],()=>{Zt.value=``}),a(()=>W[0].date,()=>{delete U.date}),a(()=>K.value.time,()=>{delete U.time});function Qt(){Object.keys(U).forEach(e=>delete U[e]),H.customer_name.trim()||(U.customer_name=`Please tell us your name.`),!H.customer_email.trim()&&!H.customer_phone.trim()&&(U.contact=`Add an email or a phone number so we can reach you.`),W[0].date||(U.date=`Please pick a day.`);let e=W.findIndex($t);return e===-1?Ut.value&&(U.time=`Each time you suggest should be different.`):U.time=`Please pick a time for your ${V[e].toLowerCase()} choice.`,Z.value=ne(Et.value,Y.value,X.value),de(Object.values(U),Z.value)}let $t=(e,t)=>e.date&&!Ht(e,t);async function en(){if($.value)return;let e=W.findIndex($t);if(W[0].date?e!==-1&&(G.value=e):G.value=0,Nt(),await o(),Zt.value=Qt(),Zt.value){ue();return}if(Tt.value){Zt.value=`Your files are still uploading. Give them a moment.`;return}let[t,...n]=Yt.value;try{$.value=!0,await me(z.slug,{customer_name:H.customer_name.trim(),customer_email:H.customer_email.trim()||null,customer_phone:H.customer_phone.trim()||null,message:H.message.trim()||null,website:``,service_id:z.service.id,extra_service_ids:q.value.map(e=>e.id),preferred_date:t.date,preferred_time:t.time||null,alternative_slots:n.map(({date:e,time:t})=>({date:e,time:t})),answers:ae(J.value,Y.value),attachments:Dt.value.length?X.value.map(e=>e.token):[]}),Pt.value=!0}catch(e){console.error(e),ve.error(fe(e,`Unable to send your request right now. Please try again.`))}finally{$.value=!1}}return(t,a)=>(i(),b(te,{to:`body`},[n(`div`,{ref_key:`overlay`,ref:be,class:`tenant-accent fixed inset-0 z-[10000] flex items-end justify-center bg-slate-900/50 p-0 backdrop-blur-xs sm:items-center sm:p-6`,style:f(h(ye)),onClick:a[15]||=x(e=>B(`close`),[`self`])},[n(`div`,{ref_key:`panel`,ref:xe,class:`flex max-h-[92dvh] w-full max-w-lg flex-col rounded-t-2xl bg-white shadow-xl sm:rounded-2xl`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`appointment-modal-title`},[n(`header`,Ce,[n(`div`,null,[a[16]||=n(`h2`,{id:`appointment-modal-title`,class:`text-lg font-semibold text-slate-900`},` Request an appointment `,-1),n(`p`,we,[m(g(O.service.name)+` `,1),O.service.duration_minutes?(i(),r(`span`,Te,` · `+g(O.service.duration_minutes)+` min`,1)):c(``,!0)])]),n(`button`,{type:`button`,class:`btn-ghost -mr-2 !p-2`,"aria-label":`Close`,onClick:a[0]||=e=>B(`close`)},[e(P,{name:`x`,size:20}
1)])]),Pt.value?(i(),r(`div`,Ee,[n(`span`,De,[e(P,{name:`check-circle`,size:30})]),a[17]||=n(`h3`,{class:`mt-4 text-lg font-semibold text-slate-900`},`Request sent!`,-1),n(`p`,Oe,[Yt.value.length>1?(i(),r(d,{key:0},[m(g(bt.value)+`, `+g(Yt.value.length)+` times that suit you. We'll get back to you shortly to confirm one of them`+g(H.customer_email.trim()?` â the confirmation will come by email`:``)+`. `,1)],64)):(i(),r(d,{key:1},[m(g(bt.value)+`, `+g(Xt.value)+`. We'll get back to you shortly to confirm it`+g(H.customer_email.trim()?` â the confirmation will come by email`:``)+`. `,1)],64))]),n(`button`,{type:`button`,class:`btn-secondary mt-6`,onClick:a[1]||=e=>B(`close`)},`Done`)])):(i(),r(`form`,{key:1,class:`flex min-h-0 grow flex-col`,novalidate:``,onSubmit:x(en,[`prevent`])},[n(`div`,ke,[e(N,{modelValue:H.customer_name,"onUpdate:modelValue":a[2]||=e=>H.customer_name=e,label:`Your name`,placeholder:`Jane Smith`,autocomplete:`name`,required:``,error:U.customer_name},null,8,[`modelValue`,`error`]),n(`div`,null,[n(`div`,Ae,[e(N,{modelValue:H.customer_email,"onUpdate:modelValue":a[3]||=e=>H.customer_email=e,label:`Email`,type:`email`,placeholder:`[email protected]`,autocomplete:`email`,invalid:!!U.contact},null,8,[`modelValue`,`invalid`]),e(pe,{modelValue:H.customer_phone,"onUpdate:modelValue":a[4]||=e=>H.customer_phone=e,label:`Phone`,"default-country":O.defaultCountry,invalid:!!U.contact},null,8,[`modelValue`,`default-country`,`invalid`])]),n(`p`,{class:y([`mt-1.5 text-xs`,U.contact?`text-red-600`:`text-slate-400`]),role:U.contact?`alert`:void 0},g(U.contact||`Provide an email or a phone number so we can reach you.`),11,je)]),q.value.length||_t.value?(i(),r(`div`,Me,[q.value.length?(i(),r(d,{key:0},[a[18]||=n(`p`,{class:`label`},`Services`,-1),n(`ul`,Ne,[(i(!0),r(d,null,l(J.value,t=>(i(),r(`li`,{key:t.id,class:`flex min-h-11 items-center gap-3 py-1.5 pr-1.5 pl-3 text-sm`},[n(`span`,Pe,[n(`span`,Fe,g(t.name),1),n(`span`,Ie,g(wt(t)),1)]),t.id===O.service.id?c(``,!0):(i(),r(`button`,{key:0,type:`button`,class:`btn-ghost !p-2`,"aria-label":`Remove ${t.name}`,onClick:e=>St(t.id)},[e(P,{name:`x`,size:16})],8,Le))]))),128))]),vt.value?(i(),r(`p`,Re,g(yt.value?`About`:`At least`)+` `+g(Ct(vt.value))+` in all. The times below leave room for everything. `,1)):c(``,!0)],64)):c(``,!0),_t.value?(i(),r(`div`,{key:1,class:y({"mt-3":q.value.length})},[a[20]||=n(`label`,{class:`label`,for:`appointment-add-service`},[m(` Add another service `),n(`span`,{class:`font-normal text-slate-400`},`(optional)`)],-1),v(n(`select`,{id:`appointment-add-service`,"onUpdate:modelValue":a[5]||=e=>ht.value=e,class:`input`,onChange:xt},[a[19]||=n(`option`,{value:``},`Choose a serviceâ¦`,-1),(i(!0),r(d,null,l(gt.value,e=>(i(),r(`option`,{key:e.id,value:e.id},g(e.name)+` â `+g(wt(e)),9,ze))),128))],544),[[p,ht.value]])],2)):c(``,!0)])):c(``,!0),W.length>1?(i(),r(`ol`,Be,[(i(!0),r(d,null,l(W,(t,a)=>(i(),r(`li`,{key:a,class:`flex items-center gap-1`},[n(`button`,{type:`button`,class:y([`flex min-w-0 flex-1 items-center gap-3 rounded-lg border px-3 py-2 text-left text-sm transition-colors`,a===G.value?`border-[var(--primary,var(--tenant-default-primary))] bg-[var(--primary-subtle,#eff6ff)]`:`border-slate-200 hover:border-slate-300`]),"aria-pressed":a===G.value,onClick:e=>G.value=a},[n(`span`,He,g(V[a]),1),n(`span`,{class:y([`truncate`,t.date?`font-medium text-slate-900`:`text-slate-400`])},g(t.date?h(he)(t.date,t.time):`Pick a day below`),3)],10,Ve),a>0?(i(),r(`button`,{key:0,type:`button`,class:`btn-ghost !p-2`,"aria-label":`Remove your ${V[a].toLowerCase()} choice`,onClick:e=>qt(a)},[e(P,{name:`x`,size:16})],8,Ue)):c(``,!0)]))),128))])):c(``,!0),n(`div`,{role:`group`,"aria-labelledby":`appointment-date-label`,"aria-invalid":U.date?`true`:void 0},[n(`div`,Ge,[n(`p`,Ke,[m(g(W.length>1?`Date for your ${V[G.value].toLowerCase()} choice`:`Preferred date`)+` `,1),a[21]||=n(`span`,{class:`text-red-500`,"aria-hidden":`true`},`*`,-1),a[22]||=n(`span`,{class:`sr-only`},` (required)`,-1)]),U.date?(i(),r(`p`,qe,g(U.date),1)):c(``,!0)]),e(Se,{modelValue:K.value.date,"onUpdate:modelValue":a[6]||=e=>K.value.date=e,min:h(Lt),"is-available":zt,"week-start":O.defaultCountry===`US`?0:1},null,8,[`modelValue`,`min`,`week-start`]),Jt.value?(i(),r(`p`,Je,` Open `+g(Jt.value)+`. Days we're closed are greyed out. `,1)):c(``,!0)],8,We),n(`div`,null,[n(`label`,Ye,[m(g(W.length>1?`Time for your ${V[G.value].toLowerCase()} choice`:`Preferred time`)+` `,1),G.value>0?(i(),r(`span`,Xe,`*`)):c(``,!0)]),It.value?v((i(),r(`select`,{key:0,id:`appointment-time`,"onUpdate:modelValue":a[7]||=e=>K.value.time=e,class:y([`input`,{"input-error":U.time}]),disabled:!K.value.date,"aria-invalid":U.time?`true`:void 0,onChange:a[8]||=e=>Vt.value=``},[n(`option`,{value:``,disabled:G.value>0&&!!K.value.date},g(K.value.date?G.value>0?`Choose a time`:`Any time`:`Choose a date first`),9,Qe),(i(!0),r(d,null,l(Bt.value,e=>(i(),r(`option`,{key:e,value:e},g(h(k)(e)),9,$e))),128))],42,Ze)),[[p,K.value.time]]):v((i(),r(`input`,{key:1,id:`appointment-time`,"onUpdate:modelValue":a[9]||=e=>K.value.time=e,type:`time`,class:`input`},null,512)),[[ee,K.value.time]]),Vt.value?(i(),r(`p`,et,g(Vt.value),1)):c(``,!0),U.time?(i(),r(`p`,tt,g(U.time),1)):Wt.value?(i(),r(`p`,nt,` You've already suggested this time. `)):c(``,!0)]),Gt.value?(i(),r(`div`,rt,[n(`button`,{type:`button`,class:`btn-secondary !py-1.5 text-sm`,onClick:Kt},[e(P,{name:`plus`,size:16}),a[23]||=m(` Suggest another time `,-1)]),W.length===1?(i(),r(`p`,it,` Flexible? Give up to `+g(ft)+` times that suit you and we'll confirm one. `)):c(``,!0)])):c(``,!0),Q.value.shared.length?(i(),b(_e,{key:3,modelValue:Y.value,"onUpdate:modelValue":a[10]||=e=>Y.value=e,questions:Q.value.shared,problems:Z.value?.answers||{},currency:O.currency},null,8,[`modelValue`,`questions`,`problems`,`currency`])):c(``,!0),(i(!0),r(d,null,l(Q.value.perItem,({item:t,questions:n})=>(i(),r(`div`,{key:t.id},[J.value.length>1?(i(),r(`p`,at,g(t.name),1)):c(``,!0),e(_e,{modelValue:Y.value,"onUpdate:modelValue":a[11]||=e=>Y.value=e,questions:n,problems:Z.value?.answers||{},currency:O.currency},null,8,[`modelValue`,`questions`,`problems`,`currency`])]))),128)),Dt.value.length?(i(),b(ge,{key:4,modelValue:X.value,"onUpdate:modelValue":a[12]||=e=>X.value=e,uploading:Tt.value,"onUpdate:uploading":a[13]||=e=>Tt.value=e,slug:O.slug,targets:kt.value,required:Ot.value,instructions:At.value,missing:!!Z.value?.fileMissing},null,8,[`modelValue`,`uploading`,`slug`,`targets`,`required`,`instructions`,`missing`])):c(``,!0),e(
1oe,{modelValue:H.message,"onUpdate:modelValue":a[14]||=e=>H.message=e,label:`Anything else we should know? (optional)`,placeholder:`Anything that would help us get ready for you.`,rows:3,maxlength:`5000`},null,8,[`modelValue`])]),n(`footer`,ot,[Zt.value?(i(),r(`p`,st,g(Zt.value),1)):c(``,!0),jt.value?(i(),r(`p`,ct,[a[24]||=n(`span`,{class:`text-slate-500`},`With your choices`,-1),n(`span`,lt,g(h(ce)(Mt.value,O.currency)),1)])):c(``,!0),n(`button`,{type:`submit`,class:`btn w-full bg-[var(--primary,var(--tenant-default-primary))] text-[var(--primary-fg,#fff)] hover:opacity-90`,disabled:$.value},[$.value?(i(),r(`span`,dt)):(i(),b(P,{key:1,name:`calendar`,size:16})),m(` `+g($.value?`Sendingâ¦`:`Send request`),1)],8,ut)])],32))],512)],4)]))}},K={class:`flex items-center justify-between border-b border-slate-100 px-6 py-4`},mt={class:`text-sm text-slate-500`},q={key:0,class:`px-6 py-12 text-center`},ht={class:`mx-auto flex size-14 items-center justify-center rounded-full bg-green-50 text-green-600`},J={class:`mx-auto mt-2 max-w-sm text-sm text-slate-500`},gt={class:`grow space-y-4 overflow-y-auto px-6 py-5`},_t={class:`grid gap-4 sm:grid-cols-2`},vt=[`role`],yt={key:0,class:`mt-1.5 text-xs text-slate-400`},bt={class:`border-t border-slate-100 px-6 py-4`},xt={key:0,role:`alert`,class:`mb-3 text-sm text-red-600`},St={key:1,class:`mb-3 flex items-baseline justify-between text-sm`},Ct={class:`font-semibold text-slate-900`},wt=[`disabled`],Y={key:0,class:`size-4 animate-spin rounded-full border-2 border-white/40 border-t-white`},X=10,Tt={__name:`QuoteRequestModal`,props:{service:{type:Object,required:!0},slug:{type:String,required:!0},defaultCountry:{type:String,default:`US`},currency:{type:String,default:``}},emits:[`close`],setup(t,{emit:o}){let l=t,d=o,ee=S(),p=ie(),v=u(null),C=u(null);re(v,C);let w=_({customer_name:``,customer_email:``,customer_phone:``,message:``}),T=_({});le(w,T,{related:{customer_email:[`contact`],customer_phone:[`contact`]}});let E=u({}),D=u([]),k=u(!1),A=u(null);a([E,D],()=>{A.value=null,delete T.message});let j=u(!1),se=u(!1),M=s(()=>!!l.service.questions?.length),F=s(()=>O(l.service,E.value));function I(){return Object.keys(T).forEach(e=>delete T[e]),w.customer_name.trim()||(T.customer_name=`Please tell us your name.`),!w.customer_email.trim()&&!w.customer_phone.trim()&&(T.contact=`Add an email or a phone number so we can reach you.`),A.value=ne([l.service],E.value,D.value),!(ae([l.service],E.value).length||D.value.length)&&!A.value&&w.message.trim().length<X&&(T.message=M.value?`Answer the questions above, or describe the job here in at least ${X} characters.`:`Please describe the job in at least ${X} characters.`),de(Object.values(T),A.value)}let L=u(``);async function R(){if(!j.value){if(L.value=I(),L.value){ue();return}if(k.value){L.value=`Your files are still uploading. Give them a moment.`;return}try{j.value=!0,await me(l.slug,{customer_name:w.customer_name.trim(),customer_email:w.customer_email.trim()||null,customer_phone:w.customer_phone.trim()||null,message:w.message.trim()||null,website:``,service_id:l.service.id,quote:!0,answers:ae([l.service],E.value),attachments:D.value.map(e=>e.token)}),se.value=!0}catch(e){console.error(e),ee.error(fe(e,`Unable to send your request right now. Please try again.`))}finally{j.value=!1}}}return a([w,E,D],()=>{L.value=``}),(a,o)=>(i(),b(te,{to:`body`},[n(`div`,{ref_key:`overlay`,ref:v,class:`tenant-accent fixed inset-0 z-[10000] flex items-end justify-center bg-slate-900/50 p-0 backdrop-blur-xs sm:items-center sm:p-6`,style:f(h(p)),onClick:o[9]||=x(e=>d(`close`),[`self`])},[n(`div`,{ref_key:`panel`,ref:C,class:`flex max-h-[92dvh] w-full max-w-lg flex-col rounded-t-2xl bg-white shadow-xl sm:rounded-2xl`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`quote-modal-title`},[n(`header`,K,[n(`div`,null,[o[10]||=n(`h2`,{id:`quote-modal-title`,class:`text-lg font-semibold text-slate-900`},` Request a quote `,-1),n(`p`,mt,g(t.service.name),1)]),n(`button`,{type:`button`,class:`btn-ghost -mr-2 !p-2`,"aria-label":`Close`,onClick:o[0]||=e=>d(`close`)},[e(P,{name:`x`,size:20})])]),se.value?(i(),r(`div`,q,[n(`span`,ht,[e(P,{name:`check-circle`,size:30})]),o[11]||=n(`h3`,{class:`mt-4 text-lg font-semibold text-slate-900`},`Request sent!`,-1),n(`p`,J,` We'll get back to you with a price for `+g(t.service.name)+`. `,1),n(`button`,{type:`button`,class:`btn-secondary mt-6`,onClick:o[1]||=e=>d(`close`)},`Done`)])):(i(),r(`form`,{key:1,class:`flex min-h-0 grow flex-col`,novalidate:``,onSubmit:x(R,[`prevent`])},[n(`div`,gt,[o[12]||=n(`p`,{class:`text-sm text-slate-600`},` Tell us what you need and we'll come back to you with a price. No date needed â we can find a time once you know
1what it costs. `,-1),e(N,{modelValue:w.customer_name,"onUpdate:modelValue":o[2]||=e=>w.customer_name=e,label:`Your name`,placeholder:`Jane Smith`,autocomplete:`name`,required:``,error:T.customer_name},null,8,[`modelValue`,`error`]),n(`div`,null,[n(`div`,_t,[e(N,{modelValue:w.customer_email,"onUpdate:modelValue":o[3]||=e=>w.customer_email=e,label:`Email`,type:`email`,placeholder:`[email protected]`,autocomplete:`email`,invalid:!!T.contact},null,8,[`modelValue`,`invalid`]),e(pe,{modelValue:w.customer_phone,"onUpdate:modelValue":o[4]||=e=>w.customer_phone=e,label:`Phone`,"default-country":t.defaultCountry,invalid:!!T.contact},null,8,[`modelValue`,`default-country`,`invalid`])]),n(`p`,{class:y([`mt-1.5 text-xs`,T.contact?`text-red-600`:`text-slate-400`]),role:T.contact?`alert`:void 0},g(T.contact||`Provide an email or a phone number so we can reach you.`),11,vt)]),e(z,{answers:E.value,"onUpdate:answers":o[5]||=e=>E.value=e,files:D.value,"onUpdate:files":o[6]||=e=>D.value=e,uploading:k.value,"onUpdate:uploading":o[7]||=e=>k.value=e,item:t.service,kind:`service`,slug:t.slug,problem:A.value,currency:t.currency},null,8,[`answers`,`files`,`uploading`,`item`,`slug`,`problem`,`currency`]),n(`div`,null,[e(oe,{modelValue:w.message,"onUpdate:modelValue":o[8]||=e=>w.message=e,label:M.value?`Anything else we should know? (optional)`:`What do you need?`,placeholder:M.value?`Anything the questions above did not cover.`:`Describe the job â what needs doing, where, and roughly when.`,rows:4,maxlength:`5000`,required:!M.value,error:T.message},null,8,[`modelValue`,`label`,`placeholder`,`required`,`error`]),!M.value&&!T.message?(i(),r(`p`,yt,` At least `+g(X)+` characters. `)):c(``,!0)])]),n(`footer`,bt,[L.value?(i(),r(`p`,xt,g(L.value),1)):c(``,!0),F.value?(i(),r(`p`,St,[o[13]||=n(`span`,{class:`text-slate-500`},`Your choices add`,-1),n(`span`,Ct,g(h(ce)(F.value,t.currency)),1)])):c(``,!0),n(`button`,{type:`submit`,class:`btn w-full bg-[var(--primary,var(--tenant-default-primary))] text-[var(--primary-fg,#fff)] hover:opacity-90`,disabled:j.value},[j.value?(i(),r(`span`,Y)):(i(),b(P,{key:1,name:`file-text`,size:16})),m(` `+g(j.value?`Sendingâ¦`:`Ask for a quote`),1)],8,wt)])],32))],512)],4)]))}},Z={class:`flex items-center justify-between border-b border-slate-100 px-6 py-4`},Q={class:`text-sm text-slate-500`},Et={class:`text-slate-400`},Dt={key:0,class:`px-6 py-12 text-center`},Ot={class:`mx-auto flex size-14 items-center justify-center rounded-full bg-green-50 text-green-600`},kt={class:`mx-auto mt-2 max-w-sm text-sm text-slate-500`},At={class:`grow space-y-4 overflow-y-auto px-6 py-5`},jt={class:`grid gap-4 sm:grid-cols-2`},Mt=[`role`],Nt={key:0,class:`mt-1.5 text-xs text-slate-400`},$={class:`border-t border-slate-100 px-6 py-4`},Pt={key:0,role:`alert`,class:`mb-3 text-sm text-red-600`},Ft={key:1,class:`mb-3 flex items-baseline justify-between text-sm`},It={class:`font-semibold text-slate-900`},Lt=[`disabled`],Rt={key:0,class:`size-4 animate-spin rounded-full border-2 border-white/40 border-t-white`},zt=10,Bt={__name:`ProductInquiryModal`,props:{product:{type:Object,required:!0},slug:{type:String,required:!0},currency:{type:String,default:`USD`},defaultCountry:{type:String,default:`US`}},emits:[`close`],setup(t,{emit:o}){let l=t,d=o,ee=S(),p=ie(),v=A(),C=u(null),w=u(null);re(C,w);let T=s(()=>!v.canBuy(l.product)),E=s(()=>T.value?[l.product]:[]),D=s(()=>T.value&&!!l.product.allow_attachments),k=u({}),j=u([]),M=u(!1),F=u(null);a([k,j],()=>{F.value=null});let I=_({customer_name:``,customer_email:``,customer_phone:``,message:``}),L=_({});le(I,L,{related:{customer_email:[`contact`],customer_phone:[`contact`]}});let R=u(!1),he=u(!1),ge=s(()=>O(E.value[0],k.value));function _e(){return Object.keys(L).forEach(e=>delete L[e]),I.customer_name.trim()||(L.customer_name=`Please tell us your name.`),!I.customer_email.trim()&&!I.customer_phone.trim()&&(L.contact=`Add an email or a phone number so we can reach you.`),I.message.trim().length<zt&&(L.message=`Please write your question in at least ${zt} characters.`),F.value=ne(E.value,k.value,j.value),de(Object.values(L),F.value)}let B=u(``);a([I,k,j],()=>{B.value=``});async function ve(){if(!R.value){if(B.value=_e(),B.value){ue();return}if(M.value){B.value=`Your files are still uploading. Give them a moment.`;return}try{R.value=!0,await me(l.slug,{customer_name:I.customer_name.trim(),customer_email:I.customer_email.trim()||null,customer_phone:I.customer_phone.trim()||null,message:I.message.trim(),website:``,product_id:l.product.id,answers:ae(E.value,k.value),attachments:D.value?j.value.map(e=>e.token):[]}),he.value=!0}catch(e){console.error(e),ee.error(fe(e,`Unable to send your question right now. Please try again.`))}finally{R.value=!1}}}return(a,o)=>(i(),b(te,{to:`body`},[n(`div`,{ref_key:`overlay`,ref:C,class:`tenant-accent fixed inset-0 z-[10000] flex items-end justify-center bg-slate-900/50 p-0 backdrop-blur-xs sm:items-center sm:p-6`,style:f(h(p)),onClick:o[9]||=x(e=>d(`close`),[`self`])},[n(`div`,{ref_key:`panel`,ref:w,class:`flex max-h-[92dvh] w-full max-w-lg flex-col rounded-t-2xl bg-white shadow-xl sm:rounded-2xl`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`product-inquiry-title`},[n(`header`,Z,[n(`div`,null,[o[10]||=n(`h2`,{id:`product-inquiry-title`,class:`text-lg font-semibold text-slate-900`},` Ask about this product `,-1),n(`p`,Q,[m(g(t.product.name)+` `,1),n(`span`,Et,` · `+g(h(se)(t.product,t.currency)),1)])]),n(`button`,{type:`button`,class:`btn-ghost -mr-2 !p-2`,"aria-label":`Close`,onClick:o[0]||=e=>d(`close`)},[e(P,{name:`x`,size:20})])]),he.value?(i(),r(`div`,Dt,[n(`span`,Ot,[e(P,{name:`check-circle`,size:30})]),o[11]||=n(`h3`,{class:`mt-4 text-lg font-semibold text-slate-900`},`Question sent!`,-1),n(`p`,kt,g(t.product.name)+` â we'll get back to you as soon as possible. `,1),n(`button`,{type:`button`,class:`btn-secondary mt-6`,onClick:o[1]||=e=>d(`close`)},`Done`)])):(i(),r(`form`,{key:1,class:`flex min-h-0 grow flex-col`,novalidate:``,onSubmit:x(ve,[`prevent`])},[n(`div`,At,[e(N,{modelValue:I.customer_name,"onUpdate:modelValue":o[2]||=e=>I.customer_name=e,label:`Your name`,placeholder:`Jane Smith`,autocomplete:`name`,required:``,error:L.customer_name},null,8,[`modelValue`,`error`]),n(`div`,null,[n(`div`,jt,[e(N,{modelValue:I.customer_email,"onUpdate:modelValue":o[3]||=e=>I.customer_email=e,label:`Email`,type:`email`,placeholder:`[email protected]`,autocomplete:`email`,invali
1d:!!L.contact},null,8,[`modelValue`,`invalid`]),e(pe,{modelValue:I.customer_phone,"onUpdate:modelValue":o[4]||=e=>I.customer_phone=e,label:`Phone`,"default-country":t.defaultCountry,invalid:!!L.contact},null,8,[`modelValue`,`default-country`,`invalid`])]),n(`p`,{class:y([`mt-1.5 text-xs`,L.contact?`text-red-600`:`text-slate-400`]),role:L.contact?`alert`:void 0},g(L.contact||`Provide an email or a phone number so we can reach you.`),11,Mt)]),n(`div`,null,[e(oe,{modelValue:I.message,"onUpdate:modelValue":o[5]||=e=>I.message=e,label:`Your question`,placeholder:`Is this in stock? Does it fitâ¦?`,rows:4,maxlength:`5000`,required:``,error:L.message},null,8,[`modelValue`,`error`]),L.message?c(``,!0):(i(),r(`p`,Nt,` At least `+g(zt)+` characters. `))]),T.value?(i(),b(z,{key:0,answers:k.value,"onUpdate:answers":o[6]||=e=>k.value=e,files:j.value,"onUpdate:files":o[7]||=e=>j.value=e,uploading:M.value,"onUpdate:uploading":o[8]||=e=>M.value=e,item:t.product,kind:`product`,slug:t.slug,problem:F.value,currency:t.currency},null,8,[`answers`,`files`,`uploading`,`item`,`slug`,`problem`,`currency`])):c(``,!0)]),n(`footer`,$,[B.value?(i(),r(`p`,Pt,g(B.value),1)):c(``,!0),ge.value?(i(),r(`p`,Ft,[o[12]||=n(`span`,{class:`text-slate-500`},`Your choices add`,-1),n(`span`,It,g(h(ce)(ge.value,t.currency)),1)])):c(``,!0),n(`button`,{type:`submit`,class:`btn w-full bg-[var(--primary,var(--tenant-default-primary))] text-[var(--primary-fg,#fff)] hover:opacity-90`,disabled:R.value},[R.value?(i(),r(`span`,Rt)):(i(),b(P,{key:1,name:`shopping-bag`,size:16})),m(` `+g(R.value?`Sendingâ¦`:`Send question`),1)],8,Lt)])],32))],512)],4)]))}};export{Tt as n,G as r,Bt 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.