PageSourceSearch

https://app.zoca.com/assets/CalenderHome-CiOooWS1.js

js zoca.com collected 2026-09-30 09:41:17 UTC 35,088 bytes, 2 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CalendarGrid-C1Ho1gGE.js","assets/vendor-react-Dw2zQmPu.js","assets/commonjs-helpers-C05_-Ghz.js","assets/app-core-DTTgVEgu.js","assets/vendor-utils-CQ_dDVxl.js","assets/vendor-ui-mAy9LocR.js","assets/vendor-radix-guzGw5-0.js","assets/vendor-router-CtopkIuN.js","assets/vendor-redux-CqVJnD2r.js","assets/vite-preload-helper-BXl3LOEh.js","assets/vendor-date-fns-D1v0qsob.js","assets/useResponsiveHook-ByWCJmBO.js","assets/localDate-Ct7H5iq6.js","assets/app-shared-QFLrTdTF.js","assets/vendor-lodash-DVjWl2dU.js","assets/vendor-tanstack-Dk5vt_tN.js","assets/app-shared-Bk7LbV6o.css","assets/calendar-utils-wOVZT57h.js","assets/app-cn-C2LL9ulS.js","assets/birthday-utils--ptRUdqd.js","assets/avatar-CwcCoxQp.js","assets/staffMembersData-DVIUlUIo.js","assets/avatarColor-DyomOgw_.js","assets/formatters-CvLZ2Q2C.js","assets/useFtuxAnchorRect-CoIvPJl_.js","assets/skeleton-BJiIkxs-.js","assets/activatable-cWgvSTbQ.js","assets/formatInTimezone-BUlZT0UF.js","assets/instant-Jc7z8Pfo.js","assets/workingHoursApi-Ed6tUUWH.js","assets/serviceBlockTimes-BkQYBWly.js","assets/workingHoursQuery-DXcSFr1A.js","assets/button-CFi0D1K4.js","assets/select-Bix8n78g.js","assets/calendar-CqB-V14U.js","assets/popover-QqxJL8eJ.js","assets/badge-CeMSLKTm.js","assets/tooltip-DNw65Jni.js","assets/checkbox-DOrnCsT6.js","assets/SearchInput-DTaqHUou.js","assets/input-group-DrMNcVmx.js","assets/input-D2ulylI3.js","assets/textarea-BekLdUF0.js","assets/clientName-DSrRI4gf.js","assets/useBookingTrigger-DMrhvsei.js","assets/usemobile-BuLrGuzN.js","assets/resourcesApi-GBtgvPpB.js","assets/staffServicesApi-BKxokHwV.js","assets/staffRosterQueries-X3dJ-H7K.js","assets/useTapToPayConfig-Crrqp94h.js","assets/useTapToPayCopy-B8CBzLzi.js","assets/TopBar-MjVkmRVM.js","assets/app-back-btn-wWeMZhZJ.js","assets/useZocaAppActions-B3KlgEzE.js","assets/skeletonRows-bFntY3QY.js","assets/CalendarSidebar-Q54bkyk4.js","assets/bookingSurfaces-BJT5YZoB.js","assets/BookingDialog-Cp54kPfG.js","assets/sheet-JsmlC6HJ.js","assets/WaitlistDrawer-pWggwvMR.js","assets/alert-dialog-CrDXTf99.js","assets/label-Bk74TkBv.js","assets/ClientSelectDialog-BsndjgxE.js","assets/dialog-BvmB9skF.js","assets/ManageClientDialog-DTh37DDO.js","assets/MigrationDemoNotice-CerGeYnT.js","assets/useMigrationDataView-9tF-HhX9.js","assets/drawer-CX599GCC.js","assets/vendor-forms-CVvQPlhB.js","assets/phoneNumber-KFz8ksQo.js","assets/vendor-phone-PbYH35al.js","assets/emailAddress-Dm7OR8Cb.js","assets/CountryCodeSelector-DA0Ng7z1.js","assets/SkeletonBlocks-D-0xzD__.js","assets/card-B8ye2dFa.js","assets/clientSearchPrefill-Cm3-yIW_.js","assets/serviceStaffResolution-CBLz-1gl.js","assets/useFetchServiceAddonsRow-zatgBBMr.js","assets/addonsApi-DKe7Bzya.js","assets/addonGroupsApi-Bfe3H9MY.js","assets/currencyCodeMapping-UPet5m6W.js","assets/DateField-UK8qy0iY.js","assets/manageBookingForm-8N2kiP_1.js","assets/serviceCardDisplay-BSzK5w32.js","assets/serviceUtil-D35t3YPI.js","assets/onlineBookingPolicies-Hs9oFrLe.js","assets/switch-cx-NVRLs.js","assets/dropdown-menu-CM3Fw2BS.js","assets/tabs-Idmy3GtH.js","assets/checkoutPricing-VnMLOSl_.js","assets/coverageNoun-BPKSmxK6.js","assets/offerUtils-yrFxp1-v.js","assets/dateTime-B1i2cMJw.js","assets/momentTokens-BIaQGjeF.js","assets/serviceCatalogQuery-rq7x8H2J.js"])))=>i.map(i=>d[i]);
2import{_ as se}from"./vite-preload-helper-BXl3LOEh.js";import{R as ye,r as n,j as a}from"./vendor-react-Dw2zQmPu.js";import{u as ne,o as O,a9 as ft,t as F,Q as fe,l as Se,m as Ne,aa as pt,R as ht}from"./app-core-DTTgVEgu.js";import{B as _}from"./button-CFi0D1K4.js";import{S as yt,a as xt,b as gt,c as bt,d as Z}from"./select-Bix8n78g.js";import{c as W}from"./app-cn-C2LL9ulS.js";import{X as Ge,aM as pe,aN as _e,aO as Ct,aP as kt,a3 as ue,a2 as vt,w as je,aQ as Tt,v as St,aR as Nt,aS as _t,aT as jt,aU as At}from"./app-shared-QFLrTdTF.js";import{C as Ae}from"./calendar-CqB-V14U.js";import{P as qe,a as Ke,b as $e}from"./popover-QqxJL8eJ.js";import{b as It,c as wt,s as Ie,a as he,f as N,d as X,i as Et,g as me,h as Ot,j as we,p as Mt,k as Dt}from"./vendor-date-fns-D1v0qsob.js";import{v as Lt,al as Pt,aC as Ee,_ as Oe,aD as Bt,ag as Rt,aa as Ft,aE as Ht,ae as zt,aF as Qe,aG as Wt,X as Ut,af as Vt}
2from"./vendor-ui-mAy9LocR.js";import{B as Gt}from"./badge-CeMSLKTm.js";import{T as qt,a as Kt,b as $t}from"./tooltip-DNw65Jni.js";import{C as Qt}from"./checkbox-DOrnCsT6.js";import{S as Yt}from"./SearchInput-DTaqHUou.js";import{s as Ye,g as Ze,h as Zt,a as Xt}from"./staffMembersData-DVIUlUIo.js";import{g as Jt}from"./avatarColor-DyomOgw_.js";import{b as ea,u as ta}from"./vendor-router-CtopkIuN.js";import{t as ae}from"./localDate-Ct7H5iq6.js";import{b as H,d as aa,u as sa,s as na}from"./vendor-tanstack-Dk5vt_tN.js";import{g as Xe,a as Je,u as K,c as Me,f as ra}from"./calendar-utils-wOVZT57h.js";import{w as ia}from"./workingHoursQuery-DXcSFr1A.js";import{b as oa}from"./clientName-DSrRI4gf.js";import{b as la,n as De}from"./serviceBlockTimes-BkQYBWly.js";import{u as ca}from"./useBookingTrigger-DMrhvsei.js";import{u as da}from"./useResponsiveHook-ByWCJmBO.js";import{a as ua}from"./usemobile-BuLrGuzN.js";import{R as ma,l as fa}from"./resourcesApi-GBtgvPpB.js";import{S as pa,l as ha}from"./staffServicesApi-BKxokHwV.js";import{b as ya}from"./staffRosterQueries-X3dJ-H7K.js";import{u as xa}from"./useTapToPayConfig-Crrqp94h.js";import{u as ga}from"./useTapToPayCopy-B8CBzLzi.js";import{T as ba}from"./TopBar-MjVkmRVM.js";import{S as J}from"./skeleton-BJiIkxs-.js";import{s as ee}from"./skeletonRows-bFntY3QY.js";
2function Ca({currentDate:e,viewMode:t,onDateSelect:s,formattedDateRange:r,onTodayClick:i}){const[l,d]=ye.useState(!1),p=n.useMemo(()=>{if(t!=="week")return;const y=It(e),u=wt(e);return{from:y,to:u}},[e,t]),m=(y,u)=>{u&&(s(u),d(!1))},c=()=>{i(),d(!1)};return a.jsxs(qe,{open:l,onOpenChange:d,children:[a.jsx(Ke,{asChild:!0,children:a.jsxs(_,{variant:"outline",className:W("justify-start text-left font-normal bg-white hover:bg-gray-100 text-gray-900 h-8 px-2.5 @min-[640px]:px-3 shadow-none min-w-0 shrink",!e&&"text-muted-foreground"),children:[a.jsx(Lt,{className:"hidden @min-[640px]:block mr-1.5 h-4 w-4 shrink-0"}),a.jsx("span",{className:"text-sm font-medium truncate",children:r})]})}),a.jsxs($e,{className:"w-auto p-0",align:"start",children:[t==="week"?a.jsx(Ae,{mode:"range",selected:p,onSelect:(y,u)=>m(y,u),initialFocus:!0,defaultMonth:e,showOutsideDays:!1,className:"p-3"}):a.jsx(Ae,{mode:"single",selected:e,onSelect:(y,u)=>m(y,u),initialFocus:!0,defaultMonth:e,showOutsideDays:!1,className:"p-3"}),a.jsx("div",{className:"border-t border-gray-200 p-2",children:a.jsx(_,{variant:"outline",size:"sm",onClick:c,className:"w-full h-9",children:"Today"})})]})]})}function et({count:e,onClick:t,className:s}){return a.jsxs(qt,{children:[a.jsx(Kt,{asChild:!0,children:a.jsxs(_,{variant:"outline","aria-label":e>0?`Waitlist — ${e} waiting`:"Waitlist",onClick:t,className:W("relative h-8 w-8 shrink-0 cursor-pointer p-0",s),children:[a.jsx(Pt,{className:"size-4"}),e>0&&a.jsx(Gt,{shape:"number",className:"pointer-events-none absolute -right-1 -top-1",children:e})]})}),a.jsx($t,{side:"bottom",children:"Waitlist"})]})}function ka(e,t,s){const r=e===null,i=e?.length===0,l=t===null,d=t?.length===0;return r&&l&&s?"ALL_BOTH":r&&(d||!s)?"ALL_TEAM":i&&l?"ALL_RESOURCES":null}function Le(e,t,s){if(e===null)return s.filter(i=>i.id!==t).map(i=>i.id);if(e.includes(t))return e.filter(i=>i!==t);const r=[...e,t];return r.length===s.length?null:r}function Pe(e,t){return e===null||e.includes(t)}function Be(e,t){return e===null?t:e.length}function Re(e,t){const s=t.trim().toLowerCase();return s?e.filter(r=>r.name.toLowerCase().includes(s)):[...e]}const Fe=[],va=({member:e})=>e.avatarUrl?a.jsx("img",{src:e.avatarUrl,alt:e.name,className:"size-6 shrink-0 rounded-full object-cover"}):a.jsx("span",{className:W("inline-flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold",Jt(e.avatarColorIndex)),children:e.initials}),Ta=({color:e})=>a.jsx("span",{"aria-hidden":!0,className:"size-6 shrink-0 rounded-full border border-neutral-200",style:e?{backgroundColor:e}:void 0}),He=({checked:e,label:t,onToggle:s,children:r})=>a.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent",children:[a.jsx(Qt,{checked:e,onCheckedChange:s,"aria-label":t}),r,a.jsx("span",{className:"truncate text-sm text-foreground",children:t})]}),te=({icon:e,label:t,isActive:s,onSelect:r})=>a.jsxs("button",{type:"button",onClick:r,className:W("flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm hover:bg-accent",s?"bg-accent font-medium text-foreground":"text-foreground"),children:[a.jsx("span",{className:"flex size-4 shrink-0 items-center justify-center text-muted-foreground",children:e}),a.jsx("span",{className:"truncate",children:t})]}),ze=({children:e})=>a.jsx("p",{className:"px-2 pt-2 pb-1 text-xs font-semibold tracking-[-0.02em] text-muted-foreground uppercase",children:e});function Sa({selectedIds:e,onChange:t,resources:s=Fe,resourceSelectedIds:r=null,onResourceChange:i}){const[l,d]=n.useState(""),p=n.useSyncExternalStore(Ye,Ze),m=n.useMemo(()=>p.filter(x=>x.isServiceProvider&&x.memberStatus==="active"),[p]),c=!!i&&s.length>0,u=m.length+(c?s.length:0)>6,C=u?l:"",h=n.useMemo(()=>Re(m,C),[m,C]),g=n.useMemo(()=>c?Re(s,C):Fe,[c,s,C]),f=ka(e,r,c),S=Be(e,m.length),j=c?Be(r,s.length):0,b=n.useCallback(x=>{if(x==="ALL_TEAM"){t(null),i?.([]);return}if(x==="ALL_RESOURCES"){t([]),i?.(null);return}t(null),i?.(null)},[t,i]),k=n.useCallback(()=>b("ALL_TEAM"),[b]),I=n.useCallback(()=>t([]),[t]),L=n.useCallback(()=>b("ALL_RESOURCES"),[b]),M=n.useCallback(()=>b("ALL_BOTH"),[b]),z=n.useCallback(x=>t(Le(e,x.id,m)),[t,e,m]),P=n.useCallback(x=>i?.(Le(r,x.id,s)),[i,r,s]);if(m.length===0)return null;const A=f==="ALL_BOTH"?"All team and resources":f==="ALL_TEAM"?"All team members":f==="ALL_RESOURCES"?"All resources":c?`${S+j} selected`:`${S} selected`;return a.jsxs(qe,{children:[a.jsx(Ke,{asChild:!0,children:a.jsxs(_,{variant:"outline",size:"sm",className:"h-8 gap-1.5 px-2.5 @min-[640px]:px-3","aria-label":"Filter by team member or resource",children:[a.jsx(Ee,{className:"size-4 shrink-0"}),a.jsx("span",{className:"hidden text-sm @min-[640px]:inline",children:A})]})}),a.jsxs($e,{align:"end",className:"w-72 p-1",children:[u&&a.jsx("div",{className:"p-1",children:a.jsx(Yt,{value:l,onCh
2ange:d,placeholder:"Search"})}),c?a.jsxs(a.Fragment,{children:[a.jsx(te,{icon:a.jsx(Oe,{className:"size-4"}),label:"All team",isActive:f==="ALL_TEAM",onSelect:k}),a.jsx(te,{icon:a.jsx(Bt,{className:"size-4"}),label:"All resources",isActive:f==="ALL_RESOURCES",onSelect:L}),a.jsx(te,{icon:a.jsx(Ee,{className:"size-4"}),label:"All team and resources",isActive:f==="ALL_BOTH",onSelect:M})]}):a.jsx(te,{icon:a.jsx(Oe,{className:"size-4"}),label:f==="ALL_TEAM"?"Deselect all":"Select all",isActive:!1,onSelect:f==="ALL_TEAM"?I:k}),a.jsx("div",{className:"my-1 h-px bg-border"}),a.jsxs("div",{className:"max-h-72 overflow-y-auto",children:[c&&a.jsx(ze,{children:"Team"}),h.map(x=>a.jsx(He,{checked:Pe(e,x.id),label:x.name,onToggle:()=>z(x),children:a.jsx(va,{member:x})},x.id)),c&&a.jsxs(a.Fragment,{children:[a.jsx(ze,{children:"Resources"}),g.map(x=>a.jsx(He,{checked:Pe(r,x.id),label:x.name,onToggle:()=>P(x),children:a.jsx(Ta,{color:x.color})},x.id))]}),h.length===0&&g.length===0&&a.jsxs("p",{className:"px-2 py-3 text-sm text-muted-foreground",children:["No matches for “",C,"”."]})]})]})]})}const Na={day:{full:"Day",short:"Day"},week:{full:"Week",short:"Week"},"compact-day":{full:"Compact Day",short:"C. Day"},"compact-week":{full:"Compact Week",short:"C. Week"}};function _a({formattedDateRange:e,viewMode:t,onViewModeChange:s,onTodayClick:r,onPreviousClick:i,onNextClick:l,onAddClick:d,currentDate:p,onDateSelect:m,onPendingApprovalsClick:c,pendingApprovalsCount:y,onWaitlistClick:u,waitlistCount:C=0,staffFilterIds:h,onStaffFilterChange:g,resourceFilterOptions:f,resourceFilterIds:S=null,onResourceFilterChange:j,hideStaffFilter:b=!1,isHeaderCompact:k=!1,canCreateAppointments:I=!0}){const{canViewWaitlist:L}=Ge();return a.jsx("div",{className:"@container w-full",children:a.jsxs("div",{className:"bg-white border-b border-gray-200 flex items-center justify-between gap-2 p-2 @min-[640px]:p-3 w-full rounded-t-2xl",children:[a.jsxs("div",{className:"flex gap-1.5 @min-[640px]:gap-3 items-center min-w-0",children:[a.jsx(_,{variant:"outline",onClick:r,className:"h-8 px-3 text-sm hidden @min-[640px]:flex",children:"Today"}),a.jsxs("div",{className:"flex gap-1 items-center min-w-0",children:[a.jsx(_,{variant:"ghost",size:"icon",onClick:i,className:W("size-8 shrink-0",k&&"hidden"),"aria-label":"Previous",children:a.jsx(Rt,{className:"size-4"})}),a.jsx(Ca,{currentDate:p,viewMode:t,onDateSelect:m,formattedDateRange:e,onTodayClick:r}),a.jsx(_,{variant:"ghost",size:"icon",onClick:l,className:W("size-8 shrink-0",k&&"hidden"),"aria-label":"Next",children:a.jsx(Ft,{className:"size-4"})})]})]}),a.jsxs("div",{className:"flex gap-1.5 @min-[640px]:gap-2 items-center shrink-0",children:[L&&u&&a.jsx(et,{count:C,onClick:u,className:"hidden @min-[640px]/calendar-page:flex"}),!b&&a.jsx(Sa,{selectedIds:h,onChange:g,resources:f,resourceSelectedIds:S,onResourceChange:j}),a.jsxs(yt,{value:t,onValueChange:s,children:[a.jsxs(xt,{size:"sm",className:"px-2 @min-[640px]:px-3 w-fit text-sm [&>svg.opacity-50]:hidden @min-[640px]:[&>svg.opacity-50]:block *:data-[slot=select-value]:hidden @min-[640px]:*:data-[slot=select-value]:flex","aria-label":"Calendar view mode",children:[a.jsx(Ht,{className:"size-4 @min-[640px]:hidden shrink-0"}),a.jsx(gt,{children:Na[t].full})]}),a.jsxs(bt,{children:[a.jsx(Z,{value:"day",children:"Day"}),a.jsx(Z,{value:"week",children:"Week"}),a.jsx(Z,{value:"compact-day",children:"Compact Day"}),a.jsx(Z,{value:"compact-week",children:"Compact Week"})]})]}),I&&a.jsxs(_,{variant:"default",onClick:d,className:"h-8 px-2.5 shrink-0 text-sm",children:[a.jsx(zt,{className:"size-4"}),a.jsx("span",{className:"hidden @min-[820px]:inline ml-1",children:"Add"})]}),y>0&&a.jsxs(_,{variant:"outline",className:"h-8 text-sm hidden @min-[820px]:flex",onClick:c,children:[a.jsx(Qe,{className:"size-4"})," ",y," Pending"]})]})]})})}function ja({refetch:e}){const[t,s]=n.useState(!1),r=()=>{s(!0),e(),setTimeout(()=>{s(!1)},1e3)};return a.jsx(_,{variant:"outline",size:"icon",onClick:r,children:a.jsx(Wt,{className:W("w-3 h-3",t&&"animate-spin")})})}function Aa(e="week"){const[t,s]=n.useState(new Date),r=ne(),i=O(u=>u.booking.currentViewMode),l=i==="week"||i==="compact-week",d=n.useMemo(()=>l?Xe(new Date(t)):Je(new Date(t)),[t,l]),p=n.useCallback(()=>{s(new Date)},[]),m=n.useCallback(()=>{s(u=>l?Ie(u,7):Ie(u,1))},[l]),c=n.useCallback(()=>{s(u=>l?he(u,7):he(u,1))},[l]),y=n.useCallback(u=>{r(ft(u)),localStorage.setItem("calendar-view-mode",u),(u==="day"||u==="compact-day")&&s(new Date)},[r,s]);return{currentDate:t,setCurrentDate:s,viewMode:i||e,changeViewMode:y,dateRange:d,goToToday:p,goToPrevious:m,goToNext:c}}const We={startHour:8,endHour:18};function Ia(e){const[t,s]=n.useState(We),r=n.useCallback(l=>{s(l)},[]),i=n.useCallback(()=>{s(We)},[]);return{bookingHours:t,updateBookingHours:r,resetBookingHours:i}}function wa(e,t,s,r){const i=O(h=>h.user.locationInfo),{data:l}=H(ia(s)),{data:d,refetch:p}
2=H({queryKey:[pe.GET_ALL_CALENDER_BOOKINGS,e.startDate,e.endDate,r,s],queryFn:()=>Ct({entityId:s||"",startDate:N(e.startDate,"yyyy-MM-dd"),endDate:N(he(e.endDate,1),"yyyy-MM-dd"),providerId:r}),enabled:!!s,staleTime:3e4}),{data:m,refetch:c}=aa({queryKey:[pe.LIST_BOOKINGS,_e.PENDING,s,r],queryFn:({pageParam:h=1})=>kt({entityId:s||"",status:_e.PENDING,providerId:r,page:h,limit:10}),getNextPageParam:h=>{if(h&&!(h?.currentPage>=h?.totalPages))return h?.currentPage+1},initialPageParam:1,select:h=>({bookings:h.pages.flatMap(g=>g.bookings)||[],totalCount:h.pages[0]?.totalCount||0}),enabled:!!s,staleTime:3e4}),y=n.useMemo(()=>la(l,t),[l,t]),u=n.useMemo(()=>{const h=i?.timezone||"",g=[];return d?.entries?.forEach(f=>{if(f.type==="TIME_OFF"&&g.push({title:f.name||"Time Off",startTime:h?K(f.startTime,h):f.startTime,endTime:h?K(f.endTime,h):f.endTime,color:f.color,id:f.id,bookingType:f.type,providerId:f.providerId,resourceIds:f.resourceIds,seriesId:f.seriesId}),f.type==="APPOINTMENT"){const S=oa({firstName:f?.clientFirstName,lastName:f?.clientLastName}),j=(f.items||[]).map(b=>b?.name||"").filter(Boolean);f.items?.forEach(b=>{const k=b.name||"";g.push({title:S||k,subTitle:S?k:"",startTime:h?K(b.startTime,h):b.startTime,endTime:h?K(b.endTime,h):b.endTime,color:b.color,id:f.id,itemId:b?.id||"",bookingType:f.type,status:f?.status||"",saleStatus:f?.saleStatus,clientId:f?.clientId,bookingServiceNames:j,clientDateOfBirth:f.clientDateOfBirth,clientIsBlocked:f.clientIsBlocked,formStatus:f.formStatus,providerId:b.providerId,assignedStaffIds:b.assignedStaffIds,resourceIds:b.resourceIds,seriesId:f.seriesId})})}}),g},[d,i?.timezone]),C=n.useCallback(()=>{p(),c()},[p,c]);return{bookingHoursByDay:y,formattedBookings:u,pendingApprovalsData:m,refetchBookings:C}}function Ea(e,t,s){const r=n.useRef(!1);n.useEffect(()=>{!e||!t||r.current||(r.current=!0,F("calendar-view",{range_start_date:N(e.startDate,"yyyy-MM-dd"),range_end_date:N(e.endDate,"yyyy-MM-dd"),view:t,...s?{}:{is_mobile:!0}}))},[e,t,s]);const i=n.useCallback(c=>{F("calendar-today-click",{previous_range_start_date:N(c.startDate,"yyyy-MM-dd"),previous_range_end_date:N(c.endDate,"yyyy-MM-dd"),...s?{}:{is_mobile:!0}})},[s]),l=n.useCallback(c=>{F("calendar-week-nav-change",{click_prev:c==="prev",click_next:c==="next",...s?{}:{is_mobile:!0}})},[s]),d=n.useCallback((c,y,u)=>{const h=u==="week"||u==="compact-week"?Xe(y):Je(y);F("calendar-date-click",{previous_range_start_date:N(c.startDate,"yyyy-MM-dd"),previous_range_end_date:N(c.endDate,"yyyy-MM-dd"),new_range_start_date:N(h.startDate,"yyyy-MM-dd"),new_range_end_date:N(h.endDate,"yyyy-MM-dd"),...s?{}:{is_mobile:!0}})},[s]),p=n.useCallback((c,y)=>{F("calendar-dropdown",{prev_property:c,new_property:y,...s?{}:{is_mobile:!0}})},[s]),m=n.useCallback((c,y,u)=>{F("calendar-addbutton-click",{mode:"add",source:"add_button",date:N(c,"yyyy-MM-dd"),business_id:y??"",location_id:u??"",...s?{}:{is_mobile:!0}})},[s]);return{trackTodayClick:i,trackWeekNavChange:l,trackDateClick:d,trackViewModeChange:p,trackAddButtonClick:m}}function Oa({dateRange:e,viewMode:t,currentDate:s,isDesktop:r,businessId:i,locationId:l,goToToday:d,goToPrevious:p,goToNext:m,changeViewMode:c,setCurrentDate:y,handleAddEvent:u}){const C=ne(),{trackTodayClick:h,trackWeekNavChange:g,trackDateClick:f,trackViewModeChange:S,trackAddButtonClick:j}=Ea(e,t,r),b=n.useCallback(()=>{h(e),d()},[e,d,h]),k=n.useCallback(()=>{g("prev"),p()},[p,g]),I=n.useCallback(()=>{g("next"),m()},[m,g]),L=n.useCallback(A=>{f(e,A,t),y(A)},[e,t,y,f]),M=n.useCallback(A=>{S(t,A),c(A)},[t,c,S]),z=n.useCallback(()=>{j(s,i,l),u(s,"add_button")},[s,u,i,l,j]),P=n.useCallback(()=>{C(fe({action:"pending-appointment",payload:{}}))},[C]);return{handleTodayClick:b,handleWeekNavPrevious:k,handleWeekNavNext:I,handleDateSelect:L,handleViewModeChange:M,handleAddButtonClick:z,handlePendingApprovalsClick:P}}const Ma=()=>{const e=O(i=>i.booking.draftBooking),{openBooking:t}=ca(),s=n.useCallback(i=>{switch(i.type){case"manage-appointment":{const{day:l,hour:d,minute:p,staffId:m}=i.payload;let c={};if(d!==void 0&&p!==void 0){const{startTime:y,endTime:u}=Me(l,d,p);c={startTime:y,endTime:u}}else{const y=X(l,{hours:9,minutes:0}),{startTime:u}=Me(y,9,0);c={startTime:u,endTime:void 0}}m&&(c.staffId=m),t("manage-appointment",c,{manageAppointmentSource:"slot_click"});break}case"booking-details":{const l=i.payload;
2l.bookingType==="TIME_OFF"||l.type==="TIME_OFF"?t("manage-appointment",i.payload,{manageAppointmentSource:"edit"}):t("booking-details",i.payload,{detailsSource:"calendar_tile"});break}}},[t]),r=n.useCallback((i,l)=>{const d=l?{manageAppointmentSource:l}:void 0;if(i){let m=ae(i);if(m.getHours()===0&&m.getMinutes()===0){const y=new Date;m=X(m,{hours:y.getHours(),minutes:y.getMinutes()})}const c=De(m);t("manage-appointment",{startTime:c,endTime:void 0},d);return}if(e&&e.startTime){const m=ae(e.date),[c,y]=e.startTime.split(":").map(Number),u=X(m,{hours:c,minutes:y});let C;if(e.endTime){const[h,g]=e.endTime.split(":").map(Number);C=X(m,{hours:h,minutes:g})}t("manage-appointment",{startTime:u,endTime:C},d);return}const p=De(new Date);t("manage-appointment",{startTime:p,endTime:void 0},d)},[t,e]);return{handleCalendarAction:s,handleAddEvent:r}},Da=(e,t)=>{const s=e.assignedStaffIds;return s?.length?s.some(r=>r===t.id||r===t.userEntityId||r===t.memberId):e.bookableType==="RESOURCE"?!1:e.providerId===t.id||e.providerId===t.userEntityId||e.providerId===t.memberId},Vs=(e,t)=>t.kind==="STAFF"?Da(e,t.staff):(e.resourceIds??[]).includes(t.id)||e.bookableType==="RESOURCE"&&e.providerId===t.id,Gs=e=>({kind:"STAFF",id:e.id,name:e.name,staff:e}),La=e=>({kind:"RESOURCE",id:e.id,name:e.name,color:e.calendarColor,availabilityMode:e.availabilityMode});function Pa(e,t){const s=new Set;if(t===null)return s;const r=new Set(t);for(const i of e)r.has(i.id)&&(i.id&&s.add(i.id),i.userEntityId&&s.add(i.userEntityId),i.memberId&&s.add(i.memberId));return s}function Ba(e,t,s,r){const i=e.bookableType==="RESOURCE",l=e.resourceIds??[];return(r===null?i||l.length>0:l.some(p=>r.has(p))||i&&!!e.providerId&&r.has(e.providerId))?!0:i?!1:e.providerId?t===null||s.has(e.providerId):t===null||t.length>0}function Ra(e,t,s,r){if(t===null&&s===null)return[...e];const i=Pa(r,t),l=s===null?null:new Set(s);return e.filter(d=>Ba(d,t,i,l))}const Fa=e=>{if(!e)return;const t=e;if((t.type==="FIXED"||t.type==="STARTS_AT")&&typeof t.value=="number")return t.value;if(t.type==="RANGE"&&typeof t.range?.min=="number")return t.range.min},Ha=e=>{if(!e)return;const t=e;return typeof t.value=="number"&&t.value>0?t.value:void 0},za=e=>({serviceName:e.serviceName??"",serviceId:e.serviceId,serviceVariationId:e.serviceVariationId,priceOverride:Fa(e.priceOverride),durationOverride:Ha(e.durationOverride)}),Wa=(e,t,s)=>{n.useEffect(()=>{e&&Zt(e,t)},[e,t]);const r=H({queryKey:[pa.LIST_LOCATION_ASSIGNMENT_SERVICES,s],queryFn:()=>ha(s),enabled:!!s,staleTime:300*1e3}),i=n.useMemo(()=>new Set((e??[]).filter(l=>l.assignment.memberLocationId&&l.member.isServiceProvider).map(l=>l.assignment.memberLocationId)),[e]);n.useEffect(()=>{const l=r.data;if(!l)return;const d=new Map;for(const p of l){const m=d.get(p.locationMemberId)??[];m.push(za(p)),d.set(p.locationMemberId,m)}i.forEach(p=>{Xt(p,d.get(p)??[])})},[r.data,i])},Ua=[],Va=e=>e.map(La),Ga=["calendar_tile","appointment_tab","enquiries_tab"],qa=e=>Ga.includes(e),Ka=["add_button","slot_click","edit","enquiries_tab","clients_tab"],$a=e=>Ka.includes(e),Qa=e=>{for(const s of["HH:mm","H:m","HH:mm:ss"]){const r=Ot(e,s,new Date);if(we(r))return r}const t=Mt(e);return we(t)?t:null};function Ya(){const{bookingHours:e}=Ia(),t=O(o=>o.user.locationInfo),s=O(o=>o.user.businessInfo),r=O(o=>o.user.accessToken),i=da(),l=["lg","xl","2xl"].includes(i),d=O(o=>o.booking.draftBooking),p=n.useRef(void 0),m=ne(),c=sa(),[y,u]=ea(),{currentDate:C,setCurrentDate:h,viewMode:g,changeViewMode:f,goToToday:S,goToPrevious:j,goToNext:b,dateRange:k}=Aa("week"),I=O(o=>o.appData.isCommandCentreOpen),M=ua()&&I,z=n.useMemo(()=>ra(k.startDate,k.endDate,M),[k,M]),[P,A]=n.useState(null),[x,re]=n.useState(null),U=n.useSyncExternalStore(Ye,Ze),V=ue("viewOtherStaffCalendars"),$=ue("createOwnAppointments"),ie=ue("createAppointmentsForOtherStaff"),w=$||ie,G=vt(),E=H({queryKey:[je.GET_MY_STAFF_MEMBER],queryFn:St,enabled:!!r,staleTime:300*1e3,retry:!1,retryOnMount:!1}),Q=E.data?.memberId??null,xe=E.data?.assignment??null,ge=E.data?.role?.roleName,B=n.useMemo(()=>{if(G)return!V&&!!Q;const o=ge?.toLowerCase();return!!Q&&!!o&&o!=="sp"&&o!=="admin"},[G,V,Q,ge]),be=H({...ya(s?.entityId,{limit:100}),enabled:!!s?.entityId&&E.isFetched&&!B,staleTime:300*1e3}),oe=n.useMemo(()=>
2{if(!B)return P;const o=xe?.memberLocationId;return o?[o]:[]},[B,xe?.memberLocationId,P]),{bookingHoursByDay:tt,formattedBookings:Ce,pendingApprovalsData:at,refetchBookings:st}=wa(k,e,t?.entityId,B?Q??void 0:void 0),nt=n.useMemo(()=>Ra(Ce,oe,x,U),[Ce,oe,x,U]),{handleCalendarAction:ke,handleAddEvent:ve}=Ma(),rt=n.useCallback((...o)=>{w&&ve(...o)},[w,ve]),it=n.useCallback((...o)=>{const[R]=o;R.type==="manage-appointment"&&!w||ke(...o)},[w,ke]),le=H({queryKey:[je.GET_STAFF_MEMBERS,"media-map",t?.entityId],queryFn:t?()=>Nt(t.entityId):na,enabled:!!t?.entityId&&E.isFetched&&!B,staleTime:300*1e3}),ot=n.useMemo(()=>{const o=new Map;if(!le.data)return o;for(const R of le.data){const v=R.media?.[0]?.src;v&&o.set(R.id,v)}return o},[le.data]),ce=n.useMemo(()=>{const o=E.data;return o?.assignment?{member:{memberId:o.memberId,userEntityId:o.userEntityId,entityId:o.entityId,firstName:o.firstName??"",lastName:o.lastName??"",email:o.email,phone:o.phone,gender:o.gender,title:o.title,specializations:o.specializations,certifications:o.certifications,description:o.description,isBookableOnline:o.isBookableOnline,isServiceProvider:o.isServiceProvider,showOnWebsite:o.showOnWebsite,createdAt:o.createdAt??"",updatedAt:o.updatedAt},assignment:o.assignment,role:o.role??{roleId:"",roleName:""},inviteStatus:"accepted"}:null},[E.data]),lt=n.useMemo(()=>B?ce?[ce]:null:be.data?.rows??null,[B,be.data?.rows,ce]);Wa(lt,ot,t?.entityId);const de=Oa({dateRange:k,viewMode:g,currentDate:C,isDesktop:l,businessId:s?.entityId,locationId:t?.entityId,goToToday:S,goToPrevious:j,goToNext:b,changeViewMode:f,setCurrentDate:h,handleAddEvent:rt});n.useEffect(()=>{const o=y.get("data"),R=v=>{if(v.type==="CREATE_APPOINTMENT"&&w)de.handleAddButtonClick();else if(v.type==="OPEN_BOOKING"&&v.payload&&typeof v.payload=="object"&&"bookingId"in v.payload){const{bookingId:T,detailsSource:D}=v.payload;m(fe({action:"booking-details",payload:{id:T},detailsSource:qa(D)?D:"calendar_tile"})),c.fetchQuery({queryKey:[pe.GET_BOOKING_BY_ID,T],queryFn:()=>Tt({bookingId:T})}).then(Y=>{Y?.startAt&&h(K(Y.startAt,t?.timezone))}).catch(Y=>Se.error("Failed to resolve deep-linked booking date:",Y))}else if(v.type==="CREATE_APPOINTEMNT_PREFILL"&&v.payload&&w){const T={...v.payload};if(T.startTime&&typeof T.startTime=="string"){const D=Qa(T.startTime);D?T.startTime=N(D,"HH:mm"):delete T.startTime}if(T.date){const D=new Date(T.date);isNaN(D.getTime())?delete T.date:(T.date=D,h(D))}m(fe({action:"manage-appointment",payload:T,manageAppointmentSource:$a(v.source)?v.source:"enquiries_tab"}))}};if(o)try{const v=JSON.parse(decodeURIComponent(o));R(v),u({},{replace:!0})}catch(v){Se.error("Failed to parse URL search params:",v)}},[y,u,m,de,h,c,t?.timezone,w]),n.useEffect(()=>{if(!d?.date){p.current=void 0;return}const o=ae(d.date),R=N(o,"yyyy-MM-dd"),v=p.current?N(ae(p.current),"yyyy-MM-dd"):void 0;if(!p.current){p.current=d.date;return}if(v&&R!==v){if(g==="day"||g==="compact-day")Et(o,C)||h(d.date);else if(g==="week"||g==="compact-week"){const T=me(o).getTime();(T<me(k.startDate).getTime()||T>me(k.endDate).getTime())&&h(d.date)}}p.current=d.date},[d,g,k,C,h]);const[ct,Te]=n.useState(!1),dt=n.useCallback(()=>Te(!0),[]),{data:q=Ua}=H({queryKey:[ma.GET_ALL_RESOURCES,t?.entityId,"ACTIVE_ALL_PAGES"],queryFn:()=>fa({entityId:t?.entityId??"",filters:{isActive:!0}}),enabled:!!t?.entityId,select:Va,staleTime:5*6e4}),ut=n.useMemo(()=>x===null?q:q.filter(o=>x.includes(o.id)),[q,x]),mt=n.useMemo(()=>q.filter(o=>o.kind==="RESOURCE").map(o=>({id:o.id,name:o.name,color:o.color})),[q]);return{resourceColumns:ut,resourceFilterOptions:mt,resourceFilterIds:x,setResourceFilterIds:re,isWaitlistOpen:ct,setIsWaitlistOpen:Te,handleWaitlistOpen:dt,currentDate:C,viewMode:g,formattedDateRange:z,dateRange:k,bookingHours:e,bookingHoursByDay:tt,formattedBookings:nt,pendingApprovalsData:at,...de,handleCalendarAction:it,refetchBookings:st,isDesktop:l,isHeaderCompact:M,canCreateAppointments:w,staffFilterIds:oe,setStaffFilterIds:A,isOwnCalendarLocked:B}}const Za=()=>{const e=O(y=>y.user.showTapToPayNudge),{isTapToPayAvailable:t}=xa(),{title:s,bannerImage:r,nudgeHeadline:i,nudgeBody:l}=ga(),d=ne();if(!(t&&e))return null;const m=()=>{F("calendar-taptopay-nudge-enable-click"),d(Ne({showTapToPayNudge:!1})),_t("NAVIGATE",{pathname:"/stripe/collect",params:{}})},c=()=>{F("calendar-taptopay-nudge-dismiss-click"),d(Ne({showTapToPayNudge:!1}))};return a.jsxs("div",{className:"absolute bottom-4 left-4 right-4 z-50 rounded-2xl border border-gray-200 bg-white p-4 shadow-lg flex flex-col gap-3",children:[a.jsx(_,{variant:"ghost",size:"icon",type:"button","aria-label":"Dismiss",onClick:c,className:"absolute top-2 right-2 p-1 rounded-full text-gray-500 hover:bg-gray-100",children:a.jsx(Ut,{className:"size-4"})}),a.jsx("img",{src:r,alt:s,className:"w-full max-w-[320px] self-center rounded-lg object-contain"}),a.jsxs("div",{className:"flex flex-col gap-1 pr-6",children:[a.jsx("h3",{className:"text-base font-semibold text-gray-900 leading-tight",children:i}),a.jsx("p",{className:"text-sm text-muted-foreground leading-5",children:l})]}),a.jsx(_,{onClick:m,size:"sm",type:"button",className:"self-start px-6 bg-foreground text-white hover:bg-foreground
2/90",children:"Enable Tap to Pay"})]})},Xa=()=>{const e=O(s=>s.user?.locationInfo?.timezone??""),t=n.useMemo(()=>{if(!e||Intl.DateTimeFormat().resolvedOptions().timeZone===e)return null;const r=new Date,i=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"short"}).formatToParts(r).find(d=>d.type==="timeZoneName")?.value,l=Dt(r,e,"xxx");return`${e}${i?` (${i}, GMT${l})`:` (GMT${l})`}`},[e]);return t?a.jsxs("span",{className:"truncate",children:["Times are shown in ",t,"."]}):null},Ja=ye.memo(Xa),Ue=7,Ve=8,es=[{day:0,top:1,span:1},{day:1,top:0,span:2},{day:2,top:3,span:1},{day:3,top:2,span:1},{day:4,top:4,span:2},{day:6,top:1,span:1}],ts=()=>a.jsxs("div",{className:"flex min-w-[800px] flex-1 flex-col overflow-hidden",children:[a.jsxs("div",{className:"z-30 flex shrink-0 bg-white shadow-sm",children:[a.jsx("div",{className:"w-12 shrink-0 border-b border-r border-gray-200 md:w-20"}),a.jsx("div",{className:"flex min-w-0 flex-1",children:ee(Ue).map((e,t)=>a.jsxs("div",{className:"flex min-w-0 flex-1 flex-col items-center gap-1.5 border-b border-r border-gray-200 py-2 last:border-r-0",children:[a.jsx(J,{className:"h-3 w-8"}),a.jsx(J,{className:"h-5 w-6"})]},e))})]}),a.jsxs("div",{className:"flex flex-1 items-stretch overflow-hidden",children:[a.jsx("div",{className:"flex w-12 shrink-0 flex-col border-r border-gray-200 bg-white md:w-20",children:ee(Ve).map((e,t)=>a.jsx("div",{className:"relative h-20 shrink-0",children:a.jsx(J,{className:"absolute right-1 top-0 h-2.5 w-8 md:right-2"})},e))}),a.jsx("div",{className:"relative flex min-w-0 flex-1",children:ee(Ue).map((e,t)=>a.jsxs("div",{className:"relative min-w-0 flex-1 border-r border-gray-200 last:border-r-0",children:[ee(Ve).map((s,r)=>a.jsx("div",{className:"h-20 border-b border-gray-100"},s)),es.filter(s=>s.day===t).map(s=>
2a.jsx(J,{className:"absolute inset-x-1 rounded-md",style:{top:`${s.top*80+6}px`,height:`${s.span*80-12}px`}},`${s.day}-${s.top}`))]},e))})]})]}),as=ye.memo(ts),ss=({enabled:e=!0}={})=>{const t=pt(),s=!!t&&e,{data:r}=H({queryKey:[jt.LIST_WAITLIST_ENTRIES,"count",{entityId:t}],queryFn:()=>At({entityId:t,status:["WAITING"]}),enabled:s,staleTime:3e4});return{totalCount:s?r??0:0}},ns=n.lazy(()=>se(()=>import("./CalendarGrid-C1Ho1gGE.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54]))),rs=n.lazy(()=>se(()=>import("./CalendarSidebar-Q54bkyk4.js"),__vite__mapDeps([55,1,2,8,3,4,5,6,7,9,18,56,13,14,15,16,25,54])).then(e=>({default:e.CalendarSidebar}))),is=n.lazy(()=>se(()=>import("./BookingDialog-Cp54kPfG.js"),__vite__mapDeps([57,1,2,58,6,7,18,5,8,3,4,9,11,44,17,10,27,28,56,13,14,15,16,25,54]))),os=n.lazy(()=>se(()=>import("./WaitlistDrawer-pWggwvMR.js"),__vite__mapDeps([59,1,2,32,6,7,5,18,58,13,3,4,8,9,14,15,16,60,61,42,33,62,63,39,40,41,64,65,66,67,68,69,70,71,72,45,73,74,25,54,75,23,22,26,76,77,38,78,79,80,81,34,10,35,27,28,82,83,84,85,86,87,88,36,21,89,90,91,92,93,94,44,17,37,12,31,29,43,30,11,46,47,48,49,50,51,52,53,24])));
2function ls(){const{currentDate:e,viewMode:t,resourceColumns:s,formattedDateRange:r,bookingHours:i,bookingHoursByDay:l,formattedBookings:d,pendingApprovalsData:p,handleTodayClick:m,handleWeekNavPrevious:c,handleWeekNavNext:y,handleDateSelect:u,handleViewModeChange:C,handleAddButtonClick:h,handlePendingApprovalsClick:g,handleCalendarAction:f,refetchBookings:S,isDesktop:j,isHeaderCompact:b,canCreateAppointments:k,staffFilterIds:I,setStaffFilterIds:L,resourceFilterOptions:M,resourceFilterIds:z,setResourceFilterIds:P,isOwnCalendarLocked:A,isWaitlistOpen:x,setIsWaitlistOpen:re,handleWaitlistOpen:U}=Ya(),V=ta(),$=ht(),ie=n.useCallback(()=>V($("/dashboard/staff/time-clock")),[V,$]),{isWaitlistEnabled:w,canViewWaitlist:G}=Ge(),{totalCount:E}=ss({enabled:w&&G});return a.jsxs("div",{className:"@container/calendar-page bg-background flex flex-col relative size-full",children:[a.jsx(ba,{title:"Calendar",subtitle:a.jsx(Ja,{}),showAppBackButton:!0,actions:a.jsxs(a.Fragment,{children:[p?.totalCount?a.jsxs(_,{variant:"outline",className:"lg:hidden text-sm",onClick:g,"aria-label":`${p.totalCount} pending approvals`,title:"Pending approvals",children:[a.jsx(Qe,{className:"size-4"})," ",p.totalCount," Pending"]}):null,G&&a.jsx(et,{count:E,onClick:U,className:"@min-[640px]/calendar-page:hidden"}),a.jsxs(_,{variant:"outline",size:"sm",onClick:ie,"aria-label":"Time clock",title:"Time clock",children:[a.jsx(Vt,{className:"h-4 w-4"}),"Time clock"]}),a.jsx(ja,{refetch:S})]})}),a.jsxs("div",{className:"flex flex-col gap-2 items-center pb-3 pt-2 px-3 w-full flex-1 min-h-0",children:[a.jsxs("div",{className:"flex-1 flex flex-row grow items-start min-h-0 min-w-0 overflow-hidden relative rounded-2xl shrink-0 w-full",children:[a.jsxs("div",{className:"flex-1 flex flex-col h-full min-w-0",children:[a.jsx(_a,{formattedDateRange:r,viewMode:t,onViewModeChange:C,onTodayClick:m,onPreviousClick:c,onNextClick:y,onAddClick:h,currentDate:e,onDateSelect:u,onPendingApprovalsClick:g,pendingApprovalsCount:p?.totalCount||0,staffFilterIds:I,onStaffFilterChange:L,resourceFilterOptions:M,resourceFilterIds:z,onResourceFilterChange:P,hideStaffFilter:A,isHeaderCompact:b,canCreateAppointments:k,onWaitlistClick:U,waitlistCount:E}),a.jsx(n.Suspense,{fallback:a.jsx(as,{}
2),children:a.jsx(ns,{currentDate:e,viewMode:t,bookingHours:i,bookingHoursByDay:l,bookings:d,onAction:f,staffFilterIds:I,resourceColumns:s,canCreateAppointments:k})})]}),j&&a.jsx(n.Suspense,{fallback:null,children:a.jsx(rs,{})})]}),!j&&a.jsx(n.Suspense,{fallback:null,children:a.jsx(is,{})}),x&&a.jsx(n.Suspense,{fallback:null,children:a.jsx(os,{open:x,onOpenChange:re})}),a.jsx(Za,{})]})]})}const qs=Object.freeze(Object.defineProperty({__proto__:null,default:ls},Symbol.toStringTag,{value:"Module"}));export{qs as C,Vs as b,Gs as t,Wa 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.