@happychef/reservation-sidebar 2.8.20 → 2.8.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ Arguments: `+Array.prototype.slice.call(O).join("")+`
7
7
  ===== Checking date availability for ${e} guests on ${c} =====`),console.log("Restaurant data floors:",b.floors?"present":"missing"),console.log("Table settings:",JSON.stringify(b["table-settings"]||{},null,2));let h=b?.["table-settings"]||{},u=h.isInstalled===true&&h.assignmentMode==="automatic"&&b.floors&&Array.isArray(b.floors);if(console.log(`Table assignment is ${u?"ENABLED":"DISABLED"} for date ${c}`),!eo(b,c,q,e,W,n,a,s))return console.log(`Date ${c} fails basic availability check`),false;if(!u)return console.log(`Table assignment disabled, date ${c} is available`),true;console.log(`Getting available timeblocks for ${c}`);let g=Wo(b,c,q,e,W,n,a,s);if(console.log(`Found ${Object.keys(g).length} available timeblocks before table check`),Object.keys(g).length===0)return console.log(`No available timeblocks on ${c}, date is unavailable`),false;console.log(`Checking table availability for each timeblock on ${c}`);let R=false,T=0;for(let L of Object.keys(g)){if(T++,n&&!to(b,c,L,n)){console.log(`Time ${L} doesn't match giftcard meal requirements`);continue}if(console.log(`Checking table availability for ${L} on ${c} for ${e} guests`),no(b,c,L,e,q,r,s)){console.log(`Found available time ${L} with table assignment!`),R=true;break}}return console.log(`Checked ${T}/${Object.keys(g).length} timeblocks`),console.log(`Date ${c} with table check: ${R?"Available":"Unavailable"}`),R}ub.exports={isDateAvailableWithTableCheck:ro};});var Bb=s0(()=>{var{isTimeAvailable:so}=tM(),Ro={_id:"poer","general-settings":{zitplaatsen:30,uurOpVoorhand:4,dagenInToekomst:90,maxGasten:8,intervalReservatie:15,duurReservatie:120,minutenTotEinde:135,showNoticeForMaxGuests:0,noticePhoneNumber:"",storedNumber:76},menu:[{name:"POER Menu",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"12:00",endHour:"23:00",daysOfWeek:["zaterdag","dinsdag","woensdag","donderdag","vrijdag"],storedNumber:36,_id:"674a9033c1956dd233bafaad"},{name:"A la carte",startDate:"2024-11-30",endDate:"2030-01-01",startHour:"12:00",endHour:"14:00",daysOfWeek:["dinsdag","woensdag","donderdag","vrijdag"],storedNumber:28,_id:"674a9084c1956dd233bafaae"},{name:"Ik weet het nog niet",startDate:"2024-11-30",endDate:"2030-01-01",startHour:"12:00",endHour:"14:00",daysOfWeek:["dinsdag","woensdag","donderdag","vrijdag"],storedNumber:41,_id:"674a90bc64cc52acdd5e6cc2"},{name:"Lunch",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"12:00",endHour:"14:00",daysOfWeek:["dinsdag","woensdag","donderdag","vrijdag"],storedNumber:23,_id:"674adb4e8d6385fb343499f7"},{name:"A la carte",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"18:30",endHour:"20:30",daysOfWeek:["dinsdag","woensdag","donderdag"],storedNumber:50,_id:"674adbf58d6385fb343499f8"},{name:"Ik weet het nog niet",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"18:30",endHour:"20:30",daysOfWeek:["dinsdag","donderdag","woensdag"],storedNumber:54,_id:"674adc208d6385fb343499f9"}],mededeling:[{mededeling:"Gelieve er rekening mee te houden dat we op vrijdagavond en zaterdagavond enkel ons POER menu serveren.",startDate:"2024-11-01",endDate:"2030-01-30",startTime:"18:30",endTime:"20:30",daysOfWeek:["vrijdag","zaterdag"],storedNumber:95,_id:"674ade0a8d6385fb343499fa"}],settings:{pageTitle:"Reserveer nu",generalNotification:"",alignment:"fullScreenColor",backgroundBlur:"blurBackground",storedNumber:61},colors:{backgroundType:"solid",backgroundColor:"#e0debe",gradientStartColor:"#FFFFFF",gradientEndColor:"#000000",animationType:"none",widgetBackgroundColor:"#000000",widgetTextColor:"#FFFFFF",textColor:"#000000",containerColor:"#FFFFFF",buttonColor:"#000000",buttonTextColor:"#FFFFFF",storedNumber:81},exceptions:[{title:"Extra mensen donderdagmiddag",type:"Opening",timeframe:"lunch",startDate:"2024-12-05",endDate:"2024-12-05",startHour:"12:00",endHour:"16:00",maxSeats:"34",daysOfWeek:["donderdag"],storedNumber:74,_id:"67507dc98fb61d6afd54acb0"},{title:"Extra personen donderdagavond",type:"Uitzondering",timeframe:"dinner",startDate:"2024-12-05",endDate:"2024-12-05",startHour:"18:30",endHour:"23:00",maxSeats:"27",daysOfWeek:["donderdag"],storedNumber:88,_id:"67507e3383d7f2de02628f4a"},{title:"Cong\xE9 Periode 22/12 tot 9/01",type:"Sluiting",timeframe:"Volledige Dag",startDate:"2024-12-22",endDate:"2025-01-09",daysOfWeek:[],storedNumber:89,_id:"67511bb38fb61d6afd54acba"}],"openinghours-lunch":{schemeSettings:{Tuesday:{enabled:true,startTime:"12:00",endTime:"13:30",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Wednesday:{enabled:true,startTime:"12:00",endTime:"16:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Thursday:{enabled:true,startTime:"12:00",endTime:"16:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Friday:{enabled:true,startTime:"12:30",endTime:"13:30",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]}},storedNumber:2},"openinghours-dinner":{schemeSettings:{Tuesday:{enabled:true,startTime:"18:30",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"24",shiftsEnabled:false,shifts:[]},Wednesday:{enabled:true,startTime:"16:00",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"24",shiftsEnabled:false,shifts:[]},Thursday:{enabled:true,startTime:"16:00",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"24",shiftsEnabled:false,shifts:[]},Friday:{enabled:true,startTime:"18:30",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Saturday:{enabled:true,startTime:"18:30",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]}},storedNumber:6},fonts:{titleFont:{font:"Poppins",weight:"400"},subtitleFont:{font:"Poppins",weight:"400"},labelFont:{font:"Poppins",weight:"400"},buttonFont:{font:"Poppins",weight:"400"}},theme:{id:10,title:"Herfstbladeren",color:"#D35400",image:"/static/media/default-theme.webp"}},fo=[{guests:10,time:"12:00",date:"2024-12-18"},{guests:100,time:"15:00",date:"2024-12-04"}];console.log("--- Is Time Available Tests ---");var Lb="2024-12-10",Nb=1e3,uo=["12:00","12:15","13:00","19:00","20:00","20:15"];uo.forEach(b=>{let c=so(Ro,Lb,b,fo,Nb);console.log(`Is ${b} on ${Lb} available for ${Nb} guests?`,c);});});var Tb=s0((cq,mb)=>{var Xb=u2(),{shifts:Oq,parseTime:uM,getMealTypeByTime:lo}=F1();function Lo(){let b=Xb().tz("Europe/Brussels");return b.hours()*60+b.minutes()}function No(b,c,q){let e=Xb().tz("Europe/Brussels").format("YYYY-MM-DD");if(q!==e)return b;console.log(`Applying stop time filter for today (${q})`);let W=c?.["general-settings"]||{},n=Lo(),a=W.ontbijtStop||null,s=W.lunchStop||null,r=W.dinerStop||null,f=a?uM(a):null,h=s?uM(s):null,u=r?uM(r):null,B={},g=0,R=0,T=0;for(let L in b){if(!b.hasOwnProperty(L))continue;let N=lo(L),E=false;N==="breakfast"&&f!==null&&!isNaN(f)&&n>=f?(E=true,g++):N==="lunch"&&h!==null&&!isNaN(h)&&n>=h?(E=true,R++):N==="dinner"&&u!==null&&!isNaN(u)&&n>=u&&(E=true,T++),E||(B[L]=b[L]);}return g>0&&console.log(`Stop time filter removed ${g} breakfast slots.`),R>0&&console.log(`Stop time filter removed ${R} lunch slots.`),T>0&&console.log(`Stop time filter removed ${T} dinner slots.`),B}mb.exports={filterTimeblocksByStopTimes:No};});var hb=s0((Aq,gb)=>{function Bo(b){let c=parseInt(b.split(":")[0],10);return c>=4&&c<11?"breakfast":c>=11&&c<16?"lunch":c>=16&&c<23?"dinner":null}function Xo(b){if(!b)return null;if(b.$numberInt)return parseInt(b.$numberInt,10);if(typeof b=="number")return b;if(typeof b=="string"){let c=parseInt(b,10);return isNaN(c)?null:c}return null}function mo(b,c,q){return b.filter(e=>e.date===c&&e.time===q).reduce((e,W)=>e+(parseInt(W.guests,10)||0),0)}function To(b,c,q,e,W){let n={};for(let[a,s]of Object.entries(q)){let r=Bo(a);if(!r){n[a]=s;continue}let f=b[`max-arrivals-${r}`];if(!f){n[a]=s;continue}let h=Xo(f[a]);if(h===null){n[a]=s;continue}mo(e,c,a)+W<=h&&(n[a]=s);}return n}gb.exports={filterTimeblocksByMaxArrivals:To};});var Sb=s0((oq,yb)=>{function lM(b){let c=parseInt(b.split(":")[0],10);return c>=4&&c<11?"breakfast":c>=11&&c<16?"lunch":c>=16&&c<23?"dinner":null}function l0(b,...c){console.log(`[MaxGroupsFilter] ${b}`,...c);}function ho(b){if(b==null)return null;if(typeof b=="object"&&b!==null&&"$numberInt"in b){let c=parseInt(b.$numberInt,10);return isNaN(c)?null:c}if(typeof b=="number")return Number.isInteger(b)?b:null;if(typeof b=="string"){let c=parseInt(b,10);return isNaN(c)?null:c}return null}function yo(b,c,q,e,W){l0(`--- Running MaxGroupsFilter for Date: ${c}, Guests: ${W} ---`);let n=Object.keys(b).filter(h=>h.startsWith("max-groups-"));l0("Received restaurantData max-group keys:",n.length>0?n:"None found");let a={},s=parseInt(W,10);if(isNaN(s)||s<=0)return l0(`Invalid guest count (${W}). Returning all ${Object.keys(q).length} input blocks unfiltered.`),q;let r=e.filter(h=>h.date===c);l0(`Relevant reservations on ${c}: ${r.length}`),l0(`Input timeblocks count: ${Object.keys(q).length}`);let f={};r.forEach(h=>{let u=lM(h.time);u&&(f[u]||(f[u]=[]),f[u].push(h));}),l0("Reservations grouped by meal type:",f);for(let[h,u]of Object.entries(q)){let B=lM(h);if(l0(`
8
8
  Checking Time: ${h} -> Determined Meal: ${B}`),!B){l0(` Time ${h} has no associated meal type. Keeping block.`),a[h]=u;continue}let g=`max-groups-${B}`,R=b[g];if(l0(` Looking for settings using key: "${g}"`),!R||typeof R!="object"){l0(` No settings found for key "${g}". Filter doesn't apply. Keeping block.`),a[h]=u;continue}l0(` Found settings for ${B}:`,JSON.stringify(R));let T=true,L=Object.keys(R).map(N=>parseInt(N,10)).filter(N=>!isNaN(N)&&N>0).sort((N,E)=>N-E);l0(` Defined numeric limit sizes to check for ${B}: [${L.join(", ")}]`);for(let N of L){let E=String(N);if(l0(` Checking Limit Condition: Groups of size >= ${N}`),s>=N){l0(` Applicable: Booking guests (${s}) >= Limit threshold (${N})`);let k=ho(R[E]);if(l0(` Max groups allowed for >=${N} is: ${k} (raw setting: ${JSON.stringify(R[E])})`),k===null||k<0){l0(` Skipping check: Invalid or non-positive max count defined for size ${N}.`);continue}let v=(f[B]||[]).filter(m=>{let F=parseInt(m.guests,10);return !isNaN(F)&&F>=N}).length;if(l0(` Count of existing groups >=${N} found in ${B}: ${v}`),v+1>k){l0(` *** VIOLATION DETECTED *** for limit >=${N}.`),l0(` (Existing Groups: ${v} + New Group: 1 = ${v+1}, which is > Max Allowed: ${k})`),l0(` Blocking time ${h} due to this violation.`),T=false;break}else l0(` OK: Limit for >=${N} not exceeded. (Existing: ${v} + New: 1 <= Max: ${k})`);}else l0(` Not Applicable: Booking guests (${s}) < Limit threshold (${N}). Skipping this check.`);}T?(l0(` \u2705 Result for time ${h}: ALLOWED (passed all applicable checks)`),a[h]=u):l0(` \u274C Result for time ${h}: BLOCKED (failed at least one limit check)`);}return l0(`--- MaxGroupsFilter Finished. Output timeblocks count: ${Object.keys(a).length} ---`),a}yb.exports={filterTimeblocksByMaxGroups:yo,getMealType:lM};});var j1=s0((qq,vb)=>{var So={...qM(),...R2(),...l2()},vo={...oM()},Co={...s2(),...h1()},Eo={...ob(),...N2(),...eM(),...iM(),...tM(),...fM(),...lb(),...F1(),...Bb()},ko={...Tb(),...hb(),...Sb()};vb.exports={...So,...vo,...Co,...Eo,...ko};});var Jb=s0((hM,$b)=>{(function(b,c){typeof hM=="object"&&typeof $b<"u"&&typeof n2=="function"?c(d2()):typeof define=="function"&&define.amd?define(["../moment"],c):c(b.moment);})(hM,(function(b){var c="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),q="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),e=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],W=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,n=b.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,s){return a?/-MMM-/.test(s)?q[a.month()]:c[a.month()]:c},monthsRegex:W,monthsShortRegex:W,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:e,longMonthsParse:e,shortMonthsParse:e,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xE9\xE9n minuut",mm:"%d minuten",h:"\xE9\xE9n uur",hh:"%d uur",d:"\xE9\xE9n dag",dd:"%d dagen",w:"\xE9\xE9n week",ww:"%d weken",M:"\xE9\xE9n maand",MM:"%d maanden",y:"\xE9\xE9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(a===1||a===8||a>=20?"ste":"de")},week:{dow:1,doy:4}});return n}));});function R0(b,{insertAt:c}={}){if(!b||typeof document>"u")return;let q=document.head||document.getElementsByTagName("head")[0],e=document.createElement("style");e.type="text/css",c==="top"&&q.firstChild?q.insertBefore(e,q.firstChild):q.appendChild(e),e.styleSheet?e.styleSheet.cssText=b:e.appendChild(document.createTextNode(b));}R0(`.new-reservation-page .value-selector{display:flex;flex-direction:column;gap:15px;margin-bottom:20px}.new-reservation-page .non-absolute{position:relative!important}.new-reservation-page .non-absolute:before{background:none}.new-reservation-page .predefined-values{display:flex;gap:10px}.new-reservation-page .predefined-value-button{flex:1;padding:10px;border:1px solid #ccc;border-radius:var(--border-radius);background-color:var(--color-white);cursor:pointer;font-size:1rem;transition:background-color .3s ease}.new-reservation-page .predefined-value-button.active,.new-reservation-page .predefined-value-button:hover{background-color:var(--color-blue);color:var(--color-white)}.new-reservation-page .slider-container{display:flex;align-items:center;gap:15px}.new-reservation-page .slider{flex:1;appearance:none;-webkit-appearance:none;height:5px;background:#ddd;border-radius:5px;outline:none}.new-reservation-page .slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;background:var(--color-blue);cursor:pointer;border-radius:50%}.new-reservation-page .value-input{width:80px;padding:10px;border:1px solid #ccc;border-radius:var(--border-radius);font-size:1rem}
9
9
  `);var pA=({setGuests:b,value:c,onChange:q})=>{let e=[1,2,3,"4+"],[W,n]=c0.useState(c||""),[a,s]=c0.useState(false),r=u=>{u==="4+"?(s(true),n(4),b(4),q({target:{name:"guests",value:4}})):(s(false),n(u),b(u),q({target:{name:"guests",value:u}}));},f=u=>{let B=u.target.value;n(B),b(B),q({target:{name:"guests",value:B}});},h=u=>{let B=u.target.value;n(B),b(B),q({target:{name:"guests",value:B}});};return c0__default.default.createElement("div",{className:"value-selector",translate:"no"},c0__default.default.createElement("div",{className:"predefined-values"},e.map(u=>c0__default.default.createElement("button",{key:u,type:"button",className:`predefined-value-button ${W==u||u==="4+"&&a?"active":""}`,onClick:()=>r(u)},u==="4+"?"4+":`${u} p`))),c0__default.default.createElement(framerMotion.AnimatePresence,null,a&&c0__default.default.createElement(framerMotion.motion.div,{className:"slider-container",initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0}},c0__default.default.createElement("input",{type:"range",min:"4",max:"15",step:"1",value:W,onChange:f,className:"slider non-absolute"}),c0__default.default.createElement("input",{type:"number",name:"guests",value:W,onChange:h,className:"value-input",min:"4",max:"100",step:"1"}))))},a2=pA;var s1=x0(p1());var yz=x0(p1()),Sz=b=>{let c=(0, yz.default)().tz("Europe/Brussels").startOf("day");return b.clone().add(6,"days").endOf("day").isBefore(c)},vz=(b,c)=>b.isSame(c,"day");R0(`.new-reservation-page .calendar-container{position:relative;width:100%}.new-reservation-page .calendar-container .calendar-display{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;user-select:none;text-align:left;border-radius:5px}.new-reservation-page .calendar-container .calendar-display span:first-child{flex-grow:1}.new-reservation-page .calendar-container .calendar{position:absolute;z-index:1000;width:100%;background-color:#fff;border:1px solid #ccc;margin-top:5px;padding:10px;border-radius:10px;animation:fadeInCalendar .3s ease-in-out;box-shadow:0 2px 10px #0000001a}@keyframes fadeInCalendar{0%{opacity:0}to{opacity:1}}.new-reservation-page .calendar-container .availability-hold-btn{font-size:10px}.new-reservation-page .calendar-container .calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:8px;flex-wrap:wrap}.new-reservation-page .calendar-container .calendar-header button{background-color:transparent;border:none;cursor:pointer;font-size:18px}.new-reservation-page .calendar-container .calendar-header span{font-size:15px;color:gray;font-weight:500}.new-reservation-page .calendar-container .calendar-weeks-wrapper{overflow:hidden;position:relative;width:100%}.new-reservation-page .calendar-container .calendar-table{width:100%;border-collapse:collapse}.new-reservation-page .calendar-container .calendar-table th,.new-reservation-page .calendar-container .calendar-table td{width:14.28%;text-align:center;padding:5px}.calendar-container .calendar-table th{color:#666;font-weight:400;padding-bottom:10px}.new-reservation-page .calendar-container .calendar-table td{vertical-align:middle;cursor:pointer;border:none;opacity:1;position:relative}.new-reservation-page .calendar-container .calendar-table td.empty-day{cursor:default}.new-reservation-page .calendar-container .calendar-table td:hover .day-square.available{transform:scale(1.05)}.new-reservation-page .calendar-container .day-square{position:relative;width:38px;height:38px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;flex-direction:column;transition:all .2s ease;font-size:16px;margin:0 auto}.new-reservation-page .calendar-container .day-number{line-height:1;z-index:2}.new-reservation-page .calendar-container .available .day-square{background-color:#cfc;color:#060}.new-reservation-page .calendar-container .available:hover .day-square{background-color:#b3ffb3}.new-reservation-page .calendar-container .available:active .day-square{background-color:#9f9}.new-reservation-page .calendar-container .unavailable .day-square{background-color:#8b000021;color:#8b0000}.new-reservation-page .calendar-container .gray-out .day-square{background-color:#e0e0e0;color:#999;cursor:not-allowed}.new-reservation-page .calendar-container .selected .day-square{background-color:#060;color:#cfc}.new-reservation-page .calendar-container .has-blocked-slots .day-square{background-color:#fff3e0;color:#e65100}.new-reservation-page .calendar-container .has-blocked-slots:hover .day-square{background-color:#ffe0b2}.new-reservation-page .calendar-container .has-blocked-slots.selected .day-square{background-color:#e65100;color:#fff3e0}.new-reservation-page .calendar-container .calendar-table td.unavailable,.new-reservation-page .calendar-container .calendar-table td.gray-out{cursor:not-allowed}.new-reservation-page .calendar-container .calendar-table td.unavailable:hover .day-square,.new-reservation-page .calendar-container .calendar-table td.gray-out:hover .day-square{transform:none}.new-reservation-page .calendar-container .calendar-table td{border:none}.new-reservation-page .calendar-container .arrow{margin-left:auto;color:gray;display:flex;align-items:center}.new-reservation-page .calendar-container .available .availability-badge{background:#38a169}.new-reservation-page .calendar-container .selected .availability-badge{background:#2d3748}@media screen and (max-width:900px){.calendar-container .day-square{width:35px!important;height:35px!important;font-size:15px!important}.calendar-container .calendar-header span{font-size:12px}.new-reservation-page .calendar-container .availability-toggle-btn{padding:5px 8px;font-size:11px}}
10
- `);var R1=x0(j1());var LM=class{constructor(c=6e4){this.cache=new Map,this.ttl=c;}generateKey(c,...q){return `${c}::${JSON.stringify(q)}`}get(c){let q=this.cache.get(c);return q?Date.now()-q.timestamp>this.ttl?(this.cache.delete(c),null):q.value:null}set(c,q){this.cache.set(c,{value:q,timestamp:Date.now()});}clear(){this.cache.clear();}cleanup(){let c=Date.now();for(let[q,e]of this.cache.entries())c-e.timestamp>this.ttl&&this.cache.delete(q);}},m2=new LM;setInterval(()=>m2.cleanup(),3e4);var c1=(b,c,...q)=>{let e=m2.generateKey(b,...q),W=m2.get(e);if(W!==null)return W;let n=c(...q);return m2.set(e,n),n};var n1={nl:{reservationStepOne:{errors:{openingHoursNotSet:"Openingstijden niet ingesteld.",clickHereToSet:"Klik hier om uw openingsuren in te stellen."},modes:{withLimits:"Met Limieten",unlimited:"Onbeperkt",openingHours:"Openingsuren",free:"Vrij"},fields:{time:"Tijd"},messages:{searchingTables:"Beschikbare tafels zoeken...",noTablesAvailable:"Geen specifieke tafels beschikbaar voor deze selectie."},warnings:{unlimitedMode:"Onbeperkt zal geen rekening houden met maximum limieten."}},calendar:{selectDatePlaceholder:"Selecteer een datum",today:"Vandaag",tomorrow:"Morgen",prevWeek:"Vorige week",nextWeek:"Volgende week",dayHeaders:["Ma","Di","Wo","Do","Vr","Za","Zo"],seatsQuestion:"Zitplaatsen?"},timeSelector:{shifts:{breakfast:"Ontbijt",lunch:"Lunch",dinner:"Diner"},selectMeal:"Selecteer een maaltijd",selectTime:"Selecteer een tijd",noDateSelected:"Selecteer eerst een datum.",noTimes:"Geen beschikbare tijden.",back:"Terug",reservations:"Reservaties",guests:"Gasten"},tableSelector:{label:"Selecteer beschikbare tafel(s):",table:"Tafel",max:"Max",noTables:"Geen specifieke tafels beschikbaar voor deze tijd/gasten combinatie.",manual:"Handmatig"}},en:{reservationStepOne:{errors:{openingHoursNotSet:"Opening hours not set.",clickHereToSet:"Click here to set your opening hours."},modes:{withLimits:"With Limits",unlimited:"Unlimited",openingHours:"Opening Hours",free:"Free"},fields:{time:"Time"},messages:{searchingTables:"Searching for available tables...",noTablesAvailable:"No specific tables available for this selection."},warnings:{unlimitedMode:"Unlimited will not take into account maximum limits."}},calendar:{selectDatePlaceholder:"Select a date",today:"Today",tomorrow:"Tomorrow",prevWeek:"Previous week",nextWeek:"Next week",dayHeaders:["M","T","W","T","F","S","S"],seatsQuestion:"Seating?"},timeSelector:{shifts:{breakfast:"Breakfast",lunch:"Lunch",dinner:"Dinner"},selectMeal:"Select a meal",selectTime:"Select a time",noDateSelected:"Please select a date first.",noTimes:"No available times.",back:"Back",reservations:"Reservations",guests:"Guests"},tableSelector:{label:"Select available table(s):",table:"Table",max:"Max",noTables:"No specific tables available for this time/guest combination.",manual:"Manual"}},fr:{reservationStepOne:{errors:{openingHoursNotSet:"Horaires non d\xE9finies.",clickHereToSet:"Cliquez ici pour d\xE9finir vos horaires."},modes:{withLimits:"Avec Limites",unlimited:"Illimit\xE9",openingHours:"Horaires",free:"Libre"},fields:{time:"Heure"},messages:{searchingTables:"Recherche de tables disponibles...",noTablesAvailable:"Aucune table sp\xE9cifique disponible pour cette s\xE9lection."},warnings:{unlimitedMode:"Illimit\xE9 ne tiendra pas compte des limites maximales."}},calendar:{selectDatePlaceholder:"S\xE9lectionnez une date",today:"Aujourd'hui",tomorrow:"Demain",prevWeek:"Semaine pr\xE9c\xE9dente",nextWeek:"Semaine suivante",dayHeaders:["Lu","Ma","Me","Je","Ve","Sa","Di"],seatsQuestion:"Places ?"},timeSelector:{shifts:{breakfast:"Petit-d\xE9jeuner",lunch:"D\xE9jeuner",dinner:"D\xEEner"},selectMeal:"S\xE9lectionnez un repas",selectTime:"S\xE9lectionnez une heure",noDateSelected:"Veuillez d'abord s\xE9lectionner une date.",noTimes:"Aucun horaire disponible.",back:"Retour",reservations:"R\xE9servations",guests:"Convives"},tableSelector:{label:"S\xE9lectionnez les table(s) disponibles :",table:"Table",max:"Max",noTables:"Aucune table sp\xE9cifique disponible pour cette combinaison temps/convives.",manual:"Manuel"}}};var kb=c0.memo(({guests:b,selectedDate:c,onSelectDate:q,autoExpand:e,reservationMode:W,restaurantData:n,startDate:a,onWeekChange:s,reservations:r,giftcard:f,zitplaats:h,isAdmin:u=false})=>{let B=localStorage.getItem("preferredLanguage")||"nl",g=n1[B].calendar,[R,T]=c0.useState(e||false),[L,N]=c0.useState(false),E=c0.useRef(null),k=c0.useRef(null),y=(0, s1.default)().tz("Europe/Amsterdam").add(1,"year").endOf("day");c0.useEffect(()=>{e&&T(true);},[e]),c0.useEffect(()=>{let x=H=>{E.current&&!E.current.contains(H.target)&&(T(false),N(false));};return document.addEventListener("mousedown",x),()=>{document.removeEventListener("mousedown",x);}},[]),c0.useEffect(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null);},[]);let v=()=>{k.current&&(clearTimeout(k.current),k.current=null),N(true);},m=(x=1e3)=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{N(false),k.current=null;},x);},F=c0.useCallback((x,H,$=[])=>{if(x.isBefore(H,"day")||x.isAfter(y,"day"))return 0;let q0=x.format("YYYY-MM-DD");if(W==="vrije_keuze")return 21;if(W!=="met_limieten"&&!L)return (0, R1.isDateAvailable)(n,q0,r,-1e4,$,null,u)?21:0;let K=n?.["table-settings"]||{},Z=K.isInstalled===true&&K.assignmentMode==="automatic"&&(L||W==="met_limieten"),C=M0=>Z?c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,q0,r,M0,$,null,u,null,h||null):c1("isDateAvailable",R1.isDateAvailable,n,q0,r,M0,$,null,u);if(!C(1))return 0;if(C(21))return 21;let a0=1,O0=21,I=1;for(;a0<=O0;){let M0=Math.floor((a0+O0)/2);C(M0)?(I=M0,a0=M0+1):O0=M0-1;}return I},[n,r,f,u,W,L]),_=c0.useMemo(()=>{if(!R)return [];let x=[],H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=a||H,q0=n?.["blocked-slots"]||[],K=u?(n?.exceptions||[]).filter(M0=>M0.type==="Sluiting"&&M0.timeframe==="Volledige Dag"):[],Z=$.clone().startOf("month"),C=$.clone().endOf("month"),a0=n?.["table-settings"]||{},O0=a0.isInstalled===true&&a0.assignmentMode==="automatic"&&W==="met_limieten",I=Z.clone();for(;I.isSameOrBefore(C,"day");){let M0=I.format("YYYY-MM-DD"),N0;if(W==="vrije_keuze")N0=I.isBetween(H,y,null,"[]");else {let w0=W!=="met_limieten"?-1e4:b,h0=W==="met_limieten"?f:null;O0?N0=c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,M0,r,w0,q0,h0,u,null,h||null):N0=c1("isDateAvailable",R1.isDateAvailable,n,M0,r,w0,q0,h0,u);}let _0=F(I,H,q0);x.push({date:I.clone(),isPast:I.isBefore(H,"day"),isFuture:I.isAfter(y,"day"),isAvailable:N0,maxGuestsAvailable:_0,hasBlockedSlots:K.some(w0=>{let h0=w0.startDate||w0.date,A=w0.endDate||w0.date;if(!h0||!A||M0<h0||M0>A)return false;let i=w0.daysOfWeek;if(Array.isArray(i)&&i.length>0){let t=I.clone().locale("nl").format("dddd").toLowerCase(),l=I.clone().locale("en").format("dddd").toLowerCase(),D=i.map(j=>j.toLowerCase());return D.includes(t)||D.includes(l)}return true})}),I.add(1,"day");}return x},[R,a,b,W,n,r,f,h,L,u]),w=x=>{x.isAvailable&&!x.isPast&&!x.isFuture&&(q(x.date.format("YYYY-MM-DD")),T(false),N(false));},J=()=>{let x=a.clone().subtract(1,"month").startOf("month"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day");if(x.clone().endOf("month").isBefore(H,"day")){console.log("Cannot go to previous month. It is in the past.");return}s(x);},Q=()=>{let x=a.clone().add(1,"month").startOf("month");s(x);},i0=()=>{if(!c)return g.selectDatePlaceholder;let x=(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam").startOf("day"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=H.clone().add(1,"day");return x.isSame(H,"day")?g.today:x.isSame($,"day")?g.tomorrow:x.format("dddd D MMMM YYYY")},A0=a?(x=>{let $=a.clone().startOf("month").day(),q0=$===0?6:$-1,K=[];for(let O0=0;O0<q0;O0++)K.push(null);K.push(...x);let Z=K.length,C=Math.ceil(Z/7);for(;K.length<C*7;)K.push(null);let a0=[];for(let O0=0;O0<C;O0++){let I=K.slice(O0*7,O0*7+7);a0.push(I);}return a0})(_):[],S=g.dayHeaders,V=x=>x>=21?"20+":String(x);return c0__default.default.createElement("div",{className:"calendar-container",ref:E},c0__default.default.createElement("div",{className:"calendar-display",onClick:()=>T(!R)},c0__default.default.createElement("span",null,i0()),c0__default.default.createElement("span",{className:"arrow"},c0__default.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",style:{transform:R?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"}},c0__default.default.createElement("path",{d:"M7 10l5 5 5-5",fill:"none",stroke:"currentColor",strokeWidth:"2"})))),R&&a&&c0__default.default.createElement("div",{className:"calendar"},c0__default.default.createElement("div",{className:"calendar-header"},c0__default.default.createElement("button",{type:"button",onClick:J,"aria-label":g.prevWeek},"<"),c0__default.default.createElement("span",null,a.format("MMMM YYYY")),c0__default.default.createElement("button",{type:"button",onClick:Q,"aria-label":g.nextWeek},">"),c0__default.default.createElement("button",{type:"button",className:`availability-hold-btn ${L?"active":""}`,"aria-pressed":L,"aria-label":"Houd ingedrukt om beschikbaarheden te tonen",onMouseDown:v,onMouseUp:()=>m(1e3),onMouseLeave:()=>m(1e3),onTouchStart:v,onTouchEnd:()=>m(1e3),onTouchCancel:()=>m(1e3),onKeyDown:x=>{(x.key===" "||x.key==="Enter")&&v();},onKeyUp:x=>{(x.key===" "||x.key==="Enter")&&m(1e3);},style:{fontSize:"15px",color:"gray",fontWeight:"450",textDecoration:"underline"}},g.seatsQuestion)),c0__default.default.createElement("div",{className:"calendar-weeks-wrapper"},c0__default.default.createElement("table",{className:"calendar-table"},c0__default.default.createElement("thead",null,c0__default.default.createElement("tr",{translate:"no"},S.map((x,H)=>c0__default.default.createElement("th",{key:H},x)))),c0__default.default.createElement("tbody",null,A0.map((x,H)=>c0__default.default.createElement("tr",{key:H,translate:"no"},x.map(($,q0)=>{if(!$)return c0__default.default.createElement("td",{key:q0,className:"empty-day"});let K=c&&vz($.date,(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam")),Z=[];return $.isPast?Z.push("gray-out"):$.isAvailable?Z.push("available"):Z.push("unavailable"),K&&Z.push("selected"),$.hasBlockedSlots&&Z.push("has-blocked-slots"),c0__default.default.createElement("td",{key:q0,className:Z.join(" "),onClick:()=>w($),style:{"--animation-order":q0+H*7}},c0__default.default.createElement("div",{className:`day-square ${L?"showing-availabilities":""}`},c0__default.default.createElement("span",{className:"day-number"},L?V($.maxGuestsAvailable):$.date.date())))}))))))))});kb.displayName="Calendar";var wb=kb;var BM=x0(p1()),_o=({guests:b,formData:c,handleChange:q,resetFormDataFields:e,restaurantData:W,reservations:n,startDate:a,onWeekChange:s,reservationMode:r,isAdmin:f=false})=>{let h=B=>{let g=(0, BM.default)(B).format("YYYY-MM-DD");console.log("Selected date:",g),q({target:{name:"date",value:g}}),e(["time"]);},u=a?a.clone().startOf("month"):(0, BM.default)().startOf("month");return c0__default.default.createElement("div",{className:"form-group date-selector-container"},c0__default.default.createElement(wb,{guests:b,selectedDate:c.date||null,onSelectDate:h,autoExpand:false,reservationMode:r,restaurantData:W,startDate:u,onWeekChange:s,reservations:n,giftcard:c.giftcard,zitplaats:c.zitplaats,isAdmin:f}))},xb=_o;R0(`.new-reservation-page .time-selector-container{position:relative}.new-reservation-page .time-display{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;user-select:none;text-align:left;border-radius:5px}.new-reservation-page .time-display span:first-child{flex-grow:1}.new-reservation-page .time-selector{position:absolute;z-index:1000;width:100%;max-height:350px;overflow-y:auto;background-color:#fff;border:1px solid #ccc;padding:10px;border-radius:10px;animation:fadeInTimeSelector .3s ease-in-out;top:75px}.new-reservation-page .time-toggle-container{display:flex;gap:8px;padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid #eee}.new-reservation-page .time-toggle-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:20px;border:1px solid #ddd;background-color:#f5f5f5;color:#666;font-size:13px;cursor:pointer;transition:all .2s ease;font-family:inherit}.new-reservation-page .time-toggle-btn:hover{background-color:#e8e8e8;border-color:#ccc}.new-reservation-page .time-toggle-btn.active{background-color:var(--color-blue, #48aaaf);border-color:var(--color-blue, #48aaaf);color:#fff}.new-reservation-page .time-toggle-btn.active:hover{background-color:var(--color-blue, #48aaaf);filter:brightness(.95)}.new-reservation-page .time-toggle-btn svg{flex-shrink:0}.new-reservation-page .time-count{font-weight:400;opacity:.9}@keyframes fadeInTimeSelector{0%{opacity:0}to{opacity:1}}.new-reservation-page .time-period{margin-bottom:15px}.new-reservation-page .time-period-label{font-weight:700;margin-bottom:5px}.new-reservation-page .time-options{display:flex;flex-wrap:wrap;gap:5px}.new-reservation-page .time-option{padding:8px 12px;background-color:#cfc;color:#060;border-radius:5px;cursor:pointer;transition:background-color .2s ease}.new-reservation-page .time-option:hover{background-color:#b3ffb3}.new-reservation-page .time-option.selected{background-color:#060;color:#cfc}.new-reservation-page .time-option.blocked{background-color:#fff3e0;color:#e65100}.new-reservation-page .time-option.blocked:hover{background-color:#ffe0b2}.new-reservation-page .time-option.blocked.selected{background-color:#e65100;color:#fff3e0}.new-reservation-page .info-text{color:#666;font-style:italic}.new-reservation-page .arrow{margin-left:auto;color:gray;display:flex;align-items:center}@media screen and (max-width:480px){.new-reservation-page .time-option{padding:6px 10px;font-size:14px}.new-reservation-page .time-toggle-btn{padding:5px 10px;font-size:12px;gap:4px}.new-reservation-page .time-toggle-btn svg{width:12px;height:12px}}
10
+ `);var R1=x0(j1());var LM=class{constructor(c=6e4){this.cache=new Map,this.ttl=c;}generateKey(c,...q){return `${c}::${JSON.stringify(q)}`}get(c){let q=this.cache.get(c);return q?Date.now()-q.timestamp>this.ttl?(this.cache.delete(c),null):q.value:null}set(c,q){this.cache.set(c,{value:q,timestamp:Date.now()});}clear(){this.cache.clear();}cleanup(){let c=Date.now();for(let[q,e]of this.cache.entries())c-e.timestamp>this.ttl&&this.cache.delete(q);}},m2=new LM;setInterval(()=>m2.cleanup(),3e4);var c1=(b,c,...q)=>{let e=m2.generateKey(b,...q),W=m2.get(e);if(W!==null)return W;let n=c(...q);return m2.set(e,n),n};var n1={nl:{reservationStepOne:{errors:{openingHoursNotSet:"Openingstijden niet ingesteld.",clickHereToSet:"Klik hier om uw openingsuren in te stellen."},modes:{withLimits:"Met Limieten",unlimited:"Onbeperkt",openingHours:"Openingsuren",free:"Vrij"},fields:{time:"Tijd"},messages:{searchingTables:"Beschikbare tafels zoeken...",noTablesAvailable:"Geen specifieke tafels beschikbaar voor deze selectie."},warnings:{unlimitedMode:"Onbeperkt zal geen rekening houden met maximum limieten."}},calendar:{selectDatePlaceholder:"Selecteer een datum",today:"Vandaag",tomorrow:"Morgen",prevWeek:"Vorige week",nextWeek:"Volgende week",dayHeaders:["Ma","Di","Wo","Do","Vr","Za","Zo"],seatsQuestion:"Zitplaatsen?"},timeSelector:{shifts:{breakfast:"Ontbijt",lunch:"Lunch",dinner:"Diner"},selectMeal:"Selecteer een maaltijd",selectTime:"Selecteer een tijd",noDateSelected:"Selecteer eerst een datum.",noTimes:"Geen beschikbare tijden.",back:"Terug",reservations:"Reservaties",guests:"Gasten"},tableSelector:{label:"Selecteer beschikbare tafel(s):",table:"Tafel",max:"Max",noTables:"Geen specifieke tafels beschikbaar voor deze tijd/gasten combinatie.",manual:"Handmatig"}},en:{reservationStepOne:{errors:{openingHoursNotSet:"Opening hours not set.",clickHereToSet:"Click here to set your opening hours."},modes:{withLimits:"With Limits",unlimited:"Unlimited",openingHours:"Opening Hours",free:"Free"},fields:{time:"Time"},messages:{searchingTables:"Searching for available tables...",noTablesAvailable:"No specific tables available for this selection."},warnings:{unlimitedMode:"Unlimited will not take into account maximum limits."}},calendar:{selectDatePlaceholder:"Select a date",today:"Today",tomorrow:"Tomorrow",prevWeek:"Previous week",nextWeek:"Next week",dayHeaders:["M","T","W","T","F","S","S"],seatsQuestion:"Seating?"},timeSelector:{shifts:{breakfast:"Breakfast",lunch:"Lunch",dinner:"Dinner"},selectMeal:"Select a meal",selectTime:"Select a time",noDateSelected:"Please select a date first.",noTimes:"No available times.",back:"Back",reservations:"Reservations",guests:"Guests"},tableSelector:{label:"Select available table(s):",table:"Table",max:"Max",noTables:"No specific tables available for this time/guest combination.",manual:"Manual"}},fr:{reservationStepOne:{errors:{openingHoursNotSet:"Horaires non d\xE9finies.",clickHereToSet:"Cliquez ici pour d\xE9finir vos horaires."},modes:{withLimits:"Avec Limites",unlimited:"Illimit\xE9",openingHours:"Horaires",free:"Libre"},fields:{time:"Heure"},messages:{searchingTables:"Recherche de tables disponibles...",noTablesAvailable:"Aucune table sp\xE9cifique disponible pour cette s\xE9lection."},warnings:{unlimitedMode:"Illimit\xE9 ne tiendra pas compte des limites maximales."}},calendar:{selectDatePlaceholder:"S\xE9lectionnez une date",today:"Aujourd'hui",tomorrow:"Demain",prevWeek:"Semaine pr\xE9c\xE9dente",nextWeek:"Semaine suivante",dayHeaders:["Lu","Ma","Me","Je","Ve","Sa","Di"],seatsQuestion:"Places ?"},timeSelector:{shifts:{breakfast:"Petit-d\xE9jeuner",lunch:"D\xE9jeuner",dinner:"D\xEEner"},selectMeal:"S\xE9lectionnez un repas",selectTime:"S\xE9lectionnez une heure",noDateSelected:"Veuillez d'abord s\xE9lectionner une date.",noTimes:"Aucun horaire disponible.",back:"Retour",reservations:"R\xE9servations",guests:"Convives"},tableSelector:{label:"S\xE9lectionnez les table(s) disponibles :",table:"Table",max:"Max",noTables:"Aucune table sp\xE9cifique disponible pour cette combinaison temps/convives.",manual:"Manuel"}}};var kb=c0.memo(({guests:b,selectedDate:c,onSelectDate:q,autoExpand:e,reservationMode:W,restaurantData:n,startDate:a,onWeekChange:s,reservations:r,giftcard:f,zitplaats:h,isAdmin:u=false})=>{let B=localStorage.getItem("preferredLanguage")||"nl",g=n1[B].calendar,[R,T]=c0.useState(e||false),[L,N]=c0.useState(false),E=c0.useRef(null),k=c0.useRef(null),y=(0, s1.default)().tz("Europe/Amsterdam").add(1,"year").endOf("day");c0.useEffect(()=>{e&&T(true);},[e]),c0.useEffect(()=>{let x=H=>{E.current&&!E.current.contains(H.target)&&(T(false),N(false));};return document.addEventListener("mousedown",x),()=>{document.removeEventListener("mousedown",x);}},[]),c0.useEffect(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null);},[]);let v=()=>{k.current&&(clearTimeout(k.current),k.current=null),N(true);},m=(x=1e3)=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{N(false),k.current=null;},x);},F=c0.useCallback((x,H,$=[])=>{if(x.isBefore(H,"day")||x.isAfter(y,"day"))return 0;let q0=x.format("YYYY-MM-DD");if(W==="vrije_keuze")return 21;if(W!=="met_limieten"&&!L)return (0, R1.isDateAvailable)(n,q0,r,-1e4,$,null,u)?21:0;let K=n?.["table-settings"]||{},Z=K.isInstalled===true&&K.assignmentMode==="automatic"&&(L||W==="met_limieten"),C=M0=>Z?c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,q0,r,M0,$,null,u,null,h||null):c1("isDateAvailable",R1.isDateAvailable,n,q0,r,M0,$,null,u);if(!C(1))return 0;if(C(21))return 21;let a0=1,O0=21,I=1;for(;a0<=O0;){let M0=Math.floor((a0+O0)/2);C(M0)?(I=M0,a0=M0+1):O0=M0-1;}return I},[n,r,f,u,W,L]),_=c0.useMemo(()=>{if(!R)return [];let x=[],H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=a||H,q0=n?.["blocked-slots"]||[],K=u?(n?.exceptions||[]).filter(M0=>M0.type==="Sluiting"&&M0.timeframe==="Volledige Dag"):[],Z=$.clone().startOf("month"),C=$.clone().endOf("month"),a0=n?.["table-settings"]||{},O0=a0.isInstalled===true&&a0.assignmentMode==="automatic"&&W==="met_limieten",I=Z.clone();for(;I.isSameOrBefore(C,"day");){let M0=I.format("YYYY-MM-DD"),N0;if(W==="vrije_keuze")N0=I.isBetween(H,y,null,"[]");else {let w0=W!=="met_limieten"?-1e4:b,h0=W==="met_limieten"?f:null;O0?N0=c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,M0,r,w0,q0,h0,u,null,h||null):N0=c1("isDateAvailable",R1.isDateAvailable,n,M0,r,w0,q0,h0,u);}let _0=F(I,H,q0);x.push({date:I.clone(),isPast:I.isBefore(H,"day"),isFuture:I.isAfter(y,"day"),isAvailable:N0,maxGuestsAvailable:_0,hasBlockedSlots:K.some(w0=>{let h0=w0.startDate||w0.date,A=w0.endDate||w0.date;if(!h0||!A||M0<h0||M0>A)return false;let i=w0.daysOfWeek;if(Array.isArray(i)&&i.length>0){let t=I.clone().locale("nl").format("dddd").toLowerCase(),l=I.clone().locale("en").format("dddd").toLowerCase(),D=i.map(j=>j.toLowerCase());return D.includes(t)||D.includes(l)}return true})}),I.add(1,"day");}return x},[R,a,b,W,n,r,f,h,L,u]),w=x=>{x.isAvailable&&!x.isPast&&!x.isFuture&&(q(x.date.format("YYYY-MM-DD")),T(false),N(false));},J=()=>{let x=a.clone().subtract(1,"month").startOf("month"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day");if(x.clone().endOf("month").isBefore(H,"day")){console.log("Cannot go to previous month. It is in the past.");return}s(x);},Q=()=>{let x=a.clone().add(1,"month").startOf("month");s(x);},i0=()=>{if(!c)return g.selectDatePlaceholder;let x=(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam").startOf("day"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=H.clone().add(1,"day");return x.isSame(H,"day")?g.today:x.isSame($,"day")?g.tomorrow:x.format("dddd D MMMM YYYY")},A0=a?(x=>{let $=a.clone().startOf("month").day(),q0=$===0?6:$-1,K=[];for(let O0=0;O0<q0;O0++)K.push(null);K.push(...x);let Z=K.length,C=Math.ceil(Z/7);for(;K.length<C*7;)K.push(null);let a0=[];for(let O0=0;O0<C;O0++){let I=K.slice(O0*7,O0*7+7);a0.push(I);}return a0})(_):[],S=g.dayHeaders,V=x=>x>=21?"20+":String(x);return c0__default.default.createElement("div",{className:"calendar-container",ref:E},c0__default.default.createElement("div",{className:"calendar-display",onClick:()=>T(!R)},c0__default.default.createElement("span",null,i0()),c0__default.default.createElement("span",{className:"arrow"},c0__default.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",style:{transform:R?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"}},c0__default.default.createElement("path",{d:"M7 10l5 5 5-5",fill:"none",stroke:"currentColor",strokeWidth:"2"})))),R&&a&&c0__default.default.createElement("div",{className:"calendar"},c0__default.default.createElement("div",{className:"calendar-header"},c0__default.default.createElement("button",{type:"button",onClick:J,"aria-label":g.prevWeek},"<"),c0__default.default.createElement("span",null,a.format("MMMM YYYY")),c0__default.default.createElement("button",{type:"button",onClick:Q,"aria-label":g.nextWeek},">"),c0__default.default.createElement("button",{type:"button",className:`availability-hold-btn ${L?"active":""}`,"aria-pressed":L,"aria-label":"Houd ingedrukt om beschikbaarheden te tonen",onMouseDown:v,onMouseUp:()=>m(1e3),onMouseLeave:()=>m(1e3),onTouchStart:v,onTouchEnd:()=>m(1e3),onTouchCancel:()=>m(1e3),onKeyDown:x=>{(x.key===" "||x.key==="Enter")&&v();},onKeyUp:x=>{(x.key===" "||x.key==="Enter")&&m(1e3);},style:{fontSize:"15px",color:"gray",fontWeight:"450",textDecoration:"underline"}},g.seatsQuestion)),c0__default.default.createElement("div",{className:"calendar-weeks-wrapper"},c0__default.default.createElement("table",{className:"calendar-table"},c0__default.default.createElement("thead",null,c0__default.default.createElement("tr",{translate:"no"},S.map((x,H)=>c0__default.default.createElement("th",{key:H},x)))),c0__default.default.createElement("tbody",null,A0.map((x,H)=>c0__default.default.createElement("tr",{key:H,translate:"no"},x.map(($,q0)=>{if(!$)return c0__default.default.createElement("td",{key:q0,className:"empty-day"});let K=c&&vz($.date,(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam")),Z=[];return $.isPast?Z.push("gray-out"):$.hasBlockedSlots?Z.push("has-blocked-slots"):$.isAvailable?Z.push("available"):Z.push("unavailable"),K&&Z.push("selected"),c0__default.default.createElement("td",{key:q0,className:Z.join(" "),onClick:()=>w($),style:{"--animation-order":q0+H*7}},c0__default.default.createElement("div",{className:`day-square ${L?"showing-availabilities":""}`},c0__default.default.createElement("span",{className:"day-number"},L?V($.maxGuestsAvailable):$.date.date())))}))))))))});kb.displayName="Calendar";var wb=kb;var BM=x0(p1()),_o=({guests:b,formData:c,handleChange:q,resetFormDataFields:e,restaurantData:W,reservations:n,startDate:a,onWeekChange:s,reservationMode:r,isAdmin:f=false})=>{let h=B=>{let g=(0, BM.default)(B).format("YYYY-MM-DD");console.log("Selected date:",g),q({target:{name:"date",value:g}}),e(["time"]);},u=a?a.clone().startOf("month"):(0, BM.default)().startOf("month");return c0__default.default.createElement("div",{className:"form-group date-selector-container"},c0__default.default.createElement(wb,{guests:b,selectedDate:c.date||null,onSelectDate:h,autoExpand:false,reservationMode:r,restaurantData:W,startDate:u,onWeekChange:s,reservations:n,giftcard:c.giftcard,zitplaats:c.zitplaats,isAdmin:f}))},xb=_o;R0(`.new-reservation-page .time-selector-container{position:relative}.new-reservation-page .time-display{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;user-select:none;text-align:left;border-radius:5px}.new-reservation-page .time-display span:first-child{flex-grow:1}.new-reservation-page .time-selector{position:absolute;z-index:1000;width:100%;max-height:350px;overflow-y:auto;background-color:#fff;border:1px solid #ccc;padding:10px;border-radius:10px;animation:fadeInTimeSelector .3s ease-in-out;top:75px}.new-reservation-page .time-toggle-container{display:flex;gap:8px;padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid #eee}.new-reservation-page .time-toggle-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:20px;border:1px solid #ddd;background-color:#f5f5f5;color:#666;font-size:13px;cursor:pointer;transition:all .2s ease;font-family:inherit}.new-reservation-page .time-toggle-btn:hover{background-color:#e8e8e8;border-color:#ccc}.new-reservation-page .time-toggle-btn.active{background-color:var(--color-blue, #48aaaf);border-color:var(--color-blue, #48aaaf);color:#fff}.new-reservation-page .time-toggle-btn.active:hover{background-color:var(--color-blue, #48aaaf);filter:brightness(.95)}.new-reservation-page .time-toggle-btn svg{flex-shrink:0}.new-reservation-page .time-count{font-weight:400;opacity:.9}@keyframes fadeInTimeSelector{0%{opacity:0}to{opacity:1}}.new-reservation-page .time-period{margin-bottom:15px}.new-reservation-page .time-period-label{font-weight:700;margin-bottom:5px}.new-reservation-page .time-options{display:flex;flex-wrap:wrap;gap:5px}.new-reservation-page .time-option{padding:8px 12px;background-color:#cfc;color:#060;border-radius:5px;cursor:pointer;transition:background-color .2s ease}.new-reservation-page .time-option:hover{background-color:#b3ffb3}.new-reservation-page .time-option.selected{background-color:#060;color:#cfc}.new-reservation-page .time-option.blocked{background-color:#fff3e0;color:#e65100}.new-reservation-page .time-option.blocked:hover{background-color:#ffe0b2}.new-reservation-page .time-option.blocked.selected{background-color:#e65100;color:#fff3e0}.new-reservation-page .info-text{color:#666;font-style:italic}.new-reservation-page .arrow{margin-left:auto;color:gray;display:flex;align-items:center}@media screen and (max-width:480px){.new-reservation-page .time-option{padding:6px 10px;font-size:14px}.new-reservation-page .time-toggle-btn{padding:5px 10px;font-size:12px;gap:4px}.new-reservation-page .time-toggle-btn svg{width:12px;height:12px}}
11
11
  `);var XM=x0(p1());var g2=x0(j1()),Ib=c0.memo(({guests:b,formData:c,handleChange:q,field:e,selectedDate:W,expanded:n,setCurrentExpandedField:a,restaurantData:s,reservations:r,reservationMode:f,isAdmin:h=false,zitplaats:u=null})=>{let B=localStorage.getItem("preferredLanguage")||"nl",g=n1[B].timeSelector,[R,T]=c0.useState(n||false),[L,N]=c0.useState([]),[E,k]=c0.useState(null),[y,v]=c0.useState(null),m=c0.useRef(null),F=c0.useMemo(()=>{if(!h||!W||!s)return new Set;let S=s?.["blocked-slots"]||[],V=new Set;return S.forEach(x=>{x.date===W&&x.time&&V.add(x.time);}),V},[h,W,s]),_=c0.useMemo(()=>{if(!r||!W)return {};let S={};return r.forEach(V=>{if((V.date||V.datum)!==W)return;let H=V.time||V.tijd;if(!H)return;let $=V.guests||V.antal||V.gasten||1;S[H]||(S[H]={reservations:0,guests:0}),S[H].reservations+=1,S[H].guests+=$;}),S},[r,W]),w=S=>_[S]||{reservations:0,guests:0},J=S=>{v(y===S?null:S);},Q={breakfast:{start:"07:00",end:"11:00",label:g.shifts.breakfast},lunch:{start:"11:00",end:"16:00",label:g.shifts.lunch},dinner:{start:"16:00",end:"23:00",label:g.shifts.dinner}};c0.useEffect(()=>{if(!W||!b){N([]);return}if(f==="vrije_keuze")if(E){let S=Q[E],V=XM.default.tz(`${W} ${S.start}`,"YYYY-MM-DD HH:mm","Europe/Brussels"),x=XM.default.tz(`${W} ${S.end}`,"YYYY-MM-DD HH:mm","Europe/Brussels"),H=[],$=V.clone();for(;$.isBefore(x);)H.push({value:$.format("HH:mm"),label:$.format("HH:mm")}),$.add(15,"minutes");N(H);}else N([]);else if(s&&r){let S=f!=="met_limieten"?-1e4:b,V=s?.["table-settings"]||{},x=f==="met_limieten"&&V.isInstalled===true&&V.assignmentMode==="automatic",H=f==="met_limieten"?c.giftcard:null,$=s?.["blocked-slots"]||[],q0=(0, g2.getAvailableTimeblocks)(s,W,r,S,$,H,h,c.duration),K=x?(0, g2.getAvailableTimeblocksWithTableCheck)(s,W,q0,S,r,u,c.duration):q0,Z=Object.keys(K).map(C=>({value:C,label:K[C].name||C}));Z.sort((C,a0)=>{let[O0,I]=C.value.split(":").map(Number),[M0,N0]=a0.value.split(":").map(Number);return O0*60+I-(M0*60+N0)}),N(Z),c[e.id]&&!Z.some(C=>C.value===c[e.id])&&q({target:{name:e.id,value:""}});}else N([]);},[W,b,s,r,f,e.id,E,u,c[e.id],q]),c0.useEffect(()=>{f==="vrije_keuze"&&(k(null),c[e.id]&&q({target:{name:e.id,value:""}}));},[W,f]);let i0=S=>{q({target:{name:e.id,value:S}}),T(false),a?.(null);},o0=S=>{E!==S&&c[e.id]&&q({target:{name:e.id,value:""}}),k(S);},A0=()=>{if(f==="vrije_keuze")return E?c[e.id]?`${Q[E].label} \u2013 ${c[e.id]}`:`${Q[E].label} \u2013 ${g.selectTime}`:g.selectMeal;if(c[e.id]){let S=L.find(V=>V.value===c[e.id]);return S?S.label:g.selectTime}return g.selectTime};return e?c0__default.default.createElement("div",{className:"form-group time-selector-container",ref:m},W?c0__default.default.createElement(c0__default.default.Fragment,null,c0__default.default.createElement("div",{className:"time-display",onClick:()=>{T(!R),R||a?.(e.id);}},c0__default.default.createElement("span",null,A0()),c0__default.default.createElement("span",{className:"arrow"},c0__default.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",style:{transform:R?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"}},c0__default.default.createElement("path",{d:"M7 10l5 5 5-5",fill:"none",stroke:"currentColor",strokeWidth:"2"})))),R&&c0__default.default.createElement("div",{className:"time-selector"},c0__default.default.createElement("div",{className:"time-toggle-container"},c0__default.default.createElement("button",{className:`time-toggle-btn ${y==="reservations"?"active":""}`,onClick:()=>J("reservations"),type:"button"},c0__default.default.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},c0__default.default.createElement("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2",ry:"2"}),c0__default.default.createElement("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),c0__default.default.createElement("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),c0__default.default.createElement("line",{x1:"3",y1:"10",x2:"21",y2:"10"})),g.reservations),c0__default.default.createElement("button",{className:`time-toggle-btn ${y==="guests"?"active":""}`,onClick:()=>J("guests"),type:"button"},c0__default.default.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},c0__default.default.createElement("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),c0__default.default.createElement("circle",{cx:"9",cy:"7",r:"4"}),c0__default.default.createElement("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),c0__default.default.createElement("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})),g.guests)),f==="vrije_keuze"?E?c0__default.default.createElement("div",{className:"time-period"},c0__default.default.createElement("div",{className:"time-period-label"},Q[E].label,c0__default.default.createElement("button",{onClick:()=>k(null),style:{marginLeft:"10px",background:"none",border:"none",cursor:"pointer",color:"#006600",fontSize:"0.9rem",padding:0}},"\u2190 ",g.back)),c0__default.default.createElement("div",{className:"time-options"},L.length===0?c0__default.default.createElement("div",{className:"no-times"},g.noTimes):L.map(S=>{let V=w(S.value),x=F.has(S.value);return c0__default.default.createElement("div",{key:S.value,className:`time-option${c[e.id]===S.value?" selected":""}${x?" blocked":""}`,onClick:()=>i0(S.value)},S.label,y==="reservations"&&V.reservations>0&&c0__default.default.createElement("span",{className:"time-count"}," - ",V.reservations),y==="guests"&&V.guests>0&&c0__default.default.createElement("span",{className:"time-count"}," - ",V.guests,"p"))}))):c0__default.default.createElement("div",{className:"time-options"},Object.keys(Q).map(S=>c0__default.default.createElement("div",{key:S,className:`time-option ${E===S?"selected":""}`,onClick:()=>o0(S)},Q[S].label))):c0__default.default.createElement("div",{className:"time-options"},L.length===0?c0__default.default.createElement("div",{className:"no-times"},g.noTimes):L.map(S=>{let V=w(S.value),x=F.has(S.value);return c0__default.default.createElement("div",{key:S.value,className:`time-option${c[e.id]===S.value?" selected":""}${x?" blocked":""}`,onClick:()=>i0(S.value)},S.label,y==="reservations"&&V.reservations>0&&c0__default.default.createElement("span",{className:"time-count"}," - ",V.reservations),y==="guests"&&V.guests>0&&c0__default.default.createElement("span",{className:"time-count"}," - ",V.guests,"p"))})))):c0__default.default.createElement("p",{className:"info-text"},g.noDateSelected)):null});Ib.displayName="TimeSelector";var Fb=Ib;R0(`.new-reservation-page .table-selector-container{margin-top:15px;padding:10px;border:1px solid #eee;border-radius:4px;background-color:#f9f9f9}.new-reservation-page .table-selector-label{display:block;margin-bottom:10px;font-weight:700;color:#333;font-size:.95rem}.new-reservation-page .table-options{display:flex;flex-wrap:wrap;gap:10px}.new-reservation-page .table-option{display:inline-block;margin-right:15px;margin-bottom:5px;padding:5px 8px;border:1px solid #ccc;border-radius:4px;background-color:#fff;transition:background-color .2s ease}.new-reservation-page .table-option label{display:flex;align-items:center;cursor:pointer;font-size:.9rem;color:#555}.new-reservation-page .table-option input[type=checkbox]{margin-right:8px;cursor:pointer;accent-color:var(--primary-color, #006600)}.new-reservation-page .table-option:has(input[type=checkbox]:checked){background-color:#e0f2e0;border-color:#060}.new-reservation-page .table-option:hover{background-color:#f0f0f0}.new-reservation-page .info-text{margin-top:10px;font-size:.85rem;color:#666}.new-reservation-page .selected-tables-info{margin-top:10px;font-style:italic}.new-reservation-page .info-text.loading-tables{font-style:italic;color:#060}.new-reservation-page .table-option--manual{border-color:#ff9800;background-color:#fff8e1}.new-reservation-page .table-option--manual:hover{background-color:#ffecb3}.new-reservation-page .table-option--manual:has(input[type=checkbox]:checked){background-color:#ffe082;border-color:#ff9800}
12
12
  `);var Ho=({availableTables:b=[],isFetching:c=false,formData:q={},handleChange:e,setFormData:W})=>{let n=localStorage.getItem("preferredLanguage")||"nl",a=n1?.[n]?.tableSelector||{},s={label:a.label||"Tafels",noTables:a.noTables||"Geen tafels beschikbaar voor deze selectie.",table:a.table||"Tafel",max:a.max||"Max"},r=Array.isArray(q.selectedTableNumbers)?q.selectedTableNumbers:[],f=Array.isArray(q.selectedTableIds)?q.selectedTableIds:[],h=(B,g)=>{if(typeof e=="function"){e({target:{multiple:true,updates:{selectedTableNumbers:B,selectedTableIds:g}}});return}typeof W=="function"&&W(R=>({...R,selectedTableNumbers:B,selectedTableIds:g}));},u=B=>g=>{let R=g.target.checked,T=b.find(E=>E.tableNumber===B);if(!T)return;let L=[...r],N=[...f];R?(L.includes(B)||L.push(B),N.includes(T.tableId)||N.push(T.tableId)):(L=L.filter(E=>E!==B),N=N.filter(E=>E!==T.tableId)),L.sort((E,k)=>E-k),h(L,N);};return c?c0__default.default.createElement("div",{className:"form-group table-selector-container"},c0__default.default.createElement("label",{className:"table-selector-label"},s.label),c0__default.default.createElement("p",{className:"info-text"},"Laden\u2026")):!b||b.length===0?c0__default.default.createElement("div",{className:"form-group table-selector-container"},c0__default.default.createElement("label",{className:"table-selector-label"},s.label),c0__default.default.createElement("p",{className:"info-text"},s.noTables)):c0__default.default.createElement("div",{className:"form-group table-selector-container"},c0__default.default.createElement("label",{className:"table-selector-label"},s.label),c0__default.default.createElement("div",{className:"table-options"},b.map(B=>{let g=B.tableNumber,R=B.maxCapacity??B.capacity??B.seats??"-",T=r.includes(g),L=B.isManual===true;return c0__default.default.createElement("div",{key:`${B.tableId||g}`,className:`table-option${L?" table-option--manual":""}`},c0__default.default.createElement("label",null,c0__default.default.createElement("input",{type:"checkbox",value:g,checked:T,onChange:u(g)}),s.table," ",g," (",s.max,": ",R,")"))})))},h2=Ho;R0(`.new-reservation-page .form-row .field-label{display:block;margin-bottom:6px;font-weight:600}.new-reservation-page .form-row .reservation-mode-buttons{margin-top:0}.new-reservation-page .reservation-mode-buttons{display:flex;gap:10px;margin-top:10px}.new-reservation-page .reservation-mode-button{flex:1;padding:10px;border:1px solid #ccc;border-radius:var(--border-radius);background-color:var(--color-white);cursor:pointer;font-size:1rem;transition:background-color .3s ease,color .3s ease}.new-reservation-page .reservation-mode-button:nth-child(3){flex:0 0 100%}.new-reservation-page .reservation-modes-container{display:flex;flex-wrap:wrap;margin:0 -5px;width:100%}.new-reservation-page .reservation-mode-button{flex:0 0 calc(50% - 10px);margin:5px;padding:10px;box-sizing:border-box;text-align:center;border:1px solid #ccc;background:#f7f7f7;cursor:pointer}.new-reservation-page .reservation-mode-button.active,.new-reservation-page .reservation-mode-button:hover{background-color:var(--color-blue);color:var(--color-white)}.new-reservation-page .unlimited-mode-warning{display:flex;align-items:flex-start;gap:10px;margin:15px 0;padding:12px 15px;background-color:#fff3cd;border:1px solid #ffeaa7;border-radius:var(--border-radius, 4px);border-left:4px solid #e67e22;font-size:.9rem;line-height:1.4}.new-reservation-page .unlimited-mode-warning .warning-icon{color:#e67e22;font-size:1.1rem;margin-top:2px;flex-shrink:0}.new-reservation-page .unlimited-mode-warning .warning-text{color:#856404;margin:0}@media screen and (max-width:480px){.new-reservation-page .unlimited-mode-warning{margin:10px 0;padding:10px 12px;font-size:.85rem}.new-reservation-page .unlimited-mode-warning .warning-icon{font-size:1rem}}.new-reservation-page .reservation-sidebar-component{position:fixed;top:0;right:-400px;width:400px;height:100%;background-color:#fff;box-shadow:-2px 0 5px #0000001a;z-index:var(--z-index-sidebar-reservation);display:flex;flex-direction:column;overflow-y:auto;transition:right .3s ease-in-out}.new-reservation-page .admin-title{text-align:center;margin-bottom:30px}.new-reservation-page .reservation-sidebar-component.open{right:0}.new-reservation-page .reservation-sidebar-content{padding:60px 20px 20px}.new-reservation-page .close-sidebar-button{position:absolute;top:10px;left:10px;background-color:transparent;border:none;cursor:pointer}.new-reservation-page .close-sidebar-button svg{color:#000}.new-reservation-page .sidebar-section-one,.new-reservation-page .sidebar-section-two{margin-bottom:20px}.new-reservation-page .reservation-footer{margin-top:auto}.new-reservation-page .store-reservation-button{width:100%;padding:12px;background-color:var(--color-blue);color:#fff;border:none;border-radius:5px;cursor:pointer;font-size:1.1rem}.new-reservation-page .open-sidebar-button{position:fixed;bottom:20px;right:20px;background-color:var(--color-blue);color:#fff;border:none;border-radius:50%;width:50px;height:50px;cursor:pointer;z-index:var(--z-index-modal)!important;transition:all .3s ease}.new-reservation-page .open-sidebar-button:hover{background-color:var(--color-blue-hover-accent)!important}.new-reservation-page .open-sidebar-button svg{position:relative;top:2px}@media screen and (max-width:480px){.new-reservation-page .reservation-sidebar-component{width:100%}}.new-reservation-page .sidebar-section-personeel{margin-bottom:10px}
13
13
  `);var Gb=x0(p1());var jo=()=>{let b=c0.useCallback(()=>localStorage.getItem("accessToken"),[]),c=c0.useCallback((W,n={})=>{let{params:a,...s}=n,r=b();return Hb__default.default.get(W,{...s,params:a,headers:{...s.headers,...r?{Authorization:`Bearer ${r}`}:{}}}).then(f=>f.data).catch(f=>{throw console.error("Error fetching data:",f),f})},[b]),q=c0.useCallback((W,n,a=null,s={})=>{let r=b();return Hb__default.default({method:W,url:n,data:a,...s,headers:{...s.headers,...r?{Authorization:`Bearer ${r}`}:{}}}).then(f=>f.data).catch(f=>{throw console.error(`Error with ${W} request:`,f),f})},[b]);return c0.useMemo(()=>({get:c,post:(W,n,a)=>q("POST",W,n,a),put:(W,n,a)=>q("PUT",W,n,a),patch:(W,n,a)=>q("PATCH",W,n,a),delete:(W,n)=>q("DELETE",W,null,n)}),[c,q])},A1=jo;var Yb=x0(j1());var $o=({duration:b,setDuration:c,handleChange:q,min:e=30,max:W=120,interval:n=30})=>{let [a,s]=c0.useState(false),r=c0.useMemo(()=>{let N=[],E=parseInt(e)||30,k=parseInt(W)||120,y=parseInt(n)||30;for(let v=E;v<=k;v+=y){let m=[],F=Math.floor(v/60),_=v%60;F>0&&m.push(`${F} u`),_>0&&m.push(`${_} min`),N.push({value:v,label:m.join(" ")});}return N},[e,W,n]),f=r.slice(0,3),h=r.length>3;f.some(N=>N.value===parseInt(b));let B=N=>{s(false),c&&c(N),q&&q({target:{name:"duration",value:N}});};c0.useEffect(()=>{!b&&r.length>0&&B(r[0].value);},[]);let g=()=>{let N=f[f.length-1],E=parseInt(n)||30;if(N){let k=N.value+E,y=parseInt(W)||120,v=Math.min(k,y);c&&c(v),q&&q({target:{name:"duration",value:v}}),s(true);}else s(true);},R=N=>{let E=parseInt(b)||parseInt(e)||30,k=parseInt(n)||30,y=parseInt(e)||30,v=parseInt(W)||120,m=E+N*k;m<y&&(m=y),m>v&&(m=v),c&&c(m),q&&q({target:{name:"duration",value:m}});},T={wrapper:{marginBottom:"20px"},grid:{display:"flex",flexWrap:"wrap",gap:"8px"},optionBtn:{padding:"8px 12px",borderRadius:"6px",border:"1px solid #D0D5DD",backgroundColor:"#fff",cursor:"pointer",fontSize:"14px",fontWeight:"500",color:"#344054",textAlign:"center",transition:"all 0.2s",outline:"none",fontFamily:"'Inter', sans-serif', system-ui",flex:1,minWidth:"60px"},activeBtn:{backgroundColor:"#48AAAF",color:"#ffffff",borderColor:"#48AAAF"},stepperContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:"10px",padding:"8px",backgroundColor:"#F9FAFB",border:"1px solid #EAECF0",borderRadius:"8px",width:"100%"},stepperBtn:{width:"32px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",borderRadius:"6px",border:"1px solid #D0D5DD",backgroundColor:"#fff",cursor:"pointer",color:"#344054"},stepperValue:{fontSize:"14px",fontWeight:"600",color:"#101828"}},L=N=>{let E=Math.floor(N/60),k=N%60,y=[];return E>0&&y.push(`${E} u`),k>0&&y.push(`${k} min`),y.join(" ")||`${N} min`};return c0__default.default.createElement("div",{style:T.wrapper},c0__default.default.createElement("style",null,`
package/dist/index.mjs CHANGED
@@ -7,7 +7,7 @@ Arguments: `+Array.prototype.slice.call(O).join("")+`
7
7
  ===== Checking date availability for ${e} guests on ${c} =====`),console.log("Restaurant data floors:",b.floors?"present":"missing"),console.log("Table settings:",JSON.stringify(b["table-settings"]||{},null,2));let h=b?.["table-settings"]||{},u=h.isInstalled===true&&h.assignmentMode==="automatic"&&b.floors&&Array.isArray(b.floors);if(console.log(`Table assignment is ${u?"ENABLED":"DISABLED"} for date ${c}`),!eo(b,c,q,e,W,n,a,s))return console.log(`Date ${c} fails basic availability check`),false;if(!u)return console.log(`Table assignment disabled, date ${c} is available`),true;console.log(`Getting available timeblocks for ${c}`);let g=Wo(b,c,q,e,W,n,a,s);if(console.log(`Found ${Object.keys(g).length} available timeblocks before table check`),Object.keys(g).length===0)return console.log(`No available timeblocks on ${c}, date is unavailable`),false;console.log(`Checking table availability for each timeblock on ${c}`);let R=false,T=0;for(let L of Object.keys(g)){if(T++,n&&!to(b,c,L,n)){console.log(`Time ${L} doesn't match giftcard meal requirements`);continue}if(console.log(`Checking table availability for ${L} on ${c} for ${e} guests`),no(b,c,L,e,q,r,s)){console.log(`Found available time ${L} with table assignment!`),R=true;break}}return console.log(`Checked ${T}/${Object.keys(g).length} timeblocks`),console.log(`Date ${c} with table check: ${R?"Available":"Unavailable"}`),R}ub.exports={isDateAvailableWithTableCheck:ro};});var Bb=s0(()=>{var{isTimeAvailable:so}=tM(),Ro={_id:"poer","general-settings":{zitplaatsen:30,uurOpVoorhand:4,dagenInToekomst:90,maxGasten:8,intervalReservatie:15,duurReservatie:120,minutenTotEinde:135,showNoticeForMaxGuests:0,noticePhoneNumber:"",storedNumber:76},menu:[{name:"POER Menu",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"12:00",endHour:"23:00",daysOfWeek:["zaterdag","dinsdag","woensdag","donderdag","vrijdag"],storedNumber:36,_id:"674a9033c1956dd233bafaad"},{name:"A la carte",startDate:"2024-11-30",endDate:"2030-01-01",startHour:"12:00",endHour:"14:00",daysOfWeek:["dinsdag","woensdag","donderdag","vrijdag"],storedNumber:28,_id:"674a9084c1956dd233bafaae"},{name:"Ik weet het nog niet",startDate:"2024-11-30",endDate:"2030-01-01",startHour:"12:00",endHour:"14:00",daysOfWeek:["dinsdag","woensdag","donderdag","vrijdag"],storedNumber:41,_id:"674a90bc64cc52acdd5e6cc2"},{name:"Lunch",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"12:00",endHour:"14:00",daysOfWeek:["dinsdag","woensdag","donderdag","vrijdag"],storedNumber:23,_id:"674adb4e8d6385fb343499f7"},{name:"A la carte",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"18:30",endHour:"20:30",daysOfWeek:["dinsdag","woensdag","donderdag"],storedNumber:50,_id:"674adbf58d6385fb343499f8"},{name:"Ik weet het nog niet",startDate:"2024-11-01",endDate:"2030-01-30",startHour:"18:30",endHour:"20:30",daysOfWeek:["dinsdag","donderdag","woensdag"],storedNumber:54,_id:"674adc208d6385fb343499f9"}],mededeling:[{mededeling:"Gelieve er rekening mee te houden dat we op vrijdagavond en zaterdagavond enkel ons POER menu serveren.",startDate:"2024-11-01",endDate:"2030-01-30",startTime:"18:30",endTime:"20:30",daysOfWeek:["vrijdag","zaterdag"],storedNumber:95,_id:"674ade0a8d6385fb343499fa"}],settings:{pageTitle:"Reserveer nu",generalNotification:"",alignment:"fullScreenColor",backgroundBlur:"blurBackground",storedNumber:61},colors:{backgroundType:"solid",backgroundColor:"#e0debe",gradientStartColor:"#FFFFFF",gradientEndColor:"#000000",animationType:"none",widgetBackgroundColor:"#000000",widgetTextColor:"#FFFFFF",textColor:"#000000",containerColor:"#FFFFFF",buttonColor:"#000000",buttonTextColor:"#FFFFFF",storedNumber:81},exceptions:[{title:"Extra mensen donderdagmiddag",type:"Opening",timeframe:"lunch",startDate:"2024-12-05",endDate:"2024-12-05",startHour:"12:00",endHour:"16:00",maxSeats:"34",daysOfWeek:["donderdag"],storedNumber:74,_id:"67507dc98fb61d6afd54acb0"},{title:"Extra personen donderdagavond",type:"Uitzondering",timeframe:"dinner",startDate:"2024-12-05",endDate:"2024-12-05",startHour:"18:30",endHour:"23:00",maxSeats:"27",daysOfWeek:["donderdag"],storedNumber:88,_id:"67507e3383d7f2de02628f4a"},{title:"Cong\xE9 Periode 22/12 tot 9/01",type:"Sluiting",timeframe:"Volledige Dag",startDate:"2024-12-22",endDate:"2025-01-09",daysOfWeek:[],storedNumber:89,_id:"67511bb38fb61d6afd54acba"}],"openinghours-lunch":{schemeSettings:{Tuesday:{enabled:true,startTime:"12:00",endTime:"13:30",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Wednesday:{enabled:true,startTime:"12:00",endTime:"16:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Thursday:{enabled:true,startTime:"12:00",endTime:"16:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Friday:{enabled:true,startTime:"12:30",endTime:"13:30",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]}},storedNumber:2},"openinghours-dinner":{schemeSettings:{Tuesday:{enabled:true,startTime:"18:30",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"24",shiftsEnabled:false,shifts:[]},Wednesday:{enabled:true,startTime:"16:00",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"24",shiftsEnabled:false,shifts:[]},Thursday:{enabled:true,startTime:"16:00",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"24",shiftsEnabled:false,shifts:[]},Friday:{enabled:true,startTime:"18:30",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]},Saturday:{enabled:true,startTime:"18:30",endTime:"20:00",maxCapacityEnabled:true,maxCapacity:"30",shiftsEnabled:false,shifts:[]}},storedNumber:6},fonts:{titleFont:{font:"Poppins",weight:"400"},subtitleFont:{font:"Poppins",weight:"400"},labelFont:{font:"Poppins",weight:"400"},buttonFont:{font:"Poppins",weight:"400"}},theme:{id:10,title:"Herfstbladeren",color:"#D35400",image:"/static/media/default-theme.webp"}},fo=[{guests:10,time:"12:00",date:"2024-12-18"},{guests:100,time:"15:00",date:"2024-12-04"}];console.log("--- Is Time Available Tests ---");var Lb="2024-12-10",Nb=1e3,uo=["12:00","12:15","13:00","19:00","20:00","20:15"];uo.forEach(b=>{let c=so(Ro,Lb,b,fo,Nb);console.log(`Is ${b} on ${Lb} available for ${Nb} guests?`,c);});});var Tb=s0((cq,mb)=>{var Xb=u2(),{shifts:Oq,parseTime:uM,getMealTypeByTime:lo}=F1();function Lo(){let b=Xb().tz("Europe/Brussels");return b.hours()*60+b.minutes()}function No(b,c,q){let e=Xb().tz("Europe/Brussels").format("YYYY-MM-DD");if(q!==e)return b;console.log(`Applying stop time filter for today (${q})`);let W=c?.["general-settings"]||{},n=Lo(),a=W.ontbijtStop||null,s=W.lunchStop||null,r=W.dinerStop||null,f=a?uM(a):null,h=s?uM(s):null,u=r?uM(r):null,B={},g=0,R=0,T=0;for(let L in b){if(!b.hasOwnProperty(L))continue;let N=lo(L),E=false;N==="breakfast"&&f!==null&&!isNaN(f)&&n>=f?(E=true,g++):N==="lunch"&&h!==null&&!isNaN(h)&&n>=h?(E=true,R++):N==="dinner"&&u!==null&&!isNaN(u)&&n>=u&&(E=true,T++),E||(B[L]=b[L]);}return g>0&&console.log(`Stop time filter removed ${g} breakfast slots.`),R>0&&console.log(`Stop time filter removed ${R} lunch slots.`),T>0&&console.log(`Stop time filter removed ${T} dinner slots.`),B}mb.exports={filterTimeblocksByStopTimes:No};});var hb=s0((Aq,gb)=>{function Bo(b){let c=parseInt(b.split(":")[0],10);return c>=4&&c<11?"breakfast":c>=11&&c<16?"lunch":c>=16&&c<23?"dinner":null}function Xo(b){if(!b)return null;if(b.$numberInt)return parseInt(b.$numberInt,10);if(typeof b=="number")return b;if(typeof b=="string"){let c=parseInt(b,10);return isNaN(c)?null:c}return null}function mo(b,c,q){return b.filter(e=>e.date===c&&e.time===q).reduce((e,W)=>e+(parseInt(W.guests,10)||0),0)}function To(b,c,q,e,W){let n={};for(let[a,s]of Object.entries(q)){let r=Bo(a);if(!r){n[a]=s;continue}let f=b[`max-arrivals-${r}`];if(!f){n[a]=s;continue}let h=Xo(f[a]);if(h===null){n[a]=s;continue}mo(e,c,a)+W<=h&&(n[a]=s);}return n}gb.exports={filterTimeblocksByMaxArrivals:To};});var Sb=s0((oq,yb)=>{function lM(b){let c=parseInt(b.split(":")[0],10);return c>=4&&c<11?"breakfast":c>=11&&c<16?"lunch":c>=16&&c<23?"dinner":null}function l0(b,...c){console.log(`[MaxGroupsFilter] ${b}`,...c);}function ho(b){if(b==null)return null;if(typeof b=="object"&&b!==null&&"$numberInt"in b){let c=parseInt(b.$numberInt,10);return isNaN(c)?null:c}if(typeof b=="number")return Number.isInteger(b)?b:null;if(typeof b=="string"){let c=parseInt(b,10);return isNaN(c)?null:c}return null}function yo(b,c,q,e,W){l0(`--- Running MaxGroupsFilter for Date: ${c}, Guests: ${W} ---`);let n=Object.keys(b).filter(h=>h.startsWith("max-groups-"));l0("Received restaurantData max-group keys:",n.length>0?n:"None found");let a={},s=parseInt(W,10);if(isNaN(s)||s<=0)return l0(`Invalid guest count (${W}). Returning all ${Object.keys(q).length} input blocks unfiltered.`),q;let r=e.filter(h=>h.date===c);l0(`Relevant reservations on ${c}: ${r.length}`),l0(`Input timeblocks count: ${Object.keys(q).length}`);let f={};r.forEach(h=>{let u=lM(h.time);u&&(f[u]||(f[u]=[]),f[u].push(h));}),l0("Reservations grouped by meal type:",f);for(let[h,u]of Object.entries(q)){let B=lM(h);if(l0(`
8
8
  Checking Time: ${h} -> Determined Meal: ${B}`),!B){l0(` Time ${h} has no associated meal type. Keeping block.`),a[h]=u;continue}let g=`max-groups-${B}`,R=b[g];if(l0(` Looking for settings using key: "${g}"`),!R||typeof R!="object"){l0(` No settings found for key "${g}". Filter doesn't apply. Keeping block.`),a[h]=u;continue}l0(` Found settings for ${B}:`,JSON.stringify(R));let T=true,L=Object.keys(R).map(N=>parseInt(N,10)).filter(N=>!isNaN(N)&&N>0).sort((N,E)=>N-E);l0(` Defined numeric limit sizes to check for ${B}: [${L.join(", ")}]`);for(let N of L){let E=String(N);if(l0(` Checking Limit Condition: Groups of size >= ${N}`),s>=N){l0(` Applicable: Booking guests (${s}) >= Limit threshold (${N})`);let k=ho(R[E]);if(l0(` Max groups allowed for >=${N} is: ${k} (raw setting: ${JSON.stringify(R[E])})`),k===null||k<0){l0(` Skipping check: Invalid or non-positive max count defined for size ${N}.`);continue}let v=(f[B]||[]).filter(m=>{let F=parseInt(m.guests,10);return !isNaN(F)&&F>=N}).length;if(l0(` Count of existing groups >=${N} found in ${B}: ${v}`),v+1>k){l0(` *** VIOLATION DETECTED *** for limit >=${N}.`),l0(` (Existing Groups: ${v} + New Group: 1 = ${v+1}, which is > Max Allowed: ${k})`),l0(` Blocking time ${h} due to this violation.`),T=false;break}else l0(` OK: Limit for >=${N} not exceeded. (Existing: ${v} + New: 1 <= Max: ${k})`);}else l0(` Not Applicable: Booking guests (${s}) < Limit threshold (${N}). Skipping this check.`);}T?(l0(` \u2705 Result for time ${h}: ALLOWED (passed all applicable checks)`),a[h]=u):l0(` \u274C Result for time ${h}: BLOCKED (failed at least one limit check)`);}return l0(`--- MaxGroupsFilter Finished. Output timeblocks count: ${Object.keys(a).length} ---`),a}yb.exports={filterTimeblocksByMaxGroups:yo,getMealType:lM};});var j1=s0((qq,vb)=>{var So={...qM(),...R2(),...l2()},vo={...oM()},Co={...s2(),...h1()},Eo={...ob(),...N2(),...eM(),...iM(),...tM(),...fM(),...lb(),...F1(),...Bb()},ko={...Tb(),...hb(),...Sb()};vb.exports={...So,...vo,...Co,...Eo,...ko};});var Jb=s0((hM,$b)=>{(function(b,c){typeof hM=="object"&&typeof $b<"u"&&typeof n2=="function"?c(d2()):typeof define=="function"&&define.amd?define(["../moment"],c):c(b.moment);})(hM,(function(b){var c="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),q="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),e=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],W=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,n=b.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,s){return a?/-MMM-/.test(s)?q[a.month()]:c[a.month()]:c},monthsRegex:W,monthsShortRegex:W,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:e,longMonthsParse:e,shortMonthsParse:e,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:true,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xE9\xE9n minuut",mm:"%d minuten",h:"\xE9\xE9n uur",hh:"%d uur",d:"\xE9\xE9n dag",dd:"%d dagen",w:"\xE9\xE9n week",ww:"%d weken",M:"\xE9\xE9n maand",MM:"%d maanden",y:"\xE9\xE9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(a===1||a===8||a>=20?"ste":"de")},week:{dow:1,doy:4}});return n}));});function R0(b,{insertAt:c}={}){if(!b||typeof document>"u")return;let q=document.head||document.getElementsByTagName("head")[0],e=document.createElement("style");e.type="text/css",c==="top"&&q.firstChild?q.insertBefore(e,q.firstChild):q.appendChild(e),e.styleSheet?e.styleSheet.cssText=b:e.appendChild(document.createTextNode(b));}R0(`.new-reservation-page .value-selector{display:flex;flex-direction:column;gap:15px;margin-bottom:20px}.new-reservation-page .non-absolute{position:relative!important}.new-reservation-page .non-absolute:before{background:none}.new-reservation-page .predefined-values{display:flex;gap:10px}.new-reservation-page .predefined-value-button{flex:1;padding:10px;border:1px solid #ccc;border-radius:var(--border-radius);background-color:var(--color-white);cursor:pointer;font-size:1rem;transition:background-color .3s ease}.new-reservation-page .predefined-value-button.active,.new-reservation-page .predefined-value-button:hover{background-color:var(--color-blue);color:var(--color-white)}.new-reservation-page .slider-container{display:flex;align-items:center;gap:15px}.new-reservation-page .slider{flex:1;appearance:none;-webkit-appearance:none;height:5px;background:#ddd;border-radius:5px;outline:none}.new-reservation-page .slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:20px;height:20px;background:var(--color-blue);cursor:pointer;border-radius:50%}.new-reservation-page .value-input{width:80px;padding:10px;border:1px solid #ccc;border-radius:var(--border-radius);font-size:1rem}
9
9
  `);var pA=({setGuests:b,value:c,onChange:q})=>{let e=[1,2,3,"4+"],[W,n]=useState(c||""),[a,s]=useState(false),r=u=>{u==="4+"?(s(true),n(4),b(4),q({target:{name:"guests",value:4}})):(s(false),n(u),b(u),q({target:{name:"guests",value:u}}));},f=u=>{let B=u.target.value;n(B),b(B),q({target:{name:"guests",value:B}});},h=u=>{let B=u.target.value;n(B),b(B),q({target:{name:"guests",value:B}});};return c0.createElement("div",{className:"value-selector",translate:"no"},c0.createElement("div",{className:"predefined-values"},e.map(u=>c0.createElement("button",{key:u,type:"button",className:`predefined-value-button ${W==u||u==="4+"&&a?"active":""}`,onClick:()=>r(u)},u==="4+"?"4+":`${u} p`))),c0.createElement(AnimatePresence,null,a&&c0.createElement(motion.div,{className:"slider-container",initial:{opacity:0,height:0},animate:{opacity:1,height:"auto"},exit:{opacity:0,height:0}},c0.createElement("input",{type:"range",min:"4",max:"15",step:"1",value:W,onChange:f,className:"slider non-absolute"}),c0.createElement("input",{type:"number",name:"guests",value:W,onChange:h,className:"value-input",min:"4",max:"100",step:"1"}))))},a2=pA;var s1=x0(p1());var yz=x0(p1()),Sz=b=>{let c=(0, yz.default)().tz("Europe/Brussels").startOf("day");return b.clone().add(6,"days").endOf("day").isBefore(c)},vz=(b,c)=>b.isSame(c,"day");R0(`.new-reservation-page .calendar-container{position:relative;width:100%}.new-reservation-page .calendar-container .calendar-display{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;user-select:none;text-align:left;border-radius:5px}.new-reservation-page .calendar-container .calendar-display span:first-child{flex-grow:1}.new-reservation-page .calendar-container .calendar{position:absolute;z-index:1000;width:100%;background-color:#fff;border:1px solid #ccc;margin-top:5px;padding:10px;border-radius:10px;animation:fadeInCalendar .3s ease-in-out;box-shadow:0 2px 10px #0000001a}@keyframes fadeInCalendar{0%{opacity:0}to{opacity:1}}.new-reservation-page .calendar-container .availability-hold-btn{font-size:10px}.new-reservation-page .calendar-container .calendar-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:8px;flex-wrap:wrap}.new-reservation-page .calendar-container .calendar-header button{background-color:transparent;border:none;cursor:pointer;font-size:18px}.new-reservation-page .calendar-container .calendar-header span{font-size:15px;color:gray;font-weight:500}.new-reservation-page .calendar-container .calendar-weeks-wrapper{overflow:hidden;position:relative;width:100%}.new-reservation-page .calendar-container .calendar-table{width:100%;border-collapse:collapse}.new-reservation-page .calendar-container .calendar-table th,.new-reservation-page .calendar-container .calendar-table td{width:14.28%;text-align:center;padding:5px}.calendar-container .calendar-table th{color:#666;font-weight:400;padding-bottom:10px}.new-reservation-page .calendar-container .calendar-table td{vertical-align:middle;cursor:pointer;border:none;opacity:1;position:relative}.new-reservation-page .calendar-container .calendar-table td.empty-day{cursor:default}.new-reservation-page .calendar-container .calendar-table td:hover .day-square.available{transform:scale(1.05)}.new-reservation-page .calendar-container .day-square{position:relative;width:38px;height:38px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;flex-direction:column;transition:all .2s ease;font-size:16px;margin:0 auto}.new-reservation-page .calendar-container .day-number{line-height:1;z-index:2}.new-reservation-page .calendar-container .available .day-square{background-color:#cfc;color:#060}.new-reservation-page .calendar-container .available:hover .day-square{background-color:#b3ffb3}.new-reservation-page .calendar-container .available:active .day-square{background-color:#9f9}.new-reservation-page .calendar-container .unavailable .day-square{background-color:#8b000021;color:#8b0000}.new-reservation-page .calendar-container .gray-out .day-square{background-color:#e0e0e0;color:#999;cursor:not-allowed}.new-reservation-page .calendar-container .selected .day-square{background-color:#060;color:#cfc}.new-reservation-page .calendar-container .has-blocked-slots .day-square{background-color:#fff3e0;color:#e65100}.new-reservation-page .calendar-container .has-blocked-slots:hover .day-square{background-color:#ffe0b2}.new-reservation-page .calendar-container .has-blocked-slots.selected .day-square{background-color:#e65100;color:#fff3e0}.new-reservation-page .calendar-container .calendar-table td.unavailable,.new-reservation-page .calendar-container .calendar-table td.gray-out{cursor:not-allowed}.new-reservation-page .calendar-container .calendar-table td.unavailable:hover .day-square,.new-reservation-page .calendar-container .calendar-table td.gray-out:hover .day-square{transform:none}.new-reservation-page .calendar-container .calendar-table td{border:none}.new-reservation-page .calendar-container .arrow{margin-left:auto;color:gray;display:flex;align-items:center}.new-reservation-page .calendar-container .available .availability-badge{background:#38a169}.new-reservation-page .calendar-container .selected .availability-badge{background:#2d3748}@media screen and (max-width:900px){.calendar-container .day-square{width:35px!important;height:35px!important;font-size:15px!important}.calendar-container .calendar-header span{font-size:12px}.new-reservation-page .calendar-container .availability-toggle-btn{padding:5px 8px;font-size:11px}}
10
- `);var R1=x0(j1());var LM=class{constructor(c=6e4){this.cache=new Map,this.ttl=c;}generateKey(c,...q){return `${c}::${JSON.stringify(q)}`}get(c){let q=this.cache.get(c);return q?Date.now()-q.timestamp>this.ttl?(this.cache.delete(c),null):q.value:null}set(c,q){this.cache.set(c,{value:q,timestamp:Date.now()});}clear(){this.cache.clear();}cleanup(){let c=Date.now();for(let[q,e]of this.cache.entries())c-e.timestamp>this.ttl&&this.cache.delete(q);}},m2=new LM;setInterval(()=>m2.cleanup(),3e4);var c1=(b,c,...q)=>{let e=m2.generateKey(b,...q),W=m2.get(e);if(W!==null)return W;let n=c(...q);return m2.set(e,n),n};var n1={nl:{reservationStepOne:{errors:{openingHoursNotSet:"Openingstijden niet ingesteld.",clickHereToSet:"Klik hier om uw openingsuren in te stellen."},modes:{withLimits:"Met Limieten",unlimited:"Onbeperkt",openingHours:"Openingsuren",free:"Vrij"},fields:{time:"Tijd"},messages:{searchingTables:"Beschikbare tafels zoeken...",noTablesAvailable:"Geen specifieke tafels beschikbaar voor deze selectie."},warnings:{unlimitedMode:"Onbeperkt zal geen rekening houden met maximum limieten."}},calendar:{selectDatePlaceholder:"Selecteer een datum",today:"Vandaag",tomorrow:"Morgen",prevWeek:"Vorige week",nextWeek:"Volgende week",dayHeaders:["Ma","Di","Wo","Do","Vr","Za","Zo"],seatsQuestion:"Zitplaatsen?"},timeSelector:{shifts:{breakfast:"Ontbijt",lunch:"Lunch",dinner:"Diner"},selectMeal:"Selecteer een maaltijd",selectTime:"Selecteer een tijd",noDateSelected:"Selecteer eerst een datum.",noTimes:"Geen beschikbare tijden.",back:"Terug",reservations:"Reservaties",guests:"Gasten"},tableSelector:{label:"Selecteer beschikbare tafel(s):",table:"Tafel",max:"Max",noTables:"Geen specifieke tafels beschikbaar voor deze tijd/gasten combinatie.",manual:"Handmatig"}},en:{reservationStepOne:{errors:{openingHoursNotSet:"Opening hours not set.",clickHereToSet:"Click here to set your opening hours."},modes:{withLimits:"With Limits",unlimited:"Unlimited",openingHours:"Opening Hours",free:"Free"},fields:{time:"Time"},messages:{searchingTables:"Searching for available tables...",noTablesAvailable:"No specific tables available for this selection."},warnings:{unlimitedMode:"Unlimited will not take into account maximum limits."}},calendar:{selectDatePlaceholder:"Select a date",today:"Today",tomorrow:"Tomorrow",prevWeek:"Previous week",nextWeek:"Next week",dayHeaders:["M","T","W","T","F","S","S"],seatsQuestion:"Seating?"},timeSelector:{shifts:{breakfast:"Breakfast",lunch:"Lunch",dinner:"Dinner"},selectMeal:"Select a meal",selectTime:"Select a time",noDateSelected:"Please select a date first.",noTimes:"No available times.",back:"Back",reservations:"Reservations",guests:"Guests"},tableSelector:{label:"Select available table(s):",table:"Table",max:"Max",noTables:"No specific tables available for this time/guest combination.",manual:"Manual"}},fr:{reservationStepOne:{errors:{openingHoursNotSet:"Horaires non d\xE9finies.",clickHereToSet:"Cliquez ici pour d\xE9finir vos horaires."},modes:{withLimits:"Avec Limites",unlimited:"Illimit\xE9",openingHours:"Horaires",free:"Libre"},fields:{time:"Heure"},messages:{searchingTables:"Recherche de tables disponibles...",noTablesAvailable:"Aucune table sp\xE9cifique disponible pour cette s\xE9lection."},warnings:{unlimitedMode:"Illimit\xE9 ne tiendra pas compte des limites maximales."}},calendar:{selectDatePlaceholder:"S\xE9lectionnez une date",today:"Aujourd'hui",tomorrow:"Demain",prevWeek:"Semaine pr\xE9c\xE9dente",nextWeek:"Semaine suivante",dayHeaders:["Lu","Ma","Me","Je","Ve","Sa","Di"],seatsQuestion:"Places ?"},timeSelector:{shifts:{breakfast:"Petit-d\xE9jeuner",lunch:"D\xE9jeuner",dinner:"D\xEEner"},selectMeal:"S\xE9lectionnez un repas",selectTime:"S\xE9lectionnez une heure",noDateSelected:"Veuillez d'abord s\xE9lectionner une date.",noTimes:"Aucun horaire disponible.",back:"Retour",reservations:"R\xE9servations",guests:"Convives"},tableSelector:{label:"S\xE9lectionnez les table(s) disponibles :",table:"Table",max:"Max",noTables:"Aucune table sp\xE9cifique disponible pour cette combinaison temps/convives.",manual:"Manuel"}}};var kb=memo(({guests:b,selectedDate:c,onSelectDate:q,autoExpand:e,reservationMode:W,restaurantData:n,startDate:a,onWeekChange:s,reservations:r,giftcard:f,zitplaats:h,isAdmin:u=false})=>{let B=localStorage.getItem("preferredLanguage")||"nl",g=n1[B].calendar,[R,T]=useState(e||false),[L,N]=useState(false),E=useRef(null),k=useRef(null),y=(0, s1.default)().tz("Europe/Amsterdam").add(1,"year").endOf("day");useEffect(()=>{e&&T(true);},[e]),useEffect(()=>{let x=H=>{E.current&&!E.current.contains(H.target)&&(T(false),N(false));};return document.addEventListener("mousedown",x),()=>{document.removeEventListener("mousedown",x);}},[]),useEffect(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null);},[]);let v=()=>{k.current&&(clearTimeout(k.current),k.current=null),N(true);},m=(x=1e3)=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{N(false),k.current=null;},x);},F=useCallback((x,H,$=[])=>{if(x.isBefore(H,"day")||x.isAfter(y,"day"))return 0;let q0=x.format("YYYY-MM-DD");if(W==="vrije_keuze")return 21;if(W!=="met_limieten"&&!L)return (0, R1.isDateAvailable)(n,q0,r,-1e4,$,null,u)?21:0;let K=n?.["table-settings"]||{},Z=K.isInstalled===true&&K.assignmentMode==="automatic"&&(L||W==="met_limieten"),C=M0=>Z?c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,q0,r,M0,$,null,u,null,h||null):c1("isDateAvailable",R1.isDateAvailable,n,q0,r,M0,$,null,u);if(!C(1))return 0;if(C(21))return 21;let a0=1,O0=21,I=1;for(;a0<=O0;){let M0=Math.floor((a0+O0)/2);C(M0)?(I=M0,a0=M0+1):O0=M0-1;}return I},[n,r,f,u,W,L]),_=useMemo(()=>{if(!R)return [];let x=[],H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=a||H,q0=n?.["blocked-slots"]||[],K=u?(n?.exceptions||[]).filter(M0=>M0.type==="Sluiting"&&M0.timeframe==="Volledige Dag"):[],Z=$.clone().startOf("month"),C=$.clone().endOf("month"),a0=n?.["table-settings"]||{},O0=a0.isInstalled===true&&a0.assignmentMode==="automatic"&&W==="met_limieten",I=Z.clone();for(;I.isSameOrBefore(C,"day");){let M0=I.format("YYYY-MM-DD"),N0;if(W==="vrije_keuze")N0=I.isBetween(H,y,null,"[]");else {let w0=W!=="met_limieten"?-1e4:b,h0=W==="met_limieten"?f:null;O0?N0=c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,M0,r,w0,q0,h0,u,null,h||null):N0=c1("isDateAvailable",R1.isDateAvailable,n,M0,r,w0,q0,h0,u);}let _0=F(I,H,q0);x.push({date:I.clone(),isPast:I.isBefore(H,"day"),isFuture:I.isAfter(y,"day"),isAvailable:N0,maxGuestsAvailable:_0,hasBlockedSlots:K.some(w0=>{let h0=w0.startDate||w0.date,A=w0.endDate||w0.date;if(!h0||!A||M0<h0||M0>A)return false;let i=w0.daysOfWeek;if(Array.isArray(i)&&i.length>0){let t=I.clone().locale("nl").format("dddd").toLowerCase(),l=I.clone().locale("en").format("dddd").toLowerCase(),D=i.map(j=>j.toLowerCase());return D.includes(t)||D.includes(l)}return true})}),I.add(1,"day");}return x},[R,a,b,W,n,r,f,h,L,u]),w=x=>{x.isAvailable&&!x.isPast&&!x.isFuture&&(q(x.date.format("YYYY-MM-DD")),T(false),N(false));},J=()=>{let x=a.clone().subtract(1,"month").startOf("month"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day");if(x.clone().endOf("month").isBefore(H,"day")){console.log("Cannot go to previous month. It is in the past.");return}s(x);},Q=()=>{let x=a.clone().add(1,"month").startOf("month");s(x);},i0=()=>{if(!c)return g.selectDatePlaceholder;let x=(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam").startOf("day"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=H.clone().add(1,"day");return x.isSame(H,"day")?g.today:x.isSame($,"day")?g.tomorrow:x.format("dddd D MMMM YYYY")},A0=a?(x=>{let $=a.clone().startOf("month").day(),q0=$===0?6:$-1,K=[];for(let O0=0;O0<q0;O0++)K.push(null);K.push(...x);let Z=K.length,C=Math.ceil(Z/7);for(;K.length<C*7;)K.push(null);let a0=[];for(let O0=0;O0<C;O0++){let I=K.slice(O0*7,O0*7+7);a0.push(I);}return a0})(_):[],S=g.dayHeaders,V=x=>x>=21?"20+":String(x);return c0.createElement("div",{className:"calendar-container",ref:E},c0.createElement("div",{className:"calendar-display",onClick:()=>T(!R)},c0.createElement("span",null,i0()),c0.createElement("span",{className:"arrow"},c0.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",style:{transform:R?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"}},c0.createElement("path",{d:"M7 10l5 5 5-5",fill:"none",stroke:"currentColor",strokeWidth:"2"})))),R&&a&&c0.createElement("div",{className:"calendar"},c0.createElement("div",{className:"calendar-header"},c0.createElement("button",{type:"button",onClick:J,"aria-label":g.prevWeek},"<"),c0.createElement("span",null,a.format("MMMM YYYY")),c0.createElement("button",{type:"button",onClick:Q,"aria-label":g.nextWeek},">"),c0.createElement("button",{type:"button",className:`availability-hold-btn ${L?"active":""}`,"aria-pressed":L,"aria-label":"Houd ingedrukt om beschikbaarheden te tonen",onMouseDown:v,onMouseUp:()=>m(1e3),onMouseLeave:()=>m(1e3),onTouchStart:v,onTouchEnd:()=>m(1e3),onTouchCancel:()=>m(1e3),onKeyDown:x=>{(x.key===" "||x.key==="Enter")&&v();},onKeyUp:x=>{(x.key===" "||x.key==="Enter")&&m(1e3);},style:{fontSize:"15px",color:"gray",fontWeight:"450",textDecoration:"underline"}},g.seatsQuestion)),c0.createElement("div",{className:"calendar-weeks-wrapper"},c0.createElement("table",{className:"calendar-table"},c0.createElement("thead",null,c0.createElement("tr",{translate:"no"},S.map((x,H)=>c0.createElement("th",{key:H},x)))),c0.createElement("tbody",null,A0.map((x,H)=>c0.createElement("tr",{key:H,translate:"no"},x.map(($,q0)=>{if(!$)return c0.createElement("td",{key:q0,className:"empty-day"});let K=c&&vz($.date,(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam")),Z=[];return $.isPast?Z.push("gray-out"):$.isAvailable?Z.push("available"):Z.push("unavailable"),K&&Z.push("selected"),$.hasBlockedSlots&&Z.push("has-blocked-slots"),c0.createElement("td",{key:q0,className:Z.join(" "),onClick:()=>w($),style:{"--animation-order":q0+H*7}},c0.createElement("div",{className:`day-square ${L?"showing-availabilities":""}`},c0.createElement("span",{className:"day-number"},L?V($.maxGuestsAvailable):$.date.date())))}))))))))});kb.displayName="Calendar";var wb=kb;var BM=x0(p1()),_o=({guests:b,formData:c,handleChange:q,resetFormDataFields:e,restaurantData:W,reservations:n,startDate:a,onWeekChange:s,reservationMode:r,isAdmin:f=false})=>{let h=B=>{let g=(0, BM.default)(B).format("YYYY-MM-DD");console.log("Selected date:",g),q({target:{name:"date",value:g}}),e(["time"]);},u=a?a.clone().startOf("month"):(0, BM.default)().startOf("month");return c0.createElement("div",{className:"form-group date-selector-container"},c0.createElement(wb,{guests:b,selectedDate:c.date||null,onSelectDate:h,autoExpand:false,reservationMode:r,restaurantData:W,startDate:u,onWeekChange:s,reservations:n,giftcard:c.giftcard,zitplaats:c.zitplaats,isAdmin:f}))},xb=_o;R0(`.new-reservation-page .time-selector-container{position:relative}.new-reservation-page .time-display{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;user-select:none;text-align:left;border-radius:5px}.new-reservation-page .time-display span:first-child{flex-grow:1}.new-reservation-page .time-selector{position:absolute;z-index:1000;width:100%;max-height:350px;overflow-y:auto;background-color:#fff;border:1px solid #ccc;padding:10px;border-radius:10px;animation:fadeInTimeSelector .3s ease-in-out;top:75px}.new-reservation-page .time-toggle-container{display:flex;gap:8px;padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid #eee}.new-reservation-page .time-toggle-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:20px;border:1px solid #ddd;background-color:#f5f5f5;color:#666;font-size:13px;cursor:pointer;transition:all .2s ease;font-family:inherit}.new-reservation-page .time-toggle-btn:hover{background-color:#e8e8e8;border-color:#ccc}.new-reservation-page .time-toggle-btn.active{background-color:var(--color-blue, #48aaaf);border-color:var(--color-blue, #48aaaf);color:#fff}.new-reservation-page .time-toggle-btn.active:hover{background-color:var(--color-blue, #48aaaf);filter:brightness(.95)}.new-reservation-page .time-toggle-btn svg{flex-shrink:0}.new-reservation-page .time-count{font-weight:400;opacity:.9}@keyframes fadeInTimeSelector{0%{opacity:0}to{opacity:1}}.new-reservation-page .time-period{margin-bottom:15px}.new-reservation-page .time-period-label{font-weight:700;margin-bottom:5px}.new-reservation-page .time-options{display:flex;flex-wrap:wrap;gap:5px}.new-reservation-page .time-option{padding:8px 12px;background-color:#cfc;color:#060;border-radius:5px;cursor:pointer;transition:background-color .2s ease}.new-reservation-page .time-option:hover{background-color:#b3ffb3}.new-reservation-page .time-option.selected{background-color:#060;color:#cfc}.new-reservation-page .time-option.blocked{background-color:#fff3e0;color:#e65100}.new-reservation-page .time-option.blocked:hover{background-color:#ffe0b2}.new-reservation-page .time-option.blocked.selected{background-color:#e65100;color:#fff3e0}.new-reservation-page .info-text{color:#666;font-style:italic}.new-reservation-page .arrow{margin-left:auto;color:gray;display:flex;align-items:center}@media screen and (max-width:480px){.new-reservation-page .time-option{padding:6px 10px;font-size:14px}.new-reservation-page .time-toggle-btn{padding:5px 10px;font-size:12px;gap:4px}.new-reservation-page .time-toggle-btn svg{width:12px;height:12px}}
10
+ `);var R1=x0(j1());var LM=class{constructor(c=6e4){this.cache=new Map,this.ttl=c;}generateKey(c,...q){return `${c}::${JSON.stringify(q)}`}get(c){let q=this.cache.get(c);return q?Date.now()-q.timestamp>this.ttl?(this.cache.delete(c),null):q.value:null}set(c,q){this.cache.set(c,{value:q,timestamp:Date.now()});}clear(){this.cache.clear();}cleanup(){let c=Date.now();for(let[q,e]of this.cache.entries())c-e.timestamp>this.ttl&&this.cache.delete(q);}},m2=new LM;setInterval(()=>m2.cleanup(),3e4);var c1=(b,c,...q)=>{let e=m2.generateKey(b,...q),W=m2.get(e);if(W!==null)return W;let n=c(...q);return m2.set(e,n),n};var n1={nl:{reservationStepOne:{errors:{openingHoursNotSet:"Openingstijden niet ingesteld.",clickHereToSet:"Klik hier om uw openingsuren in te stellen."},modes:{withLimits:"Met Limieten",unlimited:"Onbeperkt",openingHours:"Openingsuren",free:"Vrij"},fields:{time:"Tijd"},messages:{searchingTables:"Beschikbare tafels zoeken...",noTablesAvailable:"Geen specifieke tafels beschikbaar voor deze selectie."},warnings:{unlimitedMode:"Onbeperkt zal geen rekening houden met maximum limieten."}},calendar:{selectDatePlaceholder:"Selecteer een datum",today:"Vandaag",tomorrow:"Morgen",prevWeek:"Vorige week",nextWeek:"Volgende week",dayHeaders:["Ma","Di","Wo","Do","Vr","Za","Zo"],seatsQuestion:"Zitplaatsen?"},timeSelector:{shifts:{breakfast:"Ontbijt",lunch:"Lunch",dinner:"Diner"},selectMeal:"Selecteer een maaltijd",selectTime:"Selecteer een tijd",noDateSelected:"Selecteer eerst een datum.",noTimes:"Geen beschikbare tijden.",back:"Terug",reservations:"Reservaties",guests:"Gasten"},tableSelector:{label:"Selecteer beschikbare tafel(s):",table:"Tafel",max:"Max",noTables:"Geen specifieke tafels beschikbaar voor deze tijd/gasten combinatie.",manual:"Handmatig"}},en:{reservationStepOne:{errors:{openingHoursNotSet:"Opening hours not set.",clickHereToSet:"Click here to set your opening hours."},modes:{withLimits:"With Limits",unlimited:"Unlimited",openingHours:"Opening Hours",free:"Free"},fields:{time:"Time"},messages:{searchingTables:"Searching for available tables...",noTablesAvailable:"No specific tables available for this selection."},warnings:{unlimitedMode:"Unlimited will not take into account maximum limits."}},calendar:{selectDatePlaceholder:"Select a date",today:"Today",tomorrow:"Tomorrow",prevWeek:"Previous week",nextWeek:"Next week",dayHeaders:["M","T","W","T","F","S","S"],seatsQuestion:"Seating?"},timeSelector:{shifts:{breakfast:"Breakfast",lunch:"Lunch",dinner:"Dinner"},selectMeal:"Select a meal",selectTime:"Select a time",noDateSelected:"Please select a date first.",noTimes:"No available times.",back:"Back",reservations:"Reservations",guests:"Guests"},tableSelector:{label:"Select available table(s):",table:"Table",max:"Max",noTables:"No specific tables available for this time/guest combination.",manual:"Manual"}},fr:{reservationStepOne:{errors:{openingHoursNotSet:"Horaires non d\xE9finies.",clickHereToSet:"Cliquez ici pour d\xE9finir vos horaires."},modes:{withLimits:"Avec Limites",unlimited:"Illimit\xE9",openingHours:"Horaires",free:"Libre"},fields:{time:"Heure"},messages:{searchingTables:"Recherche de tables disponibles...",noTablesAvailable:"Aucune table sp\xE9cifique disponible pour cette s\xE9lection."},warnings:{unlimitedMode:"Illimit\xE9 ne tiendra pas compte des limites maximales."}},calendar:{selectDatePlaceholder:"S\xE9lectionnez une date",today:"Aujourd'hui",tomorrow:"Demain",prevWeek:"Semaine pr\xE9c\xE9dente",nextWeek:"Semaine suivante",dayHeaders:["Lu","Ma","Me","Je","Ve","Sa","Di"],seatsQuestion:"Places ?"},timeSelector:{shifts:{breakfast:"Petit-d\xE9jeuner",lunch:"D\xE9jeuner",dinner:"D\xEEner"},selectMeal:"S\xE9lectionnez un repas",selectTime:"S\xE9lectionnez une heure",noDateSelected:"Veuillez d'abord s\xE9lectionner une date.",noTimes:"Aucun horaire disponible.",back:"Retour",reservations:"R\xE9servations",guests:"Convives"},tableSelector:{label:"S\xE9lectionnez les table(s) disponibles :",table:"Table",max:"Max",noTables:"Aucune table sp\xE9cifique disponible pour cette combinaison temps/convives.",manual:"Manuel"}}};var kb=memo(({guests:b,selectedDate:c,onSelectDate:q,autoExpand:e,reservationMode:W,restaurantData:n,startDate:a,onWeekChange:s,reservations:r,giftcard:f,zitplaats:h,isAdmin:u=false})=>{let B=localStorage.getItem("preferredLanguage")||"nl",g=n1[B].calendar,[R,T]=useState(e||false),[L,N]=useState(false),E=useRef(null),k=useRef(null),y=(0, s1.default)().tz("Europe/Amsterdam").add(1,"year").endOf("day");useEffect(()=>{e&&T(true);},[e]),useEffect(()=>{let x=H=>{E.current&&!E.current.contains(H.target)&&(T(false),N(false));};return document.addEventListener("mousedown",x),()=>{document.removeEventListener("mousedown",x);}},[]),useEffect(()=>()=>{k.current&&(clearTimeout(k.current),k.current=null);},[]);let v=()=>{k.current&&(clearTimeout(k.current),k.current=null),N(true);},m=(x=1e3)=>{k.current&&clearTimeout(k.current),k.current=setTimeout(()=>{N(false),k.current=null;},x);},F=useCallback((x,H,$=[])=>{if(x.isBefore(H,"day")||x.isAfter(y,"day"))return 0;let q0=x.format("YYYY-MM-DD");if(W==="vrije_keuze")return 21;if(W!=="met_limieten"&&!L)return (0, R1.isDateAvailable)(n,q0,r,-1e4,$,null,u)?21:0;let K=n?.["table-settings"]||{},Z=K.isInstalled===true&&K.assignmentMode==="automatic"&&(L||W==="met_limieten"),C=M0=>Z?c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,q0,r,M0,$,null,u,null,h||null):c1("isDateAvailable",R1.isDateAvailable,n,q0,r,M0,$,null,u);if(!C(1))return 0;if(C(21))return 21;let a0=1,O0=21,I=1;for(;a0<=O0;){let M0=Math.floor((a0+O0)/2);C(M0)?(I=M0,a0=M0+1):O0=M0-1;}return I},[n,r,f,u,W,L]),_=useMemo(()=>{if(!R)return [];let x=[],H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=a||H,q0=n?.["blocked-slots"]||[],K=u?(n?.exceptions||[]).filter(M0=>M0.type==="Sluiting"&&M0.timeframe==="Volledige Dag"):[],Z=$.clone().startOf("month"),C=$.clone().endOf("month"),a0=n?.["table-settings"]||{},O0=a0.isInstalled===true&&a0.assignmentMode==="automatic"&&W==="met_limieten",I=Z.clone();for(;I.isSameOrBefore(C,"day");){let M0=I.format("YYYY-MM-DD"),N0;if(W==="vrije_keuze")N0=I.isBetween(H,y,null,"[]");else {let w0=W!=="met_limieten"?-1e4:b,h0=W==="met_limieten"?f:null;O0?N0=c1("isDateAvailableWithTableCheck",R1.isDateAvailableWithTableCheck,n,M0,r,w0,q0,h0,u,null,h||null):N0=c1("isDateAvailable",R1.isDateAvailable,n,M0,r,w0,q0,h0,u);}let _0=F(I,H,q0);x.push({date:I.clone(),isPast:I.isBefore(H,"day"),isFuture:I.isAfter(y,"day"),isAvailable:N0,maxGuestsAvailable:_0,hasBlockedSlots:K.some(w0=>{let h0=w0.startDate||w0.date,A=w0.endDate||w0.date;if(!h0||!A||M0<h0||M0>A)return false;let i=w0.daysOfWeek;if(Array.isArray(i)&&i.length>0){let t=I.clone().locale("nl").format("dddd").toLowerCase(),l=I.clone().locale("en").format("dddd").toLowerCase(),D=i.map(j=>j.toLowerCase());return D.includes(t)||D.includes(l)}return true})}),I.add(1,"day");}return x},[R,a,b,W,n,r,f,h,L,u]),w=x=>{x.isAvailable&&!x.isPast&&!x.isFuture&&(q(x.date.format("YYYY-MM-DD")),T(false),N(false));},J=()=>{let x=a.clone().subtract(1,"month").startOf("month"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day");if(x.clone().endOf("month").isBefore(H,"day")){console.log("Cannot go to previous month. It is in the past.");return}s(x);},Q=()=>{let x=a.clone().add(1,"month").startOf("month");s(x);},i0=()=>{if(!c)return g.selectDatePlaceholder;let x=(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam").startOf("day"),H=(0, s1.default)().tz("Europe/Amsterdam").startOf("day"),$=H.clone().add(1,"day");return x.isSame(H,"day")?g.today:x.isSame($,"day")?g.tomorrow:x.format("dddd D MMMM YYYY")},A0=a?(x=>{let $=a.clone().startOf("month").day(),q0=$===0?6:$-1,K=[];for(let O0=0;O0<q0;O0++)K.push(null);K.push(...x);let Z=K.length,C=Math.ceil(Z/7);for(;K.length<C*7;)K.push(null);let a0=[];for(let O0=0;O0<C;O0++){let I=K.slice(O0*7,O0*7+7);a0.push(I);}return a0})(_):[],S=g.dayHeaders,V=x=>x>=21?"20+":String(x);return c0.createElement("div",{className:"calendar-container",ref:E},c0.createElement("div",{className:"calendar-display",onClick:()=>T(!R)},c0.createElement("span",null,i0()),c0.createElement("span",{className:"arrow"},c0.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",style:{transform:R?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"}},c0.createElement("path",{d:"M7 10l5 5 5-5",fill:"none",stroke:"currentColor",strokeWidth:"2"})))),R&&a&&c0.createElement("div",{className:"calendar"},c0.createElement("div",{className:"calendar-header"},c0.createElement("button",{type:"button",onClick:J,"aria-label":g.prevWeek},"<"),c0.createElement("span",null,a.format("MMMM YYYY")),c0.createElement("button",{type:"button",onClick:Q,"aria-label":g.nextWeek},">"),c0.createElement("button",{type:"button",className:`availability-hold-btn ${L?"active":""}`,"aria-pressed":L,"aria-label":"Houd ingedrukt om beschikbaarheden te tonen",onMouseDown:v,onMouseUp:()=>m(1e3),onMouseLeave:()=>m(1e3),onTouchStart:v,onTouchEnd:()=>m(1e3),onTouchCancel:()=>m(1e3),onKeyDown:x=>{(x.key===" "||x.key==="Enter")&&v();},onKeyUp:x=>{(x.key===" "||x.key==="Enter")&&m(1e3);},style:{fontSize:"15px",color:"gray",fontWeight:"450",textDecoration:"underline"}},g.seatsQuestion)),c0.createElement("div",{className:"calendar-weeks-wrapper"},c0.createElement("table",{className:"calendar-table"},c0.createElement("thead",null,c0.createElement("tr",{translate:"no"},S.map((x,H)=>c0.createElement("th",{key:H},x)))),c0.createElement("tbody",null,A0.map((x,H)=>c0.createElement("tr",{key:H,translate:"no"},x.map(($,q0)=>{if(!$)return c0.createElement("td",{key:q0,className:"empty-day"});let K=c&&vz($.date,(0, s1.default)(c,"YYYY-MM-DD").tz("Europe/Amsterdam")),Z=[];return $.isPast?Z.push("gray-out"):$.hasBlockedSlots?Z.push("has-blocked-slots"):$.isAvailable?Z.push("available"):Z.push("unavailable"),K&&Z.push("selected"),c0.createElement("td",{key:q0,className:Z.join(" "),onClick:()=>w($),style:{"--animation-order":q0+H*7}},c0.createElement("div",{className:`day-square ${L?"showing-availabilities":""}`},c0.createElement("span",{className:"day-number"},L?V($.maxGuestsAvailable):$.date.date())))}))))))))});kb.displayName="Calendar";var wb=kb;var BM=x0(p1()),_o=({guests:b,formData:c,handleChange:q,resetFormDataFields:e,restaurantData:W,reservations:n,startDate:a,onWeekChange:s,reservationMode:r,isAdmin:f=false})=>{let h=B=>{let g=(0, BM.default)(B).format("YYYY-MM-DD");console.log("Selected date:",g),q({target:{name:"date",value:g}}),e(["time"]);},u=a?a.clone().startOf("month"):(0, BM.default)().startOf("month");return c0.createElement("div",{className:"form-group date-selector-container"},c0.createElement(wb,{guests:b,selectedDate:c.date||null,onSelectDate:h,autoExpand:false,reservationMode:r,restaurantData:W,startDate:u,onWeekChange:s,reservations:n,giftcard:c.giftcard,zitplaats:c.zitplaats,isAdmin:f}))},xb=_o;R0(`.new-reservation-page .time-selector-container{position:relative}.new-reservation-page .time-display{display:flex;align-items:center;justify-content:space-between;width:100%;padding:10px;background-color:#fff;border:#ccc 1px solid;cursor:pointer;user-select:none;text-align:left;border-radius:5px}.new-reservation-page .time-display span:first-child{flex-grow:1}.new-reservation-page .time-selector{position:absolute;z-index:1000;width:100%;max-height:350px;overflow-y:auto;background-color:#fff;border:1px solid #ccc;padding:10px;border-radius:10px;animation:fadeInTimeSelector .3s ease-in-out;top:75px}.new-reservation-page .time-toggle-container{display:flex;gap:8px;padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid #eee}.new-reservation-page .time-toggle-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:20px;border:1px solid #ddd;background-color:#f5f5f5;color:#666;font-size:13px;cursor:pointer;transition:all .2s ease;font-family:inherit}.new-reservation-page .time-toggle-btn:hover{background-color:#e8e8e8;border-color:#ccc}.new-reservation-page .time-toggle-btn.active{background-color:var(--color-blue, #48aaaf);border-color:var(--color-blue, #48aaaf);color:#fff}.new-reservation-page .time-toggle-btn.active:hover{background-color:var(--color-blue, #48aaaf);filter:brightness(.95)}.new-reservation-page .time-toggle-btn svg{flex-shrink:0}.new-reservation-page .time-count{font-weight:400;opacity:.9}@keyframes fadeInTimeSelector{0%{opacity:0}to{opacity:1}}.new-reservation-page .time-period{margin-bottom:15px}.new-reservation-page .time-period-label{font-weight:700;margin-bottom:5px}.new-reservation-page .time-options{display:flex;flex-wrap:wrap;gap:5px}.new-reservation-page .time-option{padding:8px 12px;background-color:#cfc;color:#060;border-radius:5px;cursor:pointer;transition:background-color .2s ease}.new-reservation-page .time-option:hover{background-color:#b3ffb3}.new-reservation-page .time-option.selected{background-color:#060;color:#cfc}.new-reservation-page .time-option.blocked{background-color:#fff3e0;color:#e65100}.new-reservation-page .time-option.blocked:hover{background-color:#ffe0b2}.new-reservation-page .time-option.blocked.selected{background-color:#e65100;color:#fff3e0}.new-reservation-page .info-text{color:#666;font-style:italic}.new-reservation-page .arrow{margin-left:auto;color:gray;display:flex;align-items:center}@media screen and (max-width:480px){.new-reservation-page .time-option{padding:6px 10px;font-size:14px}.new-reservation-page .time-toggle-btn{padding:5px 10px;font-size:12px;gap:4px}.new-reservation-page .time-toggle-btn svg{width:12px;height:12px}}
11
11
  `);var XM=x0(p1());var g2=x0(j1()),Ib=memo(({guests:b,formData:c,handleChange:q,field:e,selectedDate:W,expanded:n,setCurrentExpandedField:a,restaurantData:s,reservations:r,reservationMode:f,isAdmin:h=false,zitplaats:u=null})=>{let B=localStorage.getItem("preferredLanguage")||"nl",g=n1[B].timeSelector,[R,T]=useState(n||false),[L,N]=useState([]),[E,k]=useState(null),[y,v]=useState(null),m=useRef(null),F=useMemo(()=>{if(!h||!W||!s)return new Set;let S=s?.["blocked-slots"]||[],V=new Set;return S.forEach(x=>{x.date===W&&x.time&&V.add(x.time);}),V},[h,W,s]),_=useMemo(()=>{if(!r||!W)return {};let S={};return r.forEach(V=>{if((V.date||V.datum)!==W)return;let H=V.time||V.tijd;if(!H)return;let $=V.guests||V.antal||V.gasten||1;S[H]||(S[H]={reservations:0,guests:0}),S[H].reservations+=1,S[H].guests+=$;}),S},[r,W]),w=S=>_[S]||{reservations:0,guests:0},J=S=>{v(y===S?null:S);},Q={breakfast:{start:"07:00",end:"11:00",label:g.shifts.breakfast},lunch:{start:"11:00",end:"16:00",label:g.shifts.lunch},dinner:{start:"16:00",end:"23:00",label:g.shifts.dinner}};useEffect(()=>{if(!W||!b){N([]);return}if(f==="vrije_keuze")if(E){let S=Q[E],V=XM.default.tz(`${W} ${S.start}`,"YYYY-MM-DD HH:mm","Europe/Brussels"),x=XM.default.tz(`${W} ${S.end}`,"YYYY-MM-DD HH:mm","Europe/Brussels"),H=[],$=V.clone();for(;$.isBefore(x);)H.push({value:$.format("HH:mm"),label:$.format("HH:mm")}),$.add(15,"minutes");N(H);}else N([]);else if(s&&r){let S=f!=="met_limieten"?-1e4:b,V=s?.["table-settings"]||{},x=f==="met_limieten"&&V.isInstalled===true&&V.assignmentMode==="automatic",H=f==="met_limieten"?c.giftcard:null,$=s?.["blocked-slots"]||[],q0=(0, g2.getAvailableTimeblocks)(s,W,r,S,$,H,h,c.duration),K=x?(0, g2.getAvailableTimeblocksWithTableCheck)(s,W,q0,S,r,u,c.duration):q0,Z=Object.keys(K).map(C=>({value:C,label:K[C].name||C}));Z.sort((C,a0)=>{let[O0,I]=C.value.split(":").map(Number),[M0,N0]=a0.value.split(":").map(Number);return O0*60+I-(M0*60+N0)}),N(Z),c[e.id]&&!Z.some(C=>C.value===c[e.id])&&q({target:{name:e.id,value:""}});}else N([]);},[W,b,s,r,f,e.id,E,u,c[e.id],q]),useEffect(()=>{f==="vrije_keuze"&&(k(null),c[e.id]&&q({target:{name:e.id,value:""}}));},[W,f]);let i0=S=>{q({target:{name:e.id,value:S}}),T(false),a?.(null);},o0=S=>{E!==S&&c[e.id]&&q({target:{name:e.id,value:""}}),k(S);},A0=()=>{if(f==="vrije_keuze")return E?c[e.id]?`${Q[E].label} \u2013 ${c[e.id]}`:`${Q[E].label} \u2013 ${g.selectTime}`:g.selectMeal;if(c[e.id]){let S=L.find(V=>V.value===c[e.id]);return S?S.label:g.selectTime}return g.selectTime};return e?c0.createElement("div",{className:"form-group time-selector-container",ref:m},W?c0.createElement(c0.Fragment,null,c0.createElement("div",{className:"time-display",onClick:()=>{T(!R),R||a?.(e.id);}},c0.createElement("span",null,A0()),c0.createElement("span",{className:"arrow"},c0.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",style:{transform:R?"rotate(180deg)":"rotate(0deg)",transition:"transform 0.2s"}},c0.createElement("path",{d:"M7 10l5 5 5-5",fill:"none",stroke:"currentColor",strokeWidth:"2"})))),R&&c0.createElement("div",{className:"time-selector"},c0.createElement("div",{className:"time-toggle-container"},c0.createElement("button",{className:`time-toggle-btn ${y==="reservations"?"active":""}`,onClick:()=>J("reservations"),type:"button"},c0.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},c0.createElement("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2",ry:"2"}),c0.createElement("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),c0.createElement("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),c0.createElement("line",{x1:"3",y1:"10",x2:"21",y2:"10"})),g.reservations),c0.createElement("button",{className:`time-toggle-btn ${y==="guests"?"active":""}`,onClick:()=>J("guests"),type:"button"},c0.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},c0.createElement("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),c0.createElement("circle",{cx:"9",cy:"7",r:"4"}),c0.createElement("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),c0.createElement("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})),g.guests)),f==="vrije_keuze"?E?c0.createElement("div",{className:"time-period"},c0.createElement("div",{className:"time-period-label"},Q[E].label,c0.createElement("button",{onClick:()=>k(null),style:{marginLeft:"10px",background:"none",border:"none",cursor:"pointer",color:"#006600",fontSize:"0.9rem",padding:0}},"\u2190 ",g.back)),c0.createElement("div",{className:"time-options"},L.length===0?c0.createElement("div",{className:"no-times"},g.noTimes):L.map(S=>{let V=w(S.value),x=F.has(S.value);return c0.createElement("div",{key:S.value,className:`time-option${c[e.id]===S.value?" selected":""}${x?" blocked":""}`,onClick:()=>i0(S.value)},S.label,y==="reservations"&&V.reservations>0&&c0.createElement("span",{className:"time-count"}," - ",V.reservations),y==="guests"&&V.guests>0&&c0.createElement("span",{className:"time-count"}," - ",V.guests,"p"))}))):c0.createElement("div",{className:"time-options"},Object.keys(Q).map(S=>c0.createElement("div",{key:S,className:`time-option ${E===S?"selected":""}`,onClick:()=>o0(S)},Q[S].label))):c0.createElement("div",{className:"time-options"},L.length===0?c0.createElement("div",{className:"no-times"},g.noTimes):L.map(S=>{let V=w(S.value),x=F.has(S.value);return c0.createElement("div",{key:S.value,className:`time-option${c[e.id]===S.value?" selected":""}${x?" blocked":""}`,onClick:()=>i0(S.value)},S.label,y==="reservations"&&V.reservations>0&&c0.createElement("span",{className:"time-count"}," - ",V.reservations),y==="guests"&&V.guests>0&&c0.createElement("span",{className:"time-count"}," - ",V.guests,"p"))})))):c0.createElement("p",{className:"info-text"},g.noDateSelected)):null});Ib.displayName="TimeSelector";var Fb=Ib;R0(`.new-reservation-page .table-selector-container{margin-top:15px;padding:10px;border:1px solid #eee;border-radius:4px;background-color:#f9f9f9}.new-reservation-page .table-selector-label{display:block;margin-bottom:10px;font-weight:700;color:#333;font-size:.95rem}.new-reservation-page .table-options{display:flex;flex-wrap:wrap;gap:10px}.new-reservation-page .table-option{display:inline-block;margin-right:15px;margin-bottom:5px;padding:5px 8px;border:1px solid #ccc;border-radius:4px;background-color:#fff;transition:background-color .2s ease}.new-reservation-page .table-option label{display:flex;align-items:center;cursor:pointer;font-size:.9rem;color:#555}.new-reservation-page .table-option input[type=checkbox]{margin-right:8px;cursor:pointer;accent-color:var(--primary-color, #006600)}.new-reservation-page .table-option:has(input[type=checkbox]:checked){background-color:#e0f2e0;border-color:#060}.new-reservation-page .table-option:hover{background-color:#f0f0f0}.new-reservation-page .info-text{margin-top:10px;font-size:.85rem;color:#666}.new-reservation-page .selected-tables-info{margin-top:10px;font-style:italic}.new-reservation-page .info-text.loading-tables{font-style:italic;color:#060}.new-reservation-page .table-option--manual{border-color:#ff9800;background-color:#fff8e1}.new-reservation-page .table-option--manual:hover{background-color:#ffecb3}.new-reservation-page .table-option--manual:has(input[type=checkbox]:checked){background-color:#ffe082;border-color:#ff9800}
12
12
  `);var Ho=({availableTables:b=[],isFetching:c=false,formData:q={},handleChange:e,setFormData:W})=>{let n=localStorage.getItem("preferredLanguage")||"nl",a=n1?.[n]?.tableSelector||{},s={label:a.label||"Tafels",noTables:a.noTables||"Geen tafels beschikbaar voor deze selectie.",table:a.table||"Tafel",max:a.max||"Max"},r=Array.isArray(q.selectedTableNumbers)?q.selectedTableNumbers:[],f=Array.isArray(q.selectedTableIds)?q.selectedTableIds:[],h=(B,g)=>{if(typeof e=="function"){e({target:{multiple:true,updates:{selectedTableNumbers:B,selectedTableIds:g}}});return}typeof W=="function"&&W(R=>({...R,selectedTableNumbers:B,selectedTableIds:g}));},u=B=>g=>{let R=g.target.checked,T=b.find(E=>E.tableNumber===B);if(!T)return;let L=[...r],N=[...f];R?(L.includes(B)||L.push(B),N.includes(T.tableId)||N.push(T.tableId)):(L=L.filter(E=>E!==B),N=N.filter(E=>E!==T.tableId)),L.sort((E,k)=>E-k),h(L,N);};return c?c0.createElement("div",{className:"form-group table-selector-container"},c0.createElement("label",{className:"table-selector-label"},s.label),c0.createElement("p",{className:"info-text"},"Laden\u2026")):!b||b.length===0?c0.createElement("div",{className:"form-group table-selector-container"},c0.createElement("label",{className:"table-selector-label"},s.label),c0.createElement("p",{className:"info-text"},s.noTables)):c0.createElement("div",{className:"form-group table-selector-container"},c0.createElement("label",{className:"table-selector-label"},s.label),c0.createElement("div",{className:"table-options"},b.map(B=>{let g=B.tableNumber,R=B.maxCapacity??B.capacity??B.seats??"-",T=r.includes(g),L=B.isManual===true;return c0.createElement("div",{key:`${B.tableId||g}`,className:`table-option${L?" table-option--manual":""}`},c0.createElement("label",null,c0.createElement("input",{type:"checkbox",value:g,checked:T,onChange:u(g)}),s.table," ",g," (",s.max,": ",R,")"))})))},h2=Ho;R0(`.new-reservation-page .form-row .field-label{display:block;margin-bottom:6px;font-weight:600}.new-reservation-page .form-row .reservation-mode-buttons{margin-top:0}.new-reservation-page .reservation-mode-buttons{display:flex;gap:10px;margin-top:10px}.new-reservation-page .reservation-mode-button{flex:1;padding:10px;border:1px solid #ccc;border-radius:var(--border-radius);background-color:var(--color-white);cursor:pointer;font-size:1rem;transition:background-color .3s ease,color .3s ease}.new-reservation-page .reservation-mode-button:nth-child(3){flex:0 0 100%}.new-reservation-page .reservation-modes-container{display:flex;flex-wrap:wrap;margin:0 -5px;width:100%}.new-reservation-page .reservation-mode-button{flex:0 0 calc(50% - 10px);margin:5px;padding:10px;box-sizing:border-box;text-align:center;border:1px solid #ccc;background:#f7f7f7;cursor:pointer}.new-reservation-page .reservation-mode-button.active,.new-reservation-page .reservation-mode-button:hover{background-color:var(--color-blue);color:var(--color-white)}.new-reservation-page .unlimited-mode-warning{display:flex;align-items:flex-start;gap:10px;margin:15px 0;padding:12px 15px;background-color:#fff3cd;border:1px solid #ffeaa7;border-radius:var(--border-radius, 4px);border-left:4px solid #e67e22;font-size:.9rem;line-height:1.4}.new-reservation-page .unlimited-mode-warning .warning-icon{color:#e67e22;font-size:1.1rem;margin-top:2px;flex-shrink:0}.new-reservation-page .unlimited-mode-warning .warning-text{color:#856404;margin:0}@media screen and (max-width:480px){.new-reservation-page .unlimited-mode-warning{margin:10px 0;padding:10px 12px;font-size:.85rem}.new-reservation-page .unlimited-mode-warning .warning-icon{font-size:1rem}}.new-reservation-page .reservation-sidebar-component{position:fixed;top:0;right:-400px;width:400px;height:100%;background-color:#fff;box-shadow:-2px 0 5px #0000001a;z-index:var(--z-index-sidebar-reservation);display:flex;flex-direction:column;overflow-y:auto;transition:right .3s ease-in-out}.new-reservation-page .admin-title{text-align:center;margin-bottom:30px}.new-reservation-page .reservation-sidebar-component.open{right:0}.new-reservation-page .reservation-sidebar-content{padding:60px 20px 20px}.new-reservation-page .close-sidebar-button{position:absolute;top:10px;left:10px;background-color:transparent;border:none;cursor:pointer}.new-reservation-page .close-sidebar-button svg{color:#000}.new-reservation-page .sidebar-section-one,.new-reservation-page .sidebar-section-two{margin-bottom:20px}.new-reservation-page .reservation-footer{margin-top:auto}.new-reservation-page .store-reservation-button{width:100%;padding:12px;background-color:var(--color-blue);color:#fff;border:none;border-radius:5px;cursor:pointer;font-size:1.1rem}.new-reservation-page .open-sidebar-button{position:fixed;bottom:20px;right:20px;background-color:var(--color-blue);color:#fff;border:none;border-radius:50%;width:50px;height:50px;cursor:pointer;z-index:var(--z-index-modal)!important;transition:all .3s ease}.new-reservation-page .open-sidebar-button:hover{background-color:var(--color-blue-hover-accent)!important}.new-reservation-page .open-sidebar-button svg{position:relative;top:2px}@media screen and (max-width:480px){.new-reservation-page .reservation-sidebar-component{width:100%}}.new-reservation-page .sidebar-section-personeel{margin-bottom:10px}
13
13
  `);var Gb=x0(p1());var jo=()=>{let b=useCallback(()=>localStorage.getItem("accessToken"),[]),c=useCallback((W,n={})=>{let{params:a,...s}=n,r=b();return Hb.get(W,{...s,params:a,headers:{...s.headers,...r?{Authorization:`Bearer ${r}`}:{}}}).then(f=>f.data).catch(f=>{throw console.error("Error fetching data:",f),f})},[b]),q=useCallback((W,n,a=null,s={})=>{let r=b();return Hb({method:W,url:n,data:a,...s,headers:{...s.headers,...r?{Authorization:`Bearer ${r}`}:{}}}).then(f=>f.data).catch(f=>{throw console.error(`Error with ${W} request:`,f),f})},[b]);return useMemo(()=>({get:c,post:(W,n,a)=>q("POST",W,n,a),put:(W,n,a)=>q("PUT",W,n,a),patch:(W,n,a)=>q("PATCH",W,n,a),delete:(W,n)=>q("DELETE",W,null,n)}),[c,q])},A1=jo;var Yb=x0(j1());var $o=({duration:b,setDuration:c,handleChange:q,min:e=30,max:W=120,interval:n=30})=>{let [a,s]=useState(false),r=useMemo(()=>{let N=[],E=parseInt(e)||30,k=parseInt(W)||120,y=parseInt(n)||30;for(let v=E;v<=k;v+=y){let m=[],F=Math.floor(v/60),_=v%60;F>0&&m.push(`${F} u`),_>0&&m.push(`${_} min`),N.push({value:v,label:m.join(" ")});}return N},[e,W,n]),f=r.slice(0,3),h=r.length>3;f.some(N=>N.value===parseInt(b));let B=N=>{s(false),c&&c(N),q&&q({target:{name:"duration",value:N}});};useEffect(()=>{!b&&r.length>0&&B(r[0].value);},[]);let g=()=>{let N=f[f.length-1],E=parseInt(n)||30;if(N){let k=N.value+E,y=parseInt(W)||120,v=Math.min(k,y);c&&c(v),q&&q({target:{name:"duration",value:v}}),s(true);}else s(true);},R=N=>{let E=parseInt(b)||parseInt(e)||30,k=parseInt(n)||30,y=parseInt(e)||30,v=parseInt(W)||120,m=E+N*k;m<y&&(m=y),m>v&&(m=v),c&&c(m),q&&q({target:{name:"duration",value:m}});},T={wrapper:{marginBottom:"20px"},grid:{display:"flex",flexWrap:"wrap",gap:"8px"},optionBtn:{padding:"8px 12px",borderRadius:"6px",border:"1px solid #D0D5DD",backgroundColor:"#fff",cursor:"pointer",fontSize:"14px",fontWeight:"500",color:"#344054",textAlign:"center",transition:"all 0.2s",outline:"none",fontFamily:"'Inter', sans-serif', system-ui",flex:1,minWidth:"60px"},activeBtn:{backgroundColor:"#48AAAF",color:"#ffffff",borderColor:"#48AAAF"},stepperContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:"10px",padding:"8px",backgroundColor:"#F9FAFB",border:"1px solid #EAECF0",borderRadius:"8px",width:"100%"},stepperBtn:{width:"32px",height:"32px",display:"flex",alignItems:"center",justifyContent:"center",borderRadius:"6px",border:"1px solid #D0D5DD",backgroundColor:"#fff",cursor:"pointer",color:"#344054"},stepperValue:{fontSize:"14px",fontWeight:"600",color:"#101828"}},L=N=>{let E=Math.floor(N/60),k=N%60,y=[];return E>0&&y.push(`${E} u`),k>0&&y.push(`${k} min`),y.join(" ")||`${N} min`};return c0.createElement("div",{style:T.wrapper},c0.createElement("style",null,`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happychef/reservation-sidebar",
3
- "version": "2.8.20",
3
+ "version": "2.8.21",
4
4
  "description": "A compound component for managing restaurant reservations - JavaScript version with independent styles",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",