@forgebuild/hotal-ui 0.23.156 → 0.23.202

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.
Files changed (47) hide show
  1. package/dist/components/ai-chat-widget.js +75 -0
  2. package/dist/components/availability-calendar.js +7 -0
  3. package/dist/components/booking-card.js +30 -0
  4. package/dist/components/booking-checkout.js +40 -0
  5. package/dist/components/booking-confirmed.js +1 -0
  6. package/dist/components/booking-flow.js +26 -0
  7. package/dist/components/booking-progress-bar.js +1 -0
  8. package/dist/components/booking-summary.js +14 -0
  9. package/dist/components/chunks/ably-5cVT4knS.js +9 -0
  10. package/dist/components/chunks/calendar-B8eNjUm2.js +1 -0
  11. package/dist/components/chunks/client-BDk8LqGN.js +3 -0
  12. package/dist/components/chunks/floating-ui.dom-DY3dGoEq.js +1 -0
  13. package/dist/components/chunks/gsap-DWxn8li7.js +1 -0
  14. package/dist/components/chunks/lib-Bd4dedte.js +1 -0
  15. package/dist/components/chunks/min-DdO-yBwh.js +17 -0
  16. package/dist/components/chunks/preload-helper-Czpn1I53.js +1 -0
  17. package/dist/components/chunks/rolldown-runtime-CbXtAM7H.js +1 -0
  18. package/dist/components/confirmation-card.js +3 -0
  19. package/dist/components/dining-teaser.js +19 -0
  20. package/dist/components/event-contact-form.js +33 -0
  21. package/dist/components/event-inquiries-feed.js +29 -0
  22. package/dist/components/extras-catalogue.js +25 -0
  23. package/dist/components/floor-plan-hero.js +2 -0
  24. package/dist/components/google-reviews.js +31 -0
  25. package/dist/components/instagram-feed.js +16 -0
  26. package/dist/components/island-map.js +1 -0
  27. package/dist/components/live-dining-orders-feed.js +37 -0
  28. package/dist/components/live-golf-bookings-feed.js +18 -0
  29. package/dist/components/live-reservations-feed.js +18 -0
  30. package/dist/components/live-room-bookings-feed.js +18 -0
  31. package/dist/components/live-shop-orders-feed.js +37 -0
  32. package/dist/components/live-spa-bookings-feed.js +55 -0
  33. package/dist/components/menu-section.js +90 -0
  34. package/dist/components/proshop-catalogue.js +20 -0
  35. package/dist/components/reservation-bar.js +5 -0
  36. package/dist/components/reservation-cancel.js +4 -0
  37. package/dist/components/restaurant-order-form.js +9 -0
  38. package/dist/components/room-grid.js +26 -0
  39. package/dist/components/searchable-select.js +20 -0
  40. package/dist/components/service-booking-bar.js +14 -0
  41. package/dist/components/spa-booking-widget.js +198 -0
  42. package/dist/components/stay-search.js +31 -0
  43. package/dist/components/tripadvisor-reviews.js +38 -0
  44. package/dist/components/venue-carousel.js +18 -0
  45. package/dist/hotal-ui.js +5004 -4714
  46. package/dist/index.d.ts +35 -3
  47. package/package.json +6 -2
@@ -0,0 +1,9 @@
1
+ import{$ as e,A as t,B as n,D as r,E as i,H as a,I as o,J as s,K as c,L as l,M as u,N as d,R as f,S as p,T as m,U as h,V as g,W as _,X as v,Z as y,b,et as x,f as S,h as C,j as w,n as T,s as E,t as D,w as O,y as k,z as A}from"./chunks/client-BDk8LqGN.js";var j=r(`<span class="rof-cat-count svelte-6oqepq"> </span>`),M=r(`<button type="button"> <!></button>`),N=r(`<div class="rof-item-desc svelte-6oqepq"> </div>`),ee=r(`<button type="button"> </button>`),te=r(`<div class="rof-variant-picker svelte-6oqepq"></div>`),ne=r(`<span class="rof-item-tag rof-item-tag--icon svelte-6oqepq"><img width="20" height="20" class="rof-diet-icon svelte-6oqepq"/></span>`),re=r(`<span class="rof-item-tag svelte-6oqepq"> </span>`),ie=r(`<div class="rof-item-tags svelte-6oqepq"></div>`),ae=r(`<div class="rof-item svelte-6oqepq"><div class="rof-item-body svelte-6oqepq"><div class="rof-item-name svelte-6oqepq"> </div> <!> <!> <!> <div class="rof-item-footer svelte-6oqepq"><div class="rof-item-price svelte-6oqepq"> </div> <div class="rof-qty svelte-6oqepq"><button type="button" class="rof-qty-btn svelte-6oqepq"><span class="svelte-6oqepq">−</span></button> <div> </div> <button type="button" class="rof-qty-btn svelte-6oqepq"><span class="svelte-6oqepq">+</span></button></div></div></div></div>`),oe=r(`<div class="rof-confirm-left svelte-6oqepq"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="rgb(0,245,212)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="svelte-6oqepq"><polyline points="20 6 9 17 4 12" class="svelte-6oqepq"></polyline></svg> <span class="rof-confirm-label svelte-6oqepq">Order placed</span> <span class="rof-confirm-items svelte-6oqepq"> </span></div> <div class="rof-confirm-right svelte-6oqepq"><span class="rof-confirm-total svelte-6oqepq"> </span> <span class="rof-confirm-time svelte-6oqepq"> </span></div>`,1),se=r(`<button type="button"><span class="svelte-6oqepq"> </span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12" class="svelte-6oqepq"></polyline></svg></button>`),P=r(`<div class="rof-cart-summary svelte-6oqepq"> <strong class="svelte-6oqepq"> </strong></div> <div class="rof-cart-right svelte-6oqepq"><div class="rof-schedule svelte-6oqepq"><span class="rof-schedule-label svelte-6oqepq">Deliver at</span> <div><button type="button" class="rof-timepicker-btn svelte-6oqepq"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-6oqepq"><circle cx="12" cy="12" r="10" class="svelte-6oqepq"></circle><polyline points="12 6 12 12 16 14" class="svelte-6oqepq"></polyline></svg> <span class="svelte-6oqepq"> </span> <svg class="rof-timepicker-caret svelte-6oqepq" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9" class="svelte-6oqepq"></polyline></svg></button> <div class="rof-timepicker-drop svelte-6oqepq" role="presentation"><div class="rof-tp-days svelte-6oqepq"></div> <button type="button" class="rof-tp-slot rof-tp-asap svelte-6oqepq"><span class="svelte-6oqepq">ASAP</span> <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12" class="svelte-6oqepq"></polyline></svg></button> <!></div></div></div> <button type="button" class="rof-place-btn svelte-6oqepq"> </button></div>`,1),F=r(`<div class="rof-order-msg rof-order-msg--error svelte-6oqepq"> </div>`),I=r(`<div class="rof-cart-bar svelte-6oqepq"><!></div> <!>`,1),ce=r(`<div class="rof-root svelte-6oqepq"><div class="rof-cat-tabs svelte-6oqepq"></div> <div class="rof-grid svelte-6oqepq"></div> <!></div>`),le={hash:`svelte-6oqepq`,code:`.rof-root.svelte-6oqepq {display:block;font-family:inherit;color:var(--rof-text-color, #05040f);}.rof-cat-tabs.svelte-6oqepq {display:flex;gap:0.25rem;flex-wrap:wrap;margin-bottom:1.25rem;}.rof-cat-tab.svelte-6oqepq {height:30px;padding:0 14px;border-radius:9999px;border:1px solid var(--rof-tab-border, rgba(5, 4, 15, 0.1));background:transparent;font-size:12px;font-weight:600;color:var(--rof-tab-color, #5e5d6b);cursor:pointer;transition:background 0.15s, color 0.15s, border-color 0.15s;white-space:nowrap;}.rof-cat-tab.svelte-6oqepq:hover {background:rgba(5, 4, 15, 0.04);color:#3d3c4c;}.rof-cat-tab.active.svelte-6oqepq {background:var(--rof-accent-bg, #05040f);color:#fff;border-color:var(--rof-accent-bg, #05040f);}.rof-cat-count.svelte-6oqepq {display:inline-flex;align-items:center;justify-content:center;min-width:1rem;height:1rem;padding:0 0.25rem;border-radius:9999px;background:rgba(0, 245, 212, 0.25);color:#05040f;font-size:10px;font-weight:700;margin-left:5px;vertical-align:middle;}.rof-cat-tab.active.svelte-6oqepq .rof-cat-count:where(.svelte-6oqepq) {background:rgba(0, 245, 212, 0.35);color:#fff;}.rof-grid.svelte-6oqepq {display:grid;grid-template-columns:1fr 1fr;gap:10px;}
2
+ @media (max-width: 640px) {.rof-grid.svelte-6oqepq {grid-template-columns:1fr;} }.rof-item.svelte-6oqepq {background:var(--rof-item-bg, #fff);border:1px solid var(--rof-border-color, rgba(5, 4, 15, 0.07));padding:1rem;display:flex;gap:0.875rem;align-items:flex-start;transition:border-color 0.2s;}.rof-item.svelte-6oqepq:hover {border-color:rgba(5, 4, 15, 0.15);}.rof-item-body.svelte-6oqepq {flex:1;min-width:0;}.rof-item-name.svelte-6oqepq {font-size:14px;font-weight:600;color:#05040f;line-height:1.3;margin-bottom:3px;}.rof-item-desc.svelte-6oqepq {font-size:12px;color:#5e5d6b;line-height:1.5;margin-bottom:6px;}.rof-variant-picker.svelte-6oqepq {display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}.rof-variant-pill.svelte-6oqepq {height:24px;padding:0 10px;border-radius:9999px;border:1px solid rgba(5, 4, 15, 0.14);background:transparent;font-size:11px;font-weight:600;color:#5e5d6b;cursor:pointer;transition:background 0.15s, color 0.15s, border-color 0.15s;white-space:nowrap;}.rof-variant-pill.svelte-6oqepq:hover {background:rgba(5, 4, 15, 0.04);color:#3d3c4c;}.rof-variant-pill.active.svelte-6oqepq {background:#05040f;color:#fff;border-color:#05040f;}.rof-item-tags.svelte-6oqepq {display:flex;gap:0.25rem;flex-wrap:wrap;margin-bottom:0.5rem;}.rof-item-tag.svelte-6oqepq {font-size:10px;font-weight:600;letter-spacing:0.5px;color:rgba(0, 160, 120, 0.8);background:rgba(0, 200, 160, 0.06);border:1px solid rgba(0, 200, 160, 0.15);padding:2px 7px;}.rof-item-tag--icon.svelte-6oqepq {padding:0;background:transparent;border:0;display:inline-flex;align-items:center;}.rof-diet-icon.svelte-6oqepq {display:block;}.rof-item-footer.svelte-6oqepq {display:flex;align-items:center;justify-content:space-between;}.rof-item-price.svelte-6oqepq {font-size:15px;font-weight:700;color:#05040f;letter-spacing:-0.3px;font-variant-numeric:tabular-nums;}.rof-qty.svelte-6oqepq {display:inline-flex;align-items:center;gap:10px;}.rof-qty-btn.svelte-6oqepq {width:32px;height:32px;border-radius:9999px;background:transparent;font-size:16px;color:#05040f;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;overflow:hidden;border:1.5px solid rgba(5, 4, 15, 0.18);transition:color 0.25s, border-color 0.25s;}.rof-qty-btn.svelte-6oqepq::before {content:'';position:absolute;inset:0;border-radius:50%;background:#1a1a18;transform:scale(0);transition:transform 0.35s cubic-bezier(0.4, 0, 0.2, 1);z-index:0;}.rof-qty-btn.svelte-6oqepq::after {content:'';position:absolute;top:0;bottom:0;left:-60%;width:40%;background:linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.22) 50%, transparent 100%);transform:skewX(-12deg);transition:left 0.45s cubic-bezier(0.4, 0, 0.2, 1);z-index:1;pointer-events:none;}.rof-qty-btn.svelte-6oqepq:hover::before {transform:scale(1);}.rof-qty-btn.svelte-6oqepq:hover::after {left:130%;}.rof-qty-btn.svelte-6oqepq:hover {color:#f5f2ec;border-color:#1a1a18;}.rof-qty-btn.svelte-6oqepq span:where(.svelte-6oqepq) {position:relative;z-index:2;}.rof-qty-val.svelte-6oqepq {width:1.25rem;text-align:center;font-size:14px;font-weight:600;color:#05040f;user-select:none;}.rof-qty-val.pop.svelte-6oqepq { animation: svelte-6oqepq-rof-qty-pop 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);}
3
+ @keyframes svelte-6oqepq-rof-qty-pop {
4
+ 0% { transform: scale(1); }
5
+ 40% { transform: scale(1.5); }
6
+ 100% { transform: scale(1); }
7
+ }.rof-cart-bar.svelte-6oqepq {display:flex;align-items:center;justify-content:space-between;background:var(--rof-cart-bg, #05040f);padding:1rem 1.5rem;margin-top:1.5rem;position:sticky;bottom:1.5rem;}
8
+ @media (max-width: 640px) {.rof-cart-bar.svelte-6oqepq {flex-direction:column;gap:12px;align-items:stretch;position:static;} }.rof-confirm-left.svelte-6oqepq {display:flex;align-items:center;gap:10px;min-width:0;flex:1;}.rof-confirm-label.svelte-6oqepq {font-size:13px;font-weight:700;color:rgb(0, 245, 212);letter-spacing:0.2px;white-space:nowrap;}.rof-confirm-items.svelte-6oqepq {font-size:13px;color:#9896b0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.rof-confirm-right.svelte-6oqepq {display:flex;align-items:center;gap:1rem;flex-shrink:0;}.rof-confirm-total.svelte-6oqepq {font-size:15px;font-weight:700;color:#f0eeff;font-variant-numeric:tabular-nums;}.rof-confirm-time.svelte-6oqepq {font-size:12px;color:#9896b0;}.rof-cart-summary.svelte-6oqepq {font-size:14px;color:#f0eeff;font-variant-numeric:tabular-nums;}.rof-cart-summary.svelte-6oqepq strong:where(.svelte-6oqepq) {font-size:17px;font-weight:700;}.rof-cart-right.svelte-6oqepq {display:flex;align-items:center;gap:1rem;}
9
+ @media (max-width: 640px) {.rof-cart-right.svelte-6oqepq {justify-content:space-between;} }.rof-schedule.svelte-6oqepq {display:flex;align-items:center;gap:10px;}.rof-schedule-label.svelte-6oqepq {font-size:12px;font-weight:600;color:#9896b0;white-space:nowrap;letter-spacing:0.3px;text-transform:uppercase;}.rof-timepicker.svelte-6oqepq {position:relative;}.rof-timepicker-btn.svelte-6oqepq {display:flex;align-items:center;gap:7px;height:36px;padding:0 12px;background:rgba(255, 255, 255, 0.07);border:1px solid rgba(255, 255, 255, 0.12);border-radius:8px;color:#f0eeff;font-size:13px;font-weight:600;cursor:pointer;transition:background 0.15s, border-color 0.15s;white-space:nowrap;}.rof-timepicker-btn.svelte-6oqepq:hover {background:rgba(255, 255, 255, 0.11);border-color:rgba(255, 255, 255, 0.2);}.rof-timepicker-caret.svelte-6oqepq {opacity:0.4;flex-shrink:0;transition:transform 0.15s;}.rof-timepicker.open.svelte-6oqepq .rof-timepicker-caret:where(.svelte-6oqepq) {transform:rotate(180deg);}.rof-timepicker.open.svelte-6oqepq .rof-timepicker-btn:where(.svelte-6oqepq) {background:rgba(255, 255, 255, 0.11);border-color:rgba(255, 255, 255, 0.22);}.rof-timepicker-drop.svelte-6oqepq {display:none;position:absolute;bottom:calc(100% + 8px);right:0;width:148px;background:#111018;border:1px solid rgba(255, 255, 255, 0.1);border-radius:10px;padding:0.25rem;z-index:200;max-height:220px;overflow-y:auto;box-shadow:0 8px 32px rgba(0, 0, 0, 0.5);}.rof-timepicker.open.svelte-6oqepq .rof-timepicker-drop:where(.svelte-6oqepq) {display:block;}.rof-tp-slot.svelte-6oqepq {display:flex;align-items:center;justify-content:space-between;width:100%;padding:0.5rem 0.75rem;background:transparent;border:0;border-radius:6px;color:#c8c6dc;font-size:13px;font-weight:500;cursor:pointer;text-align:left;transition:background 0.1s, color 0.1s;}.rof-tp-slot.svelte-6oqepq:hover {background:rgba(255, 255, 255, 0.07);color:#f0eeff;}.rof-tp-slot.selected.svelte-6oqepq {background:rgba(0, 245, 212, 0.1);color:rgb(0, 245, 212);font-weight:600;}.rof-tp-tick.svelte-6oqepq {opacity:0;flex-shrink:0;}.rof-tp-tick.selected.svelte-6oqepq {opacity:1;}.rof-tp-days.svelte-6oqepq {display:flex;gap:0.25rem;padding:0.25rem 0 0.5rem;border-bottom:1px solid rgba(255, 255, 255, 0.08);margin-bottom:0.25rem;overflow-x:auto;scrollbar-width:none;}.rof-tp-days.svelte-6oqepq::-webkit-scrollbar {display:none;}.rof-tp-day.svelte-6oqepq {flex-shrink:0;height:26px;padding:0 10px;border-radius:6px;border:1px solid rgba(255, 255, 255, 0.1);background:transparent;font-size:12px;font-weight:600;color:#9896b0;cursor:pointer;transition:background 0.1s, color 0.1s, border-color 0.1s;white-space:nowrap;}.rof-tp-day.active.svelte-6oqepq {background:rgba(255, 255, 255, 0.1);border-color:rgba(255, 255, 255, 0.2);color:#f0eeff;}.rof-tp-asap.svelte-6oqepq {border-bottom:1px solid rgba(255, 255, 255, 0.08);border-radius:6px 6px 0 0;margin-bottom:0.25rem;padding-bottom:10px;}.rof-place-btn.svelte-6oqepq {height:40px;padding:0 1.5rem;background:var(--rof-place-btn-bg, rgb(0, 200, 160));color:#05040f;border:0;font-size:13px;font-weight:700;cursor:pointer;letter-spacing:0.3px;transition:opacity 0.15s;}.rof-place-btn.svelte-6oqepq:hover {opacity:0.85;}.rof-place-btn.svelte-6oqepq:disabled {opacity:0.4;cursor:not-allowed;}.rof-order-msg.svelte-6oqepq {padding:14px 0 0;font-size:14px;font-weight:500;color:rgb(180, 40, 40);}`};function L(t,r){y(r,!0),C(t,le);let D=T(r,`items`,23,()=>[]),L=T(r,`categoryOrder`,7),R=T(r,`categoryLabels`,7),z=T(r,`currency`,7,``),ue=T(r,`iconFor`,7),B=T(r,`checkIn`,7),V=T(r,`checkOut`,7),de=T(r,`placeOrder`,7);function fe(e,t){r.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let H=_(``),pe=_(!1),U=_(a({})),me=_(a({})),W=_(``),G=_(0),K=_(!1),q=_(!1),J=_(null),Y=_(null),he=_(null);function X(e,t){return t?`${e}:${t}`:e}function Z(e){return d(me)[e.id]??e.variants?.[0]}function ge(e){return d(U)[X(e.id,Z(e))]?.qty??0}function _e(e){let t=Z(e),n=X(e.id,t),r=d(U)[n];h(U,{...d(U),[n]:{item:e,variant:t,qty:(r?.qty??0)+1}},!0),h(he,null),queueMicrotask(()=>h(he,n,!0))}function ve(e){let t=Z(e),n=X(e.id,t),r=d(U)[n];if(r){if(r.qty<=1){let e={...d(U)};delete e[n],h(U,e,!0)}else h(U,{...d(U),[n]:{...r,qty:r.qty-1}},!0)}}let Q=s(()=>Object.values(d(U))),ye=s(()=>d(Q).reduce((e,t)=>e+t.qty,0)),be=s(()=>d(Q).reduce((e,t)=>e+Number(t.item.price)*t.qty,0)),xe=s(()=>d(ye)>0||d(Y)!==null),Se=s(()=>{let e={};for(let t of d(Q))e[t.item.category]=(e[t.item.category]??0)+t.qty;return e}),Ce=s(()=>{let e=new Set,t=[];for(let n of D())e.has(n.category)||(e.add(n.category),t.push(n.category));if(!L()?.length)return t;let n=L().filter(t=>e.has(t)),r=t.filter(e=>!L().includes(e));return[...n,...r]});function we(e){return R()?.[e]?R()[e]:e.split(`-`).map(e=>e&&e[0].toUpperCase()+e.slice(1)).join(` `)}let Te=s(()=>{let e={};for(let t of D())(e[t.category]??=[]).push(t);return e}),Ee=s(()=>d(Te)[d(H)]??[]);l(()=>{!d(pe)&&d(Ce).length&&h(H,d(Ce)[0],!0)});function De(e){let t=Number(e);return Number.isNaN(t)?`${z()}${e}`:`${z()}${Number.isInteger(t)?t:t.toFixed(2)}`}let Oe=(()=>{let e=[];for(let t=6;t<24;t++)for(let n of[0,30])e.push(`${String(t).padStart(2,`0`)}:${String(n).padStart(2,`0`)}`);return e})();function ke(e){let[t,n]=e.split(`:`).map(Number),r=t>=12?`pm`:`am`;return`${t%12||12}:${String(n).padStart(2,`0`)} ${r}`}let Ae=s(()=>{let e=new Date;e.setHours(0,0,0,0);let t=[];if(B()&&V()){let n=new Date(`${B().slice(0,10)}T00:00:00`),r=new Date(`${V().slice(0,10)}T00:00:00`),i=new Date(Math.max(e.getTime(),n.getTime())),a=new Date(r.getTime());a.setDate(a.getDate()-1);for(let n=new Date(i);n<=a;n.setDate(n.getDate()+1)){let r=Math.round((n.getTime()-e.getTime())/864e5),i=r===0?`Today`:r===1?`Tomorrow`:n.toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`});t.push({offset:r,label:i})}}return t.length||t.push({offset:0,label:`Today`},{offset:1,label:`Tomorrow`}),t}),je=s(()=>{if(!d(W))return`ASAP`;let e=d(Ae).find(e=>e.offset===d(G));return(e&&e.offset!==0?e.label+` · `:``)+ke(d(W))});function Me(e){h(G,e,!0)}function Ne(e){h(W,e??``,!0),e&&h(K,!1)}async function Pe(){if(!d(Q).length||d(q))return;h(q,!0),h(J,null);let e=d(W)?(()=>{let[e,t]=d(W).split(`:`).map(Number),n=new Date;return n.setDate(n.getDate()+d(G)),n.setHours(e,t,0,0),n.toISOString()})():null,t=d(Q).map(e=>({item_id:e.item.id,quantity:e.qty,...e.variant?{variant:e.variant}:{}}));try{let n=await de()({items:t,scheduledFor:e});n.ok?(h(Y,{items:d(Q).map(e=>`${e.item.name}${e.variant?` (${e.variant})`:``} ×${e.qty}`),total:d(be),deliveryLabel:d(je)},!0),fe(`order-placed`,{items:t,total:d(be),scheduledFor:e,order:n.order}),h(U,{},!0),h(W,``),h(G,0),setTimeout(()=>h(Y,null),4500)):h(J,n.error??`Something went wrong. Please try again.`,!0)}catch{h(J,`Network error. Please try again.`)}finally{h(q,!1)}}function Fe(){h(K,!1)}var Ie={get items(){return D()},set items(e=[]){D(e),c()},get categoryOrder(){return L()},set categoryOrder(e){L(e),c()},get categoryLabels(){return R()},set categoryLabels(e){R(e),c()},get currency(){return z()},set currency(e=``){z(e),c()},get iconFor(){return ue()},set iconFor(e){ue(e),c()},get checkIn(){return B()},set checkIn(e){B(e),c()},get checkOut(){return V()},set checkOut(e){V(e),c()},get placeOrder(){return de()},set placeOrder(e){de(e),c()}},Le=ce();u(`click`,f,Fe);var Re=A(Le);k(Re,21,()=>d(Ce),b,(e,t)=>{var n=M();let r;var i=A(n),a=g(i),s=e=>{var n=j(),r=A(n,!0);x(n),o(()=>O(r,d(Se)[d(t)])),m(e,n)};p(a,e=>{d(Se)[d(t)]&&e(s)}),x(n),o(e=>{r=S(n,1,`rof-cat-tab svelte-6oqepq`,null,r,{active:d(t)===d(H)}),O(i,`${e??``} `)},[()=>we(d(t))]),w(`click`,n,()=>{h(pe,!0),h(H,d(t),!0)}),m(e,n)}),x(Re);var $=g(Re,2);k($,21,()=>d(Ee),e=>e.id,(e,t)=>{let r=s(()=>Z(d(t))),a=s(()=>ge(d(t)));var c=ae(),l=A(c),u=A(l),f=A(u,!0);x(u);var _=g(u,2),v=e=>{var n=N(),r=A(n,!0);x(n),o(()=>O(r,d(t).description)),m(e,n)};p(_,e=>{d(t).description&&e(v)});var y=g(_,2),C=e=>{var n=te();k(n,21,()=>d(t).variants,b,(e,n)=>{var i=ee();let a;var s=A(i,!0);x(i),o(()=>{a=S(i,1,`rof-variant-pill svelte-6oqepq`,null,a,{active:d(n)===d(r)}),O(s,d(n))}),w(`click`,i,()=>h(me,{...d(me),[d(t).id]:d(n)},!0)),m(e,i)}),x(n),m(e,n)};p(y,e=>{d(t).variants?.length&&e(C)});var T=g(y,2),D=e=>{var r=ie();k(r,21,()=>d(t).allergens,b,(e,t)=>{let r=s(()=>ue()?.(d(t)));var a=i(),c=n(a),l=e=>{var n=ne(),i=A(n);x(n),o(()=>{E(i,`src`,d(r)),E(i,`alt`,d(t)),E(i,`title`,d(t))}),m(e,n)},u=e=>{var n=re(),r=A(n,!0);x(n),o(()=>O(r,d(t))),m(e,n)};p(c,e=>{d(r)?e(l):e(u,-1)}),m(e,a)}),x(r),m(e,r)};p(T,e=>{d(t).allergens?.length&&e(D)});var j=g(T,2),M=A(j),oe=A(M,!0);x(M);var se=g(M,2),P=A(se),F=g(P,2);let I;var ce=A(F,!0);x(F);var le=g(F,2);x(se),x(j),x(l),x(c),o((e,n)=>{O(f,d(t).name),O(oe,e),E(P,`aria-label`,`Remove one ${d(t).name}`),I=S(F,1,`rof-qty-val svelte-6oqepq`,null,I,n),O(ce,d(a)),E(le,`aria-label`,`Add one ${d(t).name}`)},[()=>De(d(t).price),()=>({pop:d(he)===X(d(t).id,d(r))})]),w(`click`,P,()=>ve(d(t))),w(`click`,le,()=>_e(d(t))),m(e,c)}),x($);var ze=g($,2),Be=t=>{var r=I(),i=n(r),a=A(i),s=e=>{var t=oe(),r=n(t),i=g(A(r),4),a=A(i,!0);x(i),x(r);var s=g(r,2),c=A(s),l=A(c,!0);x(c);var u=g(c,2),f=A(u,!0);x(u),x(s),o((e,t)=>{O(a,e),O(l,t),O(f,d(Y).deliveryLabel)},[()=>d(Y).items.join(` · `),()=>De(d(Y).total)]),m(e,t)},c=t=>{var r=P(),i=n(r),a=A(i),s=g(a),c=A(s,!0);x(s),x(i);var l=g(i,2),u=A(l),f=g(A(u),2);let p;var _=A(f),v=g(A(_),2),y=A(v,!0);x(v),e(2),x(_);var C=g(_,2),T=A(C);k(T,21,()=>d(Ae),b,(e,t)=>{var n=ee();let r;var i=A(n,!0);x(n),o(()=>{r=S(n,1,`rof-tp-day svelte-6oqepq`,null,r,{active:d(t).offset===d(G)}),O(i,d(t).label)}),w(`click`,n,()=>Me(d(t).offset)),m(e,n)}),x(T);var E=g(T,2),D=g(A(E),2);let j;x(E);var M=g(E,2);k(M,17,()=>Oe,b,(e,t)=>{var n=se();let r;var i=A(n),a=A(i,!0);x(i);var s=g(i,2);let c;x(n),o(e=>{r=S(n,1,`rof-tp-slot svelte-6oqepq`,null,r,{selected:d(W)===d(t)}),O(a,e),c=S(s,0,`rof-tp-tick svelte-6oqepq`,null,c,{selected:d(W)===d(t)})},[()=>ke(d(t))]),w(`click`,n,()=>Ne(d(t))),m(e,n)}),x(C),x(f),x(u);var N=g(u,2),te=A(N,!0);x(N),x(l),o(e=>{O(a,`${d(ye)??``} item${d(ye)===1?``:`s`}  ·  `),O(c,e),p=S(f,1,`rof-timepicker svelte-6oqepq`,null,p,{open:d(K)}),O(y,d(je)),j=S(D,0,`rof-tp-tick svelte-6oqepq`,null,j,{selected:!d(W)}),N.disabled=d(q),O(te,d(q)?`Placing order…`:`Place Order`)},[()=>De(d(be))]),w(`click`,_,e=>{e.stopPropagation(),h(K,!d(K))}),w(`click`,C,e=>e.stopPropagation()),w(`click`,E,()=>Ne(null)),w(`click`,N,Pe),m(t,r)};p(a,e=>{d(Y)?e(s):e(c,-1)}),x(i);var l=g(i,2),u=e=>{var t=F(),n=A(t,!0);x(t),o(()=>O(n,d(J))),m(e,t)};p(l,e=>{d(J)&&e(u)}),m(t,r)};return p(ze,e=>{d(xe)&&e(Be)}),x(Le),m(t,Le),v(Ie)}t([`click`]),customElements.define(`restaurant-order-form`,D(L,{currency:{attribute:`currency`,type:`String`},checkIn:{attribute:`check-in`,type:`String`},checkOut:{attribute:`check-out`,type:`String`},items:{},categoryOrder:{},categoryLabels:{},iconFor:{},placeOrder:{}},[],[],{mode:`open`}));
@@ -0,0 +1,26 @@
1
+ import{$ as e,A as t,B as n,C as r,D as i,E as a,G as o,H as s,I as c,J as l,K as u,L as d,M as f,N as p,S as m,T as h,U as g,V as _,W as v,X as y,Z as b,b as x,et as S,f as C,h as w,j as T,n as E,r as D,s as O,t as k,w as A,y as j,z as M}from"./chunks/client-BDk8LqGN.js";import{i as ee,o as te,r as ne,s as re,t as ie}from"./chunks/calendar-B8eNjUm2.js";import{t as N}from"./chunks/gsap-DWxn8li7.js";var ae=i(`<div class="rgf-badge svelte-1gtjszk"> </div>`),oe=i(`<p class="rgf-desc svelte-1gtjszk"> </p>`),se=i(`<a class="rgf-card svelte-1gtjszk"><div class="rgf-img svelte-1gtjszk"><img loading="lazy" width="800" height="560" class="svelte-1gtjszk"/> <!></div> <div class="rgf-body svelte-1gtjszk"><div class="rgf-info svelte-1gtjszk"><div class="rgf-name svelte-1gtjszk"> </div> <!></div> <div class="rgf-footer svelte-1gtjszk"><div><div class="rgf-from svelte-1gtjszk">From</div> <div class="rgf-price svelte-1gtjszk"> <span class="rgf-price-cur svelte-1gtjszk"> </span></div></div> <span class="rgf-view svelte-1gtjszk"><span class="rgf-view-shine svelte-1gtjszk" aria-hidden="true"></span> <span class="rgf-view-inner svelte-1gtjszk">View <svg width="14" height="14" viewBox="0 0 22 22" fill="none"><line x1="2" y1="11" x2="18" y2="11" stroke="white" stroke-width="2" stroke-linecap="round"></line><polyline points="12,5 19,11 12,17" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></polyline></svg></span></span></div></div></a>`),ce=i(`<div class="rgf-cards svelte-1gtjszk"></div>`),le=i(`<div class="rgr-tag svelte-1gtjszk"> </div>`),ue=i(`<a class="rgr-card svelte-1gtjszk"><div class="rgr-img svelte-1gtjszk"><img loading="lazy" class="svelte-1gtjszk"/></div> <div class="rgr-body svelte-1gtjszk"><div><!> <div class="rgr-name svelte-1gtjszk"> </div> <div class="rgr-desc svelte-1gtjszk"> </div></div> <div class="rgr-price svelte-1gtjszk"> <span class="rgr-price-cur svelte-1gtjszk"> </span> <span class="rgr-price-per svelte-1gtjszk">/ night</span></div></div></a>`),de=i(`<div class="rgr-grid svelte-1gtjszk"></div>`),P=i(`<button type="button"> </button>`),fe=i(`<span class="svelte-1gtjszk"> </span>`),pe=i(`<div class="rg-cal svelte-1gtjszk" role="dialog" aria-label="Choose check-in and check-out dates"><div class="rg-cal-head svelte-1gtjszk"><button type="button" class="rg-cal-nav svelte-1gtjszk" aria-label="Previous month">‹</button> <span class="rg-cal-month svelte-1gtjszk"> </span> <button type="button" class="rg-cal-nav svelte-1gtjszk" aria-label="Next month">›</button></div> <div class="rg-cal-weekdays svelte-1gtjszk"></div> <div class="rg-cal-grid svelte-1gtjszk"></div></div>`),me=i(`<div part="card" role="group"><div class="rg-card-img svelte-1gtjszk"><img class="svelte-1gtjszk"/></div> <div class="rg-card-body svelte-1gtjszk"><h2 class="rg-card-name svelte-1gtjszk"> </h2> <p class="rg-card-desc svelte-1gtjszk"> </p> <div class="rg-card-rule svelte-1gtjszk"></div> <div class="rg-card-footer svelte-1gtjszk"><div><div class="rg-from svelte-1gtjszk">From</div> <div class="rg-price svelte-1gtjszk"> <span class="rg-price-currency svelte-1gtjszk"> </span></div></div> <a class="rg-view svelte-1gtjszk"><span class="rg-view-shine svelte-1gtjszk" aria-hidden="true"></span> <span class="rg-view-inner svelte-1gtjszk">View <svg width="14" height="14" viewBox="0 0 22 22" fill="none"><line x1="2" y1="11" x2="18" y2="11" stroke="currentColor" stroke-width="2" stroke-linecap="round"></line><polyline points="12,5 19,11 12,17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none"></polyline></svg></span></a></div></div></div>`),he=i(`<div class="rg-filter-bar svelte-1gtjszk" part="filter-bar"><div class="rg-tabs svelte-1gtjszk"></div> <div class="rg-dates svelte-1gtjszk"><button type="button" class="rg-date-box svelte-1gtjszk" aria-label="Select dates"><span class="rg-date-cell rg-date-cell-first svelte-1gtjszk"><span class="rg-date-label svelte-1gtjszk">Check in</span> <span class="rg-date-value svelte-1gtjszk"> </span></span> <span class="rg-date-cell svelte-1gtjszk"><span class="rg-date-label svelte-1gtjszk">Check out</span> <span class="rg-date-value svelte-1gtjszk"> </span></span></button> <!></div></div> <div class="rg-grid svelte-1gtjszk" part="grid"></div>`,1),ge={hash:`svelte-1gtjszk`,code:`:host {display:block;}
2
+
3
+ /* ── Filter bar ── */.rg-filter-bar.svelte-1gtjszk {display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:0.75rem;border-bottom:1px solid rgba(255, 255, 255, 0.06);background:#05040f;padding:1rem 1.25rem;}.rg-tabs.svelte-1gtjszk {display:flex;gap:0.25rem;}.rg-tab.svelte-1gtjszk {height:2.25rem;cursor:pointer;border:none;border-radius:0.5rem;background:transparent;padding:0 18px;font-family:'Inter', sans-serif;font-size:13px;font-weight:500;color:rgba(240, 238, 255, 0.7);transition:color 150ms;}.rg-tab.svelte-1gtjszk:hover {color:rgba(240, 238, 255, 0.8);}.rg-tab-active.svelte-1gtjszk {background:rgba(255, 255, 255, 0.07);font-weight:600;color:#f0eeff;}.rg-dates.svelte-1gtjszk {position:relative;}.rg-date-box.svelte-1gtjszk {display:flex;cursor:pointer;border:1px solid rgba(255, 255, 255, 0.1);background:rgba(255, 255, 255, 0.05);padding:0;font-family:'Inter', sans-serif;
4
+ /* Buttons default to line-height normal; the design this ports used divs
5
+ inheriting the page's 1.5, and the bar's height hangs off it. */line-height:1.5;}.rg-date-cell.svelte-1gtjszk {display:flex;flex-direction:column;gap:1px;padding:9px 18px;text-align:left;transition:background-color 150ms;}.rg-date-cell.svelte-1gtjszk:hover {background:rgba(255, 255, 255, 0.06);}.rg-date-cell-first.svelte-1gtjszk {border-right:1px solid rgba(255, 255, 255, 0.08);}.rg-date-label.svelte-1gtjszk {font-size:10px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:rgba(240, 238, 255, 0.6);}.rg-date-value.svelte-1gtjszk {font-size:13px;font-weight:500;color:#f0eeff;}
6
+
7
+ /* ── Calendar popover (visually matched to the page's flatpickr theme) ── */.rg-cal.svelte-1gtjszk {position:absolute;top:calc(100% + 8px);right:0;z-index:50;width:308px;border:1px solid rgba(255, 255, 255, 0.1);border-radius:16px;background:rgba(12, 10, 28, 0.96);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:0 24px 60px rgba(0, 0, 0, 0.5);padding:12px;font-family:'Inter', sans-serif;}.rg-cal-head.svelte-1gtjszk {display:flex;align-items:center;justify-content:space-between;padding:4px 4px 8px;}.rg-cal-month.svelte-1gtjszk {font-size:15px;font-weight:600;color:#f0eeff;}.rg-cal-nav.svelte-1gtjszk {cursor:pointer;border:none;background:none;padding:2px 8px;font-size:18px;line-height:1;color:rgba(240, 238, 255, 0.5);}.rg-cal-nav.svelte-1gtjszk:hover {color:#f0eeff;}.rg-cal-weekdays.svelte-1gtjszk {display:grid;grid-template-columns:repeat(7, 1fr);margin-bottom:4px;}.rg-cal-weekdays.svelte-1gtjszk span:where(.svelte-1gtjszk) {text-align:center;font-size:11px;font-weight:600;letter-spacing:1px;text-transform:uppercase;color:rgba(240, 238, 255, 0.3);}.rg-cal-grid.svelte-1gtjszk {display:grid;grid-template-columns:repeat(7, 1fr);}.rg-cal-day.svelte-1gtjszk {height:36px;cursor:pointer;border:1px solid transparent;border-radius:8px;background:none;font-family:inherit;font-size:13px;color:rgba(240, 238, 255, 0.7);}.rg-cal-day.svelte-1gtjszk:hover {background:rgba(255, 255, 255, 0.08);color:#f0eeff;}.rg-today.svelte-1gtjszk {border-color:rgba(0, 245, 212, 0.4);color:rgb(0, 245, 212);}.rg-today.svelte-1gtjszk:hover {background:rgba(0, 245, 212, 0.1);}.rg-inrange.svelte-1gtjszk {background:rgba(0, 245, 212, 0.12);color:rgb(0, 245, 212);}.rg-edge.svelte-1gtjszk,
8
+ .rg-edge.svelte-1gtjszk:hover {background:rgb(0, 245, 212);border-color:rgb(0, 245, 212);color:#05040f;font-weight:600;}.rg-out.svelte-1gtjszk,
9
+ .rg-cal-day.svelte-1gtjszk:disabled {color:rgba(240, 238, 255, 0.15);cursor:default;}
10
+
11
+ /* ── Cards grid ── */.rg-grid.svelte-1gtjszk {display:flex;flex-direction:column;gap:1.25rem;padding:0 1.25rem;background:linear-gradient(180deg, #05040f 0%, #05040f 20%, #f5f2ec 40%, #f5f2ec 100%);}.rg-hidden.svelte-1gtjszk {display:none;}.rg-card.svelte-1gtjszk {position:relative;display:flex;flex-direction:column;overflow:hidden;background:#fff;box-shadow:0 4px 32px rgba(0, 0, 0, 0.18);}.rg-card-img.svelte-1gtjszk {height:220px;overflow:hidden;}.rg-card-img.svelte-1gtjszk img:where(.svelte-1gtjszk) {display:block;height:100%;width:100%;object-fit:cover;transition:transform 500ms;}.rg-card.svelte-1gtjszk:hover .rg-card-img:where(.svelte-1gtjszk) img:where(.svelte-1gtjszk) {transform:scale(1.04);}.rg-card-body.svelte-1gtjszk {display:flex;flex:1;flex-direction:column;padding:1.75rem 1.75rem 1.5rem;font-family:'Inter', sans-serif;}.rg-card-name.svelte-1gtjszk {margin:0 0 0.75rem;font-family:'Syne', sans-serif;font-size:26px;font-weight:800;letter-spacing:-0.5px;color:#1a1a18;}.rg-card-desc.svelte-1gtjszk {margin:0 0 1.25rem;flex:1;font-size:15px;line-height:1.65;color:rgba(26, 26, 24, 0.72);}.rg-card-rule.svelte-1gtjszk {margin-bottom:1.25rem;height:1px;background:rgba(26, 26, 24, 0.08);}.rg-card-footer.svelte-1gtjszk {display:flex;align-items:center;justify-content:space-between;}.rg-from.svelte-1gtjszk {margin-bottom:2px;font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(26, 26, 24, 0.65);}.rg-price.svelte-1gtjszk {display:flex;align-items:baseline;gap:5px;font-size:28px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-0.02em;color:#1a1a18;}.rg-price-currency.svelte-1gtjszk {font-size:11px;font-weight:600;letter-spacing:1px;}.rg-view.svelte-1gtjszk {position:relative;display:inline-flex;height:2.75rem;align-items:center;gap:0.5rem;overflow:hidden;white-space:nowrap;background:#1a1a18;padding:0 1.25rem;font-size:14px;font-weight:600;color:#f0eeff;text-decoration:none;}.rg-view-shine.svelte-1gtjszk {pointer-events:none;position:absolute;top:0;bottom:0;left:-60%;width:40%;transform:skewX(-12deg);background:linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.18) 50%, transparent 100%);transition:left 450ms cubic-bezier(0.4, 0, 0.2, 1);}.rg-card.svelte-1gtjszk:hover .rg-view-shine:where(.svelte-1gtjszk) {left:130%;}.rg-view-inner.svelte-1gtjszk {position:relative;z-index:1;display:inline-flex;align-items:center;gap:0.5rem;}
12
+
13
+ /* ── Feature variant (homepage cards: badge, carousel → 3-col grid) ── */.rgf-cards.svelte-1gtjszk {display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:16px;padding-bottom:4px;scrollbar-width:none;font-family:'Inter', sans-serif;}.rgf-cards.svelte-1gtjszk::-webkit-scrollbar {display:none;}.rgf-card.svelte-1gtjszk {flex:0 0 80vw;max-width:340px;scroll-snap-align:start;display:flex;cursor:pointer;flex-direction:column;overflow:hidden;border:1px solid rgba(10, 8, 20, 0.08);background:#fff;text-decoration:none;transition:border-color 300ms,
14
+ box-shadow 300ms;}.rgf-card.svelte-1gtjszk:hover {border-color:rgba(10, 8, 20, 0.15);box-shadow:0 8px 40px rgba(10, 8, 20, 0.08);}.rgf-img.svelte-1gtjszk {position:relative;display:block;height:280px;width:100%;overflow:hidden;}.rgf-img.svelte-1gtjszk img:where(.svelte-1gtjszk) {display:block;height:100%;width:100%;object-fit:cover;}.rgf-badge.svelte-1gtjszk {position:absolute;top:0;left:0;background:rgba(5, 4, 15, 0.7);padding:6px 14px;font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(240, 238, 255, 1);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);}.rgf-body.svelte-1gtjszk {display:flex;flex:1;flex-direction:column;padding:1.75rem 2rem 2rem;}.rgf-info.svelte-1gtjszk {flex:1;}.rgf-name.svelte-1gtjszk {margin-bottom:10px;min-height:2.2em;font-family:'Syne', sans-serif;font-size:24px;font-weight:800;letter-spacing:-0.48px;color:#0a0814;}.rgf-desc.svelte-1gtjszk {margin:0 0 1.75rem;font-size:15px;line-height:1.65;color:#0a0814;}.rgf-footer.svelte-1gtjszk {display:flex;align-items:center;justify-content:space-between;border-top:1px solid rgba(10, 8, 20, 0.08);padding-top:1.25rem;}.rgf-from.svelte-1gtjszk {font-size:12px;letter-spacing:1px;text-transform:uppercase;color:rgba(10, 8, 20, 0.35);}.rgf-price.svelte-1gtjszk {font-size:26px;font-weight:800;letter-spacing:-0.5px;color:#0a0814;}.rgf-price-cur.svelte-1gtjszk {font-size:11px;font-weight:600;letter-spacing:1px;}.rgf-view.svelte-1gtjszk {position:relative;display:flex;align-items:center;gap:10px;overflow:hidden;background:#1a1a18;padding:0.75rem 1.5rem;font-size:15px;font-weight:600;color:#ffffff;}.rgf-view-shine.svelte-1gtjszk {position:absolute;top:0;bottom:0;left:-60%;width:40%;background:linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.18) 50%, transparent 100%);transform:skewX(-12deg);transition:left 0.45s cubic-bezier(0.4, 0, 0.2, 1);}.rgf-card.svelte-1gtjszk:hover .rgf-view-shine:where(.svelte-1gtjszk) {left:130%;}.rgf-view-inner.svelte-1gtjszk {position:relative;z-index:1;display:flex;align-items:center;gap:10px;}
15
+ @media (min-width: 640px) {.rgf-card.svelte-1gtjszk {flex:0 0 60vw;max-width:400px;}
16
+ }
17
+ @media (min-width: 1024px) {.rgf-cards.svelte-1gtjszk {display:grid;grid-template-columns:repeat(3, 1fr);gap:24px;overflow-x:visible;}.rgf-card.svelte-1gtjszk {flex:unset;max-width:unset;}
18
+ }
19
+
20
+ /* ── Rows variant (light surface, horizontal cards) ── */.rgr-grid.svelte-1gtjszk {display:grid;grid-template-columns:1fr;gap:1.25rem;font-family:'Inter', sans-serif;}.rgr-card.svelte-1gtjszk {display:flex;min-height:220px;overflow:hidden;border:1px solid rgba(0, 0, 0, 0.07);background:#ffffff;text-decoration:none;transition:border-color 200ms,
21
+ background 200ms;}.rgr-card.svelte-1gtjszk:hover {border-color:rgba(0, 0, 0, 0.14);background:rgba(255, 255, 255, 0.8);}.rgr-img.svelte-1gtjszk {width:35%;min-width:200px;flex-shrink:0;overflow:hidden;}.rgr-img.svelte-1gtjszk img:where(.svelte-1gtjszk) {display:block;height:100%;width:100%;object-fit:cover;}.rgr-body.svelte-1gtjszk {display:flex;flex-direction:column;justify-content:space-between;padding:20px 24px;}.rgr-tag.svelte-1gtjszk {margin-bottom:6px;font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(30, 20, 10, 0.7);}.rgr-name.svelte-1gtjszk {margin-bottom:0.5rem;font-family:'Syne', sans-serif;font-size:20px;font-weight:800;letter-spacing:-0.4px;color:rgba(30, 20, 10, 0.9);}.rgr-desc.svelte-1gtjszk {font-size:13px;line-height:1.5;color:rgba(30, 20, 10, 0.8);}.rgr-price.svelte-1gtjszk {margin-top:1rem;text-align:right;font-size:24px;font-weight:800;letter-spacing:-0.3px;color:rgba(30, 20, 10, 0.85);}.rgr-price-cur.svelte-1gtjszk {font-size:13px;font-weight:600;}.rgr-price-per.svelte-1gtjszk {font-size:12px;font-weight:400;}
22
+
23
+ @media (min-width: 640px) {.rg-grid.svelte-1gtjszk {gap:1.5rem;padding:0 2.5rem;}
24
+ }
25
+ @media (min-width: 1024px) {.rg-filter-bar.svelte-1gtjszk {flex-wrap:nowrap;padding:1.25rem 60px;}.rg-grid.svelte-1gtjszk {display:grid;grid-template-columns:repeat(3, 1fr);padding:0 60px;}.rgr-grid.svelte-1gtjszk {grid-template-columns:repeat(2, 1fr);}
26
+ }`};function F(t,i){b(i,!0),w(t,ge);let k=E(i,`rooms`,23,()=>[]),F=E(i,`filterTabs`,7,void 0),I=E(i,`checkIn`,7,``),L=E(i,`checkOut`,7,``),R=E(i,`currency`,7,`USD`),z=E(i,`allLabel`,7,`All`),B=E(i,`variant`,7,`grid`);function V(e,t){i.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let H=l(()=>F()?[z(),...F().map(e=>e.label)]:[z(),...k().map(e=>e.tag).filter((e,t,n)=>!!e&&n.indexOf(e)===t)]),U=v(0);function _e(e,t){return t===0?!0:F()?e.slug===F()[t-1]?.slug:e.tag===p(H)[t]}let W=e=>e?new Date(`${e}T00:00:00`).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):`—`,G=v(!1),K=te(new Date),q=v(s(K.getFullYear())),J=v(s(K.getMonth())),ve=ne(),ye=ee(),be=l(()=>ie(p(q),p(J),K,[])),Y=v(void 0);function xe(){let e=I()?new Date(`${I()}T00:00:00`):K;g(q,e.getFullYear(),!0),g(J,e.getMonth(),!0),g(G,!0)}function Se(){p(J)===0?(g(J,11),o(q,-1)):o(J,-1)}function Ce(){p(J)===11?(g(J,0),o(q)):o(J)}function we(e){!I()||I()&&L()?(I(e),L(``)):e>=I()?(L(e),g(G,!1)):(I(e),L(``)),V(`dates-change`,{checkIn:I(),checkOut:L()})}d(()=>{if(!p(G)||typeof document>`u`)return;let e=e=>{p(Y)&&!e.composedPath().includes(p(Y))&&g(G,!1)},t=e=>{e.key===`Escape`&&g(G,!1)};return document.addEventListener(`click`,e,!0),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`click`,e,!0),document.removeEventListener(`keydown`,t)}});let X=e=>e==null?``:e.toLocaleString(`en-US`,{minimumFractionDigits:0,maximumFractionDigits:0}),Z=v(s([])),Q=v(s([]));r(()=>{if(typeof window>`u`||B()===`rows`)return;if(B()===`feature`){let e=p(Q).filter(e=>!!e);if(!e.length||typeof IntersectionObserver>`u`)return;N.set(e,{opacity:0,y:48});let t=new IntersectionObserver(n=>{n[0].isIntersecting&&(t.disconnect(),N.to(e,{opacity:1,y:0,ease:`power2.out`,stagger:.12,duration:.7}))},{rootMargin:`0px 0px -15% 0px`});return t.observe(e[0]),()=>t.disconnect()}let e=p(Z).filter(e=>!!e);if(e.length>1){let t=e[0].offsetLeft;e.forEach((n,r)=>{N.set(n,{x:t-n.offsetLeft,opacity:1,zIndex:e.length-r})}),N.to(e,{x:0,zIndex:0,duration:.9,ease:`expo.out`,stagger:.1,delay:.15})}});var Te={get rooms(){return k()},set rooms(e=[]){k(e),u()},get filterTabs(){return F()},set filterTabs(e=void 0){F(e),u()},get checkIn(){return I()},set checkIn(e=``){I(e),u()},get checkOut(){return L()},set checkOut(e=``){L(e),u()},get currency(){return R()},set currency(e=`USD`){R(e),u()},get allLabel(){return z()},set allLabel(e=`All`){z(e),u()},get variant(){return B()},set variant(e=`grid`){B(e),u()}},$=a(),Ee=n($),De=t=>{var n=ce();j(n,23,k,(e,t)=>e.slug??t,(t,n,r)=>{var i=se(),a=M(i),o=M(a),s=_(o,2),l=e=>{var t=ae(),r=M(t,!0);S(t),c(()=>A(r,p(n).tag)),h(e,t)};m(s,e=>{p(n).tag&&e(l)}),S(a);var u=_(a,2),d=M(u),g=M(d),v=M(g,!0);S(g);var y=_(g,2),b=e=>{var t=oe(),r=M(t,!0);S(t),c(()=>A(r,p(n).description)),h(e,t)};m(y,e=>{p(n).description&&e(b)}),S(d);var x=_(d,2),C=M(x),w=_(M(C),2),T=M(w),E=_(T),k=M(E,!0);S(E),S(w),S(C),e(2),S(x),S(u),S(i),D(i,(e,t)=>p(Q)[t]=e,e=>p(Q)?.[e],()=>[p(r)]),c(e=>{O(i,`href`,p(n).href),O(o,`src`,p(n).image),O(o,`alt`,p(n).name),A(v,p(n).name),A(T,`${e??``} `),A(k,R())},[()=>X(p(n).price)]),f(`mouseenter`,i,()=>V(`room-hover`,{slug:p(n).slug})),f(`mouseleave`,i,()=>V(`room-leave`,{slug:p(n).slug})),h(t,i)}),S(n),h(t,n)},Oe=t=>{var n=de();j(n,23,k,(e,t)=>e.slug??t,(t,n)=>{var r=ue(),i=M(r),a=M(i);S(i);var o=_(i,2),s=M(o),l=M(s),u=e=>{var t=le(),r=M(t,!0);S(t),c(()=>A(r,p(n).tag)),h(e,t)};m(l,e=>{p(n).tag&&e(u)});var d=_(l,2),g=M(d,!0);S(d);var v=_(d,2),y=M(v,!0);S(v),S(s);var b=_(s,2),x=M(b),C=_(x),w=M(C,!0);S(C),e(2),S(b),S(o),S(r),c(e=>{O(r,`href`,p(n).href),O(a,`src`,p(n).image),O(a,`alt`,p(n).name),A(g,p(n).name),A(y,p(n).description),A(x,`${e??``} `),A(w,R())},[()=>X(p(n).price)]),f(`mouseenter`,r,()=>V(`room-hover`,{slug:p(n).slug})),f(`mouseleave`,r,()=>V(`room-leave`,{slug:p(n).slug})),h(t,r)}),S(n),h(t,n)},ke=e=>{var t=he(),r=n(t),i=M(r);j(i,21,()=>p(H),x,(e,t,n)=>{var r=P();let i;var a=M(r,!0);S(r),c(()=>{i=C(r,1,`rg-tab svelte-1gtjszk`,null,i,{"rg-tab-active":n===p(U)}),O(r,`part`,n===p(U)?`tab tab-active`:`tab`),A(a,p(t))}),T(`click`,r,()=>g(U,n,!0)),h(e,r)}),S(i);var a=_(i,2),o=M(a),s=M(o),l=_(M(s),2),u=M(l,!0);S(l),S(s);var d=_(s,2),v=_(M(d),2),y=M(v,!0);S(v),S(d),S(o);var b=_(o,2),w=e=>{var t=pe(),n=M(t),r=M(n),i=_(r,2),a=M(i);S(i);var o=_(i,2);S(n);var s=_(n,2);j(s,20,()=>ye,e=>e,(e,t)=>{var n=fe(),r=M(n,!0);S(n),c(()=>A(r,t)),h(e,n)}),S(s);var l=_(s,2);j(l,21,()=>p(be),e=>e.iso,(e,t)=>{var n=P();let r;var i=M(n,!0);S(n),c(e=>{r=C(n,1,`rg-cal-day svelte-1gtjszk`,null,r,e),n.disabled=p(t).isPast,A(i,p(t).dayNumber)},[()=>({"rg-out":!p(t).inMonth||p(t).isPast,"rg-today":p(t).iso===re(K),"rg-edge":p(t).iso===I()||p(t).iso===L(),"rg-inrange":I()&&L()&&p(t).iso>I()&&p(t).iso<L()})]),T(`click`,n,()=>we(p(t).iso)),h(e,n)}),S(l),S(t),c(()=>A(a,`${ve[p(J)]??``} ${p(q)??``}`)),T(`click`,r,Se),T(`click`,o,Ce),h(e,t)};m(b,e=>{p(G)&&e(w)}),S(a),D(a,e=>g(Y,e),()=>p(Y)),S(r);var E=_(r,2);j(E,23,k,(e,t)=>e.slug??t,(e,t,n)=>{var r=me();let i;var a=M(r),o=M(a);S(a);var s=_(a,2),l=M(s),u=M(l,!0);S(l);var d=_(l,2),m=M(d,!0);S(d);var g=_(d,4),v=M(g),y=_(M(v),2),b=M(y),x=_(b),w=M(x,!0);S(x),S(y),S(v);var T=_(v,2);S(g),S(s),S(r),D(r,(e,t)=>p(Z)[t]=e,e=>p(Z)?.[e],()=>[p(n)]),c((e,a)=>{i=C(r,1,`rg-card svelte-1gtjszk`,null,i,e),O(o,`src`,p(t).image),O(o,`alt`,p(t).name),O(o,`loading`,p(n)===0?`eager`:`lazy`),A(u,p(t).name),A(m,p(t).description),A(b,`${a??``} `),A(w,R()),O(T,`href`,p(t).href)},[()=>({"rg-hidden":!_e(p(t),p(U))}),()=>X(p(t).price)]),f(`mouseenter`,r,()=>V(`room-hover`,{slug:p(t).slug})),f(`mouseleave`,r,()=>V(`room-leave`,{slug:p(t).slug})),h(e,r)}),S(E),c((e,t)=>{A(u,e),A(y,t)},[()=>W(I()),()=>W(L())]),T(`click`,o,xe),h(e,t)};return m(Ee,e=>{B()===`feature`?e(De):B()===`rows`?e(Oe,1):e(ke,-1)}),h(t,$),y(Te)}t([`click`]),customElements.define(`room-grid`,k(F,{rooms:{attribute:`rooms`,type:`Object`},filterTabs:{attribute:`filter-tabs`,type:`Object`},checkIn:{attribute:`check-in`,type:`String`},checkOut:{attribute:`check-out`,type:`String`},currency:{attribute:`currency`,type:`String`},allLabel:{attribute:`all-label`,type:`String`},variant:{attribute:`variant`,type:`String`}},[],[],{mode:`open`}));
@@ -0,0 +1,20 @@
1
+ import{$ as e,A as t,D as n,I as r,J as i,K as a,L as o,N as s,S as c,T as l,U as u,V as d,W as f,X as ee,Z as p,et as m,f as h,h as te,i as g,j as _,n as v,o as ne,r as y,s as b,t as x,w as S,y as C,z as w}from"./chunks/client-BDk8LqGN.js";import{a as T,i as E,n as D,r as re,t as ie}from"./chunks/floating-ui.dom-DY3dGoEq.js";var O=n(`<span class="ss-detail svelte-dozlh7"> </span>`),ae=n(`<div class="ss-search-wrap svelte-dozlh7"><input class="ss-search svelte-dozlh7" type="text"/></div>`),k=n(`<div role="option" tabindex="0"><span> </span> <!></div>`),A=n(`<div class="ss-panel svelte-dozlh7" popover="" data-lenis-prevent=""><!> <!></div>`),j=n(`<div><div role="button" tabindex="0"><span class="ss-trigger-label svelte-dozlh7"> </span> <!> <svg class="ss-chevron svelte-dozlh7" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg></div> <!></div>`),oe={hash:`svelte-dozlh7`,code:`:host {display:block;}.ss-root.svelte-dozlh7 {position:relative;user-select:none;font-family:inherit;}.ss-trigger.svelte-dozlh7 {height:var(--ss-height, 52px);border:var(--ss-border-width, 1px) solid var(--ss-border, rgba(5, 4, 15, 0.12));
2
+ /* Overridable separately so a host can square individual corners to
3
+ attach a sibling control (e.g. service-booking-bar's Book button);
4
+ the panel and options keep the uniform --ss-radius. */border-radius:var(--ss-trigger-radius, var(--ss-radius, 0));background:var(--ss-bg, #f5f2ec);padding:0 40px 0 16px;display:flex;align-items:center;gap:12px;font-size:15px;color:var(--ss-text, #05040f);cursor:pointer;transition:border-color 0.15s;position:relative;box-sizing:border-box;}.ss-trigger.placeholder.svelte-dozlh7 {color:var(--ss-placeholder, rgba(5, 4, 15, 0.6));}.ss-trigger.svelte-dozlh7:focus {outline:none;border-color:var(--ss-border-focus, rgba(5, 4, 15, 0.4));}.ss-root.open.svelte-dozlh7 .ss-trigger:where(.svelte-dozlh7) {border-color:var(--ss-border-focus, rgba(5, 4, 15, 0.4));}.ss-chevron.svelte-dozlh7 {position:absolute;right:14px;top:50%;width:var(--ss-chevron-size, 12px);height:var(--ss-chevron-size, 12px);transform:translateY(-50%);pointer-events:none;transition:transform 0.2s;stroke:var(--ss-chevron, rgba(5, 4, 15, 0.4));}.ss-root.open.svelte-dozlh7 .ss-chevron:where(.svelte-dozlh7) {transform:translateY(-50%) rotate(180deg);}.ss-panel.svelte-dozlh7 {
5
+ /* Popover top-layer + Floating UI positioning (see the $effect above)
6
+ -- inset/margin reset undoes the browser's default centered-popover
7
+ placement so the JS-computed left/top take over. Escapes any
8
+ scrolling or transformed ancestor (a checkout side-drawer, say)
9
+ without needing to be moved in the DOM.
10
+
11
+ Deliberately its OWN variable, not --ss-bg: --ss-bg is meant for
12
+ .ss-trigger, a field resting inline against a host's known page
13
+ background, so hosts sometimes theme it as a translucent surface
14
+ tint (rgba with a few % alpha). That's fine sitting in normal flow,
15
+ but this panel escapes into the top layer and can end up floating
16
+ over arbitrary content (another field, a payment iframe) that
17
+ isn't that background at all -- a translucent tint there just lets
18
+ whatever's underneath show through. Falls back straight to the
19
+ opaque literal, not through --ss-bg, so a host that themed --ss-bg
20
+ translucent doesn't inherit that problem here without opting in. */position:fixed;inset:auto;margin:0;box-sizing:border-box;z-index:200;background:var(--ss-panel-bg, #f5f2ec);border:var(--ss-border-width, 1px) solid var(--ss-panel-border, rgba(5, 4, 15, 0.15));border-radius:var(--ss-radius, 0);padding:6px;max-height:288px;overflow-y:auto;box-shadow:0 16px 40px var(--ss-panel-shadow, rgba(5, 4, 15, 0.1));scrollbar-width:thin;scrollbar-color:var(--ss-border, rgba(5, 4, 15, 0.12)) transparent;}.ss-option.svelte-dozlh7 {display:flex;align-items:baseline;justify-content:space-between;gap:20px;text-align:left;padding:12px 14px;border-radius:max(calc(var(--ss-radius, 0) - 4px), 0px);font-size:14px;color:var(--ss-text, #05040f);cursor:pointer;transition:background 0.1s;white-space:nowrap;}.ss-detail.svelte-dozlh7 {color:var(--ss-detail, rgba(5, 4, 15, 0.45));font-family:var(--ss-detail-font-family, inherit);font-weight:var(--ss-detail-font-weight, inherit);font-variant-numeric:tabular-nums;}.ss-trigger-label.svelte-dozlh7 {flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.ss-trigger.svelte-dozlh7 .ss-detail:where(.svelte-dozlh7) {margin-right:22px;}.ss-option.svelte-dozlh7:hover {background:var(--ss-option-hover-bg, rgba(5, 4, 15, 0.05));}.ss-option.selected.svelte-dozlh7 {font-weight:600;}.ss--phone.svelte-dozlh7 .ss-trigger:where(.svelte-dozlh7) {padding-right:36px;}.ss--phone.svelte-dozlh7 .ss-panel:where(.svelte-dozlh7) {min-width:180px;}.ss--country.svelte-dozlh7 .ss-panel:where(.svelte-dozlh7) {max-height:280px;}.ss-search-wrap.svelte-dozlh7 {padding:8px 10px;border-bottom:1px solid var(--ss-panel-shadow, rgba(5, 4, 15, 0.08));}.ss-search.svelte-dozlh7 {width:100%;height:36px;border:var(--ss-border-width, 1px) solid var(--ss-border, rgba(5, 4, 15, 0.12));background:var(--ss-bg, #f5f2ec);padding:0 10px;font-family:inherit;font-size:13px;color:var(--ss-text, #05040f);outline:none;box-sizing:border-box;}.ss-search.svelte-dozlh7::placeholder {color:var(--ss-placeholder, rgba(5, 4, 15, 0.6));}`};function M(t,n){p(n,!0),te(t,oe);let x=v(n,`options`,23,()=>[]),M=v(n,`value`,15,``),N=v(n,`placeholder`,7,``),P=v(n,`variant`,7,``),F=v(n,`searchPlaceholder`,7,`Search…`),I=v(n,`noSearch`,7,!1),L=v(n,`anchor`,7,void 0),R=f(!1),z=f(``),B,V=f(void 0),H=f(void 0),U=i(()=>L()??s(V));function W(e,t){n.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let G=i(()=>x().find(e=>e.value===M())),K=i(()=>M()?P()===`phone`?M():s(G)?.label??M():N()),se=i(()=>s(z)?x().filter(e=>e.label.toLowerCase().includes(s(z).toLowerCase())):x());function q(e){M(e.value),u(R,!1),W(`change`,{value:e.value,label:e.label,meta:e.meta})}function J(){u(R,!s(R)),s(R)&&u(z,``)}o(()=>{if(!s(R))return;let e=s(U),t=s(H);if(!e||!t)return;t.style.width=`${e.getBoundingClientRect().width}px`,t.showPopover();let n=ie(e,t,async()=>{let{x:n,y:r}=await D(e,t,{strategy:`fixed`,placement:`bottom-start`,middleware:[E(6),re(),T({padding:8})]});t.style.left=`${n}px`,t.style.top=`${r}px`});function r(e){e.newState===`closed`&&u(R,!1)}return t.addEventListener(`toggle`,r),()=>{n(),t.removeEventListener(`toggle`,r),t.matches(`:popover-open`)&&t.hidePopover()}});var ce={get options(){return x()},set options(e=[]){x(e),a()},get value(){return M()},set value(e=``){M(e),a()},get placeholder(){return N()},set placeholder(e=``){N(e),a()},get variant(){return P()},set variant(e=``){P(e),a()},get searchPlaceholder(){return F()},set searchPlaceholder(e=`Search…`){F(e),a()},get noSearch(){return I()},set noSearch(e=!1){I(e),a()},get anchor(){return L()},set anchor(e=void 0){L(e),a()}},Y=j();let X;var Z=w(Y);let Q;var $=w(Z),le=w($,!0);m($);var ue=d($,2),de=e=>{var t=O(),n=w(t,!0);m(t),r(()=>S(n,s(G).detail)),l(e,t)};c(ue,e=>{M()&&s(G)?.detail&&e(de)}),e(2),m(Z),y(Z,e=>u(V,e),()=>s(V));var fe=d(Z,2),pe=e=>{var t=A(),n=w(t),i=e=>{var t=ae(),n=w(t);ne(n),m(t),r(()=>b(n,`placeholder`,F())),_(`click`,n,e=>e.stopPropagation()),g(n,()=>s(z),e=>u(z,e)),l(e,t)};c(n,e=>{I()||e(i)});var a=d(n,2);C(a,17,()=>s(se),e=>e.value,(e,t)=>{var n=k();let i;var a=w(n),o=w(a,!0);m(a);var u=d(a,2),f=e=>{var n=O(),i=w(n,!0);m(n),r(()=>S(i,s(t).detail)),l(e,n)};c(u,e=>{s(t).detail&&e(f)}),m(n),r(()=>{i=h(n,1,`ss-option svelte-dozlh7`,null,i,{selected:s(t).value===M()}),b(n,`aria-selected`,s(t).value===M()),S(o,s(t).label)}),_(`click`,n,()=>q(s(t))),_(`keydown`,n,e=>e.key===`Enter`&&q(s(t))),l(e,n)}),m(t),y(t,e=>u(H,e),()=>s(H)),l(e,t)};return c(fe,e=>{s(R)&&e(pe)}),m(Y),y(Y,e=>B=e,()=>B),r(()=>{X=h(Y,1,`ss-root ${P()?`ss--${P()}`:``}`,`svelte-dozlh7`,X,{open:s(R)}),Q=h(Z,1,`ss-trigger svelte-dozlh7`,null,Q,{placeholder:!M()}),S(le,s(K))}),_(`click`,Z,J),_(`keydown`,Z,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),J()),e.key===`Escape`&&u(R,!1)}),l(t,Y),ee(ce)}t([`click`,`keydown`]),customElements.define(`searchable-select`,x(M,{options:{attribute:`options`,type:`Object`},value:{attribute:`value`,type:`String`},placeholder:{attribute:`placeholder`,type:`String`},variant:{attribute:`variant`,type:`String`},searchPlaceholder:{attribute:`search-placeholder`,type:`String`},noSearch:{attribute:`no-search`,type:`Boolean`},anchor:{attribute:`anchor`,type:`Object`}},[],[],{mode:`open`}));
@@ -0,0 +1,14 @@
1
+ import{A as e,D as t,H as n,I as r,J as i,K as a,L as o,N as s,S as c,T as l,U as u,V as d,W as f,X as p,Z as m,et as h,f as g,h as _,j as v,l as y,n as b,r as x,s as S,t as C,w,z as T}from"./chunks/client-BDk8LqGN.js";import"./searchable-select.js";var E=t(`<searchable-select></searchable-select>`,2),D=t(`<div class="svb-pending svelte-4apeha"> </div>`),O=t(`<button type="button"> </button>`),k=t(`<div class="svb-root svelte-4apeha"><!> <!></div>`),A={hash:`svelte-4apeha`,code:`
2
+ /* One joined control: the select's right corners and the button's left
3
+ corners are squared so they read as a single bar. */.svb-root.svelte-4apeha {display:inline-flex;align-items:stretch;font-family:var(--svb-font-family, inherit);}
4
+
5
+ /* Map the bar's public --svb-* hooks onto the nested select's --ss-* ones
6
+ (custom properties cascade through shadow boundaries). */.svb-select.svelte-4apeha {min-width:var(--svb-min-width, 280px);font-size:var(--svb-font-size, 14px);--ss-height: var(--svb-height, 54px);--ss-radius: var(--svb-radius, 10px);--ss-trigger-radius: var(--svb-radius, 10px) 0 0 var(--svb-radius, 10px);--ss-bg: var(--svb-bg, #fff);--ss-text: var(--svb-color, inherit);--ss-border: var(--svb-border-color, rgba(0, 0, 0, 0.2));--ss-border-width: var(--svb-border-width, 1px);--ss-border-focus: var(--svb-accent, rgba(0, 0, 0, 0.4));--ss-panel-border: var(--svb-border-color, rgba(0, 0, 0, 0.2));--ss-chevron: var(--svb-color, currentColor);--ss-chevron-size: var(--svb-chevron-size, 12px);--ss-detail: var(--svb-detail-color, var(--svb-muted, rgba(0, 0, 0, 0.45)));--ss-detail-font-family: var(--svb-detail-font-family, inherit);--ss-detail-font-weight: var(--svb-detail-font-weight, inherit);--ss-option-hover-bg: var(--svb-option-hover-bg, rgba(0, 0, 0, 0.05));}.svb-pending.svelte-4apeha {display:inline-flex;align-items:center;height:var(--svb-height, 54px);min-width:var(--svb-min-width, 280px);padding:0 20px;border-radius:var(--svb-radius, 10px);border:var(--svb-border-width, 1px) solid var(--svb-border-color, rgba(0, 0, 0, 0.2));background:var(--svb-bg, #fff);color:var(--svb-color, inherit);font-size:var(--svb-font-size, 14px);opacity:0.7;}.svb-book.svelte-4apeha {height:var(--svb-height, 54px);padding:0 24px;border:none;border-radius:0 var(--svb-radius, 10px) var(--svb-radius, 10px) 0;background:var(--svb-accent, #1a1a1a);color:var(--svb-accent-contrast, #fff);font:inherit;font-size:var(--svb-font-size, 14px);font-weight:var(--svb-button-font-weight, 600);text-transform:var(--svb-button-transform, none);letter-spacing:var(--svb-button-letter-spacing, normal);cursor:pointer;}
7
+
8
+ /* Opt-in (ctaShimmer prop): a soft light band sweeps across the button on
9
+ hover and eases back out on leave -- same treatment as
10
+ <google-reviews>' CTA. A transition on \`left\` (not a keyframe loop) so
11
+ leaving mid-sweep reverses smoothly from wherever it stopped. */.svb-book.shimmer.svelte-4apeha {position:relative;overflow:hidden;}.svb-book.shimmer.svelte-4apeha::after {content:'';position:absolute;top:0;left:-75%;width:50%;height:100%;background:linear-gradient(120deg, transparent, rgba(255, 255, 255, 0.55), transparent);transform:skewX(-20deg);transition:left 0.6s ease-in-out;pointer-events:none;}.svb-book.shimmer.svelte-4apeha:hover::after,
12
+ .svb-book.shimmer.svelte-4apeha:focus-visible::after {left:125%;}
13
+ @media (prefers-reduced-motion: reduce) {.svb-book.shimmer.svelte-4apeha::after {display:none;}
14
+ }`};function j(e,t){m(t,!0),_(e,A);let C=b(t,`applyOnSelect`,7,!0),j=b(t,`showBookButton`,7,!0),M=b(t,`ctaShimmer`,7,!1),N=b(t,`strings`,23,()=>({})),P=b(t,`fetchTreatments`,7,void 0),F=i(()=>({placeholder:`Choose a service…`,bookLabel:`Book`,loadingLabel:`Loading services…`,errorLabel:`Services unavailable — please try again.`,...N()})),I=f(n([])),L=f(`idle`),R=f(``);function z(e,n){t.$$host?.dispatchEvent(new CustomEvent(e,{detail:n,bubbles:!0,composed:!0}))}o(()=>{let e=P();!e||s(L)===`ready`||s(L)===`loading`||(u(L,`loading`),e().then(e=>{u(I,e,!0),u(L,`ready`)}).catch(()=>{u(L,`error`)}))});let B=i(()=>s(I).map(e=>({value:e.id,label:e.name,detail:`£${(e.price??e.memberPrice??0).toFixed(2)}`})));function V(e){let t=s(I).find(t=>t.id===e);z(`book`,t?{id:t.id,name:t.name,price:t.price}:null)}let H=f(void 0);function U(e){u(R,e.detail?.value??``,!0),C()&&s(R)&&V(s(R))}var W={get applyOnSelect(){return C()},set applyOnSelect(e=!0){C(e),a()},get showBookButton(){return j()},set showBookButton(e=!0){j(e),a()},get ctaShimmer(){return M()},set ctaShimmer(e=!1){M(e),a()},get strings(){return N()},set strings(e={}){N(e),a()},get fetchTreatments(){return P()},set fetchTreatments(e=void 0){P(e),a()}},G=k(),K=T(G),q=e=>{var t=E();g(t,1,`svb-select svelte-4apeha`),y(t,`no-search`,!0),r(()=>y(t,`anchor`,s(H))),r(()=>y(t,`options`,s(B))),r(()=>y(t,`placeholder`,s(F).placeholder)),v(`change`,t,U),l(e,t)},J=e=>{var t=D(),n=T(t,!0);h(t),r(()=>{S(t,`aria-busy`,s(L)===`loading`),w(n,s(L)===`error`?s(F).errorLabel:s(F).loadingLabel)}),l(e,t)};c(K,e=>{s(L)===`ready`?e(q):e(J,-1)});var Y=d(K,2),X=e=>{var t=O();let n;var i=T(t,!0);h(t),r(()=>{n=g(t,1,`svb-book svelte-4apeha`,null,n,{shimmer:M()}),w(i,s(F).bookLabel)}),v(`click`,t,()=>V(s(R))),l(e,t)};return c(Y,e=>{j()&&e(X)}),h(G),x(G,e=>u(H,e),()=>s(H)),l(e,G),p(W)}e([`change`,`click`]),customElements.define(`service-booking-bar`,C(j,{applyOnSelect:{attribute:`apply-on-select`,type:`Boolean`},showBookButton:{attribute:`show-book-button`,type:`Boolean`},ctaShimmer:{attribute:`cta-shimmer`,type:`Boolean`},strings:{type:`Object`},fetchTreatments:{type:`Object`}},[],[],{mode:`open`}));
@@ -0,0 +1,198 @@
1
+ import{$ as e,A as t,B as n,D as r,E as i,H as a,I as o,J as s,K as c,L as l,M as u,N as d,S as f,T as p,U as m,V as h,W as g,X as _,Y as v,Z as y,_ as b,et as x,f as S,h as C,i as w,j as T,n as E,nt as ee,o as D,q as O,r as te,rt as ne,s as k,t as re,tt as ie,v as ae,w as A,x as oe,y as j,z as M}from"./chunks/client-BDk8LqGN.js";import{a as se,i as ce,n as le,r as ue,t as de}from"./chunks/floating-ui.dom-DY3dGoEq.js";import{i as fe,n as pe,o as me,r as he,s as ge,t as _e}from"./chunks/calendar-B8eNjUm2.js";var ve=e=>e;function ye(e,{delay:t=0,duration:n=400,easing:r=ve}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}var be=r(`<strong class="svelte-1dxdgqu"> </strong>`),xe=r(`<span class="svelte-1dxdgqu"> </span>`),Se=r(`<div class="sbw-summary-row sbw-summary-row-sub svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <!></div>`),Ce=r(`<div class="sbw-summary-row sbw-summary-row-sub svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <span class="svelte-1dxdgqu"> </span></div>`),we=r(`<span class="sbw-time-flash svelte-1dxdgqu"> </span>`),Te=r(`<div class="sbw-summary-row sbw-summary-row-sub sbw-summary-row-datetime svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <!></div>`),Ee=r(`<div class="sbw-summary-row sbw-summary-row-sub svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <span class="sbw-summary-row-bookedat-value svelte-1dxdgqu"> </span></div>`),De=r(`<div class="sbw-summary-total svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <strong class="svelte-1dxdgqu"> </strong></div>`),Oe=r(`<span class="sbw-spinner svelte-1dxdgqu"></span>`),ke=r(`<p class="sbw-hint svelte-1dxdgqu"> </p>`),Ae=r(`<p class="sbw-error-text svelte-1dxdgqu"> </p>`),je=r(`<button type="button" class="sbw-continue svelte-1dxdgqu"><!> <span class="svelte-1dxdgqu"> </span></button> <!> <!>`,1),Me=r(`<button type="button" class="sbw-continue svelte-1dxdgqu"> </button> <button type="button" class="sbw-back sbw-back-service svelte-1dxdgqu"> </button>`,1),Ne=r(`<button type="submit" class="sbw-submit svelte-1dxdgqu"><!> <span class="svelte-1dxdgqu"> </span></button> <!> <button type="button" class="sbw-back sbw-back-service svelte-1dxdgqu"> </button>`,1),Pe=r(`<aside class="sbw-summary svelte-1dxdgqu"><div class="sbw-summary-row svelte-1dxdgqu"><span class="svelte-1dxdgqu"> </span> <!></div> <!> <!> <!> <!> <!> <!></aside>`),Fe=r(`<img class="sbw-logo svelte-1dxdgqu" alt=""/>`),Ie=r(`<h2 class="sbw-heading svelte-1dxdgqu"> </h2> <div class="sbw-rule svelte-1dxdgqu"></div>`,1),Le=r(`<p class="sbw-tagline svelte-1dxdgqu"> </p>`),Re=r(`<p class="sbw-description svelte-1dxdgqu"> </p>`),ze=r(`<div class="sbw-intro svelte-1dxdgqu"><!> <!> <!> <!></div>`),Be=r(`<span class="sbw-service-sub svelte-1dxdgqu"> </span>`),Ve=r(`<span class="sbw-service-prices svelte-1dxdgqu"><span class="sbw-service-price svelte-1dxdgqu"> </span> <!></span>`),He=r(`<li class="svelte-1dxdgqu"><button type="button" class="sbw-service-item svelte-1dxdgqu"><span class="sbw-service-name svelte-1dxdgqu"> <!></span> <!></button></li>`),Ue=r(`<ul class="sbw-service-list svelte-1dxdgqu" role="list"></ul>`),We=r(`<div class="sbw-body svelte-1dxdgqu"><h3 class="sbw-step-title svelte-1dxdgqu"> </h3> <!></div>`),Ge=r(`<li role="presentation" class="svelte-1dxdgqu"><button type="button" role="option" class="svelte-1dxdgqu"> </button></li>`),Ke=r(`<div class="sbw-therapist-filter svelte-1dxdgqu"><span class="sbw-visually-hidden svelte-1dxdgqu" id="sbw-therapist-filter-label"> </span> <button type="button" class="sbw-therapist-filter-trigger svelte-1dxdgqu" aria-haspopup="listbox" aria-labelledby="sbw-therapist-filter-label"><span class="svelte-1dxdgqu"> </span> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M6 9l6 6 6-6" stroke-linecap="round" stroke-linejoin="round" class="svelte-1dxdgqu"></path></svg></button> <ul popover="" role="listbox" class="sbw-therapist-filter-panel svelte-1dxdgqu"><li role="presentation" class="svelte-1dxdgqu"><button type="button" role="option" class="svelte-1dxdgqu"> </button></li> <!></ul></div>`),qe=r(`<span></span>`),Je=r(`<button type="button"><span class="svelte-1dxdgqu"> </span> <!></button>`),Ye=r(`<button type="button"> </button>`),Xe=r(`<div class="sbw-slot-group svelte-1dxdgqu"><p class="sbw-slot-group-label svelte-1dxdgqu"> </p> <div class="sbw-slot-buttons svelte-1dxdgqu"></div></div>`),Ze=r(`<div class="sbw-slot-groups svelte-1dxdgqu"></div>`),Qe=r(`<div class="sbw-body sbw-datetime svelte-1dxdgqu"><div class="sbw-calendar-col svelte-1dxdgqu"><div class="sbw-cal-body svelte-1dxdgqu"><div class="sbw-cal-header svelte-1dxdgqu"><p class="sbw-cal-month svelte-1dxdgqu"> </p> <!> <div class="sbw-cal-nav svelte-1dxdgqu"><button type="button" class="svelte-1dxdgqu">‹</button> <button type="button" class="svelte-1dxdgqu">›</button></div></div> <div class="sbw-cal-weekdays svelte-1dxdgqu"></div> <div class="sbw-cal-grid svelte-1dxdgqu"></div></div> <div class="sbw-slots svelte-1dxdgqu"><!></div></div> <!></div>`),$e=r(`<form class="sbw-body sbw-datetime sbw-details svelte-1dxdgqu"><div class="sbw-details-fields svelte-1dxdgqu"><div class="sbw-grid svelte-1dxdgqu"><label class="sbw-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <input type="text" required="" class="svelte-1dxdgqu"/></label> <label class="sbw-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <input type="email" pattern="[^\\s@]+@[^\\s@]+\\.[^\\s@]+" class="svelte-1dxdgqu"/></label> <label class="sbw-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <input type="tel" class="svelte-1dxdgqu"/></label></div> <label class="sbw-field sbw-notes-field svelte-1dxdgqu"><span class="sbw-label svelte-1dxdgqu"> </span> <textarea rows="3" class="svelte-1dxdgqu"></textarea></label></div> <!></form>`),et=r(`<div class="sbw-success svelte-1dxdgqu"><div class="sbw-success-icon svelte-1dxdgqu"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" class="svelte-1dxdgqu"><path d="M5 13l4 4L19 7" stroke-linecap="round" stroke-linejoin="round" class="svelte-1dxdgqu"></path></svg></div> <p class="svelte-1dxdgqu"> </p> <!></div>`),tt=r(`<section class="sbw-root svelte-1dxdgqu"><!> <!></section>`),nt={hash:`svelte-1dxdgqu`,code:`.sbw-root.svelte-1dxdgqu {display:block;
2
+ /* Every layout breakpoint below is a container query against this box,
3
+ not the viewport. The widget is embedded in host layouts -- a narrow
4
+ column beside a summary card, a modal -- where the viewport says
5
+ nothing useful about the room it actually has; sized from the
6
+ viewport it laid out a wide-screen grid inside a ~700px column and
7
+ overflowed. Inline-size containment also stops the widget handing
8
+ its contents' min-content width up to the host. */container:sbw / inline-size;font-family:inherit;color:var(--sbw-text-color, #1a1a1a);background:var(--sbw-bg, #faf6ec);padding:var(--sbw-padding, 4rem 1.5rem);}.sbw-intro.svelte-1dxdgqu {max-width:var(--sbw-intro-max-width, 36rem);margin:0 auto;text-align:center;}.sbw-logo.svelte-1dxdgqu {height:var(--sbw-logo-height, 2.5rem);width:auto;margin:0 auto 1.5rem;display:block;}.sbw-heading.svelte-1dxdgqu {margin:0;font-size:2rem;font-family:var(--sbw-heading-font-family, inherit);}
9
+ @container sbw (min-width: 640px) {.sbw-heading.svelte-1dxdgqu {font-size:2.5rem;}
10
+ }.sbw-rule.svelte-1dxdgqu {width:4rem;height:1px;margin:1rem auto 0;background:var(--sbw-rule-color, rgba(196, 158, 90, 0.5));}.sbw-tagline.svelte-1dxdgqu {margin:1.5rem 0 0;font-style:italic;font-size:1.125rem;}.sbw-description.svelte-1dxdgqu {margin:1rem 0 0;font-size:1rem;line-height:1.6;}
11
+ /* Matches .sbw-heading/.sbw-description above so a host that slots its
12
+ own heading/description (instead of the heading/description attributes)
13
+ gets the same look for free -- targeted by the slot attribute, not a
14
+ class, so it works no matter what element or class the host uses. */::slotted([slot='heading']) {margin:0;font-size:2rem;font-family:var(--sbw-heading-font-family, inherit);}
15
+ @container sbw (min-width: 640px) {::slotted([slot='heading']) {font-size:2.5rem;}
16
+ }::slotted([slot='description']) {margin:1rem 0 0;font-size:1rem;line-height:1.6;}.sbw-body.svelte-1dxdgqu {max-width:var(--sbw-form-max-width, 40rem);margin:var(--sbw-body-margin-top, 3rem) auto 0;}.sbw-step-title.svelte-1dxdgqu {margin:0 0 1.25rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;opacity:0.6;}.sbw-hint.svelte-1dxdgqu {margin:0;font-size:0.875rem;opacity:0.6;}
17
+
18
+ /* --- Service list --- */.sbw-service-list.svelte-1dxdgqu {list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:0.5rem;}.sbw-service-item.svelte-1dxdgqu {width:100%;display:flex;align-items:center;justify-content:space-between;gap:1rem;border-radius:2px;border:1px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));background:var(--sbw-input-bg, #fff);padding:0.9rem 1.1rem;font:inherit;font-size:0.9375rem;color:inherit;cursor:pointer;text-align:left;transition:border-color 150ms ease, background-color 150ms ease, transform 150ms ease;}.sbw-service-item.svelte-1dxdgqu:hover:not(:disabled) {border-color:color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 40%, transparent);background:var(--sbw-service-hover-bg, rgba(0, 0, 0, 0.03));color:var(--sbw-service-hover-color, inherit);transform:translateX(2px);}.sbw-service-price.svelte-1dxdgqu {font-weight:600;color:var(--sbw-accent-color, #c49e5a);}.sbw-service-item.svelte-1dxdgqu:hover:not(:disabled) .sbw-service-price:where(.svelte-1dxdgqu) {color:var(--sbw-service-hover-price-color, var(--sbw-accent-color, #c49e5a));}
19
+ /* A regulars-only service the visitor doesn't qualify for: still listed
20
+ (so they know it exists), dimmed like the calendar's unavailable days. */.sbw-service-item.svelte-1dxdgqu:disabled {cursor:default;opacity:0.5;}.sbw-service-name.svelte-1dxdgqu,
21
+ .sbw-service-prices.svelte-1dxdgqu {display:flex;flex-direction:column;gap:0.15rem;}.sbw-service-prices.svelte-1dxdgqu {align-items:flex-end;flex-shrink:0;text-align:right;}.sbw-service-sub.svelte-1dxdgqu {font-size:0.8125rem;font-weight:400;opacity:0.7;}
22
+
23
+ /* --- Datetime step: two-column layout, single column when narrow --- */.sbw-datetime.svelte-1dxdgqu {display:grid;grid-template-columns:1fr;gap:2rem;max-width:var(--sbw-datetime-max-width, 52rem);
24
+ /* A second container, because the calendar/slots split below depends on
25
+ what the calendar column gets rather than on the whole widget: this
26
+ row is capped by --sbw-datetime-max-width and gives 16rem of itself
27
+ to the summary, so the root's width alone cannot answer it. */container:sbw-dt / inline-size;}
28
+ @container sbw (min-width: 800px) {.sbw-datetime.svelte-1dxdgqu {grid-template-columns:1fr 16rem;align-items:start;}
29
+ }
30
+ /* Calendar and slots side by side (not stacked) once there's room for
31
+ both plus the 16rem summary column -- a plain calendar-then-slots
32
+ stack read as a long, sparse list. .sbw-cal-body wraps the weekday
33
+ labels + day grid into one grid item (rather than giving them each
34
+ their own template row) so its height is independent of how tall
35
+ .sbw-slots is -- with each in its own row instead, a long slots
36
+ list (a busy day can have 20+ times) inflated the *shared* row
37
+ tracks and pushed the day grid visually away from its own weekday
38
+ header. Slots gets the flexible remaining column so extra width
39
+ goes into more time-chip columns instead of unused space; the
40
+ calendar gets a comfortable range (not a single fixed number) so it
41
+ can grow a little on very wide hosts instead of looking squashed
42
+ next to a much wider slots column, while still stopping well short
43
+ of the dead-space-between-date-numbers stretching a bare 1fr gave it. */
44
+ /* 54rem is the width this split actually needs, not a round number: the
45
+ calendar's own minimum (20rem) plus the slots column's (14rem) plus the
46
+ 2rem between them is 36rem, and in two-column mode this row has already
47
+ given 16rem + 2rem to the summary. Below it the two stack instead, which
48
+ is why the query is on the row rather than on the root -- a wide page
49
+ with a narrow widget must still stack. Note the 52rem default cap on
50
+ --sbw-datetime-max-width is under this, so a host wanting the calendar
51
+ and slots side by side has to raise it. */
52
+ @container sbw-dt (min-width: 54rem) {.sbw-calendar-col.svelte-1dxdgqu {display:grid;grid-template-columns:minmax(20rem, 28rem) minmax(14rem, 1fr);grid-template-areas:'body slots';column-gap:2rem;align-items:start;}.sbw-cal-body.svelte-1dxdgqu {grid-area:body;}.sbw-slots.svelte-1dxdgqu {grid-area:slots;}
53
+ /* Extra specificity (not just .sbw-slots) so this reliably beats the
54
+ unconditional base rule below regardless of source order -- the
55
+ top border/margin/padding there exists to separate slots from a
56
+ calendar stacked *above* it on narrow/mobile widths; side by side,
57
+ it read as a stray line with nothing for it to separate. */.sbw-calendar-col.svelte-1dxdgqu .sbw-slots:where(.svelte-1dxdgqu) {margin-top:0;border-top:none;padding-top:0;}
58
+ }.sbw-cal-header.svelte-1dxdgqu {display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:0.5rem;}.sbw-cal-month.svelte-1dxdgqu {margin:0;font-size:1rem;font-weight:600;}.sbw-visually-hidden.svelte-1dxdgqu {position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;}.sbw-therapist-filter.svelte-1dxdgqu {position:relative;}.sbw-therapist-filter-trigger.svelte-1dxdgqu {display:flex;align-items:center;gap:0.5rem;border-radius:9999px;border:2px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));background:var(--sbw-input-bg, #fff);color:inherit;font:inherit;font-size:0.8125rem;padding:0.4rem 0.85rem;cursor:pointer;transition:border-color 320ms ease-out;}.sbw-therapist-filter-trigger.svelte-1dxdgqu:hover,
59
+ .sbw-therapist-filter-trigger.svelte-1dxdgqu:focus-visible {border-color:var(--sbw-accent-color, #c49e5a);outline:none;}.sbw-chevron.svelte-1dxdgqu {width:1rem;height:1rem;flex-shrink:0;opacity:0.6;transition:transform 200ms ease;}.sbw-chevron-open.svelte-1dxdgqu {transform:rotate(180deg);}
60
+ /* Native <select> option lists can't be styled -- they render as the
61
+ browser's own unthemed popup regardless of any CSS here, which read
62
+ as a jarring plain-white box against a themed (esp. dark) host page.
63
+ This is a real listbox (button + popover), styled as a proper
64
+ floating panel: opaque fill (not the translucent --sbw-input-bg
65
+ inputs use, which assumes a solid page behind it -- this overlays
66
+ arbitrary content) with an accent-tinted border and glow instead of
67
+ a flat neutral edge. The 30%/25% mix amounts aren't picked to taste --
68
+ they're the same two fixed proportions this library's other floating
69
+ panels use for an accent border + glow (not a third, invented
70
+ opacity), so re-skinning --sbw-accent-color still lands on a
71
+ consistent-looking panel instead of a one-off tint. */.sbw-therapist-filter-panel.svelte-1dxdgqu {position:fixed;inset:auto;margin:0;min-width:9rem;max-height:15rem;overflow:auto;list-style:none;padding:0.25rem;border-radius:10px;border:1px solid color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 30%, transparent);background:var(--sbw-bg, #faf6ec);box-shadow:0 8px 24px rgba(0, 0, 0, 0.16), 0 0 24px color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 25%, transparent);}.sbw-therapist-filter-panel.svelte-1dxdgqu button:where(.svelte-1dxdgqu) {display:block;width:100%;border:none;border-radius:6px;background:transparent;color:inherit;font:inherit;text-align:left;padding:0.5rem 0.75rem;font-size:0.8125rem;cursor:pointer;}.sbw-therapist-filter-panel.svelte-1dxdgqu button:where(.svelte-1dxdgqu):hover,
72
+ .sbw-therapist-filter-panel.svelte-1dxdgqu button[aria-selected='true']:where(.svelte-1dxdgqu) {background:color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 15%, transparent);}.sbw-cal-nav.svelte-1dxdgqu {display:flex;gap:0.25rem;}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu) {position:relative;z-index:0;display:flex;height:2.75rem;width:2.75rem;align-items:center;justify-content:center;border-radius:9999px;border:2px solid var(--sbw-cal-nav-border-color, var(--sbw-border-color, rgba(0, 0, 0, 0.15)));background:none;color:var(--sbw-text-color, #1a1a1a);font-size:1.375rem;cursor:pointer;transition:border-color 320ms ease-out, color 320ms ease-out;}
73
+ /* A fill growing from the button's centre (clip-path), not a flat
74
+ colour cross-fade -- matches this library's other circular nav
75
+ control (VenueCarousel's prev/next). Separate hook from
76
+ --sbw-cal-hover-bg (the day-cell hover fill) on purpose: a consumer
77
+ whose day-cell text needs that fill to stay same-color-as-background
78
+ invisible (see mens-cave-barbers) still wants these nav buttons --
79
+ icon glyphs, not text that could vanish -- to invert fully on hover.
80
+ Falls back to the day-cell variable, then the original hardcoded
81
+ tint, so existing consumers see no change. */.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu)::before {content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;background:var(--sbw-cal-nav-hover-bg, var(--sbw-cal-hover-bg, color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 6%, transparent)));clip-path:circle(0% at 50% 50%);transition:clip-path 800ms cubic-bezier(0.16, 1, 0.3, 1);}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu):hover:not(:disabled) {border-color:var(--sbw-cal-nav-hover-border-color, var(--sbw-accent-color, #c49e5a));color:var(--sbw-cal-nav-hover-color, var(--sbw-text-color, #1a1a1a));}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu):hover:not(:disabled)::before {clip-path:circle(150% at 50% 50%);}
82
+ /* The click-pulse (below) is this button's whole click-confirmation --
83
+ no separate :active press state, so the two don't stack into a
84
+ double-bounce (shrink-on-press, then the pulse's own scale-up).
85
+ :global() on the pulse class itself -- it's only ever added via
86
+ classList.add() in pulseNavButton above, never as a literal class
87
+ in this template, so Svelte's unused-CSS pruning silently deleted
88
+ this whole rule (keeping the @keyframes, which isn't pruned the
89
+ same way) without :global() marking it as intentionally dynamic. */
90
+ @keyframes svelte-1dxdgqu-sbw-cal-nav-pulse {
91
+ 0% { transform: scale(1); }
92
+ 50% { transform: scale(1.18); }
93
+ 100% { transform: scale(1); }
94
+ }.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu).sbw-cal-nav-pulse {
95
+ animation: svelte-1dxdgqu-sbw-cal-nav-pulse 320ms ease-out;}.sbw-cal-nav.svelte-1dxdgqu button:where(.svelte-1dxdgqu):disabled {cursor:default;opacity:0.3;}.sbw-cal-weekdays.svelte-1dxdgqu {display:grid;grid-template-columns:repeat(7, 1fr);margin-top:1rem;text-align:center;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.1em;opacity:0.4;}.sbw-cal-grid.svelte-1dxdgqu {display:grid;grid-template-columns:repeat(7, 1fr);gap:2px;margin-top:0.25rem;}.sbw-cal-cell.svelte-1dxdgqu {height:3rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:2px solid transparent;border-radius:8px;background:none;font:inherit;font-size:0.875rem;color:inherit;cursor:pointer;transition:border-color 320ms ease-out, background-color 320ms ease-out, color 320ms ease-out;}
96
+ /* Excludes .sbw-cal-cell-selected: this selector out-ranks the selected
97
+ rule below (two pseudo-classes vs. one plain class), and without the
98
+ exclusion hovering the selected day replaced its solid accent fill
99
+ with this dimmer tint, reading as deselected while the mouse was over
100
+ it. Same fix as AvailabilityCalendar.svelte's .ac-edge exclusion. */.sbw-cal-cell.svelte-1dxdgqu:hover:not(:disabled):not(.sbw-cal-cell-selected) {background:var(--sbw-cal-hover-bg, color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 6%, transparent));color:var(--sbw-cal-hover-color, inherit);border-color:var(--sbw-accent-color, #c49e5a);}.sbw-cal-cell.svelte-1dxdgqu:disabled {cursor:default;}.sbw-cal-cell-off.svelte-1dxdgqu span:where(.svelte-1dxdgqu) {opacity:0.2;}.sbw-cal-cell.svelte-1dxdgqu:disabled:not(.sbw-cal-cell-off) span:where(.svelte-1dxdgqu):first-child {opacity:0.3;}.sbw-cal-cell-selected.svelte-1dxdgqu {background:var(--sbw-accent-color, #c49e5a);}.sbw-cal-cell-selected.svelte-1dxdgqu span:where(.svelte-1dxdgqu) {color:var(--sbw-accent-contrast, #fff);}.sbw-dot.svelte-1dxdgqu {width:4px;height:4px;border-radius:9999px;background:var(--sbw-accent-color, #c49e5a);}.sbw-dot-1.svelte-1dxdgqu {opacity:0.35;}.sbw-dot-2.svelte-1dxdgqu {opacity:0.65;}.sbw-dot-3.svelte-1dxdgqu {opacity:1;width:5px;height:5px;}
101
+ /* Keeps the availability dot visible against --sbw-cal-hover-color's own
102
+ fill -- without this it stayed --sbw-accent-color, which on a theme
103
+ where hover flips to a dark fill with accent-colored TEXT (rather
104
+ than the default light tint) would otherwise put an accent dot on an
105
+ accent-colored background. */.sbw-cal-cell.svelte-1dxdgqu:hover:not(:disabled):not(.sbw-cal-cell-selected) .sbw-dot:where(.svelte-1dxdgqu) {background:var(--sbw-cal-hover-color, var(--sbw-accent-color, #c49e5a));}.sbw-cal-cell-selected.svelte-1dxdgqu .sbw-dot:where(.svelte-1dxdgqu) {background:var(--sbw-accent-contrast, #fff);opacity:1;}.sbw-slots.svelte-1dxdgqu {margin-top:1.5rem;border-top:1px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));padding-top:1.25rem;}
106
+ /* One column, not auto-fit -- auto-fit let Morning/Afternoon/Evening
107
+ sit side-by-side whenever the container was wide (e.g. the
108
+ dashboard's full-width reschedule sheet), each cramped into a
109
+ narrow track instead of the slot-buttons grid using the full
110
+ width. Stacking the groups keeps each one's own 2-column button
111
+ grid legible regardless of how wide the widget is rendered. */.sbw-slot-groups.svelte-1dxdgqu {display:grid;grid-template-columns:1fr;gap:1.25rem;}.sbw-slot-group-label.svelte-1dxdgqu {margin:0 0 0.5rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;color:var(--sbw-slot-label-color, inherit);opacity:var(--sbw-slot-label-opacity, 0.5);}
112
+ /* auto-fit: use as many columns as the (now flexible-width) slots
113
+ area actually has room for, instead of a fixed count that either
114
+ stretches into giant pills on a wide column or wastes space on a
115
+ narrow one. */.sbw-slot-buttons.svelte-1dxdgqu {display:grid;grid-template-columns:repeat(auto-fit, minmax(5.5rem, 1fr));gap:0.4rem;}.sbw-slot-btn.svelte-1dxdgqu {border-radius:9999px;border:2px solid var(--sbw-border-color, rgba(0, 0, 0, 0.35));background:var(--sbw-input-bg, #fff);box-shadow:0 1px 2px rgba(0, 0, 0, 0.06);padding:0.5rem 0.9rem;font:inherit;font-size:0.8125rem;color:inherit;cursor:pointer;transition:border-color 320ms ease-out, background-color 320ms ease-out, color 320ms ease-out;}
116
+ /* Excludes .sbw-slot-btn-selected for the same reason as .sbw-cal-cell's
117
+ own hover exclusion above: this selector's two classes + :hover
118
+ otherwise out-ranks that one plain class and hovering the already-
119
+ selected slot would replace its solid accent fill with this one. */.sbw-slot-btn.svelte-1dxdgqu:hover:not(.sbw-slot-btn-selected) {border-color:var(--sbw-accent-color, #c49e5a);background:var(--sbw-slot-hover-bg, var(--sbw-input-bg, #fff));color:var(--sbw-slot-hover-color, inherit);}.sbw-slot-btn-selected.svelte-1dxdgqu {background:var(--sbw-accent-color, #c49e5a);border-color:var(--sbw-accent-color, #c49e5a);color:var(--sbw-accent-contrast, #fff);
120
+ /* Replays whenever this class lands on a *different* button (auto-pick
121
+ or a manual re-pick), since that's a fresh application of the
122
+ animation property -- makes the pick noticeable instead of a silent
123
+ state change several buttons over from where the visitor is looking. */
124
+ animation: svelte-1dxdgqu-sbw-slot-pop 0.3s ease;}
125
+ @keyframes svelte-1dxdgqu-sbw-slot-pop {
126
+ 0% { transform: scale(0.92); }
127
+ 60% { transform: scale(1.04); }
128
+ 100% { transform: scale(1); }
129
+ }
130
+ /* Flashes gold then settles, so a silently auto-picked time in the summary
131
+ panel (easy to miss, off to the side) draws the eye same as the pop
132
+ above does for the slot button itself. */.sbw-time-flash.svelte-1dxdgqu {
133
+ animation: svelte-1dxdgqu-sbw-time-flash 0.6s ease;}
134
+ @keyframes svelte-1dxdgqu-sbw-time-flash {
135
+ 0% { color: var(--sbw-accent-color, #c49e5a); }
136
+ 100% { color: inherit; }
137
+ }
138
+
139
+ /* --- Summary panel --- */
140
+ /* Sticky, and it carries the primary CTA -- a Floating panel (canon:
141
+ accent-tinted border + matching glow, same 30%/25% mix the
142
+ therapist-filter panel uses) rather than Card surface's neutral
143
+ border, so it reads as raised/active instead of another content
144
+ block. Opaque --sbw-bg, not the translucent --sbw-input-bg inputs
145
+ use -- that assumes a solid page directly behind it, but this
146
+ panel sticks over whatever's scrolled underneath it. */.sbw-summary.svelte-1dxdgqu {border-radius:4px;border:1px solid color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 30%, transparent);background:var(--sbw-bg, #fff);box-shadow:0 8px 24px rgba(0, 0, 0, 0.16), 0 0 24px color-mix(in oklab, var(--sbw-accent-color, #c49e5a) 25%, transparent);padding:1.25rem;}
147
+ @container sbw (min-width: 800px) {.sbw-summary.svelte-1dxdgqu {position:sticky;top:var(--sbw-summary-sticky-top, 1rem);}
148
+ }.sbw-summary-row.svelte-1dxdgqu {display:flex;align-items:baseline;justify-content:space-between;gap:0.75rem;font-size:0.9375rem;font-weight:600;}.sbw-summary-row-sub.svelte-1dxdgqu {margin-top:0.5rem;font-size:0.8125rem;font-weight:400;opacity:0.65;}
149
+ /* Date and time are one fact, not a label/value pair -- keep them
150
+ next to each other instead of the row's default space-between,
151
+ which stretched them to opposite edges. Also the one -sub row that's
152
+ actually the point of the summary (which slot you're about to book),
153
+ so it overrides -sub's dimmed/thin defaults back up to fully legible
154
+ instead of reading as fine print like the optional staff row above it. */.sbw-summary-row-datetime.svelte-1dxdgqu {justify-content:flex-start;gap:0.375rem;font-size:var(--sbw-summary-datetime-size, 0.875rem);font-weight:var(--sbw-summary-datetime-weight, 700);color:var(--sbw-summary-datetime-color, inherit);opacity:var(--sbw-summary-datetime-opacity, 1);}
155
+ /* The post-booking "Booked" row's own timestamp value -- same
156
+ reasoning and same variables as .sbw-summary-row-datetime above (it's
157
+ the confirmed date/time, the actual point of this receipt-like row,
158
+ not a footnote), just scoped to the value span rather than the whole
159
+ row since this row keeps its label/value layout (space-between),
160
+ unlike the label-less date+time row above. */.sbw-summary-row-bookedat-value.svelte-1dxdgqu {font-weight:var(--sbw-summary-datetime-weight, 700);color:var(--sbw-summary-datetime-color, inherit);opacity:var(--sbw-summary-datetime-opacity, 1);}.sbw-summary-total.svelte-1dxdgqu {display:flex;align-items:baseline;justify-content:space-between;margin-top:1rem;padding-top:1rem;border-top:1px solid var(--sbw-summary-total-border-color, var(--sbw-border-color, rgba(0, 0, 0, 0.15)));font-size:0.9375rem;}.sbw-summary-total.svelte-1dxdgqu strong:where(.svelte-1dxdgqu) {font-size:1.125rem;color:var(--sbw-accent-color, #c49e5a);}.sbw-continue.svelte-1dxdgqu {display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;width:100%;margin-top:1.25rem;cursor:pointer;border:none;border-radius:2px;background:var(--sbw-accent-bg, #1a1a1a);color:var(--sbw-accent-contrast, #fff);padding:0.8rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;transition:background-color 150ms ease;}.sbw-continue.svelte-1dxdgqu:hover:not(:disabled) {background:var(--sbw-accent-hover-bg, #333);}.sbw-continue.svelte-1dxdgqu:disabled {cursor:default;opacity:0.4;}
161
+
162
+ /* --- Details step --- */.sbw-back.svelte-1dxdgqu {display:inline-block;margin-bottom:1.5rem;border:none;background:none;padding:0;font:inherit;color:inherit;font-size:0.8125rem;opacity:var(--sbw-back-opacity, 0.6);cursor:pointer;}.sbw-back.svelte-1dxdgqu:hover {opacity:var(--sbw-back-hover-opacity, 1);}.sbw-back-service.svelte-1dxdgqu {display:block;width:100%;margin-top:0.75rem;text-align:center;}.sbw-grid.svelte-1dxdgqu {display:grid;gap:1.25rem;}
163
+ @container sbw (min-width: 640px) {.sbw-grid.svelte-1dxdgqu {grid-template-columns:1fr 1fr;}
164
+ }.sbw-field.svelte-1dxdgqu {display:flex;flex-direction:column;gap:0.5rem;}.sbw-label.svelte-1dxdgqu {font-size:0.75rem;font-weight:300;text-transform:uppercase;letter-spacing:0.05em;}.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu),
165
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu) {border-radius:2px;border:1px solid var(--sbw-border-color, rgba(0, 0, 0, 0.15));background:var(--sbw-input-bg, #fff);padding:0.75rem 1rem;font-size:0.875rem;font-family:inherit;color:inherit;}.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):focus,
166
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):focus {outline:none;border-color:color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 40%, transparent);}.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu)::placeholder,
167
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu)::placeholder {color:var(--sbw-placeholder-color, color-mix(in oklab, var(--sbw-text-color, #1a1a1a) 45%, transparent));}
168
+ /* Browser autofill (matched saved Name/Email data) paints its own
169
+ background on these inputs via a UA style strong enough that plain
170
+ \`background\` can't win -- box-shadow can, so this fakes the field's
171
+ normal look with an opaque inset fill instead. --sbw-input-autofill-bg
172
+ falls back to --sbw-input-bg, which is enough for most themes (an
173
+ opaque light input already matches when autofilled); only a theme
174
+ whose --sbw-input-bg is itself transparent (mens-cave-barbers: fields
175
+ defined by their border, not a fill, over a solid page background)
176
+ needs to set this separately to that real opaque colour, or the
177
+ browser's own fill shows through unmasked. The absurd transition delay
178
+ is the standard defeat for Chrome's own internal autofill-background
179
+ transition, which otherwise animates its colour in after this applies. */.sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):-webkit-autofill,
180
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):-webkit-autofill,
181
+ .sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):-webkit-autofill:hover,
182
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):-webkit-autofill:hover,
183
+ .sbw-field.svelte-1dxdgqu input:where(.svelte-1dxdgqu):-webkit-autofill:focus,
184
+ .sbw-field.svelte-1dxdgqu textarea:where(.svelte-1dxdgqu):-webkit-autofill:focus {-webkit-text-fill-color:var(--sbw-text-color, #1a1a1a);-webkit-box-shadow:0 0 0 1000px var(--sbw-input-autofill-bg, var(--sbw-input-bg, #fff)) inset;box-shadow:0 0 0 1000px var(--sbw-input-autofill-bg, var(--sbw-input-bg, #fff)) inset;transition:background-color 600000s ease-in-out 0s;}.sbw-notes-field.svelte-1dxdgqu {margin-top:1.25rem;}.sbw-submit.svelte-1dxdgqu {display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;width:100%;margin-top:1.25rem;cursor:pointer;border:none;border-radius:2px;background:var(--sbw-accent-bg, #1a1a1a);color:var(--sbw-accent-contrast, #fff);padding:0.8rem;font-size:0.75rem;font-weight:600;text-transform:uppercase;letter-spacing:0.05em;transition:background-color 150ms ease;}.sbw-submit.svelte-1dxdgqu:hover:not(:disabled) {background:var(--sbw-accent-hover-bg, #333);}.sbw-submit.svelte-1dxdgqu:disabled {cursor:default;opacity:0.6;}.sbw-spinner.svelte-1dxdgqu {height:1rem;width:1rem;border-radius:9999px;border:2px solid color-mix(in oklab, var(--sbw-accent-contrast, #fff) 30%, transparent);border-top-color:var(--sbw-accent-contrast, #fff);
185
+ animation: svelte-1dxdgqu-sbw-spin 0.7s linear infinite;}
186
+ @keyframes svelte-1dxdgqu-sbw-spin {
187
+ to {
188
+ transform: rotate(360deg);
189
+ }
190
+ }
191
+ @media (prefers-reduced-motion: reduce) {.sbw-spinner.svelte-1dxdgqu {
192
+ animation: none;}.sbw-slot-btn-selected.svelte-1dxdgqu,
193
+ .sbw-time-flash.svelte-1dxdgqu {
194
+ animation: none;}
195
+ }.sbw-error-text.svelte-1dxdgqu {margin:0.75rem 0 0;font-size:0.8125rem;color:var(--sbw-danger-color, #dc2626);}
196
+
197
+ /* --- Success --- */.sbw-success.svelte-1dxdgqu {max-width:var(--sbw-form-max-width, 40rem);margin:3rem auto 0;text-align:center;}.sbw-success-icon.svelte-1dxdgqu {display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;margin:0 auto 1rem;border-radius:9999px;background:var(--sbw-success-bg, #c49e5a);color:#fff;}.sbw-success-icon.svelte-1dxdgqu svg:where(.svelte-1dxdgqu) {width:1.5rem;height:1.5rem;}.sbw-success.svelte-1dxdgqu .sbw-summary:where(.svelte-1dxdgqu) {margin-top:2rem;text-align:left;}.sbw-success.svelte-1dxdgqu p:where(.svelte-1dxdgqu) {margin:0;font-size:1.125rem;}`};function rt(t,r){y(r,!0),C(t,nt);let re=(e,t=ee,r)=>{let a=O(()=>ie(r?.(),!1));var s=i(),c=n(s),l=e=>{var r=Pe(),s=M(r),c=M(s),l=M(c,!0);x(c);var u=h(c,2),m=e=>{var t=be(),n=M(t);x(t),o(e=>A(n,`£${e??``}`),[()=>d(Z).amount.toFixed(2)]),p(e,t)};f(u,e=>{!N()&&d(Z)&&e(m)}),x(s);var g=h(s,2),_=e=>{var t=Se(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=e=>{var t=xe(),n=M(t);x(t),o(e=>A(n,`−£${e??``}`),[()=>(d(H).price-d(Z).amount).toFixed(2)]),p(e,t)};f(i,e=>{d(H).price!=null&&d(H).price>d(Z).amount&&e(a)}),x(t),o(()=>A(r,d(B).memberRateLabel)),p(e,t)};f(g,e=>{!N()&&d(Z)?.member&&e(_)});var v=h(g,2),y=e=>{var t=Ce(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i,!0);x(i),x(t),o(()=>{A(r,d(B).staffRowLabel),A(a,st())}),p(e,t)};f(v,e=>{st()&&e(y)});var S=h(v,2),C=e=>{var t=Te(),n=M(t),r=M(n,!0);x(n);var i=h(n,2);oe(i,()=>d(Y),e=>{var t=we(),n=M(t,!0);x(t),o(()=>A(n,d(Y))),b(1,t,()=>ye,()=>({duration:200})),p(e,t)}),x(t),o(e=>A(r,e),[()=>pe(d(J),P())]),p(e,t)};f(S,e=>{d(J)&&d(Y)&&e(C)});var w=h(S,2),E=e=>{var t=Ee(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i);x(i),x(t),o((e,t)=>{A(r,d(B).bookedAtLabel),A(a,`${e??``}
198
+ ${t??``}`)},[()=>d(Ft).toLocaleDateString(P(),{day:`numeric`,month:`short`}),()=>d(Ft).toLocaleTimeString(P(),{hour:`2-digit`,minute:`2-digit`})]),p(e,t)};f(w,e=>{d(a)&&d(Ft)&&e(E)});var ee=h(w,2),D=e=>{var t=De(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i);x(i),x(t),o(e=>{A(r,d(B).totalLabel),A(a,`£${e??``}`)},[()=>d(Z).amount.toFixed(2)]),p(e,t)};f(ee,e=>{!N()&&d(Z)&&e(D)});var O=h(ee,2),te=e=>{var r=i(),a=n(r),s=e=>{var t=je(),r=n(t),i=M(r),a=e=>{var t=Oe();p(e,t)};f(i,e=>{d(Q)&&e(a)});var s=h(i,2),c=M(s,!0);x(s),x(r);var l=h(r,2),u=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).noChangeHint)),p(e,t)};f(l,e=>{d(Kt)&&e(u)});var m=h(l,2),g=e=>{var t=Ae(),n=M(t,!0);x(t),o(()=>A(n,d($))),p(e,t)};f(m,e=>{d($)&&e(g)}),o(()=>{r.disabled=!d(Y)||d(Q)||d(Kt),A(c,d(Q)?d(B).confirmingLabel:d(B).confirmRescheduleLabel)}),T(`click`,r,yn),p(e,t)},c=e=>{var t=Me(),r=n(t),i=M(r,!0);x(r);var a=h(r,2),s=M(a);x(a),o(()=>{r.disabled=!d(Y),A(i,d(B).continueLabel),A(s,`← ${d(B).changeServiceLabel??``}`)}),T(`click`,r,on),T(`click`,a,cn),p(e,t)},l=e=>{var t=Ne(),r=n(t),i=M(r),a=e=>{var t=Oe();p(e,t)};f(i,e=>{d(Q)&&e(a)});var s=h(i,2),c=M(s,!0);x(s),x(r);var l=h(r,2),u=e=>{var t=Ae(),n=M(t,!0);x(t),o(()=>A(n,d($))),p(e,t)};f(l,e=>{d($)&&e(u)});var m=h(l,2),g=M(m);x(m),o(()=>{r.disabled=d(Q),A(c,d(Q)?d(B).confirmingLabel:d(B).confirmLabel),A(g,`← ${d(B).backLabel??``}`)}),T(`click`,m,sn),p(e,t)};f(a,e=>{t()&&ct()?e(s):t()?e(c,1):e(l,-1)}),p(e,r)};f(O,e=>{d(a)||e(te)}),x(r),o(()=>A(l,d(H).name)),p(e,r)};f(c,e=>{d(H)&&e(l)}),p(e,s)},ve={chooseServiceLabel:`Choose a Service`,loadingServices:`Loading services…`,loadServicesError:`Could not load services. Please try again later.`,previousMonth:`Previous month`,nextMonth:`Next month`,morningLabel:`Morning`,afternoonLabel:`Afternoon`,eveningLabel:`Evening`,pickDayHint:`Pick a day to see times.`,noSlotsForDay:`No times available this day.`,noChangeHint:`Pick a different date or time to continue.`,therapistFilterLabel:`Therapist`,anyTherapistLabel:`Any therapist`,staffRowLabel:`Staff`,bookedAtLabel:`Booked`,totalLabel:`Total`,continueLabel:`Continue`,changeServiceLabel:`Change service`,backLabel:`Back`,nameLabel:`Name`,namePlaceholder:`Jane Smith`,emailLabel:`Email`,emailPlaceholder:`jane@email.com`,emailInvalidTitle:`Enter a valid email address, e.g. jane@email.com`,phoneLabel:`Phone (optional)`,phonePlaceholder:`+1 555 123 4567`,notesLabel:`Notes (optional)`,notesPlaceholder:`Anything we should know?`,confirmingLabel:`Booking…`,confirmLabel:`Confirm Booking`,confirmRescheduleLabel:`Confirm change`,notWiredError:`This widget is not wired up to make bookings yet.`,genericSubmitError:`Something went wrong booking that slot. Please try again.`,successMessage:`Booked! Check your email for confirmation.`,memberRateLabel:`Regulars' rate`,membersOnlyLabel:`Regulars only`,membersOnlyHint:`For clients who've visited in the last 4 weeks.`},rt=E(r,`heading`,7,`Book a Service`),it=E(r,`logoUrl`,7),at=E(r,`tagline`,7,``),ot=E(r,`description`,7,``),st=E(r,`staffLabel`,7,``),N=E(r,`hidePrice`,7,!1),ct=E(r,`skipDetailsStep`,7,!1),lt=E(r,`emailOptional`,7,!1),ut=E(r,`closedWeekdays`,23,()=>[]),P=E(r,`locale`,7),dt=E(r,`initialTreatmentTitle`,7),F=E(r,`initialDate`,7),ft=E(r,`initialTime`,7),I=E(r,`initialName`,7),L=E(r,`initialEmail`,7),R=E(r,`initialPhone`,7),z=E(r,`memberUntil`,7),pt=E(r,`strings`,7),mt=E(r,`fetchTreatments`,7),ht=E(r,`fetchTherapists`,7),gt=E(r,`fetchAvailability`,7),_t=E(r,`submitBooking`,7),B=s(()=>({...ve,...pt()})),vt=s(()=>he(P())),yt=s(()=>fe(P())),V=g(`service`),bt=g(a([])),xt=g(!0),St=g(!1),H=g(null);l(()=>{let e=mt();if(!e)return;let t=!1;return m(xt,!0),m(St,!1),e().then(e=>{if(!t){if(!e?.length)throw Error(`empty`);m(bt,e,!0)}}).catch(()=>{t||m(St,!0)}).finally(()=>{t||m(xt,!1)}),()=>{t=!0}});let Ct=g(a([])),U=g(``),W=g(!1),wt=g(void 0),Tt=g(void 0);l(()=>{let e=ht();if(!e)return;let t=!1;return e().then(e=>{t||m(Ct,e??[],!0)}).catch(()=>{t||m(Ct,[],!0)}),()=>{t=!0}});let Et=s(()=>d(Ct).find(e=>e.id===d(U))?.name);function Dt(){m(W,!d(W))}function Ot(e){m(U,e,!0),m(W,!1)}l(()=>{if(!d(W)||!d(wt)||!d(Tt))return;let e=d(wt),t=d(Tt);t.style.minWidth=`${e.getBoundingClientRect().width}px`,t.showPopover();let n=de(e,t,async()=>{let{x:n,y:r}=await le(e,t,{strategy:`fixed`,placement:`bottom-start`,middleware:[ce(4),ue(),se({padding:12})]});t.style.left=`${n}px`,t.style.top=`${r}px`});function r(e){e.newState===`closed`&&m(W,!1)}return t.addEventListener(`toggle`,r),()=>{n(),t.removeEventListener(`toggle`,r),t.matches(`:popover-open`)&&t.hidePopover()}});let kt=e=>e.trim().toLowerCase(),At;l(()=>{let e=dt();if(!e||e===At||!d(bt).length)return;let t=d(bt).find(t=>kt(t.name)===kt(e));t&&(At=e,Mt(t))});let jt;l(()=>{if(!F()||!d(H)||F()===jt)return;jt=F();let[e,t,n]=F().split(`-`).map(Number);m(K,e,!0),m(q,t-1),m(J,new Date(e,t-1,n),!0),m(Y,ft()??null,!0)});function Mt(e){m(H,e,!0),m(J,null),m(Y,null),Rt=0,m(V,`datetime`)}let Nt,Pt=!1;l(()=>{let e=gt();if(!Pt){Pt=!0,Nt=e;return}e===Nt||ct()||(Nt=e,d(V)!==`service`&&m(V,`service`),m(H,null),m(J,null),m(Y,null),Rt=0)});let G=me(new Date),K=g(a(G.getFullYear())),q=g(a(G.getMonth())),J=g(null),Y=g(null),Ft=g(null),It=g(a(new Map)),Lt=g(!1),Rt=0,zt=ge(G);function Bt(e,t){return e.memberPrice!=null&&!!z()&&t<=z()}function Vt(e,t){return Bt(e,t)||e.price==null?{amount:e.memberPrice??0,member:!0}:{amount:e.price,member:!1}}function Ht(e){return e.price!=null||Bt(e,zt)}let Ut=s(()=>_e(d(K),d(q),G,ut()??[])),Wt=s(()=>d(K)!==G.getFullYear()||d(q)!==G.getMonth()),X=s(()=>d(J)?ge(d(J)):null),Z=s(()=>d(H)?Vt(d(H),d(X)??zt):null),Gt=s(()=>d(X)?d(It).get(d(X))??[]:[]),Kt=s(()=>ct()&&!!d(Y)&&d(X)===F()&&d(Y)===ft()),qt=s(()=>{let e={morning:[],afternoon:[],evening:[]};for(let t of d(Gt)){let n=parseInt(t.slice(0,2),10);n<12?e.morning.push(t):n<17?e.afternoon.push(t):e.evening.push(t)}return e});function Jt(e){return d(It).get(e)?.length??0}function Yt(e){let t=Jt(e);return t===0?0:t<=5?1:t<=10?2:3}function Xt(){if(d(J))return;let e=d(Ut).find(e=>e.inMonth&&!e.isPast&&Yt(e.iso)>0);e?(m(J,e.date,!0),m(Y,null)):Rt<3&&(Rt++,nn())}function Zt(){let e=gt();if(!e||!d(H))return;let t=ge(new Date(d(K),d(q),1)),n=ge(new Date(d(K),d(q)+1,0)),r=d(H).id,i=d(U)||void 0;m(Lt,!0),e(t,n,r,i).then(e=>{if(d(H)?.id!==r||(d(U)||void 0)!==i)return;let t=new Map;for(let n of e??[])t.set(String(n.date).split(`T`)[0],n.slots.map(e=>e.time));m(It,t,!0),Xt()}).catch(()=>{m(It,new Map,!0)}).finally(()=>{m(Lt,!1)})}l(()=>{d(H),d(U),d(K),d(q),z(),Zt()});let Qt=``;l(()=>{d(U)!==Qt&&(Qt=d(U),m(J,null),m(Y,null))}),l(()=>{!d(X)||d(Y)||d(Gt).length>0&&m(Y,d(Gt)[0],!0)});function $t(){d(J)&&(d(J).getFullYear()!==d(K)||d(J).getMonth()!==d(q))&&(m(J,null),m(Y,null))}function en(e){e.classList.remove(`sbw-cal-nav-pulse`),e.offsetWidth,e.classList.add(`sbw-cal-nav-pulse`),e.addEventListener(`animationend`,()=>e.classList.remove(`sbw-cal-nav-pulse`),{once:!0})}function tn(){d(Wt)&&(m(q,d(q)-1),d(q)<0&&(m(q,11),m(K,d(K)-1)),$t())}function nn(){m(q,d(q)+1),d(q)>11&&(m(q,0),m(K,d(K)+1)),$t()}function rn(e){!e.inMonth||e.isPast||Yt(e.iso)===0||(m(J,e.date,!0),m(Y,null))}function an(e){m(Y,e,!0)}function on(){d(Y)&&m(V,`details`)}function sn(){m(V,`datetime`)}function cn(){m(V,`service`)}let ln=g(``),un=g(``),dn=g(``),fn=g(``),Q=g(!1),$=g(``),pn=!1,mn=!1,hn=!1;l(()=>{I()&&!pn&&!d(ln)&&(m(ln,I(),!0),pn=!0)}),l(()=>{L()&&!mn&&!d(un)&&(m(un,L(),!0),mn=!0)}),l(()=>{R()&&!hn&&!d(dn)&&(m(dn,R(),!0),hn=!0)});function gn(e,t){r.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}async function _n(e){if(!_t()){m($,d(B).notWiredError,!0);return}m($,``),m(Q,!0);try{let t=await _t()(e);if(!t.ok)throw Error(t.error||`request failed`);m(Ft,new Date,!0),m(V,`success`),gn(`booking-submitted`,e)}catch(e){m($,e instanceof Error&&e.message!==`request failed`?e.message:d(B).genericSubmitError,!0),Zt()}finally{m(Q,!1)}}async function vn(e){e.preventDefault(),!(!d(H)||!d(X)||!d(Y))&&await _n({treatmentId:d(H).id,date:d(X),time:d(Y),therapistId:d(U)||void 0,name:d(ln),email:d(un),phone:d(dn),notes:d(fn)})}async function yn(){!d(H)||!d(X)||!d(Y)||await _n({treatmentId:d(H).id,date:d(X),time:d(Y),therapistId:d(U)||void 0,name:I()??``,email:L()??``,phone:R()??``,notes:``})}var bn={get heading(){return rt()},set heading(e=`Book a Service`){rt(e),c()},get logoUrl(){return it()},set logoUrl(e){it(e),c()},get tagline(){return at()},set tagline(e=``){at(e),c()},get description(){return ot()},set description(e=``){ot(e),c()},get staffLabel(){return st()},set staffLabel(e=``){st(e),c()},get hidePrice(){return N()},set hidePrice(e=!1){N(e),c()},get skipDetailsStep(){return ct()},set skipDetailsStep(e=!1){ct(e),c()},get emailOptional(){return lt()},set emailOptional(e=!1){lt(e),c()},get closedWeekdays(){return ut()},set closedWeekdays(e=[]){ut(e),c()},get locale(){return P()},set locale(e){P(e),c()},get initialTreatmentTitle(){return dt()},set initialTreatmentTitle(e){dt(e),c()},get initialDate(){return F()},set initialDate(e){F(e),c()},get initialTime(){return ft()},set initialTime(e){ft(e),c()},get initialName(){return I()},set initialName(e){I(e),c()},get initialEmail(){return L()},set initialEmail(e){L(e),c()},get initialPhone(){return R()},set initialPhone(e){R(e),c()},get memberUntil(){return z()},set memberUntil(e){z(e),c()},get strings(){return pt()},set strings(e){pt(e),c()},get fetchTreatments(){return mt()},set fetchTreatments(e){mt(e),c()},get fetchTherapists(){return ht()},set fetchTherapists(e){ht(e),c()},get fetchAvailability(){return gt()},set fetchAvailability(e){gt(e),c()},get submitBooking(){return _t()},set submitBooking(e){_t(e),c()}},xn=tt(),Sn=M(xn),Cn=t=>{var a=ze(),s=M(a),c=e=>{var t=Fe();o(()=>k(t,`src`,it())),p(e,t)};f(s,e=>{it()&&e(c)});var l=h(s,2);ae(l,r,`heading`,{},t=>{var r=i(),a=n(r),s=t=>{var r=Ie(),i=n(r),a=M(i,!0);x(i),e(2),o(()=>A(a,rt())),p(t,r)};f(a,e=>{rt()&&e(s)}),p(t,r)});var u=h(l,2),d=e=>{var t=Le(),n=M(t,!0);x(t),o(()=>A(n,at())),p(e,t)};f(u,e=>{at()&&e(d)});var m=h(u,2);ae(m,r,`description`,{},e=>{var t=i(),r=n(t),a=e=>{var t=Re(),n=M(t,!0);x(t),o(()=>A(n,ot())),p(e,t)};f(r,e=>{ot()&&e(a)}),p(e,t)}),x(a),p(t,a)};f(Sn,e=>{d(V)!==`success`&&e(Cn)});var wn=h(Sn,2),Tn=e=>{var t=We(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).loadingServices)),p(e,t)},c=e=>{var t=Ae(),n=M(t,!0);x(t),o(()=>A(n,d(B).loadServicesError)),p(e,t)},l=e=>{var t=Ue();j(t,21,()=>d(bt),e=>e.id,(e,t)=>{let n=s(()=>Ht(d(t)));var r=He(),i=M(r),a=M(i),c=M(a),l=h(c),u=e=>{var t=Be(),n=M(t,!0);x(t),o(()=>A(n,d(B).membersOnlyHint)),p(e,t)};f(l,e=>{d(n)||e(u)}),x(a);var m=h(a,2),g=e=>{var n=Ve(),r=M(n),i=M(r);x(r);var a=h(r,2),s=e=>{var t=Be(),n=M(t,!0);x(t),o(()=>A(n,d(B).membersOnlyLabel)),p(e,t)},c=e=>{var n=Be(),r=M(n);x(n),o(e=>A(r,`${d(B).memberRateLabel??``} £${e??``}`),[()=>d(t).memberPrice.toFixed(2)]),p(e,n)};f(a,e=>{d(t).price==null?e(s):d(t).memberPrice!=null&&e(c,1)}),x(n),o(e=>A(i,`£${e??``}`),[()=>(d(t).price??d(t).memberPrice??0).toFixed(2)]),p(e,n)};f(m,e=>{N()||e(g)}),x(i),x(r),o(()=>{i.disabled=!d(n),A(c,`${d(t).name??``} `)}),T(`click`,i,()=>Mt(d(t))),p(e,r)}),x(t),p(e,t)};f(i,e=>{d(xt)?e(a):d(St)?e(c,1):e(l,-1)}),x(t),o(()=>A(r,d(B).chooseServiceLabel)),p(e,t)},En=e=>{var t=Qe(),r=M(t),a=M(r),c=M(a),l=M(c),u=M(l);x(l);var g=h(l,2),_=e=>{var t=Ke(),n=M(t),r=M(n,!0);x(n);var i=h(n,2),a=M(i),s=M(a,!0);x(a);var c=h(a,2);let l;x(i),te(i,e=>m(wt,e),()=>d(wt));var u=h(i,2),f=M(u),g=M(f),_=M(g,!0);x(g),x(f);var v=h(f,2);j(v,17,()=>d(Ct),e=>e.id,(e,t)=>{var n=Ge(),r=M(n),i=M(r,!0);x(r),x(n),o(()=>{k(r,`aria-selected`,d(t).id===d(U)),A(i,d(t).name)}),T(`click`,r,()=>Ot(d(t).id)),p(e,n)}),x(u),te(u,e=>m(Tt,e),()=>d(Tt)),x(t),o(()=>{A(r,d(B).therapistFilterLabel),k(i,`aria-expanded`,d(W)),A(s,d(Et)??d(B).anyTherapistLabel),l=S(c,0,`sbw-chevron svelte-1dxdgqu`,null,l,{"sbw-chevron-open":d(W)}),k(u,`aria-label`,d(B).therapistFilterLabel),k(g,`aria-selected`,!d(U)),A(_,d(B).anyTherapistLabel)}),T(`click`,i,Dt),T(`click`,g,()=>Ot(``)),p(e,t)};f(g,e=>{d(Ct).length&&e(_)});var v=h(g,2),y=M(v),b=h(y,2);x(v),x(c);var C=h(c,2);j(C,20,()=>d(yt),e=>e,(e,t)=>{var n=xe(),r=M(n,!0);x(n),o(()=>A(r,t)),p(e,n)}),x(C);var w=h(C,2);j(w,21,()=>d(Ut),e=>e.iso,(e,t)=>{let n=s(()=>Yt(d(t).iso)),r=s(()=>d(t).inMonth&&!d(t).isPast&&d(n)>0);var i=Je();let a;var c=M(i),l=M(c,!0);x(c);var u=h(c,2),m=e=>{var t=qe();o(()=>S(t,1,`sbw-dot sbw-dot-${d(n)??``}`,`svelte-1dxdgqu`)),p(e,t)};f(u,e=>{d(r)&&e(m)}),x(i),o(()=>{a=S(i,1,`sbw-cal-cell svelte-1dxdgqu`,null,a,{"sbw-cal-cell-off":!d(t).inMonth||d(t).isPast,"sbw-cal-cell-selected":d(X)===d(t).iso}),i.disabled=!d(r),A(l,d(t).dayNumber)}),T(`click`,i,()=>rn(d(t))),p(e,i)}),x(w),x(a);var E=h(a,2),ee=M(E),D=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).pickDayHint)),p(e,t)},O=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).loadingServices)),p(e,t)},ie=e=>{var t=ke(),n=M(t,!0);x(t),o(()=>A(n,d(B).noSlotsForDay)),p(e,t)},ae=e=>{var t=Ze();j(t,21,()=>[[`morning`,d(B).morningLabel],[`afternoon`,d(B).afternoonLabel],[`evening`,d(B).eveningLabel]],([e,t])=>e,(e,t)=>{var r=s(()=>ne(d(t),2));let a=()=>d(r)[0],c=()=>d(r)[1],l=s(()=>d(qt)[a()]);var u=i(),m=n(u),g=e=>{var t=Xe(),n=M(t),r=M(n);x(n);var i=h(n,2);j(i,20,()=>d(l),e=>e,(e,t)=>{var n=Ye();let r;var i=M(n,!0);x(n),o(()=>{r=S(n,1,`sbw-slot-btn svelte-1dxdgqu`,null,r,{"sbw-slot-btn-selected":d(Y)===t}),A(i,t)}),T(`click`,n,()=>an(t)),p(e,n)}),x(i),x(t),o(()=>A(r,`${c()??``} (${d(l).length??``})`)),p(e,t)};f(m,e=>{d(l).length&&e(g)}),p(e,u)}),x(t),p(e,t)};f(ee,e=>{d(X)?d(Lt)?e(O,1):d(Gt).length?e(ae,-1):e(ie,2):e(D)}),x(E),x(r);var oe=h(r,2);re(oe,()=>!0),x(t),o(()=>{A(u,`${d(vt)[d(q)]??``} ${d(K)??``}`),y.disabled=!d(Wt),k(y,`aria-label`,d(B).previousMonth),k(b,`aria-label`,d(B).nextMonth),k(w,`aria-busy`,d(Lt))}),T(`click`,y,e=>{en(e.currentTarget),tn()}),T(`click`,b,e=>{en(e.currentTarget),nn()}),p(e,t)},Dn=e=>{var t=$e(),n=M(t),r=M(n),i=M(r),a=M(i),s=M(a,!0);x(a);var c=h(a,2);D(c),x(i);var l=h(i,2),f=M(l),g=M(f,!0);x(f);var _=h(f,2);D(_),x(l);var y=h(l,2),b=M(y),S=M(b,!0);x(b);var C=h(b,2);D(C),x(y),x(r);var T=h(r,2),E=M(T),ee=M(E,!0);x(E);var O=h(E,2);v(O),x(T),x(n);var te=h(n,2);re(te,()=>!1),x(t),o(()=>{A(s,d(B).nameLabel),k(c,`placeholder`,d(B).namePlaceholder),A(g,lt()?`${d(B).emailLabel} (optional)`:d(B).emailLabel),_.required=!lt(),k(_,`title`,d(B).emailInvalidTitle),k(_,`placeholder`,d(B).emailPlaceholder),A(S,d(B).phoneLabel),k(C,`placeholder`,d(B).phonePlaceholder),A(ee,d(B).notesLabel),k(O,`placeholder`,d(B).notesPlaceholder)}),u(`submit`,t,vn),w(c,()=>d(ln),e=>m(ln,e)),w(_,()=>d(un),e=>m(un,e)),w(C,()=>d(dn),e=>m(dn,e)),w(O,()=>d(fn),e=>m(fn,e)),p(e,t)},On=e=>{var t=et(),n=h(M(t),2),r=M(n,!0);x(n);var i=h(n,2);re(i,()=>!1,()=>!0),x(t),o(()=>A(r,d(B).successMessage)),p(e,t)};return f(wn,e=>{d(V)===`service`?e(Tn):d(V)===`datetime`&&d(H)?e(En,1):d(V)===`details`&&d(H)?e(Dn,2):d(V)===`success`&&e(On,3)}),x(xn),p(t,xn),_(bn)}t([`click`]),customElements.define(`spa-booking-widget`,re(rt,{heading:{attribute:`heading`,type:`String`},logoUrl:{attribute:`logo-url`,type:`String`},tagline:{attribute:`tagline`,type:`String`},description:{attribute:`description`,type:`String`},staffLabel:{attribute:`staff-label`,type:`String`},hidePrice:{attribute:`hide-price`,type:`Boolean`},skipDetailsStep:{attribute:`skip-details-step`,type:`Boolean`},emailOptional:{attribute:`email-optional`,type:`Boolean`},closedWeekdays:{attribute:`closed-weekdays`,type:`Array`},initialTreatmentTitle:{attribute:`initial-treatment-title`,type:`String`},initialDate:{attribute:`initial-date`,type:`String`},initialTime:{attribute:`initial-time`,type:`String`},initialName:{attribute:`initial-name`,type:`String`},initialEmail:{attribute:`initial-email`,type:`String`},initialPhone:{attribute:`initial-phone`,type:`String`},memberUntil:{attribute:`member-until`,type:`String`},locale:{attribute:`locale`,type:`String`},strings:{type:`Object`},fetchTreatments:{type:`Object`},fetchTherapists:{type:`Object`},fetchAvailability:{type:`Object`},submitBooking:{type:`Object`}},[`heading`,`description`],[],{mode:`open`}));
@@ -0,0 +1,31 @@
1
+ import{A as e,B as t,D as n,E as r,G as i,H as a,I as o,J as s,K as c,L as l,N as u,O as d,S as f,T as p,U as m,V as h,W as g,X as _,Z as v,d as ee,et as y,f as b,h as te,j as x,n as S,r as ne,s as C,t as w,w as T,y as E,z as D}from"./chunks/client-BDk8LqGN.js";import{i as re,o as ie,r as ae,s as oe,t as se}from"./chunks/calendar-B8eNjUm2.js";var ce=d(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-linecap="round" class="ss-spin svelte-xf8i9m"><circle cx="12" cy="12" r="9" stroke="rgba(255,255,255,0.15)" stroke-width="2.5"></circle><path d="M12 3a9 9 0 0 1 9 9" stroke="white" stroke-width="2.5"></path></svg>`),le=d(`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="4,13 10,18 20,6"></polyline></svg>`),ue=n(`<span class="svelte-xf8i9m"> </span>`),de=n(`<button type="button"> </button>`),fe=n(`<span class="ss-day ss-day-empty svelte-xf8i9m"></span>`),pe=n(`<div class="ss-cal-month"><div class="ss-cal-title svelte-xf8i9m"> </div> <div class="ss-cal-weekdays svelte-xf8i9m"></div> <div class="ss-cal-grid svelte-xf8i9m"></div></div>`),me=n(`<div class="ss-cal svelte-xf8i9m" role="dialog" aria-label="Choose check-in and check-out dates"><button type="button" class="ss-cal-nav ss-cal-prev svelte-xf8i9m" aria-label="Previous month">‹</button> <button type="button" class="ss-cal-nav ss-cal-next svelte-xf8i9m" aria-label="Next month">›</button> <div class="ss-cal-months svelte-xf8i9m"></div></div>`),he=n(`<p class="ss-error svelte-xf8i9m">Unable to load availability. Please try again.</p>`),ge=n(`<p class="ss-none svelte-xf8i9m">No availability for those dates. Try adjusting your stay.</p>`),_e=n(`<a class="ss-card svelte-xf8i9m"><div class="ss-card-img svelte-xf8i9m"><img loading="lazy" class="svelte-xf8i9m"/></div> <div class="ss-card-body svelte-xf8i9m"><div class="ss-card-info svelte-xf8i9m"><div class="ss-card-name svelte-xf8i9m"> </div> <div class="ss-card-desc svelte-xf8i9m"> </div></div> <div><div class="ss-card-rate svelte-xf8i9m"> </div> <div class="ss-card-rate-sub svelte-xf8i9m"> </div></div></div></a>`),ve=n(`<div class="ss-header svelte-xf8i9m"> </div> <div class="ss-grid svelte-xf8i9m"></div>`,1),ye=n(`<div class="ss-wrap svelte-xf8i9m"><div><button type="button" class="ss-field ss-field-first svelte-xf8i9m"><span class="ss-label svelte-xf8i9m">Check in</span> <span> </span></button> <button type="button" class="ss-field svelte-xf8i9m"><span class="ss-label svelte-xf8i9m">Check out</span> <span> </span></button></div> <div><!></div> <!> <div aria-live="polite"><!></div></div>`),be={hash:`svelte-xf8i9m`,code:`:host {display:block;}.ss-wrap.svelte-xf8i9m {position:relative;width:100%;}
2
+
3
+ /* ── Date bar ── */.ss-bar.svelte-xf8i9m {display:flex;width:100%;align-items:stretch;overflow:hidden;border:1px solid rgba(255, 255, 255, 0.14);background:rgba(255, 255, 255, 0.07);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);transition:opacity 0.2s;}.ss-loading.svelte-xf8i9m {opacity:0.6;pointer-events:none;}.ss-field.svelte-xf8i9m {display:flex;flex:1;cursor:pointer;flex-direction:column;gap:0.25rem;border:none;background:transparent;padding:1.25rem 1.75rem;text-align:left;font-family:'Inter', sans-serif;transition:background-color 150ms;}.ss-field.svelte-xf8i9m:hover {background:rgba(255, 255, 255, 0.04);}.ss-field-first.svelte-xf8i9m {border-right:1px solid rgba(255, 255, 255, 0.08);}.ss-label.svelte-xf8i9m {font-size:11px;font-weight:600;letter-spacing:1.5px;text-transform:uppercase;color:rgba(240, 238, 255, 0.35);}.ss-value.svelte-xf8i9m {font-size:15px;font-weight:500;color:rgba(240, 238, 255, 0.4);}.ss-value-set.svelte-xf8i9m {color:#f0eeff;}
4
+
5
+ /* ── Status spinner / tick ── */.ss-status.svelte-xf8i9m {pointer-events:none;position:absolute;top:0;right:0;bottom:0;display:flex;width:50%;align-items:center;justify-content:flex-end;padding-right:1.75rem;opacity:0;transition:opacity 0.3s;}.ss-status-on.svelte-xf8i9m {opacity:1;}.ss-spin.svelte-xf8i9m {
6
+ animation: svelte-xf8i9m-ss-spin 0.7s linear infinite;}
7
+ @keyframes svelte-xf8i9m-ss-spin {
8
+ to {
9
+ transform: rotate(360deg);
10
+ }
11
+ }
12
+
13
+ /* ── Calendar (glass, matches the hero flatpickr theme) ── */.ss-cal.svelte-xf8i9m {position:absolute;top:calc(100% + 12px);left:50%;transform:translateX(-50%);z-index:9500;border:1px solid rgba(255, 255, 255, 0.12);border-radius:16px;background:rgba(10, 8, 24, 0.25);backdrop-filter:blur(40px);-webkit-backdrop-filter:blur(40px);box-shadow:0 16px 48px rgba(0, 0, 0, 0.4);padding:16px;font-family:'Inter', sans-serif;}.ss-cal-months.svelte-xf8i9m {display:flex;gap:24px;}.ss-cal-title.svelte-xf8i9m {margin-bottom:8px;text-align:center;font-size:14px;font-weight:600;color:#f0eeff;}.ss-cal-nav.svelte-xf8i9m {position:absolute;top:14px;z-index:1;cursor:pointer;border:none;background:none;padding:2px 8px;font-size:20px;line-height:1;color:rgba(240, 238, 255, 0.5);}.ss-cal-nav.svelte-xf8i9m:hover {color:#f0eeff;}.ss-cal-prev.svelte-xf8i9m {left:10px;}.ss-cal-next.svelte-xf8i9m {right:10px;}.ss-cal-weekdays.svelte-xf8i9m {display:grid;grid-template-columns:repeat(7, 1fr);margin-bottom:4px;}.ss-cal-weekdays.svelte-xf8i9m span:where(.svelte-xf8i9m) {width:38px;text-align:center;font-size:11px;font-weight:600;color:rgba(240, 238, 255, 0.4);}.ss-cal-grid.svelte-xf8i9m {display:grid;grid-template-columns:repeat(7, 1fr);}.ss-day.svelte-xf8i9m {height:38px;width:38px;cursor:pointer;border:1px solid transparent;border-radius:8px;background:none;font-family:inherit;font-size:13px;color:#f0eeff;}.ss-day.svelte-xf8i9m:hover:not(:disabled):not(.ss-day-empty) {background:rgba(255, 255, 255, 0.1);}.ss-day-today.svelte-xf8i9m {border-color:rgba(0, 245, 212, 0.5);}.ss-day-inrange.svelte-xf8i9m {background:rgba(0, 245, 212, 0.12);color:rgb(0, 245, 212);}.ss-day-edge.svelte-xf8i9m,
14
+ .ss-day-edge.svelte-xf8i9m:hover:not(:disabled) {background:rgb(0, 245, 212);border-color:rgb(0, 245, 212);color:#05040f;font-weight:600;}.ss-day-past.svelte-xf8i9m,
15
+ .ss-day.svelte-xf8i9m:disabled {color:rgba(240, 238, 255, 0.2);cursor:default;}.ss-day-empty.svelte-xf8i9m {cursor:default;}
16
+
17
+ /* ── Results dropdown ── */.ss-results.svelte-xf8i9m {position:absolute;top:calc(100% + 12px);left:50%;transform:translateX(-50%) translateY(-8px);width:min(760px, calc(100vw - 32px));max-width:calc(100vw - 32px);background:rgba(255, 255, 255, 0.07);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);border:1px solid rgba(255, 255, 255, 0.14);padding:20px;z-index:9000;opacity:0;pointer-events:none;transition:opacity 0.22s ease,
18
+ transform 0.22s ease;box-shadow:0 24px 64px rgba(0, 0, 0, 0.2);font-family:'Inter', sans-serif;}.ss-open.svelte-xf8i9m {opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto;}.ss-header.svelte-xf8i9m {font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:1.5px;color:rgba(240, 238, 255, 0.35);margin-bottom:12px;padding:0 4px;
19
+ animation: svelte-xf8i9m-ss-row-in 0.25s ease both;}.ss-grid.svelte-xf8i9m {display:flex;flex-direction:column;gap:8px;}
20
+ @keyframes svelte-xf8i9m-ss-row-in {
21
+ from {
22
+ opacity: 0;
23
+ transform: translateY(10px);
24
+ }
25
+ to {
26
+ opacity: 1;
27
+ transform: translateY(0);
28
+ }
29
+ }.ss-card.svelte-xf8i9m {
30
+ animation: svelte-xf8i9m-ss-row-in 0.3s ease both;height:90px;border:1px solid rgba(255, 255, 255, 0.08);overflow:hidden;text-decoration:none;display:flex;align-items:stretch;transition:border-color 0.2s,
31
+ background 0.2s;background:rgba(255, 255, 255, 0.05);}.ss-card.svelte-xf8i9m:hover {border-color:rgba(0, 245, 212, 0.35);background:rgba(255, 255, 255, 0.1);}.ss-card-img.svelte-xf8i9m {width:120px;flex-shrink:0;overflow:hidden;}.ss-card-img.svelte-xf8i9m img:where(.svelte-xf8i9m) {width:100%;height:100%;object-fit:cover;object-position:center;display:block;transition:transform 0.4s ease;}.ss-card.svelte-xf8i9m:hover .ss-card-img:where(.svelte-xf8i9m) img:where(.svelte-xf8i9m) {transform:scale(1.05);}.ss-card-body.svelte-xf8i9m {flex:1;padding:0 20px;display:flex;align-items:center;gap:20px;}.ss-card-info.svelte-xf8i9m {flex:1;}.ss-card-name.svelte-xf8i9m {font-family:'Syne', sans-serif;font-weight:800;font-size:15px;color:#f0eeff;margin-bottom:3px;letter-spacing:-0.3px;}.ss-card-desc.svelte-xf8i9m {font-size:12px;color:rgba(240, 238, 255, 0.4);line-height:1.4;}.ss-card-rate.svelte-xf8i9m {font-size:18px;font-weight:700;color:#f0eeff;letter-spacing:-0.5px;text-align:right;}.ss-card-rate-sub.svelte-xf8i9m {font-size:11px;color:rgba(240, 238, 255, 0.4);margin-top:2px;text-align:right;}.ss-error.svelte-xf8i9m {font-size:13px;color:rgba(247, 37, 133, 0.8);text-align:center;padding:16px;margin:0;}.ss-none.svelte-xf8i9m {font-size:13px;color:rgba(240, 238, 255, 0.4);text-align:center;padding:16px;margin:0;}`};function O(e,n){v(n,!0),te(e,be);let d=S(n,`rooms`,23,()=>[]),w=S(n,`checkIn`,7,``),O=S(n,`checkOut`,7,``),k=S(n,`guests`,7,2),A=S(n,`currency`,7,`USD`),j=S(n,`appendDatesToHref`,7,!0),M=S(n,`searchStays`,7,void 0);function xe(e,t){n.$$host?.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}let N=e=>e?new Date(`${e}T00:00:00`).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`}):``,P=g(!1),F=ie(new Date),I=g(a(F.getFullYear())),L=g(a(F.getMonth())),Se=ae(),Ce=re(),we=g(!0),Te=s(()=>({y:u(I),m:u(L),cells:se(u(I),u(L),F,[])})),Ee=s(()=>{let e=u(L)===11?0:u(L)+1,t=u(L)===11?u(I)+1:u(I);return{y:t,m:e,cells:se(t,e,F,[])}}),R=g(void 0);function De(){let e=w()?new Date(`${w()}T00:00:00`):F;m(I,e.getFullYear(),!0),m(L,e.getMonth(),!0),m(we,typeof window<`u`?window.innerWidth>=768:!0,!0),m(P,!0)}function Oe(){u(L)===0?(m(L,11),i(I,-1)):i(L,-1)}function ke(){u(L)===11?(m(L,0),i(I)):i(L)}function Ae(e){!w()||w()&&O()?(w(e),O(``)):e>=w()?(O(e),m(P,!1),je()):(w(e),O(``)),xe(`dates-change`,{checkIn:w(),checkOut:O()})}let z=g(!1),B=g(!1),V=g(!1),H=g(a([])),U=g(`idle`),W=g(0),G=null;async function je(){if(!(!w()||!O()||!M())){m(W,Math.round((new Date(O()).getTime()-new Date(w()).getTime())/864e5),!0),m(z,!0),m(B,!1),G&&clearTimeout(G),m(V,!1),m(H,[],!0);try{let e=await M()(w(),O(),k()),t=new Map(d().map(e=>[e.roomTypeId,e])),n=(Array.isArray(e)?e:[]).map(e=>({res:e,room:t.get(e.room_type_id)})).filter(e=>!!e.room);n.length===0?m(U,`none`):(m(H,n.map(({res:e,room:t})=>{let n=t.href??`#`;return j()&&t.href&&(n=`${t.href}${t.href.includes(`?`)?`&`:`?`}check_in=${w()}&check_out=${O()}`),{name:t.name,description:t.description??e.description??``,image:t.image,href:n,total:(parseFloat(String(e.from_rate??0))*u(W)).toLocaleString(`en-US`,{minimumFractionDigits:0})}}),!0),m(U,`ok`),m(B,!0),G=setTimeout(()=>m(B,!1),1800)),m(V,!0),xe(`search-results`,{checkIn:w(),checkOut:O(),guests:k(),count:u(H).length})}catch{m(U,`error`),m(V,!0)}finally{m(z,!1)}}}l(()=>{if(typeof document>`u`||!u(P)&&!u(V))return;let e=e=>{u(R)&&!e.composedPath().includes(u(R))&&(m(P,!1),m(V,!1))},t=e=>{e.key===`Escape`&&(m(P,!1),m(V,!1))};return document.addEventListener(`click`,e,!0),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`click`,e,!0),document.removeEventListener(`keydown`,t)}});let Me=e=>w()&&O()&&e>w()&&e<O();var Ne={get rooms(){return d()},set rooms(e=[]){d(e),c()},get checkIn(){return w()},set checkIn(e=``){w(e),c()},get checkOut(){return O()},set checkOut(e=``){O(e),c()},get guests(){return k()},set guests(e=2){k(e),c()},get currency(){return A()},set currency(e=`USD`){A(e),c()},get appendDatesToHref(){return j()},set appendDatesToHref(e=!0){j(e),c()},get searchStays(){return M()},set searchStays(e=void 0){M(e),c()}},K=ye(),q=D(K);let Pe;var J=D(q),Y=h(D(J),2);let Fe;var Ie=D(Y,!0);y(Y),y(J);var X=h(J,2),Z=h(D(X),2);let Le;var Re=D(Z,!0);y(Z),y(X),y(q);var Q=h(q,2);let ze;var Be=D(Q),Ve=e=>{var t=ce();p(e,t)},He=e=>{var t=le();p(e,t)};f(Be,e=>{u(z)?e(Ve):u(B)&&e(He,1)}),y(Q);var Ue=h(Q,2),We=e=>{var n=me(),i=D(n),a=h(i,2),s=h(a,2);E(s,21,()=>u(we)?[u(Te),u(Ee)]:[u(Te)],e=>e.y*12+e.m,(e,n)=>{var i=pe(),a=D(i),s=D(a);y(a);var c=h(a,2);E(c,20,()=>Ce,e=>e,(e,t)=>{var n=ue(),r=D(n,!0);y(n),o(()=>T(r,t)),p(e,n)}),y(c);var l=h(c,2);E(l,21,()=>u(n).cells,e=>e.iso,(e,n)=>{var i=r(),a=t(i),s=e=>{var t=de();let r;var i=D(t,!0);y(t),o(e=>{r=b(t,1,`ss-day svelte-xf8i9m`,null,r,e),t.disabled=u(n).isPast,T(i,u(n).dayNumber)},[()=>({"ss-day-past":u(n).isPast,"ss-day-today":u(n).iso===oe(F),"ss-day-edge":u(n).iso===w()||u(n).iso===O(),"ss-day-inrange":Me(u(n).iso)})]),x(`click`,t,()=>Ae(u(n).iso)),p(e,t)},c=e=>{var t=fe();p(e,t)};f(a,e=>{u(n).inMonth?e(s):e(c,-1)}),p(e,i)}),y(l),y(i),o(()=>T(s,`${Se[u(n).m]??``} ${u(n).y??``}`)),p(e,i)}),y(s),y(n),x(`click`,i,Oe),x(`click`,a,ke),p(e,n)};f(Ue,e=>{u(P)&&e(We)});var $=h(Ue,2);let Ge;var Ke=D($),qe=e=>{var t=he();p(e,t)},Je=e=>{var t=ge();p(e,t)},Ye=e=>{var n=ve(),r=t(n),i=D(r);y(r);var a=h(r,2);E(a,23,()=>u(H),e=>e.name,(e,t,n)=>{var r=_e(),i=D(r),a=D(i);y(i);var s=h(i,2),c=D(s),l=D(c),d=D(l,!0);y(l);var f=h(l,2),m=D(f,!0);y(f),y(c);var g=h(c,2),_=D(g),v=D(_);y(_);var b=h(_,2),te=D(b);y(b),y(g),y(s),y(r),o(()=>{C(r,`href`,u(t).href),ee(r,`animation-delay:${u(n)*80}ms`),C(a,`src`,u(t).image),C(a,`alt`,u(t).name),T(d,u(t).name),T(m,u(t).description),T(v,`$${u(t).total??``}`),T(te,`total · ${u(W)??``} night${u(W)===1?``:`s`} · ${A()??``}`)}),p(e,r)}),y(a),o(()=>T(i,`Available for ${u(W)??``} night${u(W)===1?``:`s`}`)),p(e,n)};return f(Ke,e=>{u(U)===`error`?e(qe):u(U)===`none`?e(Je,1):u(U)===`ok`&&e(Ye,2)}),y($),y(K),ne(K,e=>m(R,e),()=>u(R)),o((e,t)=>{Pe=b(q,1,`ss-bar svelte-xf8i9m`,null,Pe,{"ss-loading":u(z)}),Fe=b(Y,1,`ss-value svelte-xf8i9m`,null,Fe,{"ss-value-set":!!w()}),T(Ie,e),Le=b(Z,1,`ss-value svelte-xf8i9m`,null,Le,{"ss-value-set":!!O()}),T(Re,t),ze=b(Q,1,`ss-status svelte-xf8i9m`,null,ze,{"ss-status-on":u(z)||u(B)}),Ge=b($,1,`ss-results svelte-xf8i9m`,null,Ge,{"ss-open":u(V)})},[()=>w()?N(w()):`Add date`,()=>O()?N(O()):`Add date`]),x(`click`,J,De),x(`click`,X,De),p(e,K),_(Ne)}e([`click`]),customElements.define(`stay-search`,w(O,{rooms:{attribute:`rooms`,type:`Object`},checkIn:{attribute:`check-in`,type:`String`},checkOut:{attribute:`check-out`,type:`String`},guests:{attribute:`guests`,type:`Number`},currency:{attribute:`currency`,type:`String`},appendDatesToHref:{attribute:`append-dates-to-href`,type:`Boolean`},searchStays:{}},[],[],{mode:`open`}));