@code-collective/booking-widget 1.0.14 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,7 +9,7 @@ Drop in a script tag and use the custom elements directly. No framework or npm i
9
9
  ```html
10
10
  <head>
11
11
  <link rel="stylesheet"
12
- href="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.12/dist/booking-widget.min.css"
12
+ href="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.14/dist/booking-widget.min.css"
13
13
  integrity="sha384-LDthHLROtZeufKbWmAhXBsAFLqqhkZjWFd8gWU+Ez11qyg5ebj9vpFnvJuZcM3ft"
14
14
  crossorigin="anonymous" />
15
15
  </head>
@@ -20,8 +20,8 @@ Drop in a script tag and use the custom elements directly. No framework or npm i
20
20
  <bw-checkout></bw-checkout>
21
21
 
22
22
  <script
23
- src="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.12/dist/booking-widget.min.js"
24
- integrity="sha384-nkQuTziRverWyDu3eR0AaBqefk10pn3x+o3IsjuNvdkkabowNQISYgXijIi8t0El"
23
+ src="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.14/dist/booking-widget.min.js"
24
+ integrity="sha384-LaWu33HT9CR5/74awGqZSRCWzmaik6Ko5Lt5TYkNU+dvAoDIBTTaQ9mgtXn6r0dA"
25
25
  crossorigin="anonymous"></script>
26
26
  </body>
27
27
  ```
@@ -76,8 +76,8 @@ Set `window.bwOptions` before the widget script loads:
76
76
  editPages: '',
77
77
  };
78
78
  </script>
79
- <script src="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.12/dist/booking-widget.min.js"
80
- integrity="sha384-nkQuTziRverWyDu3eR0AaBqefk10pn3x+o3IsjuNvdkkabowNQISYgXijIi8t0El"
79
+ <script src="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.14/dist/booking-widget.min.js"
80
+ integrity="sha384-LaWu33HT9CR5/74awGqZSRCWzmaik6Ko5Lt5TYkNU+dvAoDIBTTaQ9mgtXn6r0dA"
81
81
  crossorigin="anonymous"></script>
82
82
  ```
83
83
 
@@ -111,7 +111,7 @@ window.addEventListener('bw:order-confirmed', (e) => {
111
111
 
112
112
  ### Payment outcomes
113
113
 
114
- Peach's own charge and this gateway's confirmation of it are two separate steps - the charge succeeds immediately, but confirmation depends on a webhook that can lag by a few seconds. The checkout modal reflects that as distinct result screens, and stays open until the shopper dismisses it themselves (Done/Close) rather than closing automatically:
114
+ Peach's own charge and this gateway's confirmation of it are two separate steps - the charge succeeds immediately, but confirmation depends on a webhook that can lag by a few seconds. Confirmation is entirely server-driven: the widget never confirms a cart itself, it only polls the checkout API's status endpoint and renders whatever it reports. Three things resolve the status server-side: Peach's webhook for the normal case, a server-side sweep as a backstop if the webhook never arrives, and a direct Peach status check for a declined card, since Peach sends no webhook for those. A shopper who closes the tab mid-payment is still resolved correctly either way - nothing depends on their browser staying open. The checkout modal reflects the outcome as distinct result screens, and stays open until the shopper dismisses it themselves (Done/Close) rather than closing automatically:
115
115
 
116
116
  | Outcome | Shown when | Shopper can retry payment? |
117
117
  |---|---|---|
@@ -357,12 +357,12 @@ const product = await getProduct(Astro.params.slug);
357
357
  <bw-checkout checkout-key={product.checkoutKey}></bw-checkout>
358
358
 
359
359
  <link rel="stylesheet"
360
- href="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.12/dist/booking-widget.min.css"
360
+ href="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.14/dist/booking-widget.min.css"
361
361
  integrity="sha384-LDthHLROtZeufKbWmAhXBsAFLqqhkZjWFd8gWU+Ez11qyg5ebj9vpFnvJuZcM3ft"
362
362
  crossorigin="anonymous" />
363
363
  <script is:inline
364
- src="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.12/dist/booking-widget.min.js"
365
- integrity="sha384-nkQuTziRverWyDu3eR0AaBqefk10pn3x+o3IsjuNvdkkabowNQISYgXijIi8t0El"
364
+ src="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.14/dist/booking-widget.min.js"
365
+ integrity="sha384-LaWu33HT9CR5/74awGqZSRCWzmaik6Ko5Lt5TYkNU+dvAoDIBTTaQ9mgtXn6r0dA"
366
366
  crossorigin="anonymous"></script>
367
367
  ```
368
368
 
@@ -1,2 +1,2 @@
1
- :root{--bw-color-primary:var(--header-background,#e30613);--bw-color-primary-dark:var(--footer-background,#c00510);--bw-color-primary-light:#e3061314;--bw-color-text:#212121;--bw-color-text-secondary:#757575;--bw-color-border:#e0e0e0;--bw-color-bg:#fff;--bw-color-surface:#f5f5f5;--bw-color-success:#4caf50;--bw-color-error:var(--header-background,#e30613);--bw-font-family:var(--default-font-family,"Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--bw-radius-sm:4px;--bw-radius-md:var(--radius,8px);--bw-radius-lg:12px;--bw-radius-pill:9999px;--bw-transition:.15s ease;--bw-shadow-1:0 1px 3px #0000001a, 0 1px 2px #0000000f;--bw-shadow-2:0 4px 12px #00000014, 0 2px 4px #0000000a;--bw-shadow-3:0 10px 24px #0000001a, 0 4px 8px #0000000a}.bw-widget,.bw-widget *{box-sizing:border-box;margin:0;padding:0}.bw-widget{font-family:var(--bw-font-family);color:var(--bw-color-text);background:var(--bw-color-bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}.bw-widget button,button.bw-widget{cursor:pointer;font-family:inherit}.bw-widget :is(input,select,textarea),:is(input,select,textarea).bw-widget{font-family:inherit}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:3px solid var(--bw-color-border);border-top-color:var(--bw-color-primary);border-radius:50%;width:36px;height:36px;animation:.7s linear infinite spin}.loading-center{flex:1;justify-content:center;align-items:center;min-height:120px;display:flex}.page-header{border-bottom:1px solid var(--bw-color-border);background:var(--bw-color-bg);align-items:center;gap:8px;padding:12px 16px;display:flex}.page-header h2{letter-spacing:-.01em;font-size:18px;font-weight:700}.page-header .spacer{flex:1}.icon-btn{border-radius:var(--bw-radius-pill);width:36px;height:36px;color:var(--bw-color-text);transition:background var(--bw-transition);background:0 0;border:none;justify-content:center;align-items:center;font-size:20px;display:flex}.icon-btn:hover{background:var(--bw-color-surface)}.card{background:var(--bw-color-bg);border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);transition:border-color var(--bw-transition);padding:16px}.card-selectable{cursor:pointer;text-align:left}.card-selectable:hover{border-color:var(--bw-color-text)}.card-selected{border-color:var(--bw-color-text);border-width:2px}.action-bar{border-top:1px solid var(--bw-color-border);background:var(--bw-color-bg);z-index:10;flex-shrink:0;gap:10px;padding:12px 16px;display:flex;position:sticky;bottom:0}.action-bar .btn-secondary{border:1px solid var(--bw-color-border);background:var(--bw-color-bg);height:48px;padding:0 20px}.action-bar .btn-primary{flex:1;height:48px;font-size:16px;font-weight:700}.btn{border-radius:var(--bw-radius-md);transition:background var(--bw-transition), box-shadow var(--bw-transition), opacity var(--bw-transition);border:none;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:600;display:inline-flex}.btn:disabled{opacity:.45;cursor:default;pointer-events:none}.btn-primary{background:var(--bw-color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--bw-color-primary-dark);box-shadow:var(--bw-shadow-1)}.btn-secondary{background:var(--bw-color-bg);color:var(--bw-color-text)}.btn-secondary:hover:not(:disabled){background:var(--bw-color-border)}.btn-outline{border:1px solid var(--bw-color-primary);color:var(--bw-color-primary);background:0 0}.btn-outline:hover:not(:disabled){background:var(--bw-color-primary-light)}.btn-split{justify-content:space-between;padding:0 20px}.input{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-md);width:100%;transition:border-color var(--bw-transition), box-shadow var(--bw-transition);outline:none;padding:10px 12px;font-size:14px}.input:focus{border-color:var(--bw-color-primary);box-shadow:0 0 0 3px var(--bw-color-primary-light)}.input-error{border-color:var(--bw-color-error);background:#fef2f2}.input-error:focus{box-shadow:0 0 0 3px #e306131f}.section-title{color:var(--bw-color-text-secondary);margin-bottom:12px;font-size:14px;font-weight:400}.prompt-card.svelte-udumw1{background:var(--bw-color-bg);border-radius:var(--bw-radius-lg);width:100%;max-width:360px;box-shadow:var(--bw-shadow-3);text-align:center;padding:28px 24px}h3.svelte-udumw1{margin-bottom:10px;font-size:18px;font-weight:700}p.svelte-udumw1{color:var(--bw-color-text-secondary);margin-bottom:20px;font-size:14px;line-height:1.5}.remaining.svelte-udumw1{color:var(--bw-color-text);font-variant-numeric:tabular-nums}.btn.svelte-udumw1{width:100%}.expired.svelte-bznxud{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;padding:40px 24px;display:flex}.icon.svelte-bznxud{border:2px solid var(--bw-color-border);width:64px;height:64px;color:var(--bw-color-text-secondary);border-radius:50%;justify-content:center;align-items:center;margin-bottom:20px;font-size:32px;display:flex}h2.svelte-bznxud{margin-bottom:8px;font-size:20px;font-weight:700}.desc.svelte-bznxud{color:var(--bw-color-text-secondary);max-width:300px;margin-bottom:28px;font-size:14px;line-height:1.5}.guard-overlay.svelte-x4iaex{z-index:20000;background:#00000073;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.guard-card.svelte-x4iaex{background:var(--bw-color-bg);border-radius:var(--bw-radius-lg);width:100%;max-width:360px;box-shadow:var(--bw-shadow-3);overflow:hidden}.layout.svelte-idp8p9{align-items:center;gap:12px;display:flex}.text.svelte-idp8p9{flex:1}.heading.svelte-idp8p9{margin-bottom:4px;font-size:15px;font-weight:700}.body.svelte-idp8p9{color:var(--bw-color-text-secondary);font-size:13px;line-height:1.5}.radio.svelte-idp8p9{border:2px solid var(--bw-color-border);border-radius:50%;flex-shrink:0;width:22px;height:22px}.radio-selected.svelte-idp8p9{border-color:var(--bw-color-text);background:var(--bw-color-text)}.pricing.svelte-19wqhng{margin-top:8px;font-size:13px;font-weight:700}.row.svelte-bzhcxd{align-items:center;display:flex}.plain.svelte-bzhcxd{padding:12px 0}.divided.svelte-bzhcxd:not(:first-child){border-top:1px solid var(--bw-color-border)}.info.svelte-bzhcxd{flex-direction:column;flex:1;gap:2px;display:flex}.name.svelte-bzhcxd{font-size:15px;font-weight:700}.price.svelte-bzhcxd{color:var(--bw-color-text-secondary);font-size:13px}.stepper.svelte-bzhcxd{align-items:center;gap:4px;display:flex}.step-btn.svelte-bzhcxd{border:1.5px solid var(--bw-color-border);width:44px;height:44px;color:var(--bw-color-primary);transition:background var(--bw-transition), color var(--bw-transition), border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.step-btn.svelte-bzhcxd:hover:not(:disabled){background:var(--bw-color-primary);color:#fff}.step-btn.svelte-bzhcxd:disabled{opacity:.3;cursor:default}.qty.svelte-bzhcxd{border:1.5px solid var(--bw-color-border);width:64px;height:44px;color:var(--bw-color-text);text-align:center;font-variant-numeric:tabular-nums;background:0 0;border-radius:12px;font-family:inherit;font-size:17px;font-weight:800}.qty.svelte-bzhcxd:focus{border-color:var(--bw-color-primary);outline:none}.limit-message.svelte-bzhcxd{color:var(--bw-color-error);margin:4px 0 0;font-size:13px}.calendar.svelte-10gu2tq{width:100%}.header.svelte-10gu2tq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.month.svelte-10gu2tq{font-size:16px;font-weight:700}.nav-btn.svelte-10gu2tq{border:1.5px solid var(--bw-color-border);width:36px;height:36px;color:var(--bw-color-text);transition:border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.nav-btn.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.day-names.svelte-10gu2tq{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:8px;display:grid}.day-names.svelte-10gu2tq span:where(.svelte-10gu2tq){color:var(--bw-color-text-secondary);padding:4px 0;font-size:11px;font-weight:700}.grid.svelte-10gu2tq{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.cell.svelte-10gu2tq{border-radius:var(--bw-radius-md);min-height:48px;transition:border-color var(--bw-transition), background var(--bw-transition);background:0 0;border:1.5px solid #0000;flex-direction:column;justify-content:center;align-items:center;padding:4px 2px;font-size:14px;display:flex}.cell.empty.svelte-10gu2tq{pointer-events:none}.cell.available.svelte-10gu2tq{color:var(--bw-color-text);border-color:var(--bw-color-border);font-weight:600}.cell.available.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.cell.selected.svelte-10gu2tq{border-color:var(--bw-color-text);border-width:2px;font-weight:700}.cell.sold-out.svelte-10gu2tq{color:var(--bw-color-text-secondary);cursor:default;text-decoration:line-through}.cell.unavailable.svelte-10gu2tq{color:#d1d5db;cursor:default}.day-num.svelte-10gu2tq{line-height:1}.day-price.svelte-10gu2tq{color:var(--bw-color-text-secondary);margin-top:2px;font-size:9px;font-weight:600;line-height:1}.selected.svelte-10gu2tq .day-price:where(.svelte-10gu2tq){color:var(--bw-color-text)}.hint.svelte-1hu99a4{text-align:center;color:var(--bw-color-text-secondary);padding:12px;font-size:14px}.slots.svelte-1hu99a4{flex-direction:column;gap:10px;display:flex}.wizard.svelte-9w5z1v{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.wizard.inline.svelte-9w5z1v{height:auto;max-height:none}.wizard-header.svelte-9w5z1v{border-bottom:1px solid var(--bw-color-border);padding:20px 16px 16px}.wizard-header.svelte-9w5z1v h2:where(.svelte-9w5z1v){font-size:20px;font-weight:800}.body-title.svelte-9w5z1v{margin-bottom:16px;font-size:20px;font-weight:800}.page-title.svelte-9w5z1v{color:var(--bw-color-text);margin-bottom:4px;font-size:16px;font-weight:700}.wizard-footer.svelte-9w5z1v{z-index:10;background:var(--bw-color-bg);border-top:1px solid var(--bw-color-border);flex-shrink:0;position:sticky;bottom:0}.wizard-footer.svelte-9w5z1v .action-bar:where(.svelte-9w5z1v){border-top:none;position:static}.page-dots.svelte-9w5z1v{justify-content:center;gap:6px;padding:14px 16px 0;display:flex}.wizard.inline.svelte-9w5z1v .wizard-footer:where(.svelte-9w5z1v){background:var(--bw-color-surface)}.wizard.inline.svelte-9w5z1v .wizard-footer:where(.svelte-9w5z1v) .action-bar:where(.svelte-9w5z1v){background:0 0}.dot.svelte-9w5z1v{background:var(--bw-color-border);border-radius:50%;width:8px;height:8px}.dot.active.svelte-9w5z1v{background:var(--bw-color-text)}.accordion-section.svelte-9w5z1v{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);background:var(--bw-color-bg);margin-bottom:12px;overflow:hidden}.accordion-section.invalidated.svelte-9w5z1v{border-color:var(--bw-color-error)}.accordion-header.svelte-9w5z1v{cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;width:100%;padding:16px 20px;font-family:inherit;display:flex}.accordion-header-text.svelte-9w5z1v{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.accordion-title.svelte-9w5z1v{letter-spacing:.08em;color:var(--bw-color-text-secondary);font-size:11px;font-weight:700}.accordion-summary.svelte-9w5z1v{color:var(--bw-color-text);font-size:15px;font-weight:600}.accordion-summary.invalidated.svelte-9w5z1v{color:var(--bw-color-error)}.accordion-chevron.svelte-9w5z1v{border-right:2px solid var(--bw-color-text-secondary);border-bottom:2px solid var(--bw-color-text-secondary);flex-shrink:0;width:12px;height:12px;margin-left:12px;transition:transform .15s;transform:rotate(45deg)}.accordion-chevron.open.svelte-9w5z1v{transform:rotate(-135deg)}.accordion-body.svelte-9w5z1v{padding:0 20px 20px}.wizard-body.svelte-9w5z1v{flex:1;padding:16px;overflow-y:auto}.section.svelte-9w5z1v{margin-bottom:24px}.option-list.svelte-9w5z1v,.pickup-list.svelte-9w5z1v,.unit-list.svelte-9w5z1v{flex-direction:column;gap:10px;display:flex}.unit-list.divided.svelte-9w5z1v{gap:0}.dialog-backdrop.svelte-9w5z1v{z-index:100;background:#00000059;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;left:0}.dialog.svelte-9w5z1v{border-radius:var(--bw-radius-lg);width:90%;max-width:360px;box-shadow:var(--bw-shadow-3);background:#fff;padding:24px}.dialog-title.svelte-9w5z1v{margin-bottom:8px;font-size:17px;font-weight:700}.dialog-body.svelte-9w5z1v{color:var(--bw-color-text-secondary);margin-bottom:24px;font-size:14px}.dialog-actions.svelte-9w5z1v{justify-content:flex-end;gap:8px;display:flex}.dialog-btn-text.svelte-9w5z1v{color:var(--bw-color-primary);border-radius:var(--bw-radius-md);background:0 0;border:none;padding:10px 16px;font-size:14px;font-weight:600}.dialog-btn-text.svelte-9w5z1v:hover{background:var(--bw-color-primary-light)}.dialog-btn-fill.svelte-9w5z1v{background:var(--bw-color-primary);color:#fff;border-radius:var(--bw-radius-md);border:none;padding:10px 20px;font-size:14px;font-weight:600}.dialog-btn-fill.svelte-9w5z1v:hover{background:var(--bw-color-primary-dark)}.bw-widget.svelte-19qd5my{display:contents}.add-to-cart-error.svelte-19qd5my{color:#b3261e;background:#fdecea;margin:0;padding:12px 16px;font-size:14px}.form.svelte-12xyhj1{flex-direction:column;gap:14px;display:flex}.field.svelte-12xyhj1{flex-direction:column;gap:4px;display:flex}label.svelte-12xyhj1{color:var(--bw-color-text-secondary);font-size:13px;font-weight:600}.consent.svelte-19pmjwi{flex-direction:column;gap:12px;display:flex}.check.svelte-19pmjwi{cursor:pointer;align-items:flex-start;gap:10px;font-size:13px;line-height:1.4;display:flex}.check.error.svelte-19pmjwi span:where(.svelte-19pmjwi){color:var(--bw-color-error)}input[type=checkbox].svelte-19pmjwi{accent-color:var(--bw-color-primary);flex-shrink:0;width:16px;height:16px;margin-top:2px}.timer.svelte-1u82ue3{color:var(--bw-color-text-secondary);font-variant-numeric:tabular-nums;font-size:13px;font-weight:600}.payment-overlay.svelte-1ubcp68{z-index:10001;background:#00000080;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.payment-dialog.svelte-1ubcp68{background:var(--bw-color-bg);border-radius:var(--bw-radius-lg);width:100%;max-width:480px;height:min(700px,90vh);box-shadow:var(--bw-shadow-3);flex-direction:column;display:flex;overflow:hidden}.body.svelte-1ubcp68{flex:1;min-height:0;padding:16px;overflow-y:auto}#peach-container.svelte-1ubcp68{height:100%}.error-state.svelte-1ubcp68{text-align:center;padding:32px 16px}.error-icon.svelte-1ubcp68{border:2px solid var(--bw-color-border);width:48px;height:48px;color:var(--bw-color-text-secondary);border-radius:50%;justify-content:center;align-items:center;margin:0 auto 16px;font-size:24px;display:flex}.error-title.svelte-1ubcp68{margin-bottom:8px;font-size:16px;font-weight:600}.error-msg.svelte-1ubcp68{color:var(--bw-color-text-secondary);font-size:14px}.error-state.svelte-1ubcp68 .btn:where(.svelte-1ubcp68){margin-top:16px}.result.svelte-16gfovn{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;padding:40px 24px;display:flex}.hint.svelte-16gfovn{color:var(--bw-color-text-secondary);margin-top:16px;font-size:14px}.icon.svelte-16gfovn{border-radius:50%;justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:20px;font-size:32px;display:flex}.icon.success.svelte-16gfovn{border:2px solid var(--bw-color-success);color:var(--bw-color-success);background:#4caf5014}.icon.failure.svelte-16gfovn{border:2px solid var(--bw-color-error);color:var(--bw-color-error);background:var(--bw-color-primary-light)}.icon.pending.svelte-16gfovn,.icon.partial.svelte-16gfovn{color:#b8860b;background:#b8860b14;border:2px solid #b8860b}h2.svelte-16gfovn{margin-bottom:8px;font-size:20px;font-weight:700}.desc.svelte-16gfovn{color:var(--bw-color-text-secondary);max-width:280px;margin-bottom:28px;font-size:14px;line-height:1.5}.actions.svelte-16gfovn{flex-direction:column;gap:8px;width:100%;max-width:220px;display:flex}.edit-view.svelte-15l4305{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.edit-error.svelte-15l4305{color:#b3261e;background:#fdecea;margin:0;padding:12px 16px;font-size:14px}.edit-body.svelte-15l4305{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.edit-body.saving.svelte-15l4305{pointer-events:none}.saving-overlay.svelte-15l4305{background:#ffffffb3;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.bw-widget.svelte-16hmqxh{display:contents}.bw-modal-overlay.svelte-5e515v{z-index:10000;background:#00000080;position:fixed;inset:0}.bw-modal-inner.svelte-5e515v{background:#fff;border-radius:12px;width:100%;max-width:900px;height:95vh;margin:2.5vh auto;overflow:hidden;box-shadow:0 8px 40px #0000004d}.cart-bar.svelte-1xt0fxx{border-top:1px solid var(--bw-color-border);background:#fff;justify-content:space-between;align-items:center;width:100%;padding:12px 16px;display:flex;box-shadow:0 -2px 8px #0000000f}.cart-info.svelte-1xt0fxx{flex-direction:column;gap:2px;display:flex}.item-count.svelte-1xt0fxx{color:var(--bw-color-text-secondary);font-size:12px}.error-detail.svelte-1xt0fxx{font-size:14px;font-weight:600}.total.svelte-1xt0fxx{font-size:16px;font-weight:700}.cart-overview-btn.svelte-16bjfem{background:var(--bw-color-primary);color:#fff;cursor:pointer;border:none;border-radius:999px;justify-content:center;align-items:center;gap:14px;width:100%;padding:14px 24px;transition:background .15s;display:flex}.cart-overview-btn.svelte-16bjfem:hover{background:var(--bw-color-primary-dark)}.cart-icon.svelte-16bjfem{flex-shrink:0;width:22px;height:22px}.cart-badge.svelte-16bjfem{width:26px;height:26px;color:var(--bw-color-primary);background:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;font-weight:800;display:flex}.cart-timer.svelte-16bjfem{font-variant-numeric:tabular-nums;flex-shrink:0;font-size:20px;font-weight:700}.cart-error-label.svelte-16bjfem{font-size:15px;font-weight:600}
1
+ :root{--bw-color-primary:var(--header-background,#e30613);--bw-color-primary-dark:var(--footer-background,#c00510);--bw-color-primary-light:#e3061314;--bw-color-text:#212121;--bw-color-text-secondary:#757575;--bw-color-border:#e0e0e0;--bw-color-bg:#fff;--bw-color-surface:#f5f5f5;--bw-color-success:#4caf50;--bw-color-error:var(--header-background,#e30613);--bw-font-family:var(--default-font-family,"Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--bw-radius-sm:4px;--bw-radius-md:var(--radius,8px);--bw-radius-lg:12px;--bw-radius-pill:9999px;--bw-transition:.15s ease;--bw-shadow-1:0 1px 3px #0000001a, 0 1px 2px #0000000f;--bw-shadow-2:0 4px 12px #00000014, 0 2px 4px #0000000a;--bw-shadow-3:0 10px 24px #0000001a, 0 4px 8px #0000000a}.bw-widget,.bw-widget *{box-sizing:border-box;margin:0;padding:0}.bw-widget{font-family:var(--bw-font-family);color:var(--bw-color-text);background:var(--bw-color-bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}.bw-widget button,button.bw-widget{cursor:pointer;font-family:inherit}.bw-widget :is(input,select,textarea),:is(input,select,textarea).bw-widget{font-family:inherit}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:3px solid var(--bw-color-border);border-top-color:var(--bw-color-primary);border-radius:50%;width:36px;height:36px;animation:.7s linear infinite spin}.loading-center{flex:1;justify-content:center;align-items:center;min-height:120px;display:flex}.page-header{border-bottom:1px solid var(--bw-color-border);background:var(--bw-color-bg);align-items:center;gap:8px;padding:12px 16px;display:flex}.page-header h2{letter-spacing:-.01em;font-size:18px;font-weight:700}.page-header .spacer{flex:1}.icon-btn{border-radius:var(--bw-radius-pill);width:36px;height:36px;color:var(--bw-color-text);transition:background var(--bw-transition);background:0 0;border:none;justify-content:center;align-items:center;font-size:20px;display:flex}.icon-btn:hover{background:var(--bw-color-surface)}.card{background:var(--bw-color-bg);border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);transition:border-color var(--bw-transition);padding:16px}.card-selectable{cursor:pointer;text-align:left}.card-selectable:hover{border-color:var(--bw-color-text)}.card-selected{border-color:var(--bw-color-text);border-width:2px}.action-bar{border-top:1px solid var(--bw-color-border);background:var(--bw-color-bg);z-index:10;flex-shrink:0;gap:10px;padding:12px 16px;display:flex;position:sticky;bottom:0}.action-bar .btn-secondary{border:1px solid var(--bw-color-border);background:var(--bw-color-bg);height:48px;padding:0 20px}.action-bar .btn-primary{flex:1;height:48px;font-size:16px;font-weight:700}.btn{border-radius:var(--bw-radius-md);transition:background var(--bw-transition), box-shadow var(--bw-transition), opacity var(--bw-transition);border:none;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:600;display:inline-flex}.btn:disabled{opacity:.45;cursor:default;pointer-events:none}.btn-primary{background:var(--bw-color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--bw-color-primary-dark);box-shadow:var(--bw-shadow-1)}.btn-secondary{background:var(--bw-color-bg);color:var(--bw-color-text)}.btn-secondary:hover:not(:disabled){background:var(--bw-color-border)}.btn-outline{border:1px solid var(--bw-color-primary);color:var(--bw-color-primary);background:0 0}.btn-outline:hover:not(:disabled){background:var(--bw-color-primary-light)}.btn-split{justify-content:space-between;padding:0 20px}.input{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-md);width:100%;transition:border-color var(--bw-transition), box-shadow var(--bw-transition);outline:none;padding:10px 12px;font-size:14px}.input:focus{border-color:var(--bw-color-primary);box-shadow:0 0 0 3px var(--bw-color-primary-light)}.input-error{border-color:var(--bw-color-error);background:#fef2f2}.input-error:focus{box-shadow:0 0 0 3px #e306131f}.section-title{color:var(--bw-color-text-secondary);margin-bottom:12px;font-size:14px;font-weight:400}.prompt-card.svelte-udumw1{background:var(--bw-color-bg);border-radius:var(--bw-radius-lg);width:100%;max-width:360px;box-shadow:var(--bw-shadow-3);text-align:center;padding:28px 24px}h3.svelte-udumw1{margin-bottom:10px;font-size:18px;font-weight:700}p.svelte-udumw1{color:var(--bw-color-text-secondary);margin-bottom:20px;font-size:14px;line-height:1.5}.remaining.svelte-udumw1{color:var(--bw-color-text);font-variant-numeric:tabular-nums}.btn.svelte-udumw1{width:100%}.expired.svelte-bznxud{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;padding:40px 24px;display:flex}.icon.svelte-bznxud{border:2px solid var(--bw-color-border);width:64px;height:64px;color:var(--bw-color-text-secondary);border-radius:50%;justify-content:center;align-items:center;margin-bottom:20px;font-size:32px;display:flex}h2.svelte-bznxud{margin-bottom:8px;font-size:20px;font-weight:700}.desc.svelte-bznxud{color:var(--bw-color-text-secondary);max-width:300px;margin-bottom:28px;font-size:14px;line-height:1.5}.guard-overlay.svelte-x4iaex{z-index:20000;background:#00000073;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.guard-card.svelte-x4iaex{background:var(--bw-color-bg);border-radius:var(--bw-radius-lg);width:100%;max-width:360px;box-shadow:var(--bw-shadow-3);overflow:hidden}.layout.svelte-idp8p9{align-items:center;gap:12px;display:flex}.text.svelte-idp8p9{flex:1}.heading.svelte-idp8p9{margin-bottom:4px;font-size:15px;font-weight:700}.body.svelte-idp8p9{color:var(--bw-color-text-secondary);font-size:13px;line-height:1.5}.radio.svelte-idp8p9{border:2px solid var(--bw-color-border);border-radius:50%;flex-shrink:0;width:22px;height:22px}.radio-selected.svelte-idp8p9{border-color:var(--bw-color-text);background:var(--bw-color-text)}.pricing.svelte-19wqhng{margin-top:8px;font-size:13px;font-weight:700}.row.svelte-bzhcxd{align-items:center;display:flex}.plain.svelte-bzhcxd{padding:12px 0}.divided.svelte-bzhcxd:not(:first-child){border-top:1px solid var(--bw-color-border)}.info.svelte-bzhcxd{flex-direction:column;flex:1;gap:2px;display:flex}.name.svelte-bzhcxd{font-size:15px;font-weight:700}.price.svelte-bzhcxd{color:var(--bw-color-text-secondary);font-size:13px}.stepper.svelte-bzhcxd{align-items:center;gap:4px;display:flex}.step-btn.svelte-bzhcxd{border:1.5px solid var(--bw-color-border);width:44px;height:44px;color:var(--bw-color-primary);transition:background var(--bw-transition), color var(--bw-transition), border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.step-btn.svelte-bzhcxd:hover:not(:disabled){background:var(--bw-color-primary);color:#fff}.step-btn.svelte-bzhcxd:disabled{opacity:.3;cursor:default}.qty.svelte-bzhcxd{border:1.5px solid var(--bw-color-border);width:64px;height:44px;color:var(--bw-color-text);text-align:center;font-variant-numeric:tabular-nums;background:0 0;border-radius:12px;font-family:inherit;font-size:17px;font-weight:800}.qty.svelte-bzhcxd:focus{border-color:var(--bw-color-primary);outline:none}.limit-message.svelte-bzhcxd{color:var(--bw-color-error);margin:4px 0 0;font-size:13px}.calendar.svelte-10gu2tq{width:100%}.header.svelte-10gu2tq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.month.svelte-10gu2tq{font-size:16px;font-weight:700}.nav-btn.svelte-10gu2tq{border:1.5px solid var(--bw-color-border);width:36px;height:36px;color:var(--bw-color-text);transition:border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.nav-btn.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.day-names.svelte-10gu2tq{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:8px;display:grid}.day-names.svelte-10gu2tq span:where(.svelte-10gu2tq){color:var(--bw-color-text-secondary);padding:4px 0;font-size:11px;font-weight:700}.grid.svelte-10gu2tq{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.cell.svelte-10gu2tq{border-radius:var(--bw-radius-md);min-height:48px;transition:border-color var(--bw-transition), background var(--bw-transition);background:0 0;border:1.5px solid #0000;flex-direction:column;justify-content:center;align-items:center;padding:4px 2px;font-size:14px;display:flex}.cell.empty.svelte-10gu2tq{pointer-events:none}.cell.available.svelte-10gu2tq{color:var(--bw-color-text);border-color:var(--bw-color-border);font-weight:600}.cell.available.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.cell.selected.svelte-10gu2tq{border-color:var(--bw-color-text);border-width:2px;font-weight:700}.cell.sold-out.svelte-10gu2tq{color:var(--bw-color-text-secondary);cursor:default;text-decoration:line-through}.cell.unavailable.svelte-10gu2tq{color:#d1d5db;cursor:default}.day-num.svelte-10gu2tq{line-height:1}.day-price.svelte-10gu2tq{color:var(--bw-color-text-secondary);margin-top:2px;font-size:9px;font-weight:600;line-height:1}.selected.svelte-10gu2tq .day-price:where(.svelte-10gu2tq){color:var(--bw-color-text)}.hint.svelte-1hu99a4{text-align:center;color:var(--bw-color-text-secondary);padding:12px;font-size:14px}.slots.svelte-1hu99a4{flex-direction:column;gap:10px;display:flex}.wizard.svelte-9w5z1v{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.wizard.inline.svelte-9w5z1v{height:auto;max-height:none}.wizard-header.svelte-9w5z1v{border-bottom:1px solid var(--bw-color-border);padding:20px 16px 16px}.wizard-header.svelte-9w5z1v h2:where(.svelte-9w5z1v){font-size:20px;font-weight:800}.body-title.svelte-9w5z1v{margin-bottom:16px;font-size:20px;font-weight:800}.page-title.svelte-9w5z1v{color:var(--bw-color-text);margin-bottom:4px;font-size:16px;font-weight:700}.wizard-footer.svelte-9w5z1v{z-index:10;background:var(--bw-color-bg);border-top:1px solid var(--bw-color-border);flex-shrink:0;position:sticky;bottom:0}.wizard-footer.svelte-9w5z1v .action-bar:where(.svelte-9w5z1v){border-top:none;position:static}.page-dots.svelte-9w5z1v{justify-content:center;gap:6px;padding:14px 16px 0;display:flex}.wizard.inline.svelte-9w5z1v .wizard-footer:where(.svelte-9w5z1v){background:var(--bw-color-surface)}.wizard.inline.svelte-9w5z1v .wizard-footer:where(.svelte-9w5z1v) .action-bar:where(.svelte-9w5z1v){background:0 0}.dot.svelte-9w5z1v{background:var(--bw-color-border);border-radius:50%;width:8px;height:8px}.dot.active.svelte-9w5z1v{background:var(--bw-color-text)}.accordion-section.svelte-9w5z1v{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);background:var(--bw-color-bg);margin-bottom:12px;overflow:hidden}.accordion-section.invalidated.svelte-9w5z1v{border-color:var(--bw-color-error)}.accordion-header.svelte-9w5z1v{cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;width:100%;padding:16px 20px;font-family:inherit;display:flex}.accordion-header-text.svelte-9w5z1v{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.accordion-title.svelte-9w5z1v{letter-spacing:.08em;color:var(--bw-color-text-secondary);font-size:11px;font-weight:700}.accordion-summary.svelte-9w5z1v{color:var(--bw-color-text);font-size:15px;font-weight:600}.accordion-summary.invalidated.svelte-9w5z1v{color:var(--bw-color-error)}.accordion-chevron.svelte-9w5z1v{border-right:2px solid var(--bw-color-text-secondary);border-bottom:2px solid var(--bw-color-text-secondary);flex-shrink:0;width:12px;height:12px;margin-left:12px;transition:transform .15s;transform:rotate(45deg)}.accordion-chevron.open.svelte-9w5z1v{transform:rotate(-135deg)}.accordion-body.svelte-9w5z1v{padding:0 20px 20px}.wizard-body.svelte-9w5z1v{flex:1;padding:16px;overflow-y:auto}.section.svelte-9w5z1v{margin-bottom:24px}.option-list.svelte-9w5z1v,.pickup-list.svelte-9w5z1v,.unit-list.svelte-9w5z1v{flex-direction:column;gap:10px;display:flex}.unit-list.divided.svelte-9w5z1v{gap:0}.dialog-backdrop.svelte-9w5z1v{z-index:100;background:#00000059;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;left:0}.dialog.svelte-9w5z1v{border-radius:var(--bw-radius-lg);width:90%;max-width:360px;box-shadow:var(--bw-shadow-3);background:#fff;padding:24px}.dialog-title.svelte-9w5z1v{margin-bottom:8px;font-size:17px;font-weight:700}.dialog-body.svelte-9w5z1v{color:var(--bw-color-text-secondary);margin-bottom:24px;font-size:14px}.dialog-actions.svelte-9w5z1v{justify-content:flex-end;gap:8px;display:flex}.dialog-btn-text.svelte-9w5z1v{color:var(--bw-color-primary);border-radius:var(--bw-radius-md);background:0 0;border:none;padding:10px 16px;font-size:14px;font-weight:600}.dialog-btn-text.svelte-9w5z1v:hover{background:var(--bw-color-primary-light)}.dialog-btn-fill.svelte-9w5z1v{background:var(--bw-color-primary);color:#fff;border-radius:var(--bw-radius-md);border:none;padding:10px 20px;font-size:14px;font-weight:600}.dialog-btn-fill.svelte-9w5z1v:hover{background:var(--bw-color-primary-dark)}.bw-widget.svelte-19qd5my{display:contents}.add-to-cart-error.svelte-19qd5my{color:#b3261e;background:#fdecea;margin:0;padding:12px 16px;font-size:14px}.form.svelte-12xyhj1{flex-direction:column;gap:14px;display:flex}.field.svelte-12xyhj1{flex-direction:column;gap:4px;display:flex}label.svelte-12xyhj1{color:var(--bw-color-text-secondary);font-size:13px;font-weight:600}.consent.svelte-19pmjwi{flex-direction:column;gap:12px;display:flex}.check.svelte-19pmjwi{cursor:pointer;align-items:flex-start;gap:10px;font-size:13px;line-height:1.4;display:flex}.check.error.svelte-19pmjwi span:where(.svelte-19pmjwi){color:var(--bw-color-error)}input[type=checkbox].svelte-19pmjwi{accent-color:var(--bw-color-primary);flex-shrink:0;width:16px;height:16px;margin-top:2px}.timer.svelte-1u82ue3{color:var(--bw-color-text-secondary);font-variant-numeric:tabular-nums;font-size:13px;font-weight:600}.payment-overlay.svelte-1ubcp68{z-index:10001;background:#00000080;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.payment-dialog.svelte-1ubcp68{background:var(--bw-color-bg);border-radius:var(--bw-radius-lg);width:100%;max-width:480px;height:min(700px,90vh);box-shadow:var(--bw-shadow-3);flex-direction:column;display:flex;overflow:hidden}.body.svelte-1ubcp68{flex:1;min-height:0;padding:16px;overflow-y:auto}#peach-container.svelte-1ubcp68{height:100%}.error-state.svelte-1ubcp68{text-align:center;padding:32px 16px}.error-icon.svelte-1ubcp68{border:2px solid var(--bw-color-border);width:48px;height:48px;color:var(--bw-color-text-secondary);border-radius:50%;justify-content:center;align-items:center;margin:0 auto 16px;font-size:24px;display:flex}.error-title.svelte-1ubcp68{margin-bottom:8px;font-size:16px;font-weight:600}.error-msg.svelte-1ubcp68{color:var(--bw-color-text-secondary);font-size:14px}.error-state.svelte-1ubcp68 .btn:where(.svelte-1ubcp68){margin-top:16px}.result.svelte-16gfovn{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;padding:40px 24px;display:flex}.hint.svelte-16gfovn{color:var(--bw-color-text-secondary);margin-top:16px;font-size:14px}.icon.svelte-16gfovn{border-radius:50%;justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:20px;font-size:32px;display:flex}.icon.success.svelte-16gfovn{border:2px solid var(--bw-color-success);color:var(--bw-color-success);background:#4caf5014}.icon.failure.svelte-16gfovn{border:2px solid var(--bw-color-error);color:var(--bw-color-error);background:var(--bw-color-primary-light)}.icon.pending.svelte-16gfovn,.icon.partial.svelte-16gfovn{color:#b8860b;background:#b8860b14;border:2px solid #b8860b}h2.svelte-16gfovn{margin-bottom:8px;font-size:20px;font-weight:700}.desc.svelte-16gfovn{color:var(--bw-color-text-secondary);max-width:280px;margin-bottom:28px;font-size:14px;line-height:1.5}.actions.svelte-16gfovn{flex-direction:column;gap:8px;width:100%;max-width:220px;display:flex}.edit-view.svelte-15l4305{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.edit-error.svelte-15l4305{color:#b3261e;background:#fdecea;margin:0;padding:12px 16px;font-size:14px}.edit-body.svelte-15l4305{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.edit-body.saving.svelte-15l4305{pointer-events:none}.saving-overlay.svelte-15l4305{background:#ffffffb3;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.modal.svelte-i0rtg0{background:var(--bw-color-surface);flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.body.svelte-i0rtg0{flex:1;padding:16px;overflow-y:auto}.keep-shopping-btn.svelte-i0rtg0{border-radius:var(--bw-radius-md);color:#222;cursor:pointer;background:0 0;border:2px solid #222;padding:8px 16px;font-size:13px;font-weight:600}.keep-shopping-btn.svelte-i0rtg0:hover{background:#f5f5f5}.cart-card.svelte-i0rtg0{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);margin-bottom:16px;padding:20px}.cart-card-top.svelte-i0rtg0{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.cart-product.svelte-i0rtg0{flex:1;font-size:16px;font-weight:700}.cart-item-total.svelte-i0rtg0{white-space:nowrap;font-size:16px;font-weight:800}.cart-detail-lines.svelte-i0rtg0{margin-top:4px}.cart-detail.svelte-i0rtg0{color:var(--bw-color-text-secondary);font-size:13px;line-height:1.5}.cart-divider.svelte-i0rtg0{border-top:1px dashed var(--bw-color-border);margin:14px 0}.cart-units.svelte-i0rtg0{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.cart-unit-line.svelte-i0rtg0{justify-content:space-between;align-items:center;font-size:14px;display:flex}.cart-unit-label.svelte-i0rtg0{color:#333}.cart-unit-price.svelte-i0rtg0{font-variant-numeric:tabular-nums;font-weight:600}.cart-actions.svelte-i0rtg0{gap:16px;display:flex}.action-edit.svelte-i0rtg0{color:var(--bw-color-primary);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:700}.action-edit.svelte-i0rtg0:hover{text-decoration:underline}.action-remove.svelte-i0rtg0{color:#555;cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:600}.action-remove.svelte-i0rtg0:hover{text-decoration:underline}.cart-total-divider.svelte-i0rtg0{border-top:3px solid #111;margin:8px 0 20px}.cart-total-row.svelte-i0rtg0{justify-content:space-between;align-items:center;margin-bottom:20px;font-size:16px;font-weight:700;display:flex}.cart-total-amount.svelte-i0rtg0{font-size:20px;font-weight:800}.pay-error.svelte-i0rtg0{color:#b3261e;border-radius:var(--bw-radius-md);background:#fdecea;margin:0 0 16px;padding:12px 16px;font-size:14px}.contact-header.svelte-i0rtg0{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.contact-title.svelte-i0rtg0{font-size:16px;font-weight:700}.required-hint.svelte-i0rtg0{color:var(--bw-color-primary);font-size:12px}.pay-bar.svelte-i0rtg0{background:var(--bw-color-primary);color:#fff;flex-shrink:0;align-items:center;display:flex;position:sticky;bottom:0}.pay-bar-total.svelte-i0rtg0{padding:0 20px;font-size:16px;font-weight:700}.pay-bar-btn.svelte-i0rtg0{color:#fff;background:0 0;border:none;flex:1;justify-content:flex-end;align-items:center;gap:8px;height:52px;padding:0 20px;font-size:16px;font-weight:700;display:flex}.pay-bar-btn.svelte-i0rtg0:disabled{opacity:.7;cursor:default}.bw-widget.svelte-16hmqxh{display:contents}.bw-modal-overlay.svelte-5e515v{z-index:10000;background:#00000080;position:fixed;inset:0}.bw-modal-inner.svelte-5e515v{background:#fff;border-radius:12px;width:100%;max-width:900px;height:95vh;margin:2.5vh auto;overflow:hidden;box-shadow:0 8px 40px #0000004d}.cart-bar.svelte-1xt0fxx{border-top:1px solid var(--bw-color-border);background:#fff;justify-content:space-between;align-items:center;width:100%;padding:12px 16px;display:flex;box-shadow:0 -2px 8px #0000000f}.cart-info.svelte-1xt0fxx{flex-direction:column;gap:2px;display:flex}.item-count.svelte-1xt0fxx{color:var(--bw-color-text-secondary);font-size:12px}.error-detail.svelte-1xt0fxx{font-size:14px;font-weight:600}.total.svelte-1xt0fxx{font-size:16px;font-weight:700}.cart-overview-btn.svelte-16bjfem{background:var(--bw-color-primary);color:#fff;cursor:pointer;border:none;border-radius:999px;justify-content:center;align-items:center;gap:14px;width:100%;padding:14px 24px;transition:background .15s;display:flex}.cart-overview-btn.svelte-16bjfem:hover{background:var(--bw-color-primary-dark)}.cart-icon.svelte-16bjfem{flex-shrink:0;width:22px;height:22px}.cart-badge.svelte-16bjfem{width:26px;height:26px;color:var(--bw-color-primary);background:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;font-weight:800;display:flex}.cart-timer.svelte-16bjfem{font-variant-numeric:tabular-nums;flex-shrink:0;font-size:20px;font-weight:700}.cart-error-label.svelte-16bjfem{font-size:15px;font-weight:600}
2
2
  /*$vite$:1*/
@@ -4784,7 +4784,7 @@ function bs(e, t) {
4784
4784
  _r(["click"]);
4785
4785
  //#endregion
4786
4786
  //#region src/lib/CheckoutModal.svelte
4787
- var xs = /* @__PURE__ */ J("<div class=\"loading-center\" style=\"height:100%\"><div class=\"spinner\"></div></div>"), Ss = /* @__PURE__ */ J("<p class=\"pay-error\"> </p>"), Cs = /* @__PURE__ */ J("<div class=\"page-header\"><button class=\"icon-btn\" aria-label=\"Back\">&larr;</button> <h2>Checkout</h2> <span class=\"spacer\"></span> <!> <button class=\"icon-btn\" aria-label=\"Close\">&times;</button></div> <div class=\"body\"><!> <div class=\"contact-header\"><span class=\"contact-title\">Contact Details</span> <span class=\"required-hint\">* Required Fields</span></div> <!> <div style=\"margin-top:24px\"><!></div></div> <div class=\"pay-bar\"><span class=\"pay-bar-total\"> </span> <button class=\"pay-bar-btn\"> </button></div>", 1), ws = /* @__PURE__ */ J("<p class=\"cart-detail\"> </p>"), Ts = /* @__PURE__ */ J("<div class=\"cart-unit-line\"><span class=\"cart-unit-label\"> </span> <span class=\"cart-unit-price\"> </span></div>"), Es = /* @__PURE__ */ J("<div class=\"cart-card\"><div class=\"cart-card-top\"><h3 class=\"cart-product\"> </h3> <span class=\"cart-item-total\"> </span></div> <div class=\"cart-detail-lines\"><!> <p class=\"cart-detail\"> </p></div> <div class=\"cart-divider\"></div> <div class=\"cart-units\"></div> <div class=\"cart-actions\"><button class=\"action-edit\">Edit</button> <button class=\"action-remove\">Remove</button></div></div>"), Ds = /* @__PURE__ */ J("<div class=\"page-header\"><h2>Your cart</h2> <span class=\"spacer\"></span> <!> <button class=\"keep-shopping-btn\">+ Keep shopping</button></div> <div class=\"body\"><!> <div class=\"cart-total-divider\"></div> <div class=\"cart-total-row\"><span>Total payable today</span> <span class=\"cart-total-amount\"> </span></div></div> <div class=\"action-bar\"><button class=\"btn btn-primary\">Checkout</button></div>", 1), Os = /* @__PURE__ */ J("<div class=\"modal\"><!></div>");
4787
+ var xs = /* @__PURE__ */ J("<div class=\"loading-center\" style=\"height:100%\"><div class=\"spinner\"></div></div>"), Ss = /* @__PURE__ */ J("<p class=\"pay-error svelte-i0rtg0\"> </p>"), Cs = /* @__PURE__ */ J("<div class=\"page-header\"><button class=\"icon-btn\" aria-label=\"Back\">&larr;</button> <h2>Checkout</h2> <span class=\"spacer\"></span> <!> <button class=\"icon-btn\" aria-label=\"Close\">&times;</button></div> <div class=\"body svelte-i0rtg0\"><!> <div class=\"contact-header svelte-i0rtg0\"><span class=\"contact-title svelte-i0rtg0\">Contact Details</span> <span class=\"required-hint svelte-i0rtg0\">* Required Fields</span></div> <!> <div style=\"margin-top:24px\"><!></div></div> <div class=\"pay-bar svelte-i0rtg0\"><span class=\"pay-bar-total svelte-i0rtg0\"> </span> <button class=\"pay-bar-btn svelte-i0rtg0\"> </button></div>", 1), ws = /* @__PURE__ */ J("<p class=\"cart-detail svelte-i0rtg0\"> </p>"), Ts = /* @__PURE__ */ J("<div class=\"cart-unit-line svelte-i0rtg0\"><span class=\"cart-unit-label svelte-i0rtg0\"> </span> <span class=\"cart-unit-price svelte-i0rtg0\"> </span></div>"), Es = /* @__PURE__ */ J("<div class=\"cart-card svelte-i0rtg0\"><div class=\"cart-card-top svelte-i0rtg0\"><h3 class=\"cart-product svelte-i0rtg0\"> </h3> <span class=\"cart-item-total svelte-i0rtg0\"> </span></div> <div class=\"cart-detail-lines svelte-i0rtg0\"><!> <p class=\"cart-detail svelte-i0rtg0\"> </p></div> <div class=\"cart-divider svelte-i0rtg0\"></div> <div class=\"cart-units svelte-i0rtg0\"></div> <div class=\"cart-actions svelte-i0rtg0\"><button class=\"action-edit svelte-i0rtg0\">Edit</button> <button class=\"action-remove svelte-i0rtg0\">Remove</button></div></div>"), Ds = /* @__PURE__ */ J("<div class=\"page-header\"><h2>Your cart</h2> <span class=\"spacer\"></span> <!> <button class=\"keep-shopping-btn svelte-i0rtg0\">+ Keep shopping</button></div> <div class=\"body svelte-i0rtg0\"><!> <div class=\"cart-total-divider svelte-i0rtg0\"></div> <div class=\"cart-total-row svelte-i0rtg0\"><span>Total payable today</span> <span class=\"cart-total-amount svelte-i0rtg0\"> </span></div></div> <div class=\"action-bar\"><button class=\"btn btn-primary\">Checkout</button></div>", 1), Os = /* @__PURE__ */ J("<div class=\"modal svelte-i0rtg0\"><!></div>");
4788
4788
  function ks(e, t) {
4789
4789
  N(t, !0);
4790
4790
  let n = Q(t, "cart", 7), r = Q(t, "autoSelectSingleTimeSlot", 3, !1);
@@ -36,6 +36,9 @@
36
36
  /* Deliberately its own amber, not success green or failure red - payment succeeded (so red reads as an\r
37
37
  alarming false alarm) but the booking is not fully confirmed (so green would be premature). The same is\r
38
38
  true either way round: 'pending' is not confirmed yet, 'partial' will not be for some of its items. */.icon.pending.svelte-16gfovn,\r
39
- .icon.partial.svelte-16gfovn {border:2px solid #B8860B;color:#B8860B;background:rgba(184, 134, 11, 0.08);}h2.svelte-16gfovn {font-size:20px;font-weight:700;margin-bottom:8px;}.desc.svelte-16gfovn {color:var(--bw-color-text-secondary);font-size:14px;margin-bottom:28px;max-width:280px;line-height:1.5;}.actions.svelte-16gfovn {display:flex;flex-direction:column;gap:8px;width:100%;max-width:220px;}`};function oc(e,t){M(t,!0),Yr(e,ac);let n=Z(t,`status`,7),r=Z(t,`verifying`,7),i=Z(t,`onDone`,7),a=Z(t,`onRetry`,7),o=Z(t,`onCheckAgain`,7),s=P(()=>n()?.outcome===`successful`),c=P(()=>n()?.outcome===`pending`),l=P(()=>n()?.outcome===`partial`),u=P(()=>n()?.outcome===`failed`&&n().retryPayment!==!1);var d={get status(){return n()},set status(e){n(e),I()},get verifying(){return r()},set verifying(e){r(e),I()},get onDone(){return i()},set onDone(e){i(e),I()},get onRetry(){return a()},set onRetry(e){a(e),I()},get onCheckAgain(){return o()},set onCheckAgain(e){o(e),I()}},f=ic(),p=z(f),m=e=>{var t=Xs();Ne(2),J(e,t)},h=e=>{var t=Qs(),r=V(B(t),4),a=z(r,!0);j(r);var s=V(r,2),c=z(s),l=e=>{var t=Zs();K(`click`,t,function(...e){o()?.apply(this,e)}),J(e,t)};X(c,e=>{o()&&e(l)});var u=V(c,2);j(s),H(()=>Y(a,n()?.resultDescription??`We couldn't confirm this payment yet. Please don't try to pay again for now - we'll email you as soon as we know where it stands.`)),K(`click`,u,function(...e){i()?.apply(this,e)}),J(e,t)},g=e=>{var t=$s(),r=V(B(t),4),a=z(r,!0);j(r);var o=V(r,2);H(()=>Y(a,n()?.resultDescription??`Your payment succeeded, but we couldn't confirm every item in your booking. Please contact us with your order details.`)),K(`click`,o,function(...e){i()?.apply(this,e)}),J(e,t)},_=e=>{var t=rc(),r=B(t);let o;var c=z(r,!0);j(r);var l=V(r,2),d=z(l,!0);j(l);var f=V(l,2),p=z(f,!0);j(f);var m=V(f,2),h=e=>{var t=ec();K(`click`,t,function(...e){i()?.apply(this,e)}),J(e,t)},g=e=>{var t=tc();K(`click`,t,function(...e){a()?.apply(this,e)}),J(e,t)},_=e=>{var t=nc();K(`click`,t,function(...e){i()?.apply(this,e)}),J(e,t)};X(m,e=>{G(s)?e(h):G(u)?e(g,1):e(_,-1)}),H(()=>{o=$r(r,1,`icon svelte-16gfovn`,null,o,{success:G(s),failure:!G(s)}),Y(c,G(s)?`✓`:`!`),Y(d,G(s)?`Payment Successful`:`Payment Failed`),Y(p,G(s)?`Your booking has been confirmed.`:n()?.resultDescription??`Something went wrong. Please try again.`)}),J(e,t)};return X(p,e=>{r()?e(m):G(c)?e(h,1):G(l)?e(g,2):e(_,-1)}),j(f),J(e,f),N(d)}vr([`click`]),Q(oc,{status:{},verifying:{},onDone:{},onRetry:{},onCheckAgain:{}},[],[],{mode:`open`});var sc=q(`<p class="edit-error svelte-15l4305"> </p>`),cc=q(`<div class="saving-overlay svelte-15l4305"><div class="spinner"></div></div>`),lc=q(`<div class="edit-view svelte-15l4305"><div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Edit Item</h2> <span class="spacer"></span> <button class="icon-btn" aria-label="Close">&times;</button></div> <!> <div><!> <!></div></div>`),uc={hash:`svelte-15l4305`,code:`.edit-view.svelte-15l4305 {display:flex;flex-direction:column;height:100%;max-height:100%;overflow:hidden;}.edit-error.svelte-15l4305 {margin:0;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;}.edit-body.svelte-15l4305 {position:relative;display:flex;flex-direction:column;flex:1;min-height:0;}.edit-body.saving.svelte-15l4305 {pointer-events:none;}.saving-overlay.svelte-15l4305 {position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255, 255, 255, 0.7);}`};function dc(e,t){M(t,!0),Yr(e,uc);let n=Z(t,`cartItem`,7),r=Z(t,`product`,7),i=Z(t,`api`,7),a=Z(t,`wizardPages`,7),o=Z(t,`editPages`,7),s=Z(t,`autoSelectSingleTimeSlot`,7,!1),c=Z(t,`onBack`,7),l=Z(t,`onClose`,7),u=Z(t,`onUpdated`,7),d=Z(t,`onPriceChanged`,7),f=L(!1),p=L(null);async function m(e){R(f,!0),R(p,null);try{await i().updateCartItem(n().id,{productId:e.productId,optionId:e.optionId,unitItems:Fi(e.units),availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),u()()}catch(e){if(Li(e)){R(p,`This item's price has changed. Please check the updated price and save again.`),await d()?.();return}R(p,e instanceof Ii&&e.status===424?`This change could not be saved - the supplier rejected it. Please try different options.`:`Something went wrong saving your changes. Please try again.`,!0)}finally{R(f,!1)}}var h={get cartItem(){return n()},set cartItem(e){n(e),I()},get product(){return r()},set product(e){r(e),I()},get api(){return i()},set api(e){i(e),I()},get wizardPages(){return a()},set wizardPages(e){a(e),I()},get editPages(){return o()},set editPages(e){o(e),I()},get autoSelectSingleTimeSlot(){return s()},set autoSelectSingleTimeSlot(e=!1){s(e),I()},get onBack(){return c()},set onBack(e){c(e),I()},get onClose(){return l()},set onClose(e){l(e),I()},get onUpdated(){return u()},set onUpdated(e){u(e),I()},get onPriceChanged(){return d()},set onPriceChanged(e){d(e),I()}},g=lc(),_=z(g),v=z(_),y=V(v,6);j(_);var b=V(_,2),x=e=>{var t=sc(),n=z(t,!0);j(t),H(()=>Y(n,G(p))),J(e,t)};X(b,e=>{G(p)&&e(x)});var S=V(b,2);let C;var w=z(S);{let e=P(()=>a()??Wa),t=P(()=>o()??a()??Wa);$o(w,{get product(){return r()},get api(){return i()},get wizardPages(){return G(e)},get editPages(){return G(t)},get editItem(){return n()},get autoSelectSingleTimeSlot(){return s()},onComplete:m,get onCancel(){return c()}})}var T=V(w,2),E=e=>{J(e,cc())};return X(T,e=>{G(f)&&e(E)}),j(S),j(g),H(()=>C=$r(S,1,`edit-body svelte-15l4305`,null,C,{saving:G(f)})),K(`click`,v,function(...e){c()?.apply(this,e)}),K(`click`,y,function(...e){l()?.apply(this,e)}),J(e,g),N(h)}vr([`click`]),Q(dc,{cartItem:{},product:{},api:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},onBack:{},onClose:{},onUpdated:{},onPriceChanged:{}},[],[],{mode:`open`});var fc=q(`<div class="loading-center" style="height:100%"><div class="spinner"></div></div>`),pc=q(`<p class="pay-error"> </p>`),mc=q(`<div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Checkout</h2> <span class="spacer"></span> <!> <button class="icon-btn" aria-label="Close">&times;</button></div> <div class="body"><!> <div class="contact-header"><span class="contact-title">Contact Details</span> <span class="required-hint">* Required Fields</span></div> <!> <div style="margin-top:24px"><!></div></div> <div class="pay-bar"><span class="pay-bar-total"> </span> <button class="pay-bar-btn"> </button></div>`,1),hc=q(`<p class="cart-detail"> </p>`),gc=q(`<div class="cart-unit-line"><span class="cart-unit-label"> </span> <span class="cart-unit-price"> </span></div>`),_c=q(`<div class="cart-card"><div class="cart-card-top"><h3 class="cart-product"> </h3> <span class="cart-item-total"> </span></div> <div class="cart-detail-lines"><!> <p class="cart-detail"> </p></div> <div class="cart-divider"></div> <div class="cart-units"></div> <div class="cart-actions"><button class="action-edit">Edit</button> <button class="action-remove">Remove</button></div></div>`),vc=q(`<div class="page-header"><h2>Your cart</h2> <span class="spacer"></span> <!> <button class="keep-shopping-btn">+ Keep shopping</button></div> <div class="body"><!> <div class="cart-total-divider"></div> <div class="cart-total-row"><span>Total payable today</span> <span class="cart-total-amount"> </span></div></div> <div class="action-bar"><button class="btn btn-primary">Checkout</button></div>`,1),yc=q(`<div class="modal"><!></div>`),bc={hash:`svelte-i0rtg0`,code:``};function xc(e,t){M(t,!0),Yr(e,bc);let n=Z(t,`cart`,7),r=Z(t,`api`,7),i=Z(t,`wizardPages`,7),a=Z(t,`editPages`,7),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=Z(t,`onClose`,7),c=Z(t,`onOrderConfirmed`,7);_n(()=>na(e=>{e.type===`cart:updated`&&`cart`in e&&e.cart===null&&T(),e.type===`payment:timed-out`&&b.onPaymentTimedOut()}));let l=L(`cart`),u=L(null),d=L(!0),f=L(!1),p=L(!1),m=L(!1),h=L(``),g=L(``),_=L(``),v=L(``),y=L(null),b=js({getApi:()=>r(),getCart:()=>n(),reloadCart:ne,notifyCartUpdated:ie,refreshDeadlineAfterPay:()=>void re(),setView:e=>{R(l,e,!0)},close:T,onOrderConfirmed:()=>c()()}),x=L(Qt(new Map));async function S(){try{let e=[...new Set(n().items.map(e=>e.productId))],t=await Promise.all(e.map(e=>r().getProduct(e))),i=new Map;for(let e of t)i.set(e.id,e);R(x,i,!0)}catch{}finally{R(d,!1)}}S(),b.resumeInterruptedPayment();let C=P(()=>()=>Xa(Ms(n()),Ns(n()),2,2)),w=P(()=>ia(n()));Rr(()=>{b.dispose(),$({type:`modal:close`})});function T(){$({type:`modal:close`}),s()()}function E(){T()}function ee(e){R(u,e,!0),R(l,`edit`)}async function te(){await ne()&&(R(l,`cart`),ie(n()))}async function D(e){try{await r().removeCartItem(e.id)}catch(e){if(!Ri(e))throw e;T();return}await ne()&&(ie(n()),n().items.length===0&&T())}async function ne(){try{return n(await r().getCart()),!0}catch(e){if(!Ri(e))throw e;return T(),!1}}async function re(){try{n(await r().getCart()),ie(n())}catch{}}function ie(e){$({type:`cart:updated`,cart:e})}async function ae(){R(m,!0),!(!G(y)?.isValid()||!G(f))&&await b.payNow(G(y).getContact())}var O={get cart(){return n()},set cart(e){n(e),I()},get api(){return r()},set api(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e){i(e),I()},get editPages(){return a()},set editPages(e){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()},get onClose(){return s()},set onClose(e){s(e),I()},get onOrderConfirmed(){return c()},set onOrderConfirmed(e){c(e),I()}},oe=yc(),se=z(oe),ce=e=>{J(e,fc())},le=e=>{var t=Er(),n=B(t),r=e=>{Ys(e,{get checkoutId(){return b.paymentResult.checkoutId},get entityId(){return b.paymentResult.entityId},get expiresAt(){return G(w)},get onPaymentComplete(){return b.onPaymentComplete}})},i=e=>{J(e,fc())};X(n,e=>{b.paymentResult?e(r):e(i,-1)}),J(e,t)},ue=e=>{{let t=P(()=>b.resultStatus?.outcome===`pending`?b.checkStatusAgain:void 0);oc(e,{get status(){return b.resultStatus},get verifying(){return b.isConfirming},onDone:()=>{$({type:`modal:close`})},get onRetry(){return b.retry},get onCheckAgain(){return G(t)}})}},de=e=>{{let t=P(()=>G(x).get(G(u).productId));dc(e,{get cartItem(){return G(u)},get product(){return G(t)},get api(){return r()},get wizardPages(){return i()},get editPages(){return a()},get autoSelectSingleTimeSlot(){return o()},onBack:()=>{R(l,`cart`)},onClose:T,onUpdated:te,onPriceChanged:S})}},fe=P(()=>G(l)===`edit`&&G(u)&&G(x).get(G(u).productId)),pe=e=>{var t=mc(),n=B(t),r=z(n),i=V(r,6);ms(i,{get expiresAt(){return G(w)}});var a=V(i,2);j(n);var o=V(n,2),s=z(o),c=e=>{var t=pc(),n=z(t,!0);j(t),H(()=>Y(n,b.payError)),J(e,t)};X(s,e=>{b.payError&&e(c)});var u=V(s,4);pi(Bs(u,{get hasAttemptedSubmit(){return G(m)},get firstName(){return G(h)},set firstName(e){R(h,e,!0)},get lastName(){return G(g)},set lastName(e){R(g,e,!0)},get emailAddress(){return G(_)},set emailAddress(e){R(_,e,!0)},get phoneNumber(){return G(v)},set phoneNumber(e){R(v,e,!0)}}),e=>R(y,e,!0),()=>G(y));var d=V(u,2);Us(z(d),{get privacyAccepted(){return G(f)},get marketingOptIn(){return G(p)},get hasAttemptedSubmit(){return G(m)},onPrivacyChanged:e=>{R(f,e,!0)},onMarketingChanged:e=>{R(p,e,!0)}}),j(d),j(o);var x=V(o,2),S=z(x),E=z(S,!0);j(S);var ee=V(S,2),te=z(ee,!0);j(ee),j(x),H(e=>{Y(E,e),ee.disabled=b.isPaying,Y(te,b.isPaying?`Paying…`:`Pay Now`)},[()=>G(C)()]),K(`click`,r,()=>{R(l,`cart`)}),K(`click`,a,T),K(`click`,ee,ae),J(e,t)},me=e=>{var t=vc(),r=B(t),i=V(z(r),4);ms(i,{get expiresAt(){return G(w)}});var a=V(i,2);j(r);var o=V(r,2),s=z(o);Ur(s,17,()=>n().items,zr,(e,t)=>{var n=_c(),r=z(n),i=z(r),a=z(i,!0);j(i);var o=V(i,2),s=z(o,!0);j(o),j(r);var c=V(r,2),l=z(c),u=e=>{var n=hc(),r=z(n,!0);j(n),H(e=>Y(r,e),[()=>Ls(G(t))]),J(e,n)},d=P(()=>Ls(G(t)));X(l,e=>{G(d)&&e(u)});var f=V(l,2),p=z(f,!0);j(f),j(c);var m=V(c,4);Ur(m,21,()=>Is(G(t),G(x)),zr,(e,n)=>{var r=gc(),i=z(r),a=z(i);j(i);var o=V(i,2),s=z(o,!0);j(o),j(r),H(e=>{Y(a,`${G(n).title??``} × ${G(n).quantity??``}`),Y(s,e)},[()=>Xa(G(n).linePrice,G(t).currencyCode,2,0)]),J(e,r)}),j(m);var h=V(m,2),g=z(h),_=V(g,2);j(h),j(n),H((e,t,n)=>{Y(a,e),Y(s,t),Y(p,n)},[()=>Ps(G(t),G(x)),()=>Xa(G(t).amount,G(t).currencyCode,2,0),()=>Fs(G(t),G(x))]),K(`click`,g,()=>ee(G(t))),K(`click`,_,()=>D(G(t))),J(e,n)});var c=V(s,4),u=V(z(c),2),d=z(u,!0);j(u),j(c),j(o);var f=V(o,2),p=z(f);j(f),H(e=>Y(d,e),[()=>G(C)()]),K(`click`,a,E),K(`click`,p,()=>{R(l,`contact`)}),J(e,t)};return X(se,e=>{G(d)?e(ce):G(l)===`payment`?e(le,1):G(l)===`result`?e(ue,2):G(fe)?e(de,3):G(l)===`contact`?e(pe,4):e(me,-1)}),j(oe),J(e,oe),N(O)}vr([`click`]),Q(xc,{cart:{},api:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},onClose:{},onOrderConfirmed:{}},[],[],{mode:`open`});var Sc=q(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),Cc=q(`<div style="height:100vh"><!></div>`),wc=q(`<div class="loading-center" style="height:100vh;color:var(--bw-color-text-secondary)">No items in cart.</div>`),Tc=q(`<div class="bw-widget svelte-16hmqxh"><!></div>`),Ec={hash:`svelte-16hmqxh`,code:`\r
39
+ .icon.partial.svelte-16gfovn {border:2px solid #B8860B;color:#B8860B;background:rgba(184, 134, 11, 0.08);}h2.svelte-16gfovn {font-size:20px;font-weight:700;margin-bottom:8px;}.desc.svelte-16gfovn {color:var(--bw-color-text-secondary);font-size:14px;margin-bottom:28px;max-width:280px;line-height:1.5;}.actions.svelte-16gfovn {display:flex;flex-direction:column;gap:8px;width:100%;max-width:220px;}`};function oc(e,t){M(t,!0),Yr(e,ac);let n=Z(t,`status`,7),r=Z(t,`verifying`,7),i=Z(t,`onDone`,7),a=Z(t,`onRetry`,7),o=Z(t,`onCheckAgain`,7),s=P(()=>n()?.outcome===`successful`),c=P(()=>n()?.outcome===`pending`),l=P(()=>n()?.outcome===`partial`),u=P(()=>n()?.outcome===`failed`&&n().retryPayment!==!1);var d={get status(){return n()},set status(e){n(e),I()},get verifying(){return r()},set verifying(e){r(e),I()},get onDone(){return i()},set onDone(e){i(e),I()},get onRetry(){return a()},set onRetry(e){a(e),I()},get onCheckAgain(){return o()},set onCheckAgain(e){o(e),I()}},f=ic(),p=z(f),m=e=>{var t=Xs();Ne(2),J(e,t)},h=e=>{var t=Qs(),r=V(B(t),4),a=z(r,!0);j(r);var s=V(r,2),c=z(s),l=e=>{var t=Zs();K(`click`,t,function(...e){o()?.apply(this,e)}),J(e,t)};X(c,e=>{o()&&e(l)});var u=V(c,2);j(s),H(()=>Y(a,n()?.resultDescription??`We couldn't confirm this payment yet. Please don't try to pay again for now - we'll email you as soon as we know where it stands.`)),K(`click`,u,function(...e){i()?.apply(this,e)}),J(e,t)},g=e=>{var t=$s(),r=V(B(t),4),a=z(r,!0);j(r);var o=V(r,2);H(()=>Y(a,n()?.resultDescription??`Your payment succeeded, but we couldn't confirm every item in your booking. Please contact us with your order details.`)),K(`click`,o,function(...e){i()?.apply(this,e)}),J(e,t)},_=e=>{var t=rc(),r=B(t);let o;var c=z(r,!0);j(r);var l=V(r,2),d=z(l,!0);j(l);var f=V(l,2),p=z(f,!0);j(f);var m=V(f,2),h=e=>{var t=ec();K(`click`,t,function(...e){i()?.apply(this,e)}),J(e,t)},g=e=>{var t=tc();K(`click`,t,function(...e){a()?.apply(this,e)}),J(e,t)},_=e=>{var t=nc();K(`click`,t,function(...e){i()?.apply(this,e)}),J(e,t)};X(m,e=>{G(s)?e(h):G(u)?e(g,1):e(_,-1)}),H(()=>{o=$r(r,1,`icon svelte-16gfovn`,null,o,{success:G(s),failure:!G(s)}),Y(c,G(s)?`✓`:`!`),Y(d,G(s)?`Payment Successful`:`Payment Failed`),Y(p,G(s)?`Your booking has been confirmed.`:n()?.resultDescription??`Something went wrong. Please try again.`)}),J(e,t)};return X(p,e=>{r()?e(m):G(c)?e(h,1):G(l)?e(g,2):e(_,-1)}),j(f),J(e,f),N(d)}vr([`click`]),Q(oc,{status:{},verifying:{},onDone:{},onRetry:{},onCheckAgain:{}},[],[],{mode:`open`});var sc=q(`<p class="edit-error svelte-15l4305"> </p>`),cc=q(`<div class="saving-overlay svelte-15l4305"><div class="spinner"></div></div>`),lc=q(`<div class="edit-view svelte-15l4305"><div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Edit Item</h2> <span class="spacer"></span> <button class="icon-btn" aria-label="Close">&times;</button></div> <!> <div><!> <!></div></div>`),uc={hash:`svelte-15l4305`,code:`.edit-view.svelte-15l4305 {display:flex;flex-direction:column;height:100%;max-height:100%;overflow:hidden;}.edit-error.svelte-15l4305 {margin:0;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;}.edit-body.svelte-15l4305 {position:relative;display:flex;flex-direction:column;flex:1;min-height:0;}.edit-body.saving.svelte-15l4305 {pointer-events:none;}.saving-overlay.svelte-15l4305 {position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(255, 255, 255, 0.7);}`};function dc(e,t){M(t,!0),Yr(e,uc);let n=Z(t,`cartItem`,7),r=Z(t,`product`,7),i=Z(t,`api`,7),a=Z(t,`wizardPages`,7),o=Z(t,`editPages`,7),s=Z(t,`autoSelectSingleTimeSlot`,7,!1),c=Z(t,`onBack`,7),l=Z(t,`onClose`,7),u=Z(t,`onUpdated`,7),d=Z(t,`onPriceChanged`,7),f=L(!1),p=L(null);async function m(e){R(f,!0),R(p,null);try{await i().updateCartItem(n().id,{productId:e.productId,optionId:e.optionId,unitItems:Fi(e.units),availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),u()()}catch(e){if(Li(e)){R(p,`This item's price has changed. Please check the updated price and save again.`),await d()?.();return}R(p,e instanceof Ii&&e.status===424?`This change could not be saved - the supplier rejected it. Please try different options.`:`Something went wrong saving your changes. Please try again.`,!0)}finally{R(f,!1)}}var h={get cartItem(){return n()},set cartItem(e){n(e),I()},get product(){return r()},set product(e){r(e),I()},get api(){return i()},set api(e){i(e),I()},get wizardPages(){return a()},set wizardPages(e){a(e),I()},get editPages(){return o()},set editPages(e){o(e),I()},get autoSelectSingleTimeSlot(){return s()},set autoSelectSingleTimeSlot(e=!1){s(e),I()},get onBack(){return c()},set onBack(e){c(e),I()},get onClose(){return l()},set onClose(e){l(e),I()},get onUpdated(){return u()},set onUpdated(e){u(e),I()},get onPriceChanged(){return d()},set onPriceChanged(e){d(e),I()}},g=lc(),_=z(g),v=z(_),y=V(v,6);j(_);var b=V(_,2),x=e=>{var t=sc(),n=z(t,!0);j(t),H(()=>Y(n,G(p))),J(e,t)};X(b,e=>{G(p)&&e(x)});var S=V(b,2);let C;var w=z(S);{let e=P(()=>a()??Wa),t=P(()=>o()??a()??Wa);$o(w,{get product(){return r()},get api(){return i()},get wizardPages(){return G(e)},get editPages(){return G(t)},get editItem(){return n()},get autoSelectSingleTimeSlot(){return s()},onComplete:m,get onCancel(){return c()}})}var T=V(w,2),E=e=>{J(e,cc())};return X(T,e=>{G(f)&&e(E)}),j(S),j(g),H(()=>C=$r(S,1,`edit-body svelte-15l4305`,null,C,{saving:G(f)})),K(`click`,v,function(...e){c()?.apply(this,e)}),K(`click`,y,function(...e){l()?.apply(this,e)}),J(e,g),N(h)}vr([`click`]),Q(dc,{cartItem:{},product:{},api:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},onBack:{},onClose:{},onUpdated:{},onPriceChanged:{}},[],[],{mode:`open`});var fc=q(`<div class="loading-center" style="height:100%"><div class="spinner"></div></div>`),pc=q(`<p class="pay-error svelte-i0rtg0"> </p>`),mc=q(`<div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Checkout</h2> <span class="spacer"></span> <!> <button class="icon-btn" aria-label="Close">&times;</button></div> <div class="body svelte-i0rtg0"><!> <div class="contact-header svelte-i0rtg0"><span class="contact-title svelte-i0rtg0">Contact Details</span> <span class="required-hint svelte-i0rtg0">* Required Fields</span></div> <!> <div style="margin-top:24px"><!></div></div> <div class="pay-bar svelte-i0rtg0"><span class="pay-bar-total svelte-i0rtg0"> </span> <button class="pay-bar-btn svelte-i0rtg0"> </button></div>`,1),hc=q(`<p class="cart-detail svelte-i0rtg0"> </p>`),gc=q(`<div class="cart-unit-line svelte-i0rtg0"><span class="cart-unit-label svelte-i0rtg0"> </span> <span class="cart-unit-price svelte-i0rtg0"> </span></div>`),_c=q(`<div class="cart-card svelte-i0rtg0"><div class="cart-card-top svelte-i0rtg0"><h3 class="cart-product svelte-i0rtg0"> </h3> <span class="cart-item-total svelte-i0rtg0"> </span></div> <div class="cart-detail-lines svelte-i0rtg0"><!> <p class="cart-detail svelte-i0rtg0"> </p></div> <div class="cart-divider svelte-i0rtg0"></div> <div class="cart-units svelte-i0rtg0"></div> <div class="cart-actions svelte-i0rtg0"><button class="action-edit svelte-i0rtg0">Edit</button> <button class="action-remove svelte-i0rtg0">Remove</button></div></div>`),vc=q(`<div class="page-header"><h2>Your cart</h2> <span class="spacer"></span> <!> <button class="keep-shopping-btn svelte-i0rtg0">+ Keep shopping</button></div> <div class="body svelte-i0rtg0"><!> <div class="cart-total-divider svelte-i0rtg0"></div> <div class="cart-total-row svelte-i0rtg0"><span>Total payable today</span> <span class="cart-total-amount svelte-i0rtg0"> </span></div></div> <div class="action-bar"><button class="btn btn-primary">Checkout</button></div>`,1),yc=q(`<div class="modal svelte-i0rtg0"><!></div>`),bc={hash:`svelte-i0rtg0`,code:`.modal.svelte-i0rtg0 {display:flex;flex-direction:column;height:100%;max-height:100%;overflow:hidden;background:var(--bw-color-surface);}.body.svelte-i0rtg0 {flex:1;overflow-y:auto;padding:16px;}\r
40
+ \r
41
+ /* -- Cart view -- */.keep-shopping-btn.svelte-i0rtg0 {padding:8px 16px;background:none;border:2px solid #222;border-radius:var(--bw-radius-md);font-size:13px;font-weight:600;color:#222;cursor:pointer;}.keep-shopping-btn.svelte-i0rtg0:hover {background:#f5f5f5;}.cart-card.svelte-i0rtg0 {border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);padding:20px;margin-bottom:16px;}.cart-card-top.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:flex-start;gap:16px;}.cart-product.svelte-i0rtg0 {font-size:16px;font-weight:700;flex:1;}.cart-item-total.svelte-i0rtg0 {font-size:16px;font-weight:800;white-space:nowrap;}.cart-detail-lines.svelte-i0rtg0 {margin-top:4px;}.cart-detail.svelte-i0rtg0 {font-size:13px;color:var(--bw-color-text-secondary);line-height:1.5;}.cart-divider.svelte-i0rtg0 {border-top:1px dashed var(--bw-color-border);margin:14px 0;}.cart-units.svelte-i0rtg0 {display:flex;flex-direction:column;gap:6px;margin-bottom:14px;}.cart-unit-line.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:center;font-size:14px;}.cart-unit-label.svelte-i0rtg0 {color:#333;}.cart-unit-price.svelte-i0rtg0 {font-weight:600;font-variant-numeric:tabular-nums;}.cart-actions.svelte-i0rtg0 {display:flex;gap:16px;}.action-edit.svelte-i0rtg0 {background:none;border:none;font-size:13px;font-weight:700;color:var(--bw-color-primary);padding:0;cursor:pointer;}.action-edit.svelte-i0rtg0:hover {text-decoration:underline;}.action-remove.svelte-i0rtg0 {background:none;border:none;font-size:13px;font-weight:600;color:#555;padding:0;cursor:pointer;}.action-remove.svelte-i0rtg0:hover {text-decoration:underline;}.cart-total-divider.svelte-i0rtg0 {border-top:3px solid #111;margin:8px 0 20px;}.cart-total-row.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:center;font-size:16px;font-weight:700;margin-bottom:20px;}.cart-total-amount.svelte-i0rtg0 {font-size:20px;font-weight:800;}\r
42
+ /* -- Contact view -- */.pay-error.svelte-i0rtg0 {margin:0 0 16px;padding:12px 16px;background:#fdecea;color:#b3261e;font-size:14px;border-radius:var(--bw-radius-md);}.contact-header.svelte-i0rtg0 {display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;}.contact-title.svelte-i0rtg0 {font-size:16px;font-weight:700;}.required-hint.svelte-i0rtg0 {font-size:12px;color:var(--bw-color-primary);}.pay-bar.svelte-i0rtg0 {display:flex;align-items:center;flex-shrink:0;background:var(--bw-color-primary);color:white;position:sticky;bottom:0;}.pay-bar-total.svelte-i0rtg0 {padding:0 20px;font-size:16px;font-weight:700;}.pay-bar-btn.svelte-i0rtg0 {flex:1;display:flex;align-items:center;justify-content:flex-end;gap:8px;height:52px;padding:0 20px;background:none;border:none;color:white;font-size:16px;font-weight:700;}.pay-bar-btn.svelte-i0rtg0:disabled {opacity:0.7;cursor:default;}`};function xc(e,t){M(t,!0),Yr(e,bc);let n=Z(t,`cart`,7),r=Z(t,`api`,7),i=Z(t,`wizardPages`,7),a=Z(t,`editPages`,7),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=Z(t,`onClose`,7),c=Z(t,`onOrderConfirmed`,7);_n(()=>na(e=>{e.type===`cart:updated`&&`cart`in e&&e.cart===null&&T(),e.type===`payment:timed-out`&&b.onPaymentTimedOut()}));let l=L(`cart`),u=L(null),d=L(!0),f=L(!1),p=L(!1),m=L(!1),h=L(``),g=L(``),_=L(``),v=L(``),y=L(null),b=js({getApi:()=>r(),getCart:()=>n(),reloadCart:ne,notifyCartUpdated:ie,refreshDeadlineAfterPay:()=>void re(),setView:e=>{R(l,e,!0)},close:T,onOrderConfirmed:()=>c()()}),x=L(Qt(new Map));async function S(){try{let e=[...new Set(n().items.map(e=>e.productId))],t=await Promise.all(e.map(e=>r().getProduct(e))),i=new Map;for(let e of t)i.set(e.id,e);R(x,i,!0)}catch{}finally{R(d,!1)}}S(),b.resumeInterruptedPayment();let C=P(()=>()=>Xa(Ms(n()),Ns(n()),2,2)),w=P(()=>ia(n()));Rr(()=>{b.dispose(),$({type:`modal:close`})});function T(){$({type:`modal:close`}),s()()}function E(){T()}function ee(e){R(u,e,!0),R(l,`edit`)}async function te(){await ne()&&(R(l,`cart`),ie(n()))}async function D(e){try{await r().removeCartItem(e.id)}catch(e){if(!Ri(e))throw e;T();return}await ne()&&(ie(n()),n().items.length===0&&T())}async function ne(){try{return n(await r().getCart()),!0}catch(e){if(!Ri(e))throw e;return T(),!1}}async function re(){try{n(await r().getCart()),ie(n())}catch{}}function ie(e){$({type:`cart:updated`,cart:e})}async function ae(){R(m,!0),!(!G(y)?.isValid()||!G(f))&&await b.payNow(G(y).getContact())}var O={get cart(){return n()},set cart(e){n(e),I()},get api(){return r()},set api(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e){i(e),I()},get editPages(){return a()},set editPages(e){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()},get onClose(){return s()},set onClose(e){s(e),I()},get onOrderConfirmed(){return c()},set onOrderConfirmed(e){c(e),I()}},oe=yc(),se=z(oe),ce=e=>{J(e,fc())},le=e=>{var t=Er(),n=B(t),r=e=>{Ys(e,{get checkoutId(){return b.paymentResult.checkoutId},get entityId(){return b.paymentResult.entityId},get expiresAt(){return G(w)},get onPaymentComplete(){return b.onPaymentComplete}})},i=e=>{J(e,fc())};X(n,e=>{b.paymentResult?e(r):e(i,-1)}),J(e,t)},ue=e=>{{let t=P(()=>b.resultStatus?.outcome===`pending`?b.checkStatusAgain:void 0);oc(e,{get status(){return b.resultStatus},get verifying(){return b.isConfirming},onDone:()=>{$({type:`modal:close`})},get onRetry(){return b.retry},get onCheckAgain(){return G(t)}})}},de=e=>{{let t=P(()=>G(x).get(G(u).productId));dc(e,{get cartItem(){return G(u)},get product(){return G(t)},get api(){return r()},get wizardPages(){return i()},get editPages(){return a()},get autoSelectSingleTimeSlot(){return o()},onBack:()=>{R(l,`cart`)},onClose:T,onUpdated:te,onPriceChanged:S})}},fe=P(()=>G(l)===`edit`&&G(u)&&G(x).get(G(u).productId)),pe=e=>{var t=mc(),n=B(t),r=z(n),i=V(r,6);ms(i,{get expiresAt(){return G(w)}});var a=V(i,2);j(n);var o=V(n,2),s=z(o),c=e=>{var t=pc(),n=z(t,!0);j(t),H(()=>Y(n,b.payError)),J(e,t)};X(s,e=>{b.payError&&e(c)});var u=V(s,4);pi(Bs(u,{get hasAttemptedSubmit(){return G(m)},get firstName(){return G(h)},set firstName(e){R(h,e,!0)},get lastName(){return G(g)},set lastName(e){R(g,e,!0)},get emailAddress(){return G(_)},set emailAddress(e){R(_,e,!0)},get phoneNumber(){return G(v)},set phoneNumber(e){R(v,e,!0)}}),e=>R(y,e,!0),()=>G(y));var d=V(u,2);Us(z(d),{get privacyAccepted(){return G(f)},get marketingOptIn(){return G(p)},get hasAttemptedSubmit(){return G(m)},onPrivacyChanged:e=>{R(f,e,!0)},onMarketingChanged:e=>{R(p,e,!0)}}),j(d),j(o);var x=V(o,2),S=z(x),E=z(S,!0);j(S);var ee=V(S,2),te=z(ee,!0);j(ee),j(x),H(e=>{Y(E,e),ee.disabled=b.isPaying,Y(te,b.isPaying?`Paying…`:`Pay Now`)},[()=>G(C)()]),K(`click`,r,()=>{R(l,`cart`)}),K(`click`,a,T),K(`click`,ee,ae),J(e,t)},me=e=>{var t=vc(),r=B(t),i=V(z(r),4);ms(i,{get expiresAt(){return G(w)}});var a=V(i,2);j(r);var o=V(r,2),s=z(o);Ur(s,17,()=>n().items,zr,(e,t)=>{var n=_c(),r=z(n),i=z(r),a=z(i,!0);j(i);var o=V(i,2),s=z(o,!0);j(o),j(r);var c=V(r,2),l=z(c),u=e=>{var n=hc(),r=z(n,!0);j(n),H(e=>Y(r,e),[()=>Ls(G(t))]),J(e,n)},d=P(()=>Ls(G(t)));X(l,e=>{G(d)&&e(u)});var f=V(l,2),p=z(f,!0);j(f),j(c);var m=V(c,4);Ur(m,21,()=>Is(G(t),G(x)),zr,(e,n)=>{var r=gc(),i=z(r),a=z(i);j(i);var o=V(i,2),s=z(o,!0);j(o),j(r),H(e=>{Y(a,`${G(n).title??``} × ${G(n).quantity??``}`),Y(s,e)},[()=>Xa(G(n).linePrice,G(t).currencyCode,2,0)]),J(e,r)}),j(m);var h=V(m,2),g=z(h),_=V(g,2);j(h),j(n),H((e,t,n)=>{Y(a,e),Y(s,t),Y(p,n)},[()=>Ps(G(t),G(x)),()=>Xa(G(t).amount,G(t).currencyCode,2,0),()=>Fs(G(t),G(x))]),K(`click`,g,()=>ee(G(t))),K(`click`,_,()=>D(G(t))),J(e,n)});var c=V(s,4),u=V(z(c),2),d=z(u,!0);j(u),j(c),j(o);var f=V(o,2),p=z(f);j(f),H(e=>Y(d,e),[()=>G(C)()]),K(`click`,a,E),K(`click`,p,()=>{R(l,`contact`)}),J(e,t)};return X(se,e=>{G(d)?e(ce):G(l)===`payment`?e(le,1):G(l)===`result`?e(ue,2):G(fe)?e(de,3):G(l)===`contact`?e(pe,4):e(me,-1)}),j(oe),J(e,oe),N(O)}vr([`click`]),Q(xc,{cart:{},api:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},onClose:{},onOrderConfirmed:{}},[],[],{mode:`open`});var Sc=q(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),Cc=q(`<div style="height:100vh"><!></div>`),wc=q(`<div class="loading-center" style="height:100vh;color:var(--bw-color-text-secondary)">No items in cart.</div>`),Tc=q(`<div class="bw-widget svelte-16hmqxh"><!></div>`),Ec={hash:`svelte-16hmqxh`,code:`\r
40
43
  /* display: contents - a plain box here would break CheckoutModal's own .modal{height:100%}, which needs\r
41
44
  to resolve against this component's real parent, not an unsized wrapper inserted in between. */.bw-widget.svelte-16hmqxh {display:contents;}`};function Dc(e,t){M(t,!0),Yr(e,Ec);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`wizardPages`,7,Wa),a=Z(t,`editPages`,7),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=P(()=>a()??i()),c=L(null),l=L(!0),u=L(!1);async function d(){let e=n().cartToken!==``;try{R(c,await n().getCart(),!0)}catch(t){R(c,null),e&&Ri(t)&&(f(),R(u,!0))}R(l,!1)}d();function f(){r()?.reset(),$({type:`cart:updated`,cart:null}),$({type:`cart:expired`})}function p(){R(u,!1),$({type:`modal:close`}),d()}_n(()=>na(e=>{e.type===`cart:updated`&&`cart`in e&&R(c,e.cart,!0)}));var m={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e=Wa){i(e),I()},get editPages(){return a()},set editPages(e){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()}},h=Tc(),g=z(h),_=e=>{J(e,Sc())},v=e=>{xc(e,{get cart(){return G(c)},get api(){return n()},get wizardPages(){return i()},get editPages(){return G(s)},get autoSelectSingleTimeSlot(){return o()},onClose:()=>$({type:`modal:close`}),onOrderConfirmed:()=>{let e=G(c).items.reduce((e,t)=>e+t.amount,0),t=G(c).items[0]?.currencyCode??`ZAR`;$({type:`order:complete`,cartToken:G(c).cartToken??``,value:e,currency:t}),r()?.reset()}})},y=e=>{var t=Cc();ga(z(t),{onStartAgain:p}),j(t),J(e,t)},b=e=>{J(e,wc())};return X(g,e=>{G(l)?e(_):G(c)&&G(c).items.length>0?e(v,1):G(u)?e(y,2):e(b,-1)}),j(h),J(e,h),N(m)}Q(Dc,{api:{},cartManager:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{}},[],[],{mode:`open`});var Oc=q(`<div class="bw-modal-overlay svelte-5e515v"><div class="bw-modal-inner svelte-5e515v"><!></div></div>`),kc={hash:`svelte-5e515v`,code:`.bw-modal-overlay.svelte-5e515v {position:fixed;inset:0;z-index:10000;background:rgba(0, 0, 0, 0.5);}.bw-modal-inner.svelte-5e515v {width:100%;max-width:900px;height:95vh;margin:2.5vh auto;border-radius:12px;background:#fff;overflow:hidden;box-shadow:0 8px 40px rgba(0, 0, 0, 0.3);}`};function Ac(e,t){M(t,!0),Yr(e,kc);let n=Z(t,`api`,7),r=Z(t,`cartManager`,7),i=Z(t,`wizardPages`,7,Wa),a=Z(t,`editPages`,7),o=Z(t,`autoSelectSingleTimeSlot`,7,!1),s=Z(t,`mode`,7,`inline`),c=Z(t,`open`,7),l=Z(t,`onClose`,7),u=va(),d=P(()=>ya(n()??u?.api,`Checkout`,`api`)),f=P(()=>r()??u?.cartManager),p=P(()=>c()??u?.isCheckoutOpen??!0),m=P(()=>l()??(u?()=>u.closeCheckout():void 0)),h=P(()=>s()===`modal`),g=L(!1),_=P(()=>!G(h)||G(p)&&!G(g)),v=!1,y=!1;_n(()=>{let e=G(p);e&&!y&&(R(g,!1),v=!1),y=e});function b(){$({type:`modal:close`})}_n(()=>na(e=>{e.type!==`modal:close`||!G(h)||v||G(_)&&(v=!0,R(g,!0),G(m)?.())}));function x(e){G(_)&&G(h)&&e.key===`Escape`&&b()}var S={get api(){return n()},set api(e){n(e),I()},get cartManager(){return r()},set cartManager(e){r(e),I()},get wizardPages(){return i()},set wizardPages(e=Wa){i(e),I()},get editPages(){return a()},set editPages(e){a(e),I()},get autoSelectSingleTimeSlot(){return o()},set autoSelectSingleTimeSlot(e=!1){o(e),I()},get mode(){return s()},set mode(e=`inline`){s(e),I()},get open(){return c()},set open(e){c(e),I()},get onClose(){return l()},set onClose(e){l(e),I()}},C=Er();_r(`keydown`,$t,x);var w=B(C),T=e=>{var t=Er(),n=B(t),r=e=>{var t=Oc(),n=z(t);Dc(z(n),{get api(){return G(d)},get cartManager(){return G(f)},get wizardPages(){return i()},get editPages(){return a()},get autoSelectSingleTimeSlot(){return o()}}),j(n),j(t),Xr(t,e=>Os?.(e)),K(`click`,t,b),K(`click`,n,e=>e.stopPropagation()),J(e,t)};X(n,e=>{G(_)&&e(r)}),J(e,t)},E=e=>{Dc(e,{get api(){return G(d)},get cartManager(){return G(f)},get wizardPages(){return i()},get editPages(){return a()},get autoSelectSingleTimeSlot(){return o()}})};return X(w,e=>{G(h)?e(T):e(E,-1)}),J(e,C),N(S)}vr([`click`]),Q(Ac,{api:{},cartManager:{},wizardPages:{},editPages:{},autoSelectSingleTimeSlot:{},mode:{},open:{},onClose:{}},[],[],{mode:`open`});var jc=q(`<div class="loading-center"><div class="spinner"></div></div>`),Mc=q(`<div style="display: contents"><!></div>`);function Nc(e,t){M(t,!0);let n=Z(t,`wizard-pages`,7,``),r=Z(t,`edit-pages`,7,``),i=Z(t,`is-modal`,7,void 0),a=Z(t,`auto-select-single-time-slot`,7,void 0),o=P(()=>a()!==void 0),s=P(()=>i()===void 0?`inline`:`modal`),{api:c,cartManager:l,ready:u,host:d}=ss(),f=L(!1);u.then(()=>{R(f,!0)});let p=P(()=>Ka(n())),m=P(()=>Ja(n(),r())),h=L(null);function g(e,t){(G(h)?.closest(`bw-checkout`)??document.body).dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}function _(){d.openCheckout()}function v(){d.closeCheckout()}let y=!1,b=!1;_n(()=>{let e=d.isCheckoutOpen;e&&!b&&(y=!1),b=e}),_n(()=>na(e=>{e.type===`modal:close`&&!y&&b&&(y=!0,g(`bw:close`,{})),e.type===`order:complete`&&g(`bw:order-confirmed`,{cartToken:e.cartToken,value:e.value,currency:e.currency})}));var x={open:_,close:v,get"wizard-pages"(){return n()},set"wizard-pages"(e=``){n(e),I()},get"edit-pages"(){return r()},set"edit-pages"(e=``){r(e),I()},get"is-modal"(){return i()},set"is-modal"(e=void 0){i(e),I()},get"auto-select-single-time-slot"(){return a()},set"auto-select-single-time-slot"(e=void 0){a(e),I()}},S=Mc(),C=z(S),w=e=>{Ac(e,{get api(){return c},get cartManager(){return l},get wizardPages(){return G(p)},get editPages(){return G(m)},get autoSelectSingleTimeSlot(){return G(o)},get mode(){return G(s)},get open(){return d.isCheckoutOpen},onClose:()=>d.closeCheckout()})},T=e=>{J(e,jc())};return X(C,e=>{G(f)?e(w):G(s)===`inline`&&e(T,1)}),j(S),pi(S,e=>R(h,e),()=>G(h)),J(e,S),N(x)}customElements.define(`bw-checkout`,Q(Nc,{"wizard-pages":{},"edit-pages":{},"is-modal":{},"auto-select-single-time-slot":{}},[],[`open`,`close`]));var Pc={shouldBottomCloseOnModal:!0,autoSelectSingleTimeSlot:!1,autoOpenCheckout:!0,wizardPages:``,editPages:``,...window.bwOptions??{}},Fc=document.querySelector(`[checkout-key]`)?.getAttribute(`checkout-key`)??``;Na({apiBaseUrl:Ua,checkoutKey:Fc,autoOpenCheckout:Pc.autoOpenCheckout,shouldBottomCloseOnModal:Pc.shouldBottomCloseOnModal,autoSelectSingleTimeSlot:Pc.autoSelectSingleTimeSlot});var Ic=Pa({apiBaseUrl:Ua,checkoutKey:Fc,autoOpenCheckout:Pc.autoOpenCheckout,shouldBottomCloseOnModal:Pc.shouldBottomCloseOnModal,onCartUpdated:e=>Lc(`bw:cart-updated`,{cart:e}),onCartExpired:()=>Lc(`bw:cart-expired`,{}),onCheckoutOpenChange:Hc});window.__bwServices={api:Ic.api,cartManager:Ic.cartManager,ready:Ic.ready,host:Ic};function Lc(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))}function Rc(e){document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,e,{once:!0}):e()}function zc(){return[...document.querySelectorAll(`bw-cart`)]}function Bc(e){zc().forEach(t=>{t.getAttribute(`display`)===`bar`&&(t.parentElement?.classList.toggle(`hidden`,e),e||(t.style.display=``))})}function Vc(){zc().forEach(e=>{e.parentElement?.classList.remove(`hidden`),e.style.display=``}),Ic.options.shouldBottomCloseOnModal&&Bc(Ic.isCheckoutOpen)}function Hc(e){Lc(e?`bw:modal-open`:`bw:modal-close`,{}),Ic.options.shouldBottomCloseOnModal&&Bc(e)}function Uc(){let e=document.querySelectorAll(`bw-configurator`),t=document.querySelectorAll(`bw-cart`),n=document.querySelectorAll(`bw-checkout`),r=[...e,...t,...n];Pc.wizardPages&&r.forEach(e=>{e.hasAttribute(`wizard-pages`)||e.setAttribute(`wizard-pages`,Pc.wizardPages)}),Pc.editPages&&n.forEach(e=>{e.hasAttribute(`edit-pages`)||e.setAttribute(`edit-pages`,Pc.editPages)}),[...e,...n].forEach(e=>{Pc.autoSelectSingleTimeSlot&&!e.hasAttribute(`auto-select-single-time-slot`)&&e.setAttribute(`auto-select-single-time-slot`,``)}),n.forEach(e=>{!e.hasAttribute(`is-modal`)&&!e.hasAttribute(`is-inline`)&&e.setAttribute(`is-modal`,``)}),e.forEach(e=>{e.addEventListener(`bw:cart-change`,()=>{Vc();let t=e.getAttribute(`on-cart-change`);t&&typeof window[t]==`function`&&window[t]()})})}Rc(Uc)})();
@@ -2,4 +2,4 @@
2
2
  \r\f\xA0\v`];function Kr(e,t,n){var r=e==null?``:``+e;if(t&&(r=r?r+` `+t:t),n){for(var i of Object.keys(n))if(n[i])r=r?r+` `+i:i;else if(r.length)for(var a=i.length,o=0;(o=r.indexOf(i,o))>=0;){var s=o+a;(o===0||Gr.includes(r[o-1]))&&(s===r.length||Gr.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function qr(e,t,n,r,i,a){var o=e[O];if(A||o!==n||o===void 0){var s=Kr(n,r,a);(!A||s!==e.getAttribute(`class`))&&(s==null?e.removeAttribute(`class`):t?e.className=s:e.setAttribute(`class`,s)),e[O]=n}else if(a&&i!==a)for(var c in a){var l=!!a[c];(i==null||l!==!!i[c])&&e.classList.toggle(c,l)}return a}var Jr=Symbol(`is custom element`),Yr=Symbol(`is html`),Xr=ue?`link`:`LINK`;function Zr(e){if(A){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;$r(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;$r(e,`checked`,null),e.checked=r}}};e[ce]=n,Ke(n),rt()}}function Qr(e,t){var n=ei(e);n.checked!==(n.checked=t??void 0)&&(e.checked=t)}function $r(e,t,n,r){var i=ei(e);A&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Xr)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[ie]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&ni(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function ei(e){return e[ae]??={[Jr]:e.nodeName.includes(`-`),[Yr]:e.namespaceURI===we}}var ti=new Map;function ni(e){var t=e.getAttribute(`is`)||e.nodeName,n=ti.get(t);if(n)return n;ti.set(t,n=[]);for(var r,i=e,a=Element.prototype;a!==i;){for(var o in r=s(i),r)r[o].set&&o!==`innerHTML`&&o!==`textContent`&&o!==`innerText`&&n.push(o);i=u(i)}return n}function ri(e,t,n=t){var r=new WeakSet;at(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=ii(e)?ai(a):a,n(a),L!==null&&r.add(L),await ar(),a!==(a=t())){var o=e.selectionStart,s=e.selectionEnd,c=e.value.length;if(e.value=a??``,s!==null){var l=e.value.length;o===s&&s===c&&l>c?(e.selectionStart=l,e.selectionEnd=l):(e.selectionStart=o,e.selectionEnd=Math.min(s,l))}}}),(A&&e.defaultValue!==e.value||cr(t)==null&&e.value)&&(n(ii(e)?ai(e.value):e.value),L!==null&&r.add(L)),xn(()=>{var n=t();if(e===document.activeElement){var i=L;if(r.has(i))return}ii(e)&&n===ai(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function ii(e){var t=e.type;return t===`number`||t===`range`}function ai(e){return e===``?null:+e}function oi(e,t){return e===t||e?.[ne]===t}function si(e={},t,n,r){var i=ze.r,a=G;return yn(()=>{var o,s;return xn(()=>{o=s,s=r?.()||[],cr(()=>{oi(n(...s),e)||(t(e,...s),o&&oi(n(...o),e)&&t(null,...o))})}),()=>{let r=a;for(;r!==i&&r.parent!==null&&r.parent.f&33554432;)r=r.parent;let o=()=>{s&&oi(n(...s),e)&&t(null,...s)},c=r.teardown;r.teardown=()=>{o(),c?.()}}}),e}function Q(e,t,n,r){var i=!0,a=!!(n&8),s=!!(n&16),c=r,l=!0,u=void 0,d=()=>s&&i?(u??=mt(r),K(u)):(l&&(l=!1,c=s?cr(r):r),c);let f;if(a){var p=ne in e||re in e;f=o(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;a?[m,h]=tt(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&ve(t),f(m)));var g=i?()=>{var n=e[t];return n===void 0?d():(l=!0,n)}:()=>{var n=e[t];return n!==void 0&&(c=void 0),n===void 0?c:n};if(i&&!(n&4))return g;if(f){var _=e.$$legacy;return(function(e,t){return arguments.length>0?((!i||!t||_||h)&&f(t?g():e),e):g()})}var v=!1,y=(n&1?mt:_t)(()=>(v=!1,g()));a&&K(y);var b=G;return(function(e,t){if(arguments.length>0){let n=t?K(y):i&&a?Zt(e):e;return z(y,n),v=!0,c!==void 0&&(c=n),e}return Ln&&v||b.f&16384?y.v:K(y)})}function ci(e){ze===null&&de(`onMount`),gn(()=>{let t=cr(e);if(typeof t==`function`)return t})}function li(e){ze===null&&de(`onDestroy`),ci(()=>()=>cr(e))}var ui=/\{[^{}]+\}/g,di=()=>typeof process==`object`&&Number.parseInt(process?.versions?.node?.substring(0,2))>=18&&process.versions.undici;function fi(){return Math.random().toString(36).slice(2,11)}function pi(e){let{baseUrl:t=``,Request:n=globalThis.Request,fetch:r=globalThis.fetch,querySerializer:i,bodySerializer:a,pathSerializer:o,headers:s,requestInitExt:c=void 0,...l}={...e};c=di()?c:void 0,t=Si(t);let u=[];async function d(e,d){let{baseUrl:f,fetch:p=r,Request:m=n,headers:h,params:g={},parseAs:_=`json`,querySerializer:v,bodySerializer:y=a??yi,pathSerializer:b,body:x,middleware:S=[],...C}=d||{},w=t;f&&(w=Si(f)??t);let T=typeof i==`function`?i:_i(i);v&&(T=typeof v==`function`?v:_i({...typeof i==`object`?i:{},...v}));let ee=b||o||vi,E=x===void 0?void 0:y(x,xi(s,h,g.header)),te=xi(E===void 0||E instanceof FormData?{}:{"Content-Type":`application/json`},s,h,g.header),D=[...u,...S],ne={redirect:`follow`,...l,...C,body:E,headers:te},re,ie,ae=new m(bi(e,{baseUrl:w,params:g,querySerializer:T,pathSerializer:ee}),ne),O;for(let e in C)e in ae||(ae[e]=C[e]);if(D.length){re=fi(),ie=Object.freeze({baseUrl:w,fetch:p,parseAs:_,querySerializer:T,bodySerializer:y,pathSerializer:ee});for(let t of D)if(t&&typeof t==`object`&&typeof t.onRequest==`function`){let n=await t.onRequest({request:ae,schemaPath:e,params:g,options:ie,id:re});if(n){if(n instanceof m)ae=n;else if(n instanceof Response){O=n;break}else throw Error(`onRequest: must return new Request() or Response() when modifying the request`)}}}if(!O){try{O=await p(ae,c)}catch(t){let n=t;if(D.length)for(let t=D.length-1;t>=0;t--){let r=D[t];if(r&&typeof r==`object`&&typeof r.onError==`function`){let t=await r.onError({request:ae,error:n,schemaPath:e,params:g,options:ie,id:re});if(t){if(t instanceof Response){n=void 0,O=t;break}if(t instanceof Error){n=t;continue}throw Error(`onError: must return new Response() or instance of Error`)}}}if(n)throw n}if(D.length)for(let t=D.length-1;t>=0;t--){let n=D[t];if(n&&typeof n==`object`&&typeof n.onResponse==`function`){let t=await n.onResponse({request:ae,response:O,schemaPath:e,params:g,options:ie,id:re});if(t){if(!(t instanceof Response))throw Error(`onResponse: must return new Response() when modifying the response`);O=t}}}}let oe=O.headers.get(`Content-Length`);if(O.status===204||ae.method===`HEAD`||oe===`0`&&!O.headers.get(`Transfer-Encoding`)?.includes(`chunked`))return O.ok?{data:void 0,response:O}:{error:void 0,response:O};if(O.ok)return{data:await(async()=>{if(_===`stream`)return O.body;if(_===`json`&&!oe){let e=await O.text();return e?JSON.parse(e):void 0}return await O[_]()})(),response:O};let se=await O.text();try{se=JSON.parse(se)}catch{}return{error:se,response:O}}return{request(e,t,n){return d(t,{...n,method:e.toUpperCase()})},GET(e,t){return d(e,{...t,method:`GET`})},PUT(e,t){return d(e,{...t,method:`PUT`})},POST(e,t){return d(e,{...t,method:`POST`})},DELETE(e,t){return d(e,{...t,method:`DELETE`})},OPTIONS(e,t){return d(e,{...t,method:`OPTIONS`})},HEAD(e,t){return d(e,{...t,method:`HEAD`})},PATCH(e,t){return d(e,{...t,method:`PATCH`})},TRACE(e,t){return d(e,{...t,method:`TRACE`})},use(...e){for(let t of e)if(t){if(typeof t!=`object`||!(`onRequest`in t||`onResponse`in t||`onError`in t))throw Error("Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`");u.push(t)}},eject(...e){for(let t of e){let e=u.indexOf(t);e!==-1&&u.splice(e,1)}}}}function mi(e,t,n){if(t==null)return``;if(typeof t==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${n?.allowReserved===!0?t:encodeURIComponent(t)}`}function hi(e,t,n){if(!t||typeof t!=`object`)return``;let r=[],i={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`;if(n.style!==`deepObject`&&n.explode===!1){for(let e in t)r.push(e,n.allowReserved===!0?t[e]:encodeURIComponent(t[e]));let i=r.join(`,`);switch(n.style){case`form`:return`${e}=${i}`;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return i}}for(let i in t){let a=n.style===`deepObject`?`${e}[${i}]`:i;r.push(mi(a,t[i],n))}let a=r.join(i);return n.style===`label`||n.style===`matrix`?`${i}${a}`:a}function gi(e,t,n){if(!Array.isArray(t))return``;if(n.explode===!1){let r={form:`,`,spaceDelimited:`%20`,pipeDelimited:`|`}[n.style]||`,`,i=(n.allowReserved===!0?t:t.map(e=>encodeURIComponent(e))).join(r);switch(n.style){case`simple`:return i;case`label`:return`.${i}`;case`matrix`:return`;${e}=${i}`;default:return`${e}=${i}`}}let r={simple:`,`,label:`.`,matrix:`;`}[n.style]||`&`,i=[];for(let r of t)n.style===`simple`||n.style===`label`?i.push(n.allowReserved===!0?r:encodeURIComponent(r)):i.push(mi(e,r,n));return n.style===`label`||n.style===`matrix`?`${r}${i.join(r)}`:i.join(r)}function _i(e){return function(t){let n=[];if(t&&typeof t==`object`)for(let r in t){let i=t[r];if(i!=null){if(Array.isArray(i)){if(i.length===0)continue;n.push(gi(r,i,{style:`form`,explode:!0,...e?.array,allowReserved:e?.allowReserved||!1}));continue}if(typeof i==`object`){n.push(hi(r,i,{style:`deepObject`,explode:!0,...e?.object,allowReserved:e?.allowReserved||!1}));continue}n.push(mi(r,i,e))}}return n.join(`&`)}}function vi(e,t){let n=e;for(let r of e.match(ui)??[]){let e=r.substring(1,r.length-1),i=!1,a=`simple`;if(e.endsWith(`*`)&&(i=!0,e=e.substring(0,e.length-1)),e.startsWith(`.`)?(a=`label`,e=e.substring(1)):e.startsWith(`;`)&&(a=`matrix`,e=e.substring(1)),!t||t[e]===void 0||t[e]===null)continue;let o=t[e];if(Array.isArray(o)){n=n.replace(r,gi(e,o,{style:a,explode:i}));continue}if(typeof o==`object`){n=n.replace(r,hi(e,o,{style:a,explode:i}));continue}if(a===`matrix`){n=n.replace(r,`;${mi(e,o)}`);continue}n=n.replace(r,a===`label`?`.${encodeURIComponent(o)}`:encodeURIComponent(o))}return n}function yi(e,t){return e instanceof FormData?e:t&&(t.get instanceof Function?t.get(`Content-Type`)??t.get(`content-type`):t[`Content-Type`]??t[`content-type`])===`application/x-www-form-urlencoded`?new URLSearchParams(e).toString():JSON.stringify(e)}function bi(e,t){let n=`${t.baseUrl}${e}`;t.params?.path&&(n=t.pathSerializer(n,t.params.path));let r=t.querySerializer(t.params.query??{});return r.startsWith(`?`)&&(r=r.substring(1)),r&&(n+=`?${r}`),n}function xi(...e){let t=new Headers;for(let n of e){if(!n||typeof n!=`object`)continue;let e=n instanceof Headers?n.entries():Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,r)}return t}function Si(e){return e.endsWith(`/`)?e.substring(0,e.length-1):e}function Ci(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function wi(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}`}function Ti(e){let t=e.match(/\d{4}-\d{2}-\d{2}/);return t?t[0]:null}function Ei(e){let t=[];for(let n of e)for(let e=0;e<n.quantity;e++)t.push({unitId:n.unitId});return t}var Di=class extends Error{status;body;constructor(e,t){super(`API error ${e}`),this.status=e,this.body=t}get code(){return typeof this.body==`object`&&this.body!==null&&`error`in this.body?String(this.body.error):void 0}};function Oi(e){return e instanceof Di&&e.status===400&&e.code===`PRICE_MISMATCH`}function ki(e){return e instanceof Di&&e.status===401}function Ai(e){return e instanceof Di&&e.status===409&&e.code===void 0}function ji(e){return e instanceof Di&&e.status===409&&e.code===`CART_EXPIRED`}function Mi(e){return e instanceof Di&&e.status===409&&e.code===`PAYMENT_SETTLED`}function Ni(e){return e instanceof Di&&e.status===409&&e.code===`PAYMENT_PENDING`}var Pi=class{sessionToken=``;cartToken=``;client;constructor(e){this.client=pi({baseUrl:e}),this.client.use({onRequest:({request:e})=>(e.headers.set(`Origin`,window.location.origin),this.sessionToken&&e.headers.set(`Morii-Checkout-Session`,this.sessionToken),this.cartToken&&e.headers.set(`Morii-Checkout-Cart`,this.cartToken),e)})}unwrap(e){if(e.data===void 0)throw new Di(e.response.status,e.error);return e.data}async startSession(e){let t=this.unwrap(await this.client.POST(`/v1/checkout/session`,{body:{checkoutKey:e}}));return this.sessionToken=t.sessionToken??``,t}async refreshSession(){let e=this.unwrap(await this.client.POST(`/v1/checkout/session/refresh`));return this.sessionToken=e.sessionToken??``,e}async getProduct(e){return this.unwrap(await this.client.GET(`/v1/checkout/products/{productId}`,{params:{path:{productId:e}}}))}async getAvailabilityCalendar(e,t){let n=new Date,r=new Date(n);r.setDate(r.getDate()+90);let i=this.unwrap(await this.client.POST(`/v1/checkout/availability/calendar`,{body:{productId:e,optionId:t,localDateStart:Ci(n),localDateEnd:Ci(r)}})),a={};for(let e of i)a[e.localDate]=e;return a}async getAvailability(e,t,n){return this.unwrap(await this.client.POST(`/v1/checkout/availability`,{body:{productId:e,optionId:t,localDate:n}}))}async createCart(){let e=this.unwrap(await this.client.POST(`/v1/checkout/cart`));return this.cartToken=e.cartToken??``,e}async getCart(){return this.unwrap(await this.client.GET(`/v1/checkout/cart`))}async addCartItem(e){return this.unwrap(await this.client.POST(`/v1/checkout/cart/items`,{body:e}))}async updateCartItem(e,t){return this.unwrap(await this.client.PATCH(`/v1/checkout/cart/items/{itemId}`,{params:{path:{itemId:e}},body:t}))}async removeCartItem(e){let t=await this.client.DELETE(`/v1/checkout/cart/items/{itemId}`,{params:{path:{itemId:e}}});if(t.response.status>=400)throw new Di(t.response.status)}async payCart(e){return this.unwrap(await this.client.POST(`/v1/checkout/cart/pay`,{body:{contact:e}}))}async getCartStatus(){return this.unwrap(await this.client.GET(`/v1/checkout/cart/status`))}async resolvePayment(){let e=await this.client.POST(`/v1/checkout/cart/resolve-payment`);if(e.response.status>=400)throw new Di(e.response.status,e.error)}async extendCart(){return this.unwrap(await this.client.POST(`/v1/checkout/cart/extend`))}async reportPaymentFailure(e,t,n){let r=await this.client.POST(`/v1/checkout/cart/payment-failure`,{body:{checkoutId:e,resultCode:t,description:n}});if(r.response.status>=400)throw new Di(r.response.status,r.error)}async abandonPayment(e){let t=await this.client.POST(`/v1/checkout/cart/abandon-payment`,{body:{checkoutId:e}});if(t.response.status>=400)throw new Di(t.response.status,t.error)}},Fi=3e5,Ii=12e4,Li=class{api;sessions=new Map;intervalId=null;activeCheckoutKey=``;constructor(e){this.api=e}async ensureSession(e){let t=this.sessions.get(e);if(t&&!this.isExpired(t))return this.activateSession(e,t),t;let n=await this.api.startSession(e);return this.sessions.set(e,n),this.activeCheckoutKey=e,n}startBackgroundRefresh(){this.intervalId||=setInterval(()=>this.refreshExpiringSessions(),Fi)}stop(){this.intervalId&&=(clearInterval(this.intervalId),null)}activateSession(e,t){this.activeCheckoutKey=e,this.api.sessionToken=t.sessionToken??``}isExpired(e){return new Date(e.expiresAt??0).getTime()<=Date.now()}isExpiringSoon(e){return new Date(e.refreshAfter??0).getTime()<=Date.now()+Ii}async refreshExpiringSessions(){for(let[e,t]of this.sessions){if(this.isExpired(t)){this.sessions.delete(e);continue}if(this.isExpiringSoon(t))try{this.api.sessionToken=t.sessionToken??``;let n=await this.api.refreshSession();this.sessions.set(e,n),e===this.activeCheckoutKey&&(this.api.sessionToken=n.sessionToken??``)}catch{this.sessions.delete(e)}}}},Ri=`morii-checkout-payment`,zi=typeof sessionStorage<`u`?sessionStorage:null;function Bi(e,t){let n={cartToken:e,...t};try{zi?.setItem(Ri,JSON.stringify(n))}catch{}}function Vi(e){try{let t=zi?.getItem(Ri);if(!t)return null;let n=JSON.parse(t);return!e||n.cartToken!==e||!n.checkoutId||!n.entityId?(Hi(),null):{checkoutId:n.checkoutId,entityId:n.entityId}}catch{return null}}function Hi(){try{zi?.removeItem(Ri)}catch{}}var Ui=`morii-checkout-cart`,Wi=typeof sessionStorage<`u`?sessionStorage:null,Gi=class{api;cart=null;constructor(e){this.api=e,this.loadFromStorage()}get cartToken(){return this.cart?.cartToken??``}get hasCart(){return this.cart!==null&&!this.isExpired()}async ensureCart(){if(this.cart&&!this.isExpired())return this.cart;let e=await this.api.createCart();return this.cart=e,this.saveToStorage(),e}reset(){this.cart=null,this.api.cartToken=``;try{Wi?.removeItem(Ui)}catch{}Hi()}isExpired(){return!this.cart||new Date(this.cart.absoluteExpiresAt??0).getTime()<=Date.now()}saveToStorage(){if(!this.cart)return;let e={cartToken:this.cart.cartToken??``,absoluteExpiresAt:this.cart.absoluteExpiresAt??``};try{Wi?.setItem(Ui,JSON.stringify(e))}catch{}}loadFromStorage(){try{let e=Wi?.getItem(Ui);if(!e)return;let t=JSON.parse(e);if(new Date(t.absoluteExpiresAt).getTime()<=Date.now()){Wi?.removeItem(Ui),Hi();return}this.cart={cartToken:t.cartToken,issuedAt:``,idleExpiresAt:``,absoluteExpiresAt:t.absoluteExpiresAt},this.api.cartToken=t.cartToken}catch{}}},Ki=new Set([`cart:change`,`cart:updated`,`cart:expired`,`modal:open`,`modal:close`,`order:complete`,`payment:started`,`payment:ended`,`payment:timed-out`]);function $(e){typeof window>`u`||window.parent?.postMessage(JSON.stringify(e),window.location.origin)}function qi(e){if(typeof window>`u`)return()=>{};function t(t){if(t.source!==window||t.origin!==window.location.origin)return;let n;try{n=typeof t.data==`string`?JSON.parse(t.data):t.data}catch{return}typeof n?.type!=`string`||!Ki.has(n.type)||e(n)}return window.addEventListener(`message`,t),()=>window.removeEventListener(`message`,t)}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);function Ji(e){let t=Math.max(0,e),n=Math.floor(t/6e4),r=Math.floor(t%6e4/1e3);return`${String(n).padStart(2,`0`)}:${String(r).padStart(2,`0`)}`}function Yi(e){return new Date(Qi(e.idleExpiresAt))}function Xi(e){return Qi(e.idleExpiresAt)>=Qi(e.absoluteExpiresAt)}var Zi=864e13;function Qi(e){return e?new Date(e).getTime():Zi}function $i(e,t){N(t,!0);let n=Q(t,`remaining`,15,``),r=Q(t,`warning`,15,!1),i=null;gn(()=>{let e=t.expiresAt.getTime();function a(){let a=e-Date.now();n(Ji(a)),r(a>0&&a<=18e4),a<=0&&i!==e&&(i=e,cr(()=>t.onExpired)())}a();let o=setInterval(a,1e3);return()=>clearInterval(o)}),P()}var ea=J(`<p class="svelte-udumw1">Your cart will expire in <strong class="remaining svelte-udumw1"> </strong>. Let us know you're still here
3
3
  and we'll hold your tickets a little longer.</p> <button class="btn btn-primary svelte-udumw1"> </button>`,1),ta=J(`<p class="svelte-udumw1">Your cart will expire in <strong class="remaining svelte-udumw1"> </strong> and can't be held any longer.
4
4
  Please complete your booking before then.</p> <button class="btn btn-primary svelte-udumw1">OK</button>`,1),na=J(`<div class="prompt-card svelte-udumw1" role="dialog" aria-modal="true" aria-labelledby="bw-still-there-title"><h3 id="bw-still-there-title" class="svelte-udumw1">Are you still there?</h3> <!></div>`);function ra(e,t){N(t,!0);let n=R(null);gn(()=>{K(n)?.focus()});var r=na(),i=H(B(r),2),a=e=>{var r=ea(),i=V(r),a=H(B(i)),o=B(a,!0);M(a),je(),M(i);var s=H(i,2),c=B(s,!0);M(s),si(s,e=>z(n,e),()=>K(n)),U(()=>{X(o,t.remaining),s.disabled=t.extending,X(c,t.extending?`One moment...`:`Yes, I'm still here`)}),q(`click`,s,function(...e){t.onExtend?.apply(this,e)}),Y(e,r)},o=e=>{var r=ta(),i=V(r),a=H(B(i)),o=B(a,!0);M(a),je(),M(i);var s=H(i,2);si(s,e=>z(n,e),()=>K(n)),U(()=>X(o,t.remaining)),q(`click`,s,function(...e){t.onDismiss?.apply(this,e)}),Y(e,r)};Z(i,e=>{t.canExtend?e(a):e(o,-1)}),M(r),Y(e,r),P()}vr([`click`]);var ia=J(`<div class="expired svelte-bznxud"><div class="icon svelte-bznxud">!</div> <h2 class="svelte-bznxud">Your cart has expired</h2> <p class="desc svelte-bznxud">The tickets in your cart were held for a limited time and have now been released. Nothing has been
5
- charged. Start again to choose your tickets.</p> <button class="btn btn-primary">Start again</button></div>`);function aa(e,t){N(t,!0);let n=R(null);gn(()=>{K(n)?.focus()});var r=ia(),i=H(B(r),6);si(i,e=>z(n,e),()=>K(n)),M(r),q(`click`,i,function(...e){t.onStartAgain?.apply(this,e)}),Y(e,r),P()}vr([`click`]);var oa=Symbol(`booking-host`);function sa(e){He(oa,e)}function ca(){return Ve(oa)}function la(e,t,n){if(e==null)throw Error(`<${t}> has no ${n}. Pass ${n}={...}, or wrap it in <BookingProvider host={createBookingHost(...)}>.`);return e}var ua=J(`<div class="guard-overlay bw-widget svelte-x4iaex"><!></div>`),da=J(`<div class="guard-overlay bw-widget svelte-x4iaex"><div class="guard-card svelte-x4iaex"><!></div></div>`),fa=J(`<!> <!>`,1);function pa(e,t){N(t,!0);let n=Q(t,`extensionEnabled`,3,!1),r=ca(),i=I(()=>la(t.api??r?.api,`CartExpiryGuard`,`api`)),a=I(()=>la(t.cartManager??r?.cartManager,`CartExpiryGuard`,`cartManager`)),o=R(null),s=R(``),c=R(!1),l=R(!1),u=R(!1),d=R(!1),f=R(null);async function p(){if(K(a).hasCart)try{z(o,await K(i).getCart(),!0)}catch(e){ki(e)&&K(a).reset()}}p(),gn(()=>qi(e=>{e.type===`cart:updated`&&z(o,`cart`in e?e.cart:null,!0),e.type===`order:complete`&&(z(o,null),z(d,!1)),e.type===`payment:started`&&z(d,!0),e.type===`payment:ended`&&(z(d,!1),w(),K(o)&&K(h)&&K(h).getTime()<=Date.now()&&re())}));let m=R(``);gn(()=>{let e=K(o)?.cartToken??``;e!==K(m)&&(z(m,e,!0),z(f,null),T(),z(d,Vi(e)!==null),e&&z(u,!1))});let h=I(()=>K(o)?Yi(K(o)):null),g=I(()=>n()&&!!K(o)&&!K(u)&&K(c)&&K(f)!==K(h)?.getTime()),_=I(()=>!!K(o)&&!Xi(K(o)));async function v(){z(l,!0);let e=K(h)?.getTime()??null;try{z(o,await K(i).extendCart(),!0),Yi(K(o)).getTime()===e&&z(f,e,!0),$({type:`cart:updated`,cart:K(o)})}catch(t){ki(t)?ae():ji(t)?te():Ai(t)&&z(f,e,!0)}finally{z(l,!1)}}function y(){K(h)&&z(f,K(h).getTime(),!0)}let b=null,x=null,S=!1;function C(){b!==null&&(clearTimeout(b),b=null)}function w(){x!==null&&(clearTimeout(x),x=null)}function T(){C(),w()}li(T);function ee(){if(!K(u)){if(K(d)){E();return}re()}}async function E(){if(!K(o)||K(u)||!K(d)||S||x!==null)return;S=!0,C();let e;try{z(o,await K(i).getCart(),!0),$({type:`cart:updated`,cart:K(o)}),e=Yi(K(o)).getTime()<=Date.now()?`past`:`live`}catch(t){e=ki(t)?`gone`:`unknown`}finally{S=!1}if(!K(u)){if(e===`gone`){Hi(),z(d,!1),ae();return}if(e!==`live`){if(!K(d)){re();return}e===`past`?te():ie()}}}function te(){$({type:`payment:timed-out`}),D()}function D(){w(),x=setTimeout(()=>{x=null,ne()},5e3)}async function ne(){if(!K(o)||K(u)||!K(d))return;let e=Vi(K(o).cartToken??``);if(e){try{await K(i).abandonPayment(e.checkoutId)}catch(e){if(Mi(e)||Ni(e)){$({type:`modal:open`});return}return}Hi(),z(d,!1),re()}}async function re(){if(!(!K(o)||K(u)||K(d)||S)){S=!0,C();try{z(o,await K(i).getCart(),!0),$({type:`cart:updated`,cart:K(o)}),Yi(K(o)).getTime()<=Date.now()&&ie()}catch(e){ki(e)?ae():ie()}finally{S=!1}}}function ie(){b=setTimeout(()=>{b=null,K(d)?E():re()},3e4)}function ae(){T(),z(u,!0),K(a).reset(),$({type:`cart:updated`,cart:null}),$({type:`cart:expired`})}function O(){z(u,!1),z(o,null),$({type:`modal:close`})}function oe(e){if(e.key===`Escape`&&K(g)){e.preventDefault(),y();return}if(e.key!==`Tab`)return;let t=K(se)?.querySelectorAll(`button:not([disabled]), [href], [tabindex]:not([tabindex="-1"])`);if(!t?.length)return;let n=t[0],r=t[t.length-1],i=e.shiftKey&&document.activeElement===n,a=!e.shiftKey&&document.activeElement===r;(i||a)&&(e.preventDefault(),(e.shiftKey?r:n).focus())}let se=R(null);var ce=fa();_r(`keydown`,Qt,function(...e){(K(g)||K(u)?oe:void 0)?.apply(this,e)});var le=V(ce),ue=e=>{$i(e,{get expiresAt(){return K(h)},onExpired:ee,get remaining(){return K(s)},set remaining(e){z(s,e,!0)},get warning(){return K(c)},set warning(e){z(c,e,!0)}})};Z(le,e=>{K(o)&&K(h)&&e(ue)});var de=H(le,2),fe=e=>{var t=ua();ra(B(t),{get remaining(){return K(s)},get canExtend(){return K(_)},get extending(){return K(l)},onExtend:v,onDismiss:y}),M(t),si(t,e=>z(se,e),()=>K(se)),Y(e,t)},pe=e=>{var t=da(),n=B(t);aa(B(n),{onStartAgain:O}),M(n),M(t),si(t,e=>z(se,e),()=>K(se)),Y(e,t)};Z(de,e=>{K(g)?e(fe):K(u)&&e(pe,1)}),Y(e,ce),P()}var ma={prod:`https://checkout.peachpayments.com/js/checkout.js`,qa:`https://sandbox-checkout.peachpayments.com/js/checkout.js`},ha=null,ga=null,_a=null;function va(){return _a}function ya(e){let t=e.url??(e.env?ma[e.env]:void 0);!t||t===ga||(ga=t,ha=null)}function ba(){let e=window,t=e.BW_CHECKOUT_ENV??`prod`,n=e.BW_CHECKOUT_PEACH_SDK_URL??ga??ma[t]??ma.prod;return e.Checkout?(_a!==null&&_a!==n?console.warn(`[booking-widget] Peach SDK already loaded from ${_a}, so ${n} was not used. Configure peachEnv before the first payment, or set window.BW_CHECKOUT_PEACH_SDK_URL.`):_a===null&&console.warn(`[booking-widget] Peach SDK was already on the page when the widget first needed it, so ${n} was not used. If its environment does not match the checkout API, the card form will not render.`),Promise.resolve()):ha||(_a=n,ha=new Promise((e,t)=>{let r=document.querySelector(`script[src="${n}"]`);if(r){r.addEventListener(`load`,()=>e()),r.addEventListener(`error`,()=>t(Error(`Failed to load the Peach Payments SDK script`)));return}let i=document.createElement(`script`);i.src=n,i.onload=()=>e(),i.onerror=()=>t(Error(`Failed to load the Peach Payments SDK script`)),document.head.appendChild(i)}),ha)}var xa={};function Sa(e){xa={...xa,...e}}function Ca(){return{...xa}}function wa(e={}){let t={...xa,...e};(t.peachEnv||t.peachSdkUrl)&&ya({env:t.peachEnv,url:t.peachSdkUrl});let n=t.api??new Pi(t.apiBaseUrl??``),r=new Li(n),i=new Gi(n),a=typeof window<`u`,o;a?(r.startBackgroundRefresh(),o=r.ensureSession(t.checkoutKey??``).then(()=>{}),o.catch(()=>{})):o=Promise.resolve();let s={autoSelectSingleTimeSlot:t.autoSelectSingleTimeSlot??!1,wizardPages:t.wizardPages,editPages:t.editPages,shouldBottomCloseOnModal:t.shouldBottomCloseOnModal??!0},c=R(!1),l=!1;function u(e){K(c)!==e&&(z(c,e,!0),t.onCheckoutOpenChange?.(e))}function d(){u(!0)}function f(){u(!1)}function p(){let e=t.autoOpenCheckout??!0;return typeof e==`function`?e():e}let m=qi(e=>{switch(e.type){case`cart:change`:e.openCheckout&&p()&&d(),t.onCartChange?.({itemCount:e.itemCount,cartItemId:e.cartItemId,totalFormatted:e.totalFormatted});break;case`modal:open`:d();break;case`modal:close`:f();break;case`cart:updated`:t.onCartUpdated?.(e.cart);break;case`cart:expired`:t.onCartExpired?.();break;case`order:complete`:t.onOrderConfirmed?.({cartToken:e.cartToken,value:e.value,currency:e.currency})}}),h=t.mountExpiryGuard??!0?Da(n,i,t.extensionEnabled):null;return{api:n,sessionManager:r,cartManager:i,ready:o,get isCheckoutOpen(){return K(c)},options:s,openCheckout:d,closeCheckout:f,destroy(){l||(l=!0,f(),m(),h?.(),r.stop())}}}var Ta=[],Ea=null;function Da(e,t,n){let r={api:e,cartManager:t,extensionEnabled:n};Ta.push(r),Ta.length===1&&Oa(r);let i=!1;return()=>{if(i)return;i=!0;let e=Ta[0]===r;if(Ta=Ta.filter(e=>e!==r),Ta.length===0){Ea?.(),Ea=null;return}e&&(Ea?.(),Oa(Ta[0]))}}function Oa(e){Ea=ka(e.api,e.cartManager,e.extensionEnabled)}function ka(e,t,n){if(typeof document>`u`)return null;let r=document.createElement(`div`);r.dataset.bwExpiryGuard=``;let i=null,a=!1;function o(){a||(document.body.appendChild(r),i=Dr(pa,{target:r,props:n===void 0?{api:e,cartManager:t}:{api:e,cartManager:t,extensionEnabled:n}}))}return document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,o,{once:!0}):o(),()=>{a=!0,document.removeEventListener(`DOMContentLoaded`,o),i&&jr(i),r.remove()}}function Aa(){$({type:`modal:close`})}function ja(){$({type:`modal:open`})}var Ma=[{title:`Option`,widgets:[`option`,`age-category`]},{title:`Schedule`,widgets:[`date`,`time`]},{title:`Pickup`,widgets:[`pickup`]}],Na={"option-first":Ma,"date-first":[{title:`Age & capacity`,widgets:[`age-category`]},{title:`Schedule`,widgets:[`date`,`time`]},{title:`Option`,widgets:[`option`]},{title:`Pickup`,widgets:[`pickup`]}]};function Pa(e){if(!e)return Ma;if(e in Na)return Na[e];try{let t=JSON.parse(e);if(Array.isArray(t)&&t.length>0&&t[0].widgets)return t}catch{}return Ma}var Fa={"option-first":[{title:`Option`,widgets:[`option`]},{title:`Age, Date & Time`,widgets:[`age-category`,`date`,`time`]},{title:`Pickup`,widgets:[`pickup`]}],"date-first":[{title:`Age, Date & Time`,widgets:[`age-category`,`date`,`time`]},{title:`Option`,widgets:[`option`]},{title:`Pickup`,widgets:[`pickup`]}]};function Ia(e,t){if(t){if(t in Fa)return Fa[t];try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0&&e[0].widgets)return e}catch{}}let n=e?e in Na?e:null:`option-first`;return n?Fa[n]:Pa(e)}var La={ZAR:`R`,USD:`$`,EUR:`€`,GBP:`£`};function Ra(e,t,n,r=0){let i=e/10**n;return`${La[t]??t}\u00A0${i.toFixed(r)}`}var za=J(`<div class="leading"><!></div>`),Ba=J(`<div class="heading svelte-idp8p9"> </div>`),Va=J(`<div class="body svelte-idp8p9"> </div>`),Ha=J(`<button><div class="layout svelte-idp8p9"><!> <div class="text svelte-idp8p9"><!> <!> <!></div> <span></span></div></button>`);function Ua(e,t){var n=Ha();let r;var i=B(n),a=B(i),o=e=>{var n=za();Ur(B(n),()=>t.leading),M(n),Y(e,n)};Z(a,e=>{t.leading&&e(o)});var s=H(a,2),c=B(s),l=e=>{var n=Ba(),r=B(n,!0);M(n),U(()=>X(r,t.heading)),Y(e,n)};Z(c,e=>{t.heading&&e(l)});var u=H(c,2),d=e=>{var n=Va(),r=B(n,!0);M(n),U(()=>X(r,t.body)),Y(e,n)};Z(u,e=>{t.body&&e(d)});var f=H(u,2),p=e=>{var n=Er();Ur(V(n),()=>t.children),Y(e,n)};Z(f,e=>{t.children&&e(p)}),M(s);var m=H(s,2);let h;M(i),M(n),U(()=>{r=qr(n,1,`card card-selectable`,null,r,{"card-selected":t.selected}),h=qr(m,1,`radio svelte-idp8p9`,null,h,{"radio-selected":t.selected})}),q(`click`,n,function(...e){t.onSelect?.apply(this,e)}),Y(e,n)}vr([`click`]);var Wa=J(`<p class="pricing svelte-19wqhng"> </p>`);function Ga(e,t){N(t,!0);let n=I(()=>()=>{let e=[];for(let n of t.option.units){if(!n.pricing||n.pricing.length===0)continue;let t=n.pricing[0];e.push(`${n.title??n.id} from ${Ra(t.retail,t.currency,t.currencyPrecision)}`)}return e.join(`, `)});Ua(e,{get selected(){return t.selected},get onSelect(){return t.onSelect},get heading(){return t.option.title},get body(){return t.option.description},children:(e,t)=>{var r=Er(),i=V(r),a=e=>{var t=Wa(),r=B(t,!0);M(t),U(e=>X(r,e),[()=>K(n)()]),Y(e,t)},o=I(()=>K(n)());Z(i,e=>{K(o)&&e(a)}),Y(e,r)},$$slots:{default:!0}}),P()}var Ka=J(`<span class="price svelte-bzhcxd"> </span>`),qa=J(`<p class="limit-message svelte-bzhcxd"> </p>`),Ja=J(`<div><div class="info svelte-bzhcxd"><span class="name svelte-bzhcxd"> </span> <!></div> <div class="stepper svelte-bzhcxd"><button class="step-btn svelte-bzhcxd" aria-label="Decrease">&minus;</button> <input class="qty svelte-bzhcxd" type="text" inputmode="numeric" pattern="[0-9]*"/> <button class="step-btn svelte-bzhcxd" aria-label="Increase">+</button></div></div> <!>`,1);function Ya(e,t){N(t,!0);let n=Q(t,`boxed`,3,!0),r=Q(t,`divided`,3,!1),i=I(()=>()=>{if(!t.unit.pricing||t.unit.pricing.length===0)return``;let e=t.unit.pricing[0];return`from ${Ra(e.retail,e.currency,e.currencyPrecision)}`}),a=R(Zt(String(t.quantity))),o=R(``);gn(()=>{z(a,String(t.quantity),!0)});function s(){t.quantity>0&&t.onChange(t.quantity-1)}function c(){if(t.max!=null&&t.quantity>=t.max){l();return}z(o,``),t.onChange(t.quantity+1)}function l(){let e=t.unit.title??t.unit.id;z(o,t.max===0?`No ${e} tickets left for this time slot.`:`Only ${t.max} ${e} ticket${t.max===1?``:`s`} left for this time slot.`,!0)}function u(){let e=K(a).replace(/[^0-9]/g,``);e!==K(a)&&z(a,e,!0),z(o,``)}function d(){let e=K(a)===``?0:parseInt(K(a),10);Number.isNaN(e)&&(e=0),t.max!=null&&e>t.max&&(e=t.max,l()),z(a,String(e),!0),e!==t.quantity&&t.onChange(e)}function f(e){e.currentTarget.select()}var p=Ja(),m=V(p);let h;var g=B(m),_=B(g),v=B(_,!0);M(_);var y=H(_,2),b=e=>{var t=Ka(),n=B(t,!0);M(t),U(e=>X(n,e),[()=>K(i)()]),Y(e,t)},x=I(()=>K(i)());Z(y,e=>{K(x)&&e(b)}),M(g);var S=H(g,2),C=B(S),w=H(C,2);Zr(w);var T=H(w,2);M(S),M(m);var ee=H(m,2),E=e=>{var t=qa(),n=B(t,!0);M(t),U(()=>X(n,K(o))),Y(e,t)};Z(ee,e=>{K(o)&&e(E)}),U(()=>{h=qr(m,1,`row svelte-bzhcxd`,null,h,{card:n(),plain:!n(),divided:r()}),X(v,t.unit.title??t.unit.id),C.disabled=t.quantity===0,$r(w,`aria-label`,`${t.unit.title??t.unit.id??``} quantity`),T.disabled=t.max!=null&&t.quantity>=t.max}),q(`click`,C,s),q(`input`,w,u),_r(`blur`,w,d),_r(`focus`,w,f),ri(w,()=>K(a),e=>z(a,e)),q(`click`,T,c),Y(e,p),P()}vr([`click`,`input`]);var Xa=J(`<div class="loading-center"><div class="spinner"></div></div>`),Za=J(`<span class="svelte-10gu2tq"> </span>`),Qa=J(`<span class="cell empty svelte-10gu2tq"></span>`),$a=J(`<span class="day-price svelte-10gu2tq"> </span>`),eo=J(`<button><span class="day-num svelte-10gu2tq"> </span> <!></button>`),to=J(`<div class="header svelte-10gu2tq"><button class="nav-btn svelte-10gu2tq" aria-label="Previous month">&lsaquo;</button> <span class="month svelte-10gu2tq"> </span> <button class="nav-btn svelte-10gu2tq" aria-label="Next month">&rsaquo;</button></div> <div class="day-names svelte-10gu2tq"></div> <div class="grid svelte-10gu2tq"></div>`,1),no=J(`<div class="calendar svelte-10gu2tq"><!></div>`);function ro(e,t){N(t,!0);let n=[`SU`,`MO`,`TU`,`WE`,`TH`,`FR`,`SA`],r=R(Zt(new Date)),i=I(()=>()=>{let e=K(r).getFullYear(),t=K(r).getMonth(),n=new Date(e,t,1).getDay(),i=new Date(e,t+1,0).getDate(),a=[];for(let e=0;e<n;e++)a.push(null);for(let n=1;n<=i;n++)a.push(new Date(e,t,n));return a}),a=I(()=>K(r).toLocaleDateString(`en`,{month:`long`}));function o(){let e=new Date(K(r));e.setMonth(e.getMonth()-1),z(r,e,!0)}function s(){let e=new Date(K(r));e.setMonth(e.getMonth()+1),z(r,e,!0)}function c(e){let n=t.availabilityByDate[Ci(e)];return n?n.available?`available`:n.status===`SOLD_OUT`?`sold-out`:`unavailable`:`unavailable`}function l(e){let n=t.availabilityByDate[Ci(e)];if(!n||!n.available)return``;if(n.unitPricing&&n.unitPricing.length>0){let e=n.unitPricing[0];return Ra(e.retail,e.currency,e.currencyPrecision)}return``}function u(e){return t.selectedDate?Ci(e)===Ci(t.selectedDate):!1}function d(e){let t=new Date;return t.setHours(0,0,0,0),e<t}function f(e){c(e)!==`available`||d(e)||t.onDateSelected(e)}var p=no(),m=B(p),h=e=>{Y(e,Xa())},g=e=>{var t=to(),r=V(t),p=B(r),m=H(p,2),h=B(m,!0);M(m);var g=H(m,2);M(r);var _=H(r,2);Lr(_,21,()=>n,Nr,(e,t)=>{var n=Za(),r=B(n,!0);M(n),U(()=>X(r,K(t))),Y(e,n)}),M(_);var v=H(_,2);Lr(v,21,()=>K(i)(),Nr,(e,t)=>{var n=Er(),r=V(n),i=e=>{Y(e,Qa())},a=e=>{let n=I(()=>c(K(t))),r=I(()=>d(K(t))),i=I(()=>l(K(t)));var a=eo();let o;var s=B(a),p=B(s,!0);M(s);var m=H(s,2),h=e=>{var t=$a(),n=B(t,!0);M(t),U(()=>X(n,K(i))),Y(e,t)};Z(m,e=>{K(i)&&!K(r)&&e(h)}),M(a),U((e,t)=>{o=qr(a,1,`cell svelte-10gu2tq`,null,o,e),a.disabled=K(n)!==`available`||K(r),X(p,t)},[()=>({available:K(n)===`available`&&!K(r),"sold-out":K(n)===`sold-out`,unavailable:K(n)===`unavailable`||K(r),selected:u(K(t))}),()=>K(t).getDate()]),q(`click`,a,()=>f(K(t))),Y(e,a)};Z(r,e=>{K(t)===null?e(i):e(a,-1)}),Y(e,n)}),M(v),U(()=>X(h,K(a))),q(`click`,p,o),q(`click`,g,s),Y(e,t)};Z(m,e=>{t.loading?e(h):e(g,-1)}),M(p),Y(e,p),P()}vr([`click`]);var io=J(`<div class="loading-center"><div class="spinner"></div></div>`),ao=J(`<p class="hint svelte-1hu99a4">All-day availability</p>`),oo=J(`<div class="slots svelte-1hu99a4"></div>`);function so(e,t){N(t,!0);var n=Er(),r=V(n),i=e=>{Y(e,io())},a=e=>{Y(e,ao())},o=e=>{var n=oo();Lr(n,21,()=>t.timeSlots,Nr,(e,n)=>{let r=I(()=>wi(K(n).localDateTimeStart));{let i=I(()=>t.selectedTime===K(r)),a=I(()=>K(n).vacancies==null?void 0:`${K(n).vacancies} left`);Ua(e,{get selected(){return K(i)},onSelect:()=>t.onTimeSelected(K(r)),get heading(){return K(r)},get body(){return K(a)}})}}),M(n),Y(e,n)};Z(r,e=>{t.loading?e(i):t.timeSlots.length===1&&t.timeSlots[0].allDay?e(a,1):t.timeSlots.length>0&&e(o,2)}),Y(e,n),P()}var co=`(min-width: 1024px)`;function lo(){return typeof window>`u`||!window.matchMedia?null:window.matchMedia(co)}function uo(){return lo()?.matches??!0}function fo(){let e=R(Zt(uo()));return gn(()=>{let t=lo();if(!t)return;z(e,t.matches,!0);let n=t=>{z(e,t.matches,!0)};return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)}),{get isInline(){return K(e)}}}var po={option:`Which option would you like?`,"age-category":`How many tickets would you like?`,date:`When would you like to go?`,time:`What time works for you?`,pickup:`Where would you like to be picked up?`,addon:``},mo=J(`<div class="wizard-header svelte-9w5z1v"><h2 class="svelte-9w5z1v">Buy Tickets</h2></div>`),ho=J(`<span> </span>`),go=J(`<div class="section svelte-9w5z1v"><div class="option-list svelte-9w5z1v"></div></div>`),_o=J(`<div class="section svelte-9w5z1v"><div class="unit-list svelte-9w5z1v"></div></div>`),vo=J(`<div class="section svelte-9w5z1v"><!></div>`),yo=J(`<div class="section svelte-9w5z1v"><div class="pickup-list svelte-9w5z1v"></div></div>`),bo=J(`<!> <!> <!> <!> <!>`,1),xo=J(`<div class="accordion-body svelte-9w5z1v"></div>`),So=J(`<div><button class="accordion-header svelte-9w5z1v"><div class="accordion-header-text svelte-9w5z1v"><span class="accordion-title svelte-9w5z1v"> </span> <!></div> <span></span></button> <!></div>`),Co=J(`<div class="wizard-body svelte-9w5z1v"></div> <div class="action-bar"><button class="btn btn-secondary">Return to Cart</button> <button class="btn btn-primary">Save &amp; Update</button></div>`,1),wo=J(`<h2 class="body-title svelte-9w5z1v">Buy Tickets</h2>`),To=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <div class="option-list svelte-9w5z1v"></div></div>`),Eo=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <div></div></div>`),Do=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <!></div>`),Oo=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <div class="pickup-list svelte-9w5z1v"></div></div>`),ko=J(`<span></span>`),Ao=J(`<div class="page-dots svelte-9w5z1v"></div>`),jo=J(`<button class="btn btn-secondary"> </button>`),Mo=J(`<div class="wizard-body svelte-9w5z1v"><!> <h3 class="page-title svelte-9w5z1v"> </h3> <!></div> <div class="wizard-footer svelte-9w5z1v"><!> <div class="action-bar svelte-9w5z1v"><!> <button class="btn btn-primary"> </button></div></div>`,1),No=J(`<div class="dialog-backdrop svelte-9w5z1v"><div class="dialog svelte-9w5z1v"><h3 class="dialog-title svelte-9w5z1v">You have unsaved changes</h3> <p class="dialog-body svelte-9w5z1v">Would you like to proceed?</p> <div class="dialog-actions svelte-9w5z1v"><button class="dialog-btn-text svelte-9w5z1v">Discard changes</button> <button class="dialog-btn-fill svelte-9w5z1v">Return to editing</button></div></div></div>`),Po=J(`<div><!> <!></div> <!>`,1);function Fo(e,t){N(t,!0);let n=Q(t,`editPages`,19,()=>t.wizardPages),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=fo(),a=I(()=>t.editItem!=null),o=I(()=>t.editItem&&!K(D)()?t.editItem.optionId:void 0),s=R(0),c=R(null),l=R(Zt({})),u=R(null),d=R(null),f=R(null),p=R(null),m=R(Zt({})),h=R(Zt([])),g=R(!1),_=R(!1),v=R(!1),y=R(!1),b=R(0),x=R(Zt(new Set));function S(...e){z(x,new Set([...K(x),...e]),!0)}function C(...e){e.every(e=>!K(x).has(e))||z(x,new Set([...K(x)].filter(t=>!e.includes(t))),!0)}let w=I(()=>Object.values(K(l)).some(e=>e>0)),T=I(()=>K(h).length===1&&K(h)[0].allDay),ee=I(()=>K(h).length===1),E=I(()=>!K(_)&&K(h).length===0),te=I(()=>K(T)||r()&&K(ee)),D=I(()=>()=>{let e=t.wizardPages.findIndex(e=>e.widgets.includes(`age-category`)),n=t.wizardPages.findIndex(e=>e.widgets.includes(`option`));return e>=0&&(n<0||e<n)}),ne=I(()=>()=>K(c)?K(c).units:K(D)()?t.product.options[0]?.units??[]:[]),re=I(()=>()=>K(c)?K(c).id:K(D)()?t.product.options[0]?.id??null:null);ci(()=>{t.editItem&&ie(t.editItem)});function ie(e){let n=t.product.options.find(t=>t.id===e.optionId);n&&z(c,n,!0);let r={};for(let t of e.unitItems)r[t.unitId]=(r[t.unitId]??0)+1;z(l,r,!0),K(w)&&ae(e.availabilityId,e.pickupPointId)}async function ae(e,n){if(await xe(),!e)return;let r=Ti(e);if(!r)return;let i=K(re)();if(!i)return;let a=r.split(`-`).map(Number);z(u,new Date(a[0],a[1]-1,a[2]),!0),z(_,!0);let o=await t.api.getAvailability(t.product.id,i,r);z(h,o,!0),z(_,!1);let s=o.find(t=>t.id===e);s&&(z(f,s,!0),s.allDay||z(d,wi(s.localDateTimeStart),!0),n&&K(c)?.pickupAvailable&&z(p,K(c).pickupLocations?.find(e=>e.id===n)??null,!0))}function O(e){return K(D)()?se(e):oe(e)}function oe(e){switch(e){case`option`:return!K(o);case`age-category`:return K(c)!=null;case`date`:return K(w);case`time`:return K(u)!=null&&!K(te)&&!K(E);case`pickup`:return K(f)!=null&&K(c)?.pickupAvailable===!0;case`addon`:return!1}}function se(e){switch(e){case`age-category`:return K(ne)().length>0;case`date`:return K(w);case`time`:return K(u)!=null&&!K(te)&&!K(E);case`option`:return!K(o)&&(K(f)!=null||K(u)!=null&&K(te));case`pickup`:return K(c)!=null&&K(c).pickupAvailable===!0&&K(f)!=null;case`addon`:return!1}}let ce=I(()=>()=>{let e=[];for(let n=0;n<t.wizardPages.length;n++){let r=t.wizardPages[n].widgets.filter(O);r.length>0&&e.push({index:n,title:t.wizardPages[n].title,widgets:r})}return e}),le=I(()=>()=>{let e=[];for(let t of n())for(let n of t.widgets)O(n)&&!e.includes(n)&&e.push(n);return e}),ue=I(()=>()=>{let e=K(ce)();return K(s)>=e.length?e[e.length-1]??null:e[K(s)]??null}),de=I(()=>()=>K(s)>=K(ce)().length-1),fe=I(()=>()=>K(ue)()?.title??``);function pe(e){switch(e){case`option`:return K(c)?.title??`Not selected`;case`age-category`:{let e=[];for(let t of K(ne)()){let n=K(l)[t.id]??0;n>0&&e.push(`${n} ${t.title}`)}return e.length>0?e.join(`, `):`Not selected`}case`date`:return K(u)?K(u).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):`Not selected`;case`time`:return K(d)??(K(te)?`All day`:`Not selected`);case`pickup`:return K(p)?.title??K(p)?.id??`Not selected`;default:return``}}function me(e){return e.map(pe).filter(e=>e&&e!==`Not selected`).join(` · `)||`Not selected`}let he=I(()=>()=>{let e=[];for(let t of n()){let n=t.widgets.filter(O);n.length>0&&e.push({title:t.title,widgets:n})}return e}),ge=I(()=>()=>{if(K(u)!=null&&K(E))return!1;let e=K(a)?K(le)():K(ue)()?.widgets??[];if(e.length===0)return!1;for(let t of e)switch(t){case`option`:if(!K(c))return!1;break;case`age-category`:if(!K(w))return!1;break;case`date`:if(!K(u))return!1;break;case`time`:if(!K(d)&&!K(te))return!1;break;case`pickup`:if(K(c)?.pickupRequired&&!K(p))return!1}return!0});function _e(e){if(K(D)()){z(c,e,!0),K(p)&&!e.pickupLocations?.some(e=>e.id===K(p).id)&&(z(p,null),S(`pickup`)),z(v,!0);return}z(c,e,!0),z(l,Object.fromEntries(e.units.map(e=>[e.id,0])),!0),z(u,null),z(d,null),z(f,null),z(p,null),z(m,{},!0),z(h,[],!0),z(v,!0)}function ve(e,t){z(l,{...K(l),[e]:t},!0),z(v,!0),K(w)&&Object.keys(K(m)).length===0&&xe(),ye()}function ye(){!K(f)||K(f).vacancies==null||Object.values(K(l)).reduce((e,t)=>e+t,0)<=K(f).vacancies||(z(u,null),z(d,null),z(f,null),z(h,[],!0),S(`date`,`time`))}function be(e){if(!K(f)||K(f).vacancies==null)return;let t=Object.values(K(l)).reduce((e,t)=>e+t,0),n=K(l)[e]??0;return K(f).vacancies-t+n}async function xe(){let e=K(re)();e&&(z(g,!0),z(m,await t.api.getAvailabilityCalendar(t.product.id,e),!0),z(g,!1))}async function Se(e){let n=K(re)();if(!n)return;z(u,e,!0),z(d,null),z(f,null),z(h,[],!0),z(v,!0),z(_,!0),C(`date`,`time`);let i=await t.api.getAvailability(t.product.id,n,Ci(e));z(h,i,!0),z(_,!1),i.length===1&&(i[0].allDay||r())&&(z(f,i[0],!0),i[0].allDay||z(d,wi(i[0].localDateTimeStart),!0))}function Ce(e){let t=K(h).find(t=>wi(t.localDateTimeStart)===e&&t.available);t&&(z(d,e,!0),z(f,t,!0),z(v,!0),C(`time`))}function k(e){z(p,e,!0),z(v,!0),C(`pickup`)}function we(){K(de)()?A():Jt(s)}function Te(){K(s)>0?Jt(s,-1):t.onCancel?Ee():!K(o)&&K(c)&&(z(c,null),z(l,{},!0),z(u,null),z(d,null),z(f,null),z(p,null),z(m,{},!0),z(h,[],!0))}function Ee(){if(K(v)){z(y,!0);return}t.onCancel?.()}function De(){z(y,!1),t.onCancel?.()}function A(){if(!K(f)||!K(c))return;let e=[];for(let t of K(f).unitPricing??[]){let n=K(l)[t.unitId]??0;if(n<=0)continue;let r=K(ne)().find(e=>e.id===t.unitId);e.push({unitId:t.unitId,quantity:n,title:r?.title??t.unitId,pricePerUnit:t.retail})}let n=0;for(let t of e)n+=t.pricePerUnit*t.quantity;let r=K(f).unitPricing?.[0],i=r?.currency??t.product.defaultCurrency??`ZAR`,a=r?.currencyPrecision??2;t.onComplete({productId:t.product.id,optionId:K(c).id,optionTitle:K(c).title,availabilityId:K(f).id,localDate:K(u)?Ci(K(u)):void 0,pickupPointId:K(p)?.id,units:e,totalPrice:n,currency:i,currencyPrecision:a})}var Oe=Po(),j=V(Oe);let ke;var Ae=B(j),je=e=>{Y(e,mo())};Z(Ae,e=>{!K(a)&&i.isInline&&e(je)});var Me=H(Ae,2),Ne=e=>{var n=Co(),r=V(n);Lr(r,21,()=>K(he)(),Nr,(e,n,r)=>{let i=I(()=>K(n).widgets.some(e=>K(x).has(e)));var a=So();let s;var f=B(a),v=B(f),y=B(v),S=B(y,!0);M(y);var C=H(y,2),T=e=>{var t=ho();let r;var a=B(t,!0);M(t),U(e=>{r=qr(t,1,`accordion-summary svelte-9w5z1v`,null,r,{invalidated:K(i)}),X(a,e)},[()=>K(i)?`Changes made require new configuration`:me(K(n).widgets)]),Y(e,t)};Z(C,e=>{K(b)!==r&&e(T)}),M(v);var ee=H(v,2);let E;M(f);var D=H(f,2),re=e=>{var r=xo();Lr(r,21,()=>K(n).widgets,Nr,(e,n)=>{var r=bo(),i=V(r),a=e=>{var n=go(),r=B(n);Lr(r,21,()=>t.product.options,Nr,(e,t)=>{{let n=I(()=>K(c)?.id===K(t).id);Ga(e,{get option(){return K(t)},get selected(){return K(n)},onSelect:()=>_e(K(t))})}}),M(r),M(n),Y(e,n)};Z(i,e=>{K(n)===`option`&&!K(o)&&e(a)});var s=H(i,2),f=e=>{var t=_o(),n=B(t);Lr(n,21,()=>K(ne)(),Nr,(e,t)=>{{let n=I(()=>K(l)[K(t).id]??0),r=I(()=>be(K(t).id));Ya(e,{get unit(){return K(t)},get quantity(){return K(n)},get max(){return K(r)},onChange:e=>ve(K(t).id,e)})}}),M(n),M(t),Y(e,t)},v=I(()=>K(n)===`age-category`&&K(ne)().length>0);Z(s,e=>{K(v)&&e(f)});var y=H(s,2),b=e=>{var t=vo();ro(B(t),{get availabilityByDate(){return K(m)},get selectedDate(){return K(u)},onDateSelected:Se,get loading(){return K(g)}}),M(t),Y(e,t)};Z(y,e=>{K(n)===`date`&&K(w)&&e(b)});var x=H(y,2),S=e=>{var t=vo();so(B(t),{get timeSlots(){return K(h)},get selectedTime(){return K(d)},get loading(){return K(_)},onTimeSelected:Ce}),M(t),Y(e,t)};Z(x,e=>{K(n)===`time`&&K(u)&&!K(te)&&e(S)});var C=H(x,2),T=e=>{var t=yo(),n=B(t);Lr(n,21,()=>K(c).pickupLocations,Nr,(e,t)=>{{let n=I(()=>K(p)?.id===K(t).id),r=I(()=>K(t).title??K(t).id);Ua(e,{get selected(){return K(n)},onSelect:()=>k(K(t)),get heading(){return K(r)},get body(){return K(t).address}})}}),M(n),M(t),Y(e,t)};Z(C,e=>{K(n)===`pickup`&&K(c)?.pickupAvailable&&K(c).pickupLocations&&e(T)}),Y(e,r)}),M(r),Y(e,r)};Z(D,e=>{K(b)===r&&e(re)}),M(a),U(e=>{s=qr(a,1,`accordion-section svelte-9w5z1v`,null,s,{expanded:K(b)===r,invalidated:K(i)}),X(S,e),E=qr(ee,1,`accordion-chevron svelte-9w5z1v`,null,E,{open:K(b)===r})},[()=>K(n).title.toUpperCase()]),q(`click`,f,()=>{z(b,K(b)===r?-1:r,!0)}),Y(e,a)}),M(r);var i=H(r,2),a=B(i),s=H(a,2);M(i),U(e=>s.disabled=e,[()=>!K(ge)()]),q(`click`,a,Ee),q(`click`,s,A),Y(e,n)},Pe=e=>{var n=Mo(),r=V(n),a=B(r),f=e=>{Y(e,wo())};Z(a,e=>{i.isInline||e(f)});var v=H(a,2),y=B(v,!0);M(v),Lr(H(v,2),17,()=>K(ue)()?.widgets??[],Nr,(e,n)=>{var r=bo(),a=V(r),s=e=>{var r=To(),i=B(r),a=B(i,!0);M(i);var o=H(i,2);Lr(o,21,()=>t.product.options,Nr,(e,t)=>{{let n=I(()=>K(c)?.id===K(t).id);Ga(e,{get option(){return K(t)},get selected(){return K(n)},onSelect:()=>_e(K(t))})}}),M(o),M(r),U(()=>X(a,po[K(n)])),Y(e,r)};Z(a,e=>{K(n)===`option`&&!K(o)&&e(s)});var f=H(a,2),v=e=>{var t=Eo(),r=B(t),a=B(r,!0);M(r);var o=H(r,2);let s;Lr(o,21,()=>K(ne)(),Nr,(e,t)=>{{let n=I(()=>K(l)[K(t).id]??0),r=I(()=>be(K(t).id));Ya(e,{get unit(){return K(t)},boxed:!1,get divided(){return i.isInline},get quantity(){return K(n)},get max(){return K(r)},onChange:e=>ve(K(t).id,e)})}}),M(o),M(t),U(()=>{X(a,po[K(n)]),s=qr(o,1,`unit-list svelte-9w5z1v`,null,s,{divided:i.isInline})}),Y(e,t)},y=I(()=>K(n)===`age-category`&&K(ne)().length>0);Z(f,e=>{K(y)&&e(v)});var b=H(f,2),x=e=>{var t=Do(),r=B(t),i=B(r,!0);M(r),ro(H(r,2),{get availabilityByDate(){return K(m)},get selectedDate(){return K(u)},onDateSelected:Se,get loading(){return K(g)}}),M(t),U(()=>X(i,po[K(n)])),Y(e,t)};Z(b,e=>{K(n)===`date`&&K(w)&&e(x)});var S=H(b,2),C=e=>{var t=Do(),r=B(t),i=B(r,!0);M(r),so(H(r,2),{get timeSlots(){return K(h)},get selectedTime(){return K(d)},get loading(){return K(_)},onTimeSelected:Ce}),M(t),U(()=>X(i,po[K(n)])),Y(e,t)};Z(S,e=>{K(n)===`time`&&K(u)&&!K(te)&&e(C)});var T=H(S,2),ee=e=>{var t=Oo(),r=B(t),i=B(r,!0);M(r);var a=H(r,2);Lr(a,21,()=>K(c).pickupLocations,Nr,(e,t)=>{{let n=I(()=>K(p)?.id===K(t).id),r=I(()=>K(t).title??K(t).id);Ua(e,{get selected(){return K(n)},onSelect:()=>k(K(t)),get heading(){return K(r)},get body(){return K(t).address}})}}),M(a),M(t),U(()=>X(i,po[K(n)])),Y(e,t)};Z(T,e=>{K(n)===`pickup`&&K(c)?.pickupAvailable&&K(c).pickupLocations&&e(ee)}),Y(e,r)}),M(r);var b=H(r,2),x=B(b),S=e=>{var t=Ao();Lr(t,21,()=>K(ce)(),Nr,(e,t,n)=>{var r=ko();let i;U(()=>i=qr(r,1,`dot svelte-9w5z1v`,null,i,{active:n===K(s)})),Y(e,r)}),M(t),Y(e,t)},C=I(()=>K(ce)().length>1);Z(x,e=>{K(C)&&e(S)});var T=H(x,2),ee=B(T),E=e=>{var t=jo(),n=B(t,!0);M(t),U(()=>X(n,K(s)>0?`Back`:`Cancel`)),q(`click`,t,Te),Y(e,t)};Z(ee,e=>{(K(s)>0||t.onCancel&&!i.isInline)&&e(E)});var D=H(ee,2),re=B(D,!0);M(D),M(T),M(b),U((e,t,n)=>{X(y,e),D.disabled=t,X(re,n)},[()=>K(fe)(),()=>!K(ge)(),()=>K(de)()?`Add to Cart`:`Next`]),q(`click`,D,we),Y(e,n)};Z(Me,e=>{K(a)?e(Ne):e(Pe,-1)}),M(j);var Fe=H(j,2),Ie=e=>{var t=No(),n=B(t),r=H(B(n),4),i=B(r),a=H(i,2);M(r),M(n),M(t),q(`click`,t,()=>{z(y,!1)}),q(`click`,n,e=>e.stopPropagation()),q(`click`,i,De),q(`click`,a,()=>{z(y,!1)}),Y(e,t)};Z(Fe,e=>{K(y)&&e(Ie)}),U(()=>ke=qr(j,1,`wizard svelte-9w5z1v`,null,ke,{inline:!K(a)&&i.isInline})),Y(e,Oe),P()}vr([`click`]);var Io=J(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),Lo=J(`<p class="add-to-cart-error svelte-19qd5my"> </p>`),Ro=J(`<!> <!>`,1),zo=J(`<div class="bw-widget svelte-19qd5my"><!></div>`);function Bo(e,t){N(t,!0);let n=Q(t,`wizardPages`,3,Ma),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=Q(t,`autoOpenCheckout`,3,!0),a=ca(),o=I(()=>la(t.api??a?.api,`TicketConfigurator`,`api`)),s=I(()=>la(t.cartManager??a?.cartManager,`TicketConfigurator`,`cartManager`)),c=R(null),l=R(!0),u=R(!1),d=R(null);async function f(){z(c,await K(o).getProduct(t.productId),!0),z(l,!1)}f();async function p(e){await K(s).ensureCart();let t=Ei(e.units),n=await K(o).addCartItem({productId:e.productId,optionId:e.optionId,unitItems:t,availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),r=Ra(e.totalPrice,e.currency,e.currencyPrecision,2);$({type:`cart:change`,itemCount:t.length,cartItemId:n.id??``,totalFormatted:r,openCheckout:i()}),$({type:`cart:updated`,cart:await K(o).getCart().catch(()=>null)})}async function m(e){z(u,!0),z(d,null);try{await p(e)}catch(t){if(Oi(t)){await h();return}if(t instanceof Di&&(t.status===401||t.status===404)){K(s).reset();try{await p(e)}catch{z(d,`Something went wrong adding this to your cart. Please try again.`)}}else z(d,`Something went wrong adding this to your cart. Please try again.`)}finally{z(u,!1)}}async function h(){z(d,`This ticket's price has changed since you started. Please check the updated price and try again.`);try{await f()}catch{z(d,`This ticket's price has changed and we could not load the new one. Please reload the page.`)}}var g=zo(),_=B(g),v=e=>{Y(e,Io())},y=e=>{var i=Ro(),a=V(i),s=e=>{var t=Lo(),n=B(t,!0);M(t),U(()=>X(n,K(d))),Y(e,t)};Z(a,e=>{K(d)&&e(s)}),Fo(H(a,2),{get product(){return K(c)},get api(){return K(o)},get wizardPages(){return n()},get autoSelectSingleTimeSlot(){return r()},get onCancel(){return t.onCancel},onComplete:m}),Y(e,i)};Z(_,e=>{K(l)||K(u)?e(v):K(c)&&e(y,1)}),M(g),Y(e,g),P()}function Vo(e,t){return(t??(typeof document>`u`?null:document.body))?.appendChild(e),{destroy(){e.remove()}}}var Ho=1500,Uo=9e4;function Wo(e){let t=R(null),n=R(null),r=null,i=R(!1),a=R(!1),o=R(null);async function s(){K(t)&&await p()}async function c(){let n=Vi(e.getApi().cartToken);n&&(z(t,n,!0),$({type:`payment:started`}),!await l()&&(e.setView(`payment`),Yi(e.getCart()).getTime()<=Date.now()&&s()))}async function l(){z(i,!0),e.setView(`result`);let t;try{t=await e.getApi().getCartStatus()}catch(t){return z(i,!1),ki(t)?(e.close(),!0):!1}return t.cartStatus===`confirmed`?(_(t.confirmResult??{items:[]}),z(i,!1),!0):t.paymentOutcome===`failed`||t.paymentOutcome===`abandoned`?(z(n,`notCharged`),await h(),z(i,!1),!0):t.cartStatus===`paid`||t.cartStatus===`confirming`?(await v(),!0):(z(i,!1),!1)}async function u(t,n){try{return n?await e.getApi().reportPaymentFailure(t,n.resultCode,n.description):await e.getApi().abandonPayment(t),`abandoned`}catch(e){return Mi(e)||Ni(e)?`settled`:`failed`}}async function d(n){if(K(t)){z(a,!0);try{if(!await p())return}catch{}finally{z(a,!1)}if(K(t)){e.setView(`payment`);return}}z(a,!0),z(o,null);try{z(t,await e.getApi().payCart(n),!0),Bi(e.getApi().cartToken,{checkoutId:K(t).checkoutId??``,entityId:K(t).entityId??``}),e.setView(`payment`),$({type:`payment:started`}),e.refreshDeadlineAfterPay()}catch(t){if(ki(t)){e.close();return}let n=t instanceof Di?t.status:null;z(o,n===502?`Unable to start payment right now. Please try again.`:`Something went wrong starting your payment. Please try again.`,!0)}finally{z(a,!1)}}async function f(t){if(!((t.status===`cancelled`||t.status===`expired`||t.status===`error`)&&!await p(t.status===`cancelled`?void 0:t))){if(t.status===`cancelled`){e.setView(`contact`);return}if(t.status===`expired`||t.status===`error`){z(n,`notCharged`),z(i,!1),e.setView(`result`);return}e.setView(`result`);try{await e.getApi().resolvePayment()}catch{}await v()}}async function p(n){if(!K(t))return await e.reloadCart();let r=await u(K(t).checkoutId,n);if(r===`settled`)return e.setView(`result`),await v(),!1;r===`abandoned`&&(z(t,null),Hi());let i=await e.reloadCart();return i&&e.notifyCartUpdated(e.getCart()),(r===`abandoned`||!i)&&$({type:`payment:ended`}),i}function m(){e.setView(`contact`)}async function h(){z(t,null),Hi();try{await e.reloadCart()&&e.notifyCartUpdated(e.getCart())}catch{}$({type:`payment:ended`})}async function g(t){let r;try{r=await e.getApi().getCartStatus()}catch(e){return t?.aborted?`settled`:ki(e)?(z(n,`pending`),`settled`):`waiting`}return t?.aborted?`settled`:r.cartStatus===`confirmed`?(_(r.confirmResult??{items:[]}),`settled`):r.paymentOutcome===`failed`||r.paymentOutcome===`abandoned`?(z(n,`notCharged`),await h(),`settled`):`waiting`}function _(t){let r=t.items.length>0&&t.items.every(e=>e.statusCode>=200&&e.statusCode<300);z(n,r?`success`:`partial`,!0),r&&e.onOrderConfirmed()}async function v(){z(i,!0),z(n,null);let e=Date.now()+Uo,t=new AbortController;for(r?.abort(),r=t;!t.signal.aborted&&await g(t.signal)!==`settled`;){if(Date.now()+Ho>e){z(n,`pending`);break}await y(Ho,t.signal)}t.signal.aborted||(z(i,!1),r=null)}function y(e,t){return new Promise(n=>{let r=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(r),n()},{once:!0})})}async function b(){z(i,!0),await g()===`waiting`&&z(n,`pending`),z(i,!1)}let x=I(()=>K(i)?null:K(n)===`success`?{outcome:`successful`}:K(n)===`pending`?{outcome:`pending`}:K(n)===`partial`?{outcome:`partial`}:K(n)===`notCharged`?{outcome:`failed`,resultDescription:`Your payment could not be completed. Please try again.`,retryPayment:!0}:null);return{get paymentResult(){return K(t)},get isPaying(){return K(a)},get payError(){return K(o)},get isConfirming(){return K(i)},get resultStatus(){return K(x)},payNow:d,onPaymentComplete:f,onPaymentTimedOut:s,resumeInterruptedPayment:c,retry:m,checkStatusAgain:b,dispose:()=>r?.abort()}}function Go(e){return e.items.reduce((e,t)=>e+t.amount,0)}function Ko(e){return e.items[0]?.currencyCode??`ZAR`}function qo(e,t){return t.get(e.productId)?.title??e.productId}function Jo(e,t){return t.get(e.productId)?.options.find(t=>t.id===e.optionId)?.title??e.optionId}function Yo(e,t){let n=t.get(e.productId)?.options.find(t=>t.id===e.optionId),r=new Map;for(let t of e.unitItems)r.set(t.unitId,(r.get(t.unitId)??0)+1);return[...r.entries()].map(([e,t])=>{let r=n?.units.find(t=>t.id===e),i=r?.pricing?.[0]?.retail??0;return{unitId:e,title:r?.title??e,quantity:t,linePrice:i*t}})}function Xo(e){if(!e.availabilityId)return null;let t=e.availabilityId.match(/(\d{4})-(\d{2})-(\d{2})/);if(!t)return null;let n=new Date(+t[1],t[2]-1,+t[3]);return`${n.getDate()} ${[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][n.getMonth()]} ${n.getFullYear()}`}var Zo=J(`<div class="form svelte-12xyhj1"><div class="field svelte-12xyhj1"><label for="firstName" class="svelte-12xyhj1">First name *</label> <input id="firstName"/></div> <div class="field svelte-12xyhj1"><label for="lastName" class="svelte-12xyhj1">Last name</label> <input id="lastName" class="input"/></div> <div class="field svelte-12xyhj1"><label for="email" class="svelte-12xyhj1">Email address *</label> <input id="email" type="email"/></div> <div class="field svelte-12xyhj1"><label for="phone" class="svelte-12xyhj1">Phone number *</label> <input id="phone" type="tel"/></div></div>`);function Qo(e,t){N(t,!0);let n=Q(t,`firstName`,15,``),r=Q(t,`lastName`,15,``),i=Q(t,`emailAddress`,15,``),a=Q(t,`phoneNumber`,15,``);function o(){return n().trim()!==``&&i().trim()!==``&&a().trim()!==``}function s(){return{firstName:n().trim(),lastName:r().trim(),emailAddress:i().trim(),phoneNumber:a().trim()}}function c(e){return t.hasAttemptedSubmit&&e.trim()===``}var l={isValid:o,getContact:s},u=Zo(),d=B(u),f=H(B(d),2);Zr(f);let p;M(d);var m=H(d,2),h=H(B(m),2);Zr(h),M(m);var g=H(m,2),_=H(B(g),2);Zr(_);let v;M(g);var y=H(g,2),b=H(B(y),2);Zr(b);let x;return M(y),M(u),U((e,t,n)=>{p=qr(f,1,`input`,null,p,e),v=qr(_,1,`input`,null,v,t),x=qr(b,1,`input`,null,x,n)},[()=>({"input-error":c(n())}),()=>({"input-error":c(i())}),()=>({"input-error":c(a())})]),ri(f,n),ri(h,r),ri(_,i),ri(b,a),Y(e,u),P(l)}var $o=J(`<div class="consent svelte-19pmjwi"><label><input type="checkbox" class="svelte-19pmjwi"/> <span class="svelte-19pmjwi">I accept the privacy policy *</span></label> <label class="check svelte-19pmjwi"><input type="checkbox" class="svelte-19pmjwi"/> <span>I would like to receive marketing communications</span></label></div>`);function es(e,t){N(t,!0);var n=$o(),r=B(n);let i;var a=B(r);Zr(a),je(2),M(r);var o=H(r,2),s=B(o);Zr(s),je(2),M(o),M(n),U(()=>{i=qr(r,1,`check svelte-19pmjwi`,null,i,{error:t.hasAttemptedSubmit&&!t.privacyAccepted}),Qr(a,t.privacyAccepted),Qr(s,t.marketingOptIn)}),q(`change`,a,e=>t.onPrivacyChanged(e.target.checked)),q(`change`,s,e=>t.onMarketingChanged(e.target.checked)),Y(e,n),P()}vr([`change`]);var ts=J(`<span class="timer svelte-1u82ue3"> </span>`);function ns(e,t){N(t,!0);let n=R(``);function r(){z(n,Ji(t.expiresAt.getTime()-Date.now()),!0)}r();let i=setInterval(r,1e3);li(()=>clearInterval(i));var a=ts(),o=B(a,!0);M(a),U(()=>X(o,K(n))),Y(e,a),P()}var rs=J(`<span class="spacer"></span> <!>`,1),is=J(`<div class="error-state svelte-1ubcp68"><div class="error-icon svelte-1ubcp68">!</div> <p class="error-title svelte-1ubcp68">Unable to load payment form</p> <p class="error-msg svelte-1ubcp68"> </p> <button class="btn btn-primary svelte-1ubcp68">Start over</button></div>`),as=J(`<div id="peach-container" class="svelte-1ubcp68"></div>`),os=J(`<div class="payment-overlay svelte-1ubcp68"><div class="payment-dialog svelte-1ubcp68"><div class="page-header"><h2>Payment</h2> <!></div> <div class="body svelte-1ubcp68"><!></div></div></div>`);function ss(e,t){N(t,!0);function n(e,t){let n=t?.result??t;return{status:e,resultCode:n?.code??n?.resultCode??t?.errorCode??void 0,description:n?.description??t?.message??void 0}}let r=R(!1),i=R(``),a=null;ci(()=>{(async()=>{try{await ba();let e=window.Checkout;if(!e){z(r,!0),z(i,`Payment SDK not loaded`);return}a=e.initiate({checkoutId:t.checkoutId,key:t.entityId,customisations:{card:{submitButtonText:`Pay Now`},theme:{brand:{primary:`#E30613`}}},eventHandlers:{onCompleted:e=>{s(),t.onPaymentComplete(n(`completed`,e))},onCancelled:e=>{s(),t.onPaymentComplete(n(`cancelled`,e))},onExpired:e=>{s(),t.onPaymentComplete(n(`expired`,e))},onError:e=>{o(`Peach reported an error rendering the card form`),s(),t.onPaymentComplete(n(`error`,e))}}}),a.render(`#peach-container`)}catch(e){o(String(e)),z(r,!0),z(i,String(e),!0)}})()});function o(e){console.error(`[booking-widget] Peach checkout did not render: ${e}. SDK loaded from ${va()??`an already-present window.Checkout`} for checkoutId ${t.checkoutId}. If that environment does not match the checkout API this cart came from, set peachEnv on createBookingHost (or window.BW_CHECKOUT_PEACH_SDK_URL).`)}function s(){a&&=(a.unmount(),null)}li(s);var c=os(),l=B(c),u=B(l),d=H(B(u),2),f=e=>{var n=rs();ns(H(V(n),2),{get expiresAt(){return t.expiresAt}}),Y(e,n)};Z(d,e=>{t.expiresAt&&e(f)}),M(u);var p=H(u,2),m=B(p),h=e=>{var n=is(),r=H(B(n),4),a=B(r,!0);M(r);var o=H(r,2);M(n),U(()=>X(a,K(i)||`The checkout session may have expired.`)),q(`click`,o,()=>t.onPaymentComplete({status:`error`})),Y(e,n)},g=e=>{Y(e,as())};Z(m,e=>{K(r)?e(h):e(g,-1)}),M(p),M(l),M(c),q(`click`,l,e=>e.stopPropagation()),Y(e,c),P()}vr([`click`]);var cs=J(`<div class="spinner"></div> <p class="hint svelte-16gfovn">Verifying payment...</p>`,1),ls=J(`<button class="btn btn-primary">Check Again</button>`),us=J(`<div class="icon pending svelte-16gfovn">&hellip;</div> <h2 class="svelte-16gfovn">Still Checking Your Payment</h2> <p class="desc svelte-16gfovn"> </p> <div class="actions svelte-16gfovn"><!> <button class="btn btn-outline">Close</button></div>`,1),ds=J(`<div class="icon partial svelte-16gfovn">!</div> <h2 class="svelte-16gfovn">Booking Incomplete</h2> <p class="desc svelte-16gfovn"> </p> <button class="btn btn-outline">Close</button>`,1),fs=J(`<button class="btn btn-primary">Done</button>`),ps=J(`<button class="btn btn-outline">Try Again</button>`),ms=J(`<button class="btn btn-outline">Close</button>`),hs=J(`<div> </div> <h2 class="svelte-16gfovn"> </h2> <p class="desc svelte-16gfovn"> </p> <!>`,1),gs=J(`<div class="result svelte-16gfovn"><!></div>`);function _s(e,t){N(t,!0);let n=I(()=>t.status?.outcome===`successful`),r=I(()=>t.status?.outcome===`pending`),i=I(()=>t.status?.outcome===`partial`),a=I(()=>t.status?.outcome===`failed`&&t.status.retryPayment!==!1);var o=gs(),s=B(o),c=e=>{var t=cs();je(2),Y(e,t)},l=e=>{var n=us(),r=H(V(n),4),i=B(r,!0);M(r);var a=H(r,2),o=B(a),s=e=>{var n=ls();q(`click`,n,function(...e){t.onCheckAgain?.apply(this,e)}),Y(e,n)};Z(o,e=>{t.onCheckAgain&&e(s)});var c=H(o,2);M(a),U(()=>X(i,t.status?.resultDescription??`We couldn't confirm this payment yet. Please don't try to pay again for now - we'll email you as soon as we know where it stands.`)),q(`click`,c,function(...e){t.onDone?.apply(this,e)}),Y(e,n)},u=e=>{var n=ds(),r=H(V(n),4),i=B(r,!0);M(r);var a=H(r,2);U(()=>X(i,t.status?.resultDescription??`Your payment succeeded, but we couldn't confirm every item in your booking. Please contact us with your order details.`)),q(`click`,a,function(...e){t.onDone?.apply(this,e)}),Y(e,n)},d=e=>{var r=hs(),i=V(r);let o;var s=B(i,!0);M(i);var c=H(i,2),l=B(c,!0);M(c);var u=H(c,2),d=B(u,!0);M(u);var f=H(u,2),p=e=>{var n=fs();q(`click`,n,function(...e){t.onDone?.apply(this,e)}),Y(e,n)},m=e=>{var n=ps();q(`click`,n,function(...e){t.onRetry?.apply(this,e)}),Y(e,n)},h=e=>{var n=ms();q(`click`,n,function(...e){t.onDone?.apply(this,e)}),Y(e,n)};Z(f,e=>{K(n)?e(p):K(a)?e(m,1):e(h,-1)}),U(()=>{o=qr(i,1,`icon svelte-16gfovn`,null,o,{success:K(n),failure:!K(n)}),X(s,K(n)?`✓`:`!`),X(l,K(n)?`Payment Successful`:`Payment Failed`),X(d,K(n)?`Your booking has been confirmed.`:t.status?.resultDescription??`Something went wrong. Please try again.`)}),Y(e,r)};Z(s,e=>{t.verifying?e(c):K(r)?e(l,1):K(i)?e(u,2):e(d,-1)}),M(o),Y(e,o),P()}vr([`click`]);var vs=J(`<p class="edit-error svelte-15l4305"> </p>`),ys=J(`<div class="saving-overlay svelte-15l4305"><div class="spinner"></div></div>`),bs=J(`<div class="edit-view svelte-15l4305"><div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Edit Item</h2> <span class="spacer"></span> <button class="icon-btn" aria-label="Close">&times;</button></div> <!> <div><!> <!></div></div>`);function xs(e,t){N(t,!0);let n=Q(t,`autoSelectSingleTimeSlot`,3,!1),r=R(!1),i=R(null);async function a(e){z(r,!0),z(i,null);try{await t.api.updateCartItem(t.cartItem.id,{productId:e.productId,optionId:e.optionId,unitItems:Ei(e.units),availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),t.onUpdated()}catch(e){if(Oi(e)){z(i,`This item's price has changed. Please check the updated price and save again.`),await t.onPriceChanged?.();return}z(i,e instanceof Di&&e.status===424?`This change could not be saved - the supplier rejected it. Please try different options.`:`Something went wrong saving your changes. Please try again.`,!0)}finally{z(r,!1)}}var o=bs(),s=B(o),c=B(s),l=H(c,6);M(s);var u=H(s,2),d=e=>{var t=vs(),n=B(t,!0);M(t),U(()=>X(n,K(i))),Y(e,t)};Z(u,e=>{K(i)&&e(d)});var f=H(u,2);let p;var m=B(f);{let e=I(()=>t.wizardPages??Ma),r=I(()=>t.editPages??t.wizardPages??Ma);Fo(m,{get product(){return t.product},get api(){return t.api},get wizardPages(){return K(e)},get editPages(){return K(r)},get editItem(){return t.cartItem},get autoSelectSingleTimeSlot(){return n()},onComplete:a,get onCancel(){return t.onBack}})}var h=H(m,2),g=e=>{Y(e,ys())};Z(h,e=>{K(r)&&e(g)}),M(f),M(o),U(()=>p=qr(f,1,`edit-body svelte-15l4305`,null,p,{saving:K(r)})),q(`click`,c,function(...e){t.onBack?.apply(this,e)}),q(`click`,l,function(...e){t.onClose?.apply(this,e)}),Y(e,o),P()}vr([`click`]);var Ss=J(`<div class="loading-center" style="height:100%"><div class="spinner"></div></div>`),Cs=J(`<p class="pay-error"> </p>`),ws=J(`<div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Checkout</h2> <span class="spacer"></span> <!> <button class="icon-btn" aria-label="Close">&times;</button></div> <div class="body"><!> <div class="contact-header"><span class="contact-title">Contact Details</span> <span class="required-hint">* Required Fields</span></div> <!> <div style="margin-top:24px"><!></div></div> <div class="pay-bar"><span class="pay-bar-total"> </span> <button class="pay-bar-btn"> </button></div>`,1),Ts=J(`<p class="cart-detail"> </p>`),Es=J(`<div class="cart-unit-line"><span class="cart-unit-label"> </span> <span class="cart-unit-price"> </span></div>`),Ds=J(`<div class="cart-card"><div class="cart-card-top"><h3 class="cart-product"> </h3> <span class="cart-item-total"> </span></div> <div class="cart-detail-lines"><!> <p class="cart-detail"> </p></div> <div class="cart-divider"></div> <div class="cart-units"></div> <div class="cart-actions"><button class="action-edit">Edit</button> <button class="action-remove">Remove</button></div></div>`),Os=J(`<div class="page-header"><h2>Your cart</h2> <span class="spacer"></span> <!> <button class="keep-shopping-btn">+ Keep shopping</button></div> <div class="body"><!> <div class="cart-total-divider"></div> <div class="cart-total-row"><span>Total payable today</span> <span class="cart-total-amount"> </span></div></div> <div class="action-bar"><button class="btn btn-primary">Checkout</button></div>`,1),ks=J(`<div class="modal"><!></div>`);function As(e,t){N(t,!0);let n=Q(t,`cart`,7),r=Q(t,`autoSelectSingleTimeSlot`,3,!1);gn(()=>qi(e=>{e.type===`cart:updated`&&`cart`in e&&e.cart===null&&b(),e.type===`payment:timed-out`&&h.onPaymentTimedOut()}));let i=R(`cart`),a=R(null),o=R(!0),s=R(!1),c=R(!1),l=R(!1),u=R(``),d=R(``),f=R(``),p=R(``),m=R(null),h=Wo({getApi:()=>t.api,getCart:()=>n(),reloadCart:T,notifyCartUpdated:E,refreshDeadlineAfterPay:()=>void ee(),setView:e=>{z(i,e,!0)},close:b,onOrderConfirmed:()=>t.onOrderConfirmed()}),g=R(Zt(new Map));async function _(){try{let e=[...new Set(n().items.map(e=>e.productId))],r=await Promise.all(e.map(e=>t.api.getProduct(e))),i=new Map;for(let e of r)i.set(e.id,e);z(g,i,!0)}catch{}finally{z(o,!1)}}_(),h.resumeInterruptedPayment();let v=I(()=>()=>Ra(Go(n()),Ko(n()),2,2)),y=I(()=>Yi(n()));li(()=>{h.dispose(),$({type:`modal:close`})});function b(){$({type:`modal:close`}),t.onClose()}function x(){b()}function S(e){z(a,e,!0),z(i,`edit`)}async function C(){await T()&&(z(i,`cart`),E(n()))}async function w(e){try{await t.api.removeCartItem(e.id)}catch(e){if(!ki(e))throw e;b();return}await T()&&(E(n()),n().items.length===0&&b())}async function T(){try{return n(await t.api.getCart()),!0}catch(e){if(!ki(e))throw e;return b(),!1}}async function ee(){try{n(await t.api.getCart()),E(n())}catch{}}function E(e){$({type:`cart:updated`,cart:e})}async function te(){z(l,!0),!(!K(m)?.isValid()||!K(s))&&await h.payNow(K(m).getContact())}var D=ks(),ne=B(D),re=e=>{Y(e,Ss())},ie=e=>{var t=Er(),n=V(t),r=e=>{ss(e,{get checkoutId(){return h.paymentResult.checkoutId},get entityId(){return h.paymentResult.entityId},get expiresAt(){return K(y)},get onPaymentComplete(){return h.onPaymentComplete}})},i=e=>{Y(e,Ss())};Z(n,e=>{h.paymentResult?e(r):e(i,-1)}),Y(e,t)},ae=e=>{{let t=I(()=>h.resultStatus?.outcome===`pending`?h.checkStatusAgain:void 0);_s(e,{get status(){return h.resultStatus},get verifying(){return h.isConfirming},onDone:()=>{$({type:`modal:close`})},get onRetry(){return h.retry},get onCheckAgain(){return K(t)}})}},O=e=>{{let n=I(()=>K(g).get(K(a).productId));xs(e,{get cartItem(){return K(a)},get product(){return K(n)},get api(){return t.api},get wizardPages(){return t.wizardPages},get editPages(){return t.editPages},get autoSelectSingleTimeSlot(){return r()},onBack:()=>{z(i,`cart`)},onClose:b,onUpdated:C,onPriceChanged:_})}},oe=I(()=>K(i)===`edit`&&K(a)&&K(g).get(K(a).productId)),se=e=>{var t=ws(),n=V(t),r=B(n),a=H(r,6);ns(a,{get expiresAt(){return K(y)}});var o=H(a,2);M(n);var g=H(n,2),_=B(g),x=e=>{var t=Cs(),n=B(t,!0);M(t),U(()=>X(n,h.payError)),Y(e,t)};Z(_,e=>{h.payError&&e(x)});var S=H(_,4);si(Qo(S,{get hasAttemptedSubmit(){return K(l)},get firstName(){return K(u)},set firstName(e){z(u,e,!0)},get lastName(){return K(d)},set lastName(e){z(d,e,!0)},get emailAddress(){return K(f)},set emailAddress(e){z(f,e,!0)},get phoneNumber(){return K(p)},set phoneNumber(e){z(p,e,!0)}}),e=>z(m,e,!0),()=>K(m));var C=H(S,2);es(B(C),{get privacyAccepted(){return K(s)},get marketingOptIn(){return K(c)},get hasAttemptedSubmit(){return K(l)},onPrivacyChanged:e=>{z(s,e,!0)},onMarketingChanged:e=>{z(c,e,!0)}}),M(C),M(g);var w=H(g,2),T=B(w),ee=B(T,!0);M(T);var E=H(T,2),D=B(E,!0);M(E),M(w),U(e=>{X(ee,e),E.disabled=h.isPaying,X(D,h.isPaying?`Paying…`:`Pay Now`)},[()=>K(v)()]),q(`click`,r,()=>{z(i,`cart`)}),q(`click`,o,b),q(`click`,E,te),Y(e,t)},ce=e=>{var t=Os(),r=V(t),a=H(B(r),4);ns(a,{get expiresAt(){return K(y)}});var o=H(a,2);M(r);var s=H(r,2),c=B(s);Lr(c,17,()=>n().items,Nr,(e,t)=>{var n=Ds(),r=B(n),i=B(r),a=B(i,!0);M(i);var o=H(i,2),s=B(o,!0);M(o),M(r);var c=H(r,2),l=B(c),u=e=>{var n=Ts(),r=B(n,!0);M(n),U(e=>X(r,e),[()=>Xo(K(t))]),Y(e,n)},d=I(()=>Xo(K(t)));Z(l,e=>{K(d)&&e(u)});var f=H(l,2),p=B(f,!0);M(f),M(c);var m=H(c,4);Lr(m,21,()=>Yo(K(t),K(g)),Nr,(e,n)=>{var r=Es(),i=B(r),a=B(i);M(i);var o=H(i,2),s=B(o,!0);M(o),M(r),U(e=>{X(a,`${K(n).title??``} × ${K(n).quantity??``}`),X(s,e)},[()=>Ra(K(n).linePrice,K(t).currencyCode,2,0)]),Y(e,r)}),M(m);var h=H(m,2),_=B(h),v=H(_,2);M(h),M(n),U((e,t,n)=>{X(a,e),X(s,t),X(p,n)},[()=>qo(K(t),K(g)),()=>Ra(K(t).amount,K(t).currencyCode,2,0),()=>Jo(K(t),K(g))]),q(`click`,_,()=>S(K(t))),q(`click`,v,()=>w(K(t))),Y(e,n)});var l=H(c,4),u=H(B(l),2),d=B(u,!0);M(u),M(l),M(s);var f=H(s,2),p=B(f);M(f),U(e=>X(d,e),[()=>K(v)()]),q(`click`,o,x),q(`click`,p,()=>{z(i,`contact`)}),Y(e,t)};Z(ne,e=>{K(o)?e(re):K(i)===`payment`?e(ie,1):K(i)===`result`?e(ae,2):K(oe)?e(O,3):K(i)===`contact`?e(se,4):e(ce,-1)}),M(D),Y(e,D),P()}vr([`click`]);var js=J(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),Ms=J(`<div style="height:100vh"><!></div>`),Ns=J(`<div class="loading-center" style="height:100vh;color:var(--bw-color-text-secondary)">No items in cart.</div>`),Ps=J(`<div class="bw-widget svelte-16hmqxh"><!></div>`);function Fs(e,t){N(t,!0);let n=Q(t,`wizardPages`,3,Ma),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=I(()=>t.editPages??n()),a=R(null),o=R(!0),s=R(!1);async function c(){let e=t.api.cartToken!==``;try{z(a,await t.api.getCart(),!0)}catch(t){z(a,null),e&&ki(t)&&(l(),z(s,!0))}z(o,!1)}c();function l(){t.cartManager?.reset(),$({type:`cart:updated`,cart:null}),$({type:`cart:expired`})}function u(){z(s,!1),$({type:`modal:close`}),c()}gn(()=>qi(e=>{e.type===`cart:updated`&&`cart`in e&&z(a,e.cart,!0)}));var d=Ps(),f=B(d),p=e=>{Y(e,js())},m=e=>{As(e,{get cart(){return K(a)},get api(){return t.api},get wizardPages(){return n()},get editPages(){return K(i)},get autoSelectSingleTimeSlot(){return r()},onClose:()=>$({type:`modal:close`}),onOrderConfirmed:()=>{let e=K(a).items.reduce((e,t)=>e+t.amount,0),n=K(a).items[0]?.currencyCode??`ZAR`;$({type:`order:complete`,cartToken:K(a).cartToken??``,value:e,currency:n}),t.cartManager?.reset()}})},h=e=>{var t=Ms();aa(B(t),{onStartAgain:u}),M(t),Y(e,t)},g=e=>{Y(e,Ns())};Z(f,e=>{K(o)?e(p):K(a)&&K(a).items.length>0?e(m,1):K(s)?e(h,2):e(g,-1)}),M(d),Y(e,d),P()}var Is=J(`<div class="bw-modal-overlay svelte-5e515v"><div class="bw-modal-inner svelte-5e515v"><!></div></div>`);function Ls(e,t){N(t,!0);let n=Q(t,`wizardPages`,3,Ma),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=Q(t,`mode`,3,`inline`),a=ca(),o=I(()=>la(t.api??a?.api,`Checkout`,`api`)),s=I(()=>t.cartManager??a?.cartManager),c=I(()=>t.open??a?.isCheckoutOpen??!0),l=I(()=>t.onClose??(a?()=>a.closeCheckout():void 0)),u=I(()=>i()===`modal`),d=R(!1),f=I(()=>!K(u)||K(c)&&!K(d)),p=!1,m=!1;gn(()=>{let e=K(c);e&&!m&&(z(d,!1),p=!1),m=e});function h(){$({type:`modal:close`})}gn(()=>qi(e=>{e.type!==`modal:close`||!K(u)||p||K(f)&&(p=!0,z(d,!0),K(l)?.())}));function g(e){K(f)&&K(u)&&e.key===`Escape`&&h()}var _=Er();_r(`keydown`,Qt,g);var v=V(_),y=e=>{var i=Er(),a=V(i),c=e=>{var i=Is(),a=B(i);Fs(B(a),{get api(){return K(o)},get cartManager(){return K(s)},get wizardPages(){return n()},get editPages(){return t.editPages},get autoSelectSingleTimeSlot(){return r()}}),M(a),M(i),Wr(i,e=>Vo?.(e)),q(`click`,i,h),q(`click`,a,e=>e.stopPropagation()),Y(e,i)};Z(a,e=>{K(f)&&e(c)}),Y(e,i)},b=e=>{Fs(e,{get api(){return K(o)},get cartManager(){return K(s)},get wizardPages(){return n()},get editPages(){return t.editPages},get autoSelectSingleTimeSlot(){return r()}})};Z(v,e=>{K(u)?e(y):e(b,-1)}),Y(e,_),P()}vr([`click`]);function Rs(e,t,n){let r=R(null),i=R(!1),a=R(!0),o=0;async function s(){let n=++o;if(z(a,!0),z(i,!1),!t().hasCart){z(r,null),z(a,!1);return}try{let t=await e().getCart();if(n!==o)return;z(r,t,!0)}catch{if(n!==o)return;z(r,null),z(i,!0)}z(a,!1)}s(),gn(()=>qi(e=>{e.type===`cart:updated`&&(o+=1,z(r,e.cart,!0),z(i,!1),z(a,!1))}));let c=I(()=>K(a)?`loading`:K(i)?`error`:(K(r)?.items?.length??0)>0?`ready`:`empty`);return gn(()=>{n?.(K(c))}),{get cart(){return K(r)},get state(){return K(c)},reload:()=>void s()}}var zs=J(`<div class="cart-bar bw-widget svelte-1xt0fxx" role="alert"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx">Cart unavailable</span> <span class="error-detail svelte-1xt0fxx">We could not load your cart just now.</span></div> <button class="btn btn-primary">Retry</button></div>`),Bs=J(`<div class="cart-bar bw-widget svelte-1xt0fxx"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx"> <!></span> <span class="total svelte-1xt0fxx"> </span></div> <button class="btn btn-primary">Checkout</button></div>`);function Vs(e,t){N(t,!0);let n=Q(t,`state`,3,`ready`),r=I(()=>t.cart?.items.length??0),i=I(()=>()=>{if(!t.cart||t.cart.items.length===0)return``;let e=t.cart.items[0].currencyCode;return Ra(t.cart.items.reduce((e,t)=>e+t.amount,0),e,2,2)}),a=I(()=>()=>t.cart?Yi(t.cart):new Date);var o=Er(),s=V(o),c=e=>{var n=zs(),r=H(B(n),2);M(n),q(`click`,r,()=>t.onRetry?.()),Y(e,n)},l=e=>{var t=Bs(),n=B(t),o=B(n),s=B(o),c=H(s);{let e=I(()=>K(a)());ns(c,{get expiresAt(){return K(e)}})}M(o);var l=H(o,2),u=B(l,!0);M(l),M(n);var d=H(n,2);M(t),U(e=>{X(s,`${K(r)===1?`1 item`:`${K(r)} items`} `),X(u,e)},[()=>K(i)()]),q(`click`,d,()=>$({type:`modal:open`})),Y(e,t)};Z(s,e=>{n()===`error`?e(c):t.cart&&t.cart.items.length>0&&e(l,1)}),Y(e,o),P()}vr([`click`]);function Hs(e,t){N(t,!0);let n=ca(),r=Rs(()=>la(t.api??n?.api,`CartBar`,`api`),()=>la(t.cartManager??n?.cartManager,`CartBar`,`cartManager`),e=>t.onStateChange?.(e));Vs(e,{get cart(){return r.cart},get state(){return r.state},get onRetry(){return r.reload}}),P()}var Us=J(`<button class="cart-overview-btn is-error bw-widget svelte-16bjfem"><span class="cart-error-label svelte-16bjfem">Cart unavailable - retry</span></button>`),Ws=J(`<button class="cart-overview-btn bw-widget svelte-16bjfem"><svg class="cart-icon svelte-16bjfem" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg> <span class="cart-badge svelte-16bjfem"> </span> <span class="cart-timer svelte-16bjfem"> </span></button>`);function Gs(e,t){N(t,!0);let n=ca(),r=Rs(()=>la(t.api??n?.api,`CartOverviewButton`,`api`),()=>la(t.cartManager??n?.cartManager,`CartOverviewButton`,`cartManager`),e=>t.onStateChange?.(e)),i=I(()=>r.cart),a=R(``);function o(){z(a,K(i)?Ji(Yi(K(i)).getTime()-Date.now()):Ji(0),!0)}o();let s=setInterval(o,1e3);li(()=>clearInterval(s));let c=I(()=>K(i)?.items.length??0);var l=Er(),u=V(l),d=e=>{var t=Us();q(`click`,t,()=>r.reload()),Y(e,t)},f=e=>{var t=Ws(),n=H(B(t),2),r=B(n,!0);M(n);var i=H(n,2),o=B(i,!0);M(i),M(t),U(()=>{X(r,K(c)),X(o,K(a))}),q(`click`,t,()=>$({type:`modal:open`})),Y(e,t)};Z(u,e=>{r.state===`error`?e(d):K(i)&&K(i).items.length>0&&e(f,1)}),Y(e,l),P()}vr([`click`]);function Ks(e,t){N(t,!0);let n=ca(),r=I(()=>la(t.api??n?.api,`CartOverview`,`api`)),i=I(()=>la(t.cartManager??n?.cartManager,`CartOverview`,`cartManager`));var a=Er(),o=V(a),s=e=>{Gs(e,{get api(){return K(r)},get cartManager(){return K(i)},get onStateChange(){return t.onStateChange}})},c=e=>{Hs(e,{get api(){return K(r)},get cartManager(){return K(i)},get onStateChange(){return t.onStateChange}})};Z(o,e=>{t.display===`button`?e(s):e(c,-1)}),Y(e,a),P()}function qs(e,t){N(t,!0),sa(t.host);var n=Er();Ur(V(n),()=>t.children),Y(e,n),P()}async function Js(e){try{await e.host.ready}catch(t){throw e.release(),t}}function Ys(e){if(!e.host){let t=wa(e);return{host:t,release:()=>t.destroy()}}return{host:e.host,release:Xs(e)}}function Xs(e){let{onCartChange:t,onCartUpdated:n,onCartExpired:r,onOrderConfirmed:i}=e;return!t&&!n&&!r&&!i?()=>{}:qi(e=>{e.type===`cart:change`&&t?.({itemCount:e.itemCount,cartItemId:e.cartItemId,totalFormatted:e.totalFormatted}),e.type===`cart:updated`&&n?.(e.cart),e.type===`cart:expired`&&r?.(),e.type===`order:complete`&&i?.({cartToken:e.cartToken,value:e.value,currency:e.currency})})}async function Zs(e,t){let n=Ys(t),{host:r,release:i}=n;await Js(n);let a=Dr(Bo,{target:e,props:{api:r.api,cartManager:r.cartManager,productId:t.productId,wizardPages:t.wizardPages??r.options.wizardPages,autoSelectSingleTimeSlot:t.autoSelectSingleTimeSlot??r.options.autoSelectSingleTimeSlot,autoOpenCheckout:t.autoOpenCheckout!==!1,onCancel:t.onCancel}});return{destroy(){jr(a),i()}}}async function Qs(e,t){let n=Ys(t),{host:r,release:i}=n;await Js(n);let a=Dr(Ls,{target:e,props:{api:r.api,cartManager:r.cartManager,wizardPages:t.wizardPages??r.options.wizardPages,editPages:t.editPages??r.options.editPages,autoSelectSingleTimeSlot:t.autoSelectSingleTimeSlot??r.options.autoSelectSingleTimeSlot,mode:t.mode??`inline`,get open(){return r.isCheckoutOpen},onClose:t.onClose}});return{destroy(){jr(a),i()}}}async function $s(e,t){let n=Ys(t),{host:r,release:i}=n;await Js(n);let a=Dr(Ks,{target:e,props:{api:r.api,cartManager:r.cartManager,display:t.display??`bar`,onStateChange:t.onStateChange}}),o=t.onCheckout?ec(t.onCheckout):()=>{};return{destroy(){o(),jr(a),i()}}}function ec(e){return qi(t=>{t.type===`modal:open`&&e()})}e.ApiClient=Pi,e.ApiError=Di,e.BookingProvider=qs,e.CartBar=Hs,e.CartExpiryGuard=pa,e.CartManager=Gi,e.CartOverview=Ks,e.CartOverviewButton=Gs,e.Checkout=Ls,e.DEFAULT_WIZARD_PAGES=Ma,e.SessionManager=Li,e.TicketConfigurator=Bo,e.createBookingHost=wa,e.getBookingDefaults=Ca,e.getBookingHostContext=ca,e.mountCartOverview=$s,e.mountCheckout=Qs,e.mountConfigurator=Zs,e.onWidgetMessage=qi,e.portal=Vo,e.postMessage=$,e.requestCheckoutClose=Aa,e.requestCheckoutOpen=ja,e.resolveEditPages=Ia,e.resolveWizardPages=Pa,e.setBookingDefaults=Sa,e.setPeachSdk=ya});
5
+ charged. Start again to choose your tickets.</p> <button class="btn btn-primary">Start again</button></div>`);function aa(e,t){N(t,!0);let n=R(null);gn(()=>{K(n)?.focus()});var r=ia(),i=H(B(r),6);si(i,e=>z(n,e),()=>K(n)),M(r),q(`click`,i,function(...e){t.onStartAgain?.apply(this,e)}),Y(e,r),P()}vr([`click`]);var oa=Symbol(`booking-host`);function sa(e){He(oa,e)}function ca(){return Ve(oa)}function la(e,t,n){if(e==null)throw Error(`<${t}> has no ${n}. Pass ${n}={...}, or wrap it in <BookingProvider host={createBookingHost(...)}>.`);return e}var ua=J(`<div class="guard-overlay bw-widget svelte-x4iaex"><!></div>`),da=J(`<div class="guard-overlay bw-widget svelte-x4iaex"><div class="guard-card svelte-x4iaex"><!></div></div>`),fa=J(`<!> <!>`,1);function pa(e,t){N(t,!0);let n=Q(t,`extensionEnabled`,3,!1),r=ca(),i=I(()=>la(t.api??r?.api,`CartExpiryGuard`,`api`)),a=I(()=>la(t.cartManager??r?.cartManager,`CartExpiryGuard`,`cartManager`)),o=R(null),s=R(``),c=R(!1),l=R(!1),u=R(!1),d=R(!1),f=R(null);async function p(){if(K(a).hasCart)try{z(o,await K(i).getCart(),!0)}catch(e){ki(e)&&K(a).reset()}}p(),gn(()=>qi(e=>{e.type===`cart:updated`&&z(o,`cart`in e?e.cart:null,!0),e.type===`order:complete`&&(z(o,null),z(d,!1)),e.type===`payment:started`&&z(d,!0),e.type===`payment:ended`&&(z(d,!1),w(),K(o)&&K(h)&&K(h).getTime()<=Date.now()&&re())}));let m=R(``);gn(()=>{let e=K(o)?.cartToken??``;e!==K(m)&&(z(m,e,!0),z(f,null),T(),z(d,Vi(e)!==null),e&&z(u,!1))});let h=I(()=>K(o)?Yi(K(o)):null),g=I(()=>n()&&!!K(o)&&!K(u)&&K(c)&&K(f)!==K(h)?.getTime()),_=I(()=>!!K(o)&&!Xi(K(o)));async function v(){z(l,!0);let e=K(h)?.getTime()??null;try{z(o,await K(i).extendCart(),!0),Yi(K(o)).getTime()===e&&z(f,e,!0),$({type:`cart:updated`,cart:K(o)})}catch(t){ki(t)?ae():ji(t)?te():Ai(t)&&z(f,e,!0)}finally{z(l,!1)}}function y(){K(h)&&z(f,K(h).getTime(),!0)}let b=null,x=null,S=!1;function C(){b!==null&&(clearTimeout(b),b=null)}function w(){x!==null&&(clearTimeout(x),x=null)}function T(){C(),w()}li(T);function ee(){if(!K(u)){if(K(d)){E();return}re()}}async function E(){if(!K(o)||K(u)||!K(d)||S||x!==null)return;S=!0,C();let e;try{z(o,await K(i).getCart(),!0),$({type:`cart:updated`,cart:K(o)}),e=Yi(K(o)).getTime()<=Date.now()?`past`:`live`}catch(t){e=ki(t)?`gone`:`unknown`}finally{S=!1}if(!K(u)){if(e===`gone`){Hi(),z(d,!1),ae();return}if(e!==`live`){if(!K(d)){re();return}e===`past`?te():ie()}}}function te(){$({type:`payment:timed-out`}),D()}function D(){w(),x=setTimeout(()=>{x=null,ne()},5e3)}async function ne(){if(!K(o)||K(u)||!K(d))return;let e=Vi(K(o).cartToken??``);if(e){try{await K(i).abandonPayment(e.checkoutId)}catch(e){if(Mi(e)||Ni(e)){$({type:`modal:open`});return}return}Hi(),z(d,!1),re()}}async function re(){if(!(!K(o)||K(u)||K(d)||S)){S=!0,C();try{z(o,await K(i).getCart(),!0),$({type:`cart:updated`,cart:K(o)}),Yi(K(o)).getTime()<=Date.now()&&ie()}catch(e){ki(e)?ae():ie()}finally{S=!1}}}function ie(){b=setTimeout(()=>{b=null,K(d)?E():re()},3e4)}function ae(){T(),z(u,!0),K(a).reset(),$({type:`cart:updated`,cart:null}),$({type:`cart:expired`})}function O(){z(u,!1),z(o,null),$({type:`modal:close`})}function oe(e){if(e.key===`Escape`&&K(g)){e.preventDefault(),y();return}if(e.key!==`Tab`)return;let t=K(se)?.querySelectorAll(`button:not([disabled]), [href], [tabindex]:not([tabindex="-1"])`);if(!t?.length)return;let n=t[0],r=t[t.length-1],i=e.shiftKey&&document.activeElement===n,a=!e.shiftKey&&document.activeElement===r;(i||a)&&(e.preventDefault(),(e.shiftKey?r:n).focus())}let se=R(null);var ce=fa();_r(`keydown`,Qt,function(...e){(K(g)||K(u)?oe:void 0)?.apply(this,e)});var le=V(ce),ue=e=>{$i(e,{get expiresAt(){return K(h)},onExpired:ee,get remaining(){return K(s)},set remaining(e){z(s,e,!0)},get warning(){return K(c)},set warning(e){z(c,e,!0)}})};Z(le,e=>{K(o)&&K(h)&&e(ue)});var de=H(le,2),fe=e=>{var t=ua();ra(B(t),{get remaining(){return K(s)},get canExtend(){return K(_)},get extending(){return K(l)},onExtend:v,onDismiss:y}),M(t),si(t,e=>z(se,e),()=>K(se)),Y(e,t)},pe=e=>{var t=da(),n=B(t);aa(B(n),{onStartAgain:O}),M(n),M(t),si(t,e=>z(se,e),()=>K(se)),Y(e,t)};Z(de,e=>{K(g)?e(fe):K(u)&&e(pe,1)}),Y(e,ce),P()}var ma={prod:`https://checkout.peachpayments.com/js/checkout.js`,qa:`https://sandbox-checkout.peachpayments.com/js/checkout.js`},ha=null,ga=null,_a=null;function va(){return _a}function ya(e){let t=e.url??(e.env?ma[e.env]:void 0);!t||t===ga||(ga=t,ha=null)}function ba(){let e=window,t=e.BW_CHECKOUT_ENV??`prod`,n=e.BW_CHECKOUT_PEACH_SDK_URL??ga??ma[t]??ma.prod;return e.Checkout?(_a!==null&&_a!==n?console.warn(`[booking-widget] Peach SDK already loaded from ${_a}, so ${n} was not used. Configure peachEnv before the first payment, or set window.BW_CHECKOUT_PEACH_SDK_URL.`):_a===null&&console.warn(`[booking-widget] Peach SDK was already on the page when the widget first needed it, so ${n} was not used. If its environment does not match the checkout API, the card form will not render.`),Promise.resolve()):ha||(_a=n,ha=new Promise((e,t)=>{let r=document.querySelector(`script[src="${n}"]`);if(r){r.addEventListener(`load`,()=>e()),r.addEventListener(`error`,()=>t(Error(`Failed to load the Peach Payments SDK script`)));return}let i=document.createElement(`script`);i.src=n,i.onload=()=>e(),i.onerror=()=>t(Error(`Failed to load the Peach Payments SDK script`)),document.head.appendChild(i)}),ha)}var xa={};function Sa(e){xa={...xa,...e}}function Ca(){return{...xa}}function wa(e={}){let t={...xa,...e};(t.peachEnv||t.peachSdkUrl)&&ya({env:t.peachEnv,url:t.peachSdkUrl});let n=t.api??new Pi(t.apiBaseUrl??``),r=new Li(n),i=new Gi(n),a=typeof window<`u`,o;a?(r.startBackgroundRefresh(),o=r.ensureSession(t.checkoutKey??``).then(()=>{}),o.catch(()=>{})):o=Promise.resolve();let s={autoSelectSingleTimeSlot:t.autoSelectSingleTimeSlot??!1,wizardPages:t.wizardPages,editPages:t.editPages,shouldBottomCloseOnModal:t.shouldBottomCloseOnModal??!0},c=R(!1),l=!1;function u(e){K(c)!==e&&(z(c,e,!0),t.onCheckoutOpenChange?.(e))}function d(){u(!0)}function f(){u(!1)}function p(){let e=t.autoOpenCheckout??!0;return typeof e==`function`?e():e}let m=qi(e=>{switch(e.type){case`cart:change`:e.openCheckout&&p()&&d(),t.onCartChange?.({itemCount:e.itemCount,cartItemId:e.cartItemId,totalFormatted:e.totalFormatted});break;case`modal:open`:d();break;case`modal:close`:f();break;case`cart:updated`:t.onCartUpdated?.(e.cart);break;case`cart:expired`:t.onCartExpired?.();break;case`order:complete`:t.onOrderConfirmed?.({cartToken:e.cartToken,value:e.value,currency:e.currency})}}),h=t.mountExpiryGuard??!0?Da(n,i,t.extensionEnabled):null;return{api:n,sessionManager:r,cartManager:i,ready:o,get isCheckoutOpen(){return K(c)},options:s,openCheckout:d,closeCheckout:f,destroy(){l||(l=!0,f(),m(),h?.(),r.stop())}}}var Ta=[],Ea=null;function Da(e,t,n){let r={api:e,cartManager:t,extensionEnabled:n};Ta.push(r),Ta.length===1&&Oa(r);let i=!1;return()=>{if(i)return;i=!0;let e=Ta[0]===r;if(Ta=Ta.filter(e=>e!==r),Ta.length===0){Ea?.(),Ea=null;return}e&&(Ea?.(),Oa(Ta[0]))}}function Oa(e){Ea=ka(e.api,e.cartManager,e.extensionEnabled)}function ka(e,t,n){if(typeof document>`u`)return null;let r=document.createElement(`div`);r.dataset.bwExpiryGuard=``;let i=null,a=!1;function o(){a||(document.body.appendChild(r),i=Dr(pa,{target:r,props:n===void 0?{api:e,cartManager:t}:{api:e,cartManager:t,extensionEnabled:n}}))}return document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,o,{once:!0}):o(),()=>{a=!0,document.removeEventListener(`DOMContentLoaded`,o),i&&jr(i),r.remove()}}function Aa(){$({type:`modal:close`})}function ja(){$({type:`modal:open`})}var Ma=[{title:`Option`,widgets:[`option`,`age-category`]},{title:`Schedule`,widgets:[`date`,`time`]},{title:`Pickup`,widgets:[`pickup`]}],Na={"option-first":Ma,"date-first":[{title:`Age & capacity`,widgets:[`age-category`]},{title:`Schedule`,widgets:[`date`,`time`]},{title:`Option`,widgets:[`option`]},{title:`Pickup`,widgets:[`pickup`]}]};function Pa(e){if(!e)return Ma;if(e in Na)return Na[e];try{let t=JSON.parse(e);if(Array.isArray(t)&&t.length>0&&t[0].widgets)return t}catch{}return Ma}var Fa={"option-first":[{title:`Option`,widgets:[`option`]},{title:`Age, Date & Time`,widgets:[`age-category`,`date`,`time`]},{title:`Pickup`,widgets:[`pickup`]}],"date-first":[{title:`Age, Date & Time`,widgets:[`age-category`,`date`,`time`]},{title:`Option`,widgets:[`option`]},{title:`Pickup`,widgets:[`pickup`]}]};function Ia(e,t){if(t){if(t in Fa)return Fa[t];try{let e=JSON.parse(t);if(Array.isArray(e)&&e.length>0&&e[0].widgets)return e}catch{}}let n=e?e in Na?e:null:`option-first`;return n?Fa[n]:Pa(e)}var La={ZAR:`R`,USD:`$`,EUR:`€`,GBP:`£`};function Ra(e,t,n,r=0){let i=e/10**n;return`${La[t]??t}\u00A0${i.toFixed(r)}`}var za=J(`<div class="leading"><!></div>`),Ba=J(`<div class="heading svelte-idp8p9"> </div>`),Va=J(`<div class="body svelte-idp8p9"> </div>`),Ha=J(`<button><div class="layout svelte-idp8p9"><!> <div class="text svelte-idp8p9"><!> <!> <!></div> <span></span></div></button>`);function Ua(e,t){var n=Ha();let r;var i=B(n),a=B(i),o=e=>{var n=za();Ur(B(n),()=>t.leading),M(n),Y(e,n)};Z(a,e=>{t.leading&&e(o)});var s=H(a,2),c=B(s),l=e=>{var n=Ba(),r=B(n,!0);M(n),U(()=>X(r,t.heading)),Y(e,n)};Z(c,e=>{t.heading&&e(l)});var u=H(c,2),d=e=>{var n=Va(),r=B(n,!0);M(n),U(()=>X(r,t.body)),Y(e,n)};Z(u,e=>{t.body&&e(d)});var f=H(u,2),p=e=>{var n=Er();Ur(V(n),()=>t.children),Y(e,n)};Z(f,e=>{t.children&&e(p)}),M(s);var m=H(s,2);let h;M(i),M(n),U(()=>{r=qr(n,1,`card card-selectable`,null,r,{"card-selected":t.selected}),h=qr(m,1,`radio svelte-idp8p9`,null,h,{"radio-selected":t.selected})}),q(`click`,n,function(...e){t.onSelect?.apply(this,e)}),Y(e,n)}vr([`click`]);var Wa=J(`<p class="pricing svelte-19wqhng"> </p>`);function Ga(e,t){N(t,!0);let n=I(()=>()=>{let e=[];for(let n of t.option.units){if(!n.pricing||n.pricing.length===0)continue;let t=n.pricing[0];e.push(`${n.title??n.id} from ${Ra(t.retail,t.currency,t.currencyPrecision)}`)}return e.join(`, `)});Ua(e,{get selected(){return t.selected},get onSelect(){return t.onSelect},get heading(){return t.option.title},get body(){return t.option.description},children:(e,t)=>{var r=Er(),i=V(r),a=e=>{var t=Wa(),r=B(t,!0);M(t),U(e=>X(r,e),[()=>K(n)()]),Y(e,t)},o=I(()=>K(n)());Z(i,e=>{K(o)&&e(a)}),Y(e,r)},$$slots:{default:!0}}),P()}var Ka=J(`<span class="price svelte-bzhcxd"> </span>`),qa=J(`<p class="limit-message svelte-bzhcxd"> </p>`),Ja=J(`<div><div class="info svelte-bzhcxd"><span class="name svelte-bzhcxd"> </span> <!></div> <div class="stepper svelte-bzhcxd"><button class="step-btn svelte-bzhcxd" aria-label="Decrease">&minus;</button> <input class="qty svelte-bzhcxd" type="text" inputmode="numeric" pattern="[0-9]*"/> <button class="step-btn svelte-bzhcxd" aria-label="Increase">+</button></div></div> <!>`,1);function Ya(e,t){N(t,!0);let n=Q(t,`boxed`,3,!0),r=Q(t,`divided`,3,!1),i=I(()=>()=>{if(!t.unit.pricing||t.unit.pricing.length===0)return``;let e=t.unit.pricing[0];return`from ${Ra(e.retail,e.currency,e.currencyPrecision)}`}),a=R(Zt(String(t.quantity))),o=R(``);gn(()=>{z(a,String(t.quantity),!0)});function s(){t.quantity>0&&t.onChange(t.quantity-1)}function c(){if(t.max!=null&&t.quantity>=t.max){l();return}z(o,``),t.onChange(t.quantity+1)}function l(){let e=t.unit.title??t.unit.id;z(o,t.max===0?`No ${e} tickets left for this time slot.`:`Only ${t.max} ${e} ticket${t.max===1?``:`s`} left for this time slot.`,!0)}function u(){let e=K(a).replace(/[^0-9]/g,``);e!==K(a)&&z(a,e,!0),z(o,``)}function d(){let e=K(a)===``?0:parseInt(K(a),10);Number.isNaN(e)&&(e=0),t.max!=null&&e>t.max&&(e=t.max,l()),z(a,String(e),!0),e!==t.quantity&&t.onChange(e)}function f(e){e.currentTarget.select()}var p=Ja(),m=V(p);let h;var g=B(m),_=B(g),v=B(_,!0);M(_);var y=H(_,2),b=e=>{var t=Ka(),n=B(t,!0);M(t),U(e=>X(n,e),[()=>K(i)()]),Y(e,t)},x=I(()=>K(i)());Z(y,e=>{K(x)&&e(b)}),M(g);var S=H(g,2),C=B(S),w=H(C,2);Zr(w);var T=H(w,2);M(S),M(m);var ee=H(m,2),E=e=>{var t=qa(),n=B(t,!0);M(t),U(()=>X(n,K(o))),Y(e,t)};Z(ee,e=>{K(o)&&e(E)}),U(()=>{h=qr(m,1,`row svelte-bzhcxd`,null,h,{card:n(),plain:!n(),divided:r()}),X(v,t.unit.title??t.unit.id),C.disabled=t.quantity===0,$r(w,`aria-label`,`${t.unit.title??t.unit.id??``} quantity`),T.disabled=t.max!=null&&t.quantity>=t.max}),q(`click`,C,s),q(`input`,w,u),_r(`blur`,w,d),_r(`focus`,w,f),ri(w,()=>K(a),e=>z(a,e)),q(`click`,T,c),Y(e,p),P()}vr([`click`,`input`]);var Xa=J(`<div class="loading-center"><div class="spinner"></div></div>`),Za=J(`<span class="svelte-10gu2tq"> </span>`),Qa=J(`<span class="cell empty svelte-10gu2tq"></span>`),$a=J(`<span class="day-price svelte-10gu2tq"> </span>`),eo=J(`<button><span class="day-num svelte-10gu2tq"> </span> <!></button>`),to=J(`<div class="header svelte-10gu2tq"><button class="nav-btn svelte-10gu2tq" aria-label="Previous month">&lsaquo;</button> <span class="month svelte-10gu2tq"> </span> <button class="nav-btn svelte-10gu2tq" aria-label="Next month">&rsaquo;</button></div> <div class="day-names svelte-10gu2tq"></div> <div class="grid svelte-10gu2tq"></div>`,1),no=J(`<div class="calendar svelte-10gu2tq"><!></div>`);function ro(e,t){N(t,!0);let n=[`SU`,`MO`,`TU`,`WE`,`TH`,`FR`,`SA`],r=R(Zt(new Date)),i=I(()=>()=>{let e=K(r).getFullYear(),t=K(r).getMonth(),n=new Date(e,t,1).getDay(),i=new Date(e,t+1,0).getDate(),a=[];for(let e=0;e<n;e++)a.push(null);for(let n=1;n<=i;n++)a.push(new Date(e,t,n));return a}),a=I(()=>K(r).toLocaleDateString(`en`,{month:`long`}));function o(){let e=new Date(K(r));e.setMonth(e.getMonth()-1),z(r,e,!0)}function s(){let e=new Date(K(r));e.setMonth(e.getMonth()+1),z(r,e,!0)}function c(e){let n=t.availabilityByDate[Ci(e)];return n?n.available?`available`:n.status===`SOLD_OUT`?`sold-out`:`unavailable`:`unavailable`}function l(e){let n=t.availabilityByDate[Ci(e)];if(!n||!n.available)return``;if(n.unitPricing&&n.unitPricing.length>0){let e=n.unitPricing[0];return Ra(e.retail,e.currency,e.currencyPrecision)}return``}function u(e){return t.selectedDate?Ci(e)===Ci(t.selectedDate):!1}function d(e){let t=new Date;return t.setHours(0,0,0,0),e<t}function f(e){c(e)!==`available`||d(e)||t.onDateSelected(e)}var p=no(),m=B(p),h=e=>{Y(e,Xa())},g=e=>{var t=to(),r=V(t),p=B(r),m=H(p,2),h=B(m,!0);M(m);var g=H(m,2);M(r);var _=H(r,2);Lr(_,21,()=>n,Nr,(e,t)=>{var n=Za(),r=B(n,!0);M(n),U(()=>X(r,K(t))),Y(e,n)}),M(_);var v=H(_,2);Lr(v,21,()=>K(i)(),Nr,(e,t)=>{var n=Er(),r=V(n),i=e=>{Y(e,Qa())},a=e=>{let n=I(()=>c(K(t))),r=I(()=>d(K(t))),i=I(()=>l(K(t)));var a=eo();let o;var s=B(a),p=B(s,!0);M(s);var m=H(s,2),h=e=>{var t=$a(),n=B(t,!0);M(t),U(()=>X(n,K(i))),Y(e,t)};Z(m,e=>{K(i)&&!K(r)&&e(h)}),M(a),U((e,t)=>{o=qr(a,1,`cell svelte-10gu2tq`,null,o,e),a.disabled=K(n)!==`available`||K(r),X(p,t)},[()=>({available:K(n)===`available`&&!K(r),"sold-out":K(n)===`sold-out`,unavailable:K(n)===`unavailable`||K(r),selected:u(K(t))}),()=>K(t).getDate()]),q(`click`,a,()=>f(K(t))),Y(e,a)};Z(r,e=>{K(t)===null?e(i):e(a,-1)}),Y(e,n)}),M(v),U(()=>X(h,K(a))),q(`click`,p,o),q(`click`,g,s),Y(e,t)};Z(m,e=>{t.loading?e(h):e(g,-1)}),M(p),Y(e,p),P()}vr([`click`]);var io=J(`<div class="loading-center"><div class="spinner"></div></div>`),ao=J(`<p class="hint svelte-1hu99a4">All-day availability</p>`),oo=J(`<div class="slots svelte-1hu99a4"></div>`);function so(e,t){N(t,!0);var n=Er(),r=V(n),i=e=>{Y(e,io())},a=e=>{Y(e,ao())},o=e=>{var n=oo();Lr(n,21,()=>t.timeSlots,Nr,(e,n)=>{let r=I(()=>wi(K(n).localDateTimeStart));{let i=I(()=>t.selectedTime===K(r)),a=I(()=>K(n).vacancies==null?void 0:`${K(n).vacancies} left`);Ua(e,{get selected(){return K(i)},onSelect:()=>t.onTimeSelected(K(r)),get heading(){return K(r)},get body(){return K(a)}})}}),M(n),Y(e,n)};Z(r,e=>{t.loading?e(i):t.timeSlots.length===1&&t.timeSlots[0].allDay?e(a,1):t.timeSlots.length>0&&e(o,2)}),Y(e,n),P()}var co=`(min-width: 1024px)`;function lo(){return typeof window>`u`||!window.matchMedia?null:window.matchMedia(co)}function uo(){return lo()?.matches??!0}function fo(){let e=R(Zt(uo()));return gn(()=>{let t=lo();if(!t)return;z(e,t.matches,!0);let n=t=>{z(e,t.matches,!0)};return t.addEventListener(`change`,n),()=>t.removeEventListener(`change`,n)}),{get isInline(){return K(e)}}}var po={option:`Which option would you like?`,"age-category":`How many tickets would you like?`,date:`When would you like to go?`,time:`What time works for you?`,pickup:`Where would you like to be picked up?`,addon:``},mo=J(`<div class="wizard-header svelte-9w5z1v"><h2 class="svelte-9w5z1v">Buy Tickets</h2></div>`),ho=J(`<span> </span>`),go=J(`<div class="section svelte-9w5z1v"><div class="option-list svelte-9w5z1v"></div></div>`),_o=J(`<div class="section svelte-9w5z1v"><div class="unit-list svelte-9w5z1v"></div></div>`),vo=J(`<div class="section svelte-9w5z1v"><!></div>`),yo=J(`<div class="section svelte-9w5z1v"><div class="pickup-list svelte-9w5z1v"></div></div>`),bo=J(`<!> <!> <!> <!> <!>`,1),xo=J(`<div class="accordion-body svelte-9w5z1v"></div>`),So=J(`<div><button class="accordion-header svelte-9w5z1v"><div class="accordion-header-text svelte-9w5z1v"><span class="accordion-title svelte-9w5z1v"> </span> <!></div> <span></span></button> <!></div>`),Co=J(`<div class="wizard-body svelte-9w5z1v"></div> <div class="action-bar"><button class="btn btn-secondary">Return to Cart</button> <button class="btn btn-primary">Save &amp; Update</button></div>`,1),wo=J(`<h2 class="body-title svelte-9w5z1v">Buy Tickets</h2>`),To=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <div class="option-list svelte-9w5z1v"></div></div>`),Eo=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <div></div></div>`),Do=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <!></div>`),Oo=J(`<div class="section svelte-9w5z1v"><h4 class="section-title"> </h4> <div class="pickup-list svelte-9w5z1v"></div></div>`),ko=J(`<span></span>`),Ao=J(`<div class="page-dots svelte-9w5z1v"></div>`),jo=J(`<button class="btn btn-secondary"> </button>`),Mo=J(`<div class="wizard-body svelte-9w5z1v"><!> <h3 class="page-title svelte-9w5z1v"> </h3> <!></div> <div class="wizard-footer svelte-9w5z1v"><!> <div class="action-bar svelte-9w5z1v"><!> <button class="btn btn-primary"> </button></div></div>`,1),No=J(`<div class="dialog-backdrop svelte-9w5z1v"><div class="dialog svelte-9w5z1v"><h3 class="dialog-title svelte-9w5z1v">You have unsaved changes</h3> <p class="dialog-body svelte-9w5z1v">Would you like to proceed?</p> <div class="dialog-actions svelte-9w5z1v"><button class="dialog-btn-text svelte-9w5z1v">Discard changes</button> <button class="dialog-btn-fill svelte-9w5z1v">Return to editing</button></div></div></div>`),Po=J(`<div><!> <!></div> <!>`,1);function Fo(e,t){N(t,!0);let n=Q(t,`editPages`,19,()=>t.wizardPages),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=fo(),a=I(()=>t.editItem!=null),o=I(()=>t.editItem&&!K(D)()?t.editItem.optionId:void 0),s=R(0),c=R(null),l=R(Zt({})),u=R(null),d=R(null),f=R(null),p=R(null),m=R(Zt({})),h=R(Zt([])),g=R(!1),_=R(!1),v=R(!1),y=R(!1),b=R(0),x=R(Zt(new Set));function S(...e){z(x,new Set([...K(x),...e]),!0)}function C(...e){e.every(e=>!K(x).has(e))||z(x,new Set([...K(x)].filter(t=>!e.includes(t))),!0)}let w=I(()=>Object.values(K(l)).some(e=>e>0)),T=I(()=>K(h).length===1&&K(h)[0].allDay),ee=I(()=>K(h).length===1),E=I(()=>!K(_)&&K(h).length===0),te=I(()=>K(T)||r()&&K(ee)),D=I(()=>()=>{let e=t.wizardPages.findIndex(e=>e.widgets.includes(`age-category`)),n=t.wizardPages.findIndex(e=>e.widgets.includes(`option`));return e>=0&&(n<0||e<n)}),ne=I(()=>()=>K(c)?K(c).units:K(D)()?t.product.options[0]?.units??[]:[]),re=I(()=>()=>K(c)?K(c).id:K(D)()?t.product.options[0]?.id??null:null);ci(()=>{t.editItem&&ie(t.editItem)});function ie(e){let n=t.product.options.find(t=>t.id===e.optionId);n&&z(c,n,!0);let r={};for(let t of e.unitItems)r[t.unitId]=(r[t.unitId]??0)+1;z(l,r,!0),K(w)&&ae(e.availabilityId,e.pickupPointId)}async function ae(e,n){if(await xe(),!e)return;let r=Ti(e);if(!r)return;let i=K(re)();if(!i)return;let a=r.split(`-`).map(Number);z(u,new Date(a[0],a[1]-1,a[2]),!0),z(_,!0);let o=await t.api.getAvailability(t.product.id,i,r);z(h,o,!0),z(_,!1);let s=o.find(t=>t.id===e);s&&(z(f,s,!0),s.allDay||z(d,wi(s.localDateTimeStart),!0),n&&K(c)?.pickupAvailable&&z(p,K(c).pickupLocations?.find(e=>e.id===n)??null,!0))}function O(e){return K(D)()?se(e):oe(e)}function oe(e){switch(e){case`option`:return!K(o);case`age-category`:return K(c)!=null;case`date`:return K(w);case`time`:return K(u)!=null&&!K(te)&&!K(E);case`pickup`:return K(f)!=null&&K(c)?.pickupAvailable===!0;case`addon`:return!1}}function se(e){switch(e){case`age-category`:return K(ne)().length>0;case`date`:return K(w);case`time`:return K(u)!=null&&!K(te)&&!K(E);case`option`:return!K(o)&&(K(f)!=null||K(u)!=null&&K(te));case`pickup`:return K(c)!=null&&K(c).pickupAvailable===!0&&K(f)!=null;case`addon`:return!1}}let ce=I(()=>()=>{let e=[];for(let n=0;n<t.wizardPages.length;n++){let r=t.wizardPages[n].widgets.filter(O);r.length>0&&e.push({index:n,title:t.wizardPages[n].title,widgets:r})}return e}),le=I(()=>()=>{let e=[];for(let t of n())for(let n of t.widgets)O(n)&&!e.includes(n)&&e.push(n);return e}),ue=I(()=>()=>{let e=K(ce)();return K(s)>=e.length?e[e.length-1]??null:e[K(s)]??null}),de=I(()=>()=>K(s)>=K(ce)().length-1),fe=I(()=>()=>K(ue)()?.title??``);function pe(e){switch(e){case`option`:return K(c)?.title??`Not selected`;case`age-category`:{let e=[];for(let t of K(ne)()){let n=K(l)[t.id]??0;n>0&&e.push(`${n} ${t.title}`)}return e.length>0?e.join(`, `):`Not selected`}case`date`:return K(u)?K(u).toLocaleDateString(`en-GB`,{day:`numeric`,month:`short`,year:`numeric`}):`Not selected`;case`time`:return K(d)??(K(te)?`All day`:`Not selected`);case`pickup`:return K(p)?.title??K(p)?.id??`Not selected`;default:return``}}function me(e){return e.map(pe).filter(e=>e&&e!==`Not selected`).join(` · `)||`Not selected`}let he=I(()=>()=>{let e=[];for(let t of n()){let n=t.widgets.filter(O);n.length>0&&e.push({title:t.title,widgets:n})}return e}),ge=I(()=>()=>{if(K(u)!=null&&K(E))return!1;let e=K(a)?K(le)():K(ue)()?.widgets??[];if(e.length===0)return!1;for(let t of e)switch(t){case`option`:if(!K(c))return!1;break;case`age-category`:if(!K(w))return!1;break;case`date`:if(!K(u))return!1;break;case`time`:if(!K(d)&&!K(te))return!1;break;case`pickup`:if(K(c)?.pickupRequired&&!K(p))return!1}return!0});function _e(e){if(K(D)()){z(c,e,!0),K(p)&&!e.pickupLocations?.some(e=>e.id===K(p).id)&&(z(p,null),S(`pickup`)),z(v,!0);return}z(c,e,!0),z(l,Object.fromEntries(e.units.map(e=>[e.id,0])),!0),z(u,null),z(d,null),z(f,null),z(p,null),z(m,{},!0),z(h,[],!0),z(v,!0)}function ve(e,t){z(l,{...K(l),[e]:t},!0),z(v,!0),K(w)&&Object.keys(K(m)).length===0&&xe(),ye()}function ye(){!K(f)||K(f).vacancies==null||Object.values(K(l)).reduce((e,t)=>e+t,0)<=K(f).vacancies||(z(u,null),z(d,null),z(f,null),z(h,[],!0),S(`date`,`time`))}function be(e){if(!K(f)||K(f).vacancies==null)return;let t=Object.values(K(l)).reduce((e,t)=>e+t,0),n=K(l)[e]??0;return K(f).vacancies-t+n}async function xe(){let e=K(re)();e&&(z(g,!0),z(m,await t.api.getAvailabilityCalendar(t.product.id,e),!0),z(g,!1))}async function Se(e){let n=K(re)();if(!n)return;z(u,e,!0),z(d,null),z(f,null),z(h,[],!0),z(v,!0),z(_,!0),C(`date`,`time`);let i=await t.api.getAvailability(t.product.id,n,Ci(e));z(h,i,!0),z(_,!1),i.length===1&&(i[0].allDay||r())&&(z(f,i[0],!0),i[0].allDay||z(d,wi(i[0].localDateTimeStart),!0))}function Ce(e){let t=K(h).find(t=>wi(t.localDateTimeStart)===e&&t.available);t&&(z(d,e,!0),z(f,t,!0),z(v,!0),C(`time`))}function k(e){z(p,e,!0),z(v,!0),C(`pickup`)}function we(){K(de)()?A():Jt(s)}function Te(){K(s)>0?Jt(s,-1):t.onCancel?Ee():!K(o)&&K(c)&&(z(c,null),z(l,{},!0),z(u,null),z(d,null),z(f,null),z(p,null),z(m,{},!0),z(h,[],!0))}function Ee(){if(K(v)){z(y,!0);return}t.onCancel?.()}function De(){z(y,!1),t.onCancel?.()}function A(){if(!K(f)||!K(c))return;let e=[];for(let t of K(f).unitPricing??[]){let n=K(l)[t.unitId]??0;if(n<=0)continue;let r=K(ne)().find(e=>e.id===t.unitId);e.push({unitId:t.unitId,quantity:n,title:r?.title??t.unitId,pricePerUnit:t.retail})}let n=0;for(let t of e)n+=t.pricePerUnit*t.quantity;let r=K(f).unitPricing?.[0],i=r?.currency??t.product.defaultCurrency??`ZAR`,a=r?.currencyPrecision??2;t.onComplete({productId:t.product.id,optionId:K(c).id,optionTitle:K(c).title,availabilityId:K(f).id,localDate:K(u)?Ci(K(u)):void 0,pickupPointId:K(p)?.id,units:e,totalPrice:n,currency:i,currencyPrecision:a})}var Oe=Po(),j=V(Oe);let ke;var Ae=B(j),je=e=>{Y(e,mo())};Z(Ae,e=>{!K(a)&&i.isInline&&e(je)});var Me=H(Ae,2),Ne=e=>{var n=Co(),r=V(n);Lr(r,21,()=>K(he)(),Nr,(e,n,r)=>{let i=I(()=>K(n).widgets.some(e=>K(x).has(e)));var a=So();let s;var f=B(a),v=B(f),y=B(v),S=B(y,!0);M(y);var C=H(y,2),T=e=>{var t=ho();let r;var a=B(t,!0);M(t),U(e=>{r=qr(t,1,`accordion-summary svelte-9w5z1v`,null,r,{invalidated:K(i)}),X(a,e)},[()=>K(i)?`Changes made require new configuration`:me(K(n).widgets)]),Y(e,t)};Z(C,e=>{K(b)!==r&&e(T)}),M(v);var ee=H(v,2);let E;M(f);var D=H(f,2),re=e=>{var r=xo();Lr(r,21,()=>K(n).widgets,Nr,(e,n)=>{var r=bo(),i=V(r),a=e=>{var n=go(),r=B(n);Lr(r,21,()=>t.product.options,Nr,(e,t)=>{{let n=I(()=>K(c)?.id===K(t).id);Ga(e,{get option(){return K(t)},get selected(){return K(n)},onSelect:()=>_e(K(t))})}}),M(r),M(n),Y(e,n)};Z(i,e=>{K(n)===`option`&&!K(o)&&e(a)});var s=H(i,2),f=e=>{var t=_o(),n=B(t);Lr(n,21,()=>K(ne)(),Nr,(e,t)=>{{let n=I(()=>K(l)[K(t).id]??0),r=I(()=>be(K(t).id));Ya(e,{get unit(){return K(t)},get quantity(){return K(n)},get max(){return K(r)},onChange:e=>ve(K(t).id,e)})}}),M(n),M(t),Y(e,t)},v=I(()=>K(n)===`age-category`&&K(ne)().length>0);Z(s,e=>{K(v)&&e(f)});var y=H(s,2),b=e=>{var t=vo();ro(B(t),{get availabilityByDate(){return K(m)},get selectedDate(){return K(u)},onDateSelected:Se,get loading(){return K(g)}}),M(t),Y(e,t)};Z(y,e=>{K(n)===`date`&&K(w)&&e(b)});var x=H(y,2),S=e=>{var t=vo();so(B(t),{get timeSlots(){return K(h)},get selectedTime(){return K(d)},get loading(){return K(_)},onTimeSelected:Ce}),M(t),Y(e,t)};Z(x,e=>{K(n)===`time`&&K(u)&&!K(te)&&e(S)});var C=H(x,2),T=e=>{var t=yo(),n=B(t);Lr(n,21,()=>K(c).pickupLocations,Nr,(e,t)=>{{let n=I(()=>K(p)?.id===K(t).id),r=I(()=>K(t).title??K(t).id);Ua(e,{get selected(){return K(n)},onSelect:()=>k(K(t)),get heading(){return K(r)},get body(){return K(t).address}})}}),M(n),M(t),Y(e,t)};Z(C,e=>{K(n)===`pickup`&&K(c)?.pickupAvailable&&K(c).pickupLocations&&e(T)}),Y(e,r)}),M(r),Y(e,r)};Z(D,e=>{K(b)===r&&e(re)}),M(a),U(e=>{s=qr(a,1,`accordion-section svelte-9w5z1v`,null,s,{expanded:K(b)===r,invalidated:K(i)}),X(S,e),E=qr(ee,1,`accordion-chevron svelte-9w5z1v`,null,E,{open:K(b)===r})},[()=>K(n).title.toUpperCase()]),q(`click`,f,()=>{z(b,K(b)===r?-1:r,!0)}),Y(e,a)}),M(r);var i=H(r,2),a=B(i),s=H(a,2);M(i),U(e=>s.disabled=e,[()=>!K(ge)()]),q(`click`,a,Ee),q(`click`,s,A),Y(e,n)},Pe=e=>{var n=Mo(),r=V(n),a=B(r),f=e=>{Y(e,wo())};Z(a,e=>{i.isInline||e(f)});var v=H(a,2),y=B(v,!0);M(v),Lr(H(v,2),17,()=>K(ue)()?.widgets??[],Nr,(e,n)=>{var r=bo(),a=V(r),s=e=>{var r=To(),i=B(r),a=B(i,!0);M(i);var o=H(i,2);Lr(o,21,()=>t.product.options,Nr,(e,t)=>{{let n=I(()=>K(c)?.id===K(t).id);Ga(e,{get option(){return K(t)},get selected(){return K(n)},onSelect:()=>_e(K(t))})}}),M(o),M(r),U(()=>X(a,po[K(n)])),Y(e,r)};Z(a,e=>{K(n)===`option`&&!K(o)&&e(s)});var f=H(a,2),v=e=>{var t=Eo(),r=B(t),a=B(r,!0);M(r);var o=H(r,2);let s;Lr(o,21,()=>K(ne)(),Nr,(e,t)=>{{let n=I(()=>K(l)[K(t).id]??0),r=I(()=>be(K(t).id));Ya(e,{get unit(){return K(t)},boxed:!1,get divided(){return i.isInline},get quantity(){return K(n)},get max(){return K(r)},onChange:e=>ve(K(t).id,e)})}}),M(o),M(t),U(()=>{X(a,po[K(n)]),s=qr(o,1,`unit-list svelte-9w5z1v`,null,s,{divided:i.isInline})}),Y(e,t)},y=I(()=>K(n)===`age-category`&&K(ne)().length>0);Z(f,e=>{K(y)&&e(v)});var b=H(f,2),x=e=>{var t=Do(),r=B(t),i=B(r,!0);M(r),ro(H(r,2),{get availabilityByDate(){return K(m)},get selectedDate(){return K(u)},onDateSelected:Se,get loading(){return K(g)}}),M(t),U(()=>X(i,po[K(n)])),Y(e,t)};Z(b,e=>{K(n)===`date`&&K(w)&&e(x)});var S=H(b,2),C=e=>{var t=Do(),r=B(t),i=B(r,!0);M(r),so(H(r,2),{get timeSlots(){return K(h)},get selectedTime(){return K(d)},get loading(){return K(_)},onTimeSelected:Ce}),M(t),U(()=>X(i,po[K(n)])),Y(e,t)};Z(S,e=>{K(n)===`time`&&K(u)&&!K(te)&&e(C)});var T=H(S,2),ee=e=>{var t=Oo(),r=B(t),i=B(r,!0);M(r);var a=H(r,2);Lr(a,21,()=>K(c).pickupLocations,Nr,(e,t)=>{{let n=I(()=>K(p)?.id===K(t).id),r=I(()=>K(t).title??K(t).id);Ua(e,{get selected(){return K(n)},onSelect:()=>k(K(t)),get heading(){return K(r)},get body(){return K(t).address}})}}),M(a),M(t),U(()=>X(i,po[K(n)])),Y(e,t)};Z(T,e=>{K(n)===`pickup`&&K(c)?.pickupAvailable&&K(c).pickupLocations&&e(ee)}),Y(e,r)}),M(r);var b=H(r,2),x=B(b),S=e=>{var t=Ao();Lr(t,21,()=>K(ce)(),Nr,(e,t,n)=>{var r=ko();let i;U(()=>i=qr(r,1,`dot svelte-9w5z1v`,null,i,{active:n===K(s)})),Y(e,r)}),M(t),Y(e,t)},C=I(()=>K(ce)().length>1);Z(x,e=>{K(C)&&e(S)});var T=H(x,2),ee=B(T),E=e=>{var t=jo(),n=B(t,!0);M(t),U(()=>X(n,K(s)>0?`Back`:`Cancel`)),q(`click`,t,Te),Y(e,t)};Z(ee,e=>{(K(s)>0||t.onCancel&&!i.isInline)&&e(E)});var D=H(ee,2),re=B(D,!0);M(D),M(T),M(b),U((e,t,n)=>{X(y,e),D.disabled=t,X(re,n)},[()=>K(fe)(),()=>!K(ge)(),()=>K(de)()?`Add to Cart`:`Next`]),q(`click`,D,we),Y(e,n)};Z(Me,e=>{K(a)?e(Ne):e(Pe,-1)}),M(j);var Fe=H(j,2),Ie=e=>{var t=No(),n=B(t),r=H(B(n),4),i=B(r),a=H(i,2);M(r),M(n),M(t),q(`click`,t,()=>{z(y,!1)}),q(`click`,n,e=>e.stopPropagation()),q(`click`,i,De),q(`click`,a,()=>{z(y,!1)}),Y(e,t)};Z(Fe,e=>{K(y)&&e(Ie)}),U(()=>ke=qr(j,1,`wizard svelte-9w5z1v`,null,ke,{inline:!K(a)&&i.isInline})),Y(e,Oe),P()}vr([`click`]);var Io=J(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),Lo=J(`<p class="add-to-cart-error svelte-19qd5my"> </p>`),Ro=J(`<!> <!>`,1),zo=J(`<div class="bw-widget svelte-19qd5my"><!></div>`);function Bo(e,t){N(t,!0);let n=Q(t,`wizardPages`,3,Ma),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=Q(t,`autoOpenCheckout`,3,!0),a=ca(),o=I(()=>la(t.api??a?.api,`TicketConfigurator`,`api`)),s=I(()=>la(t.cartManager??a?.cartManager,`TicketConfigurator`,`cartManager`)),c=R(null),l=R(!0),u=R(!1),d=R(null);async function f(){z(c,await K(o).getProduct(t.productId),!0),z(l,!1)}f();async function p(e){await K(s).ensureCart();let t=Ei(e.units),n=await K(o).addCartItem({productId:e.productId,optionId:e.optionId,unitItems:t,availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),r=Ra(e.totalPrice,e.currency,e.currencyPrecision,2);$({type:`cart:change`,itemCount:t.length,cartItemId:n.id??``,totalFormatted:r,openCheckout:i()}),$({type:`cart:updated`,cart:await K(o).getCart().catch(()=>null)})}async function m(e){z(u,!0),z(d,null);try{await p(e)}catch(t){if(Oi(t)){await h();return}if(t instanceof Di&&(t.status===401||t.status===404)){K(s).reset();try{await p(e)}catch{z(d,`Something went wrong adding this to your cart. Please try again.`)}}else z(d,`Something went wrong adding this to your cart. Please try again.`)}finally{z(u,!1)}}async function h(){z(d,`This ticket's price has changed since you started. Please check the updated price and try again.`);try{await f()}catch{z(d,`This ticket's price has changed and we could not load the new one. Please reload the page.`)}}var g=zo(),_=B(g),v=e=>{Y(e,Io())},y=e=>{var i=Ro(),a=V(i),s=e=>{var t=Lo(),n=B(t,!0);M(t),U(()=>X(n,K(d))),Y(e,t)};Z(a,e=>{K(d)&&e(s)}),Fo(H(a,2),{get product(){return K(c)},get api(){return K(o)},get wizardPages(){return n()},get autoSelectSingleTimeSlot(){return r()},get onCancel(){return t.onCancel},onComplete:m}),Y(e,i)};Z(_,e=>{K(l)||K(u)?e(v):K(c)&&e(y,1)}),M(g),Y(e,g),P()}function Vo(e,t){return(t??(typeof document>`u`?null:document.body))?.appendChild(e),{destroy(){e.remove()}}}var Ho=1500,Uo=9e4;function Wo(e){let t=R(null),n=R(null),r=null,i=R(!1),a=R(!1),o=R(null);async function s(){K(t)&&await p()}async function c(){let n=Vi(e.getApi().cartToken);n&&(z(t,n,!0),$({type:`payment:started`}),!await l()&&(e.setView(`payment`),Yi(e.getCart()).getTime()<=Date.now()&&s()))}async function l(){z(i,!0),e.setView(`result`);let t;try{t=await e.getApi().getCartStatus()}catch(t){return z(i,!1),ki(t)?(e.close(),!0):!1}return t.cartStatus===`confirmed`?(_(t.confirmResult??{items:[]}),z(i,!1),!0):t.paymentOutcome===`failed`||t.paymentOutcome===`abandoned`?(z(n,`notCharged`),await h(),z(i,!1),!0):t.cartStatus===`paid`||t.cartStatus===`confirming`?(await v(),!0):(z(i,!1),!1)}async function u(t,n){try{return n?await e.getApi().reportPaymentFailure(t,n.resultCode,n.description):await e.getApi().abandonPayment(t),`abandoned`}catch(e){return Mi(e)||Ni(e)?`settled`:`failed`}}async function d(n){if(K(t)){z(a,!0);try{if(!await p())return}catch{}finally{z(a,!1)}if(K(t)){e.setView(`payment`);return}}z(a,!0),z(o,null);try{z(t,await e.getApi().payCart(n),!0),Bi(e.getApi().cartToken,{checkoutId:K(t).checkoutId??``,entityId:K(t).entityId??``}),e.setView(`payment`),$({type:`payment:started`}),e.refreshDeadlineAfterPay()}catch(t){if(ki(t)){e.close();return}let n=t instanceof Di?t.status:null;z(o,n===502?`Unable to start payment right now. Please try again.`:`Something went wrong starting your payment. Please try again.`,!0)}finally{z(a,!1)}}async function f(t){if(!((t.status===`cancelled`||t.status===`expired`||t.status===`error`)&&!await p(t.status===`cancelled`?void 0:t))){if(t.status===`cancelled`){e.setView(`contact`);return}if(t.status===`expired`||t.status===`error`){z(n,`notCharged`),z(i,!1),e.setView(`result`);return}e.setView(`result`);try{await e.getApi().resolvePayment()}catch{}await v()}}async function p(n){if(!K(t))return await e.reloadCart();let r=await u(K(t).checkoutId,n);if(r===`settled`)return e.setView(`result`),await v(),!1;r===`abandoned`&&(z(t,null),Hi());let i=await e.reloadCart();return i&&e.notifyCartUpdated(e.getCart()),(r===`abandoned`||!i)&&$({type:`payment:ended`}),i}function m(){e.setView(`contact`)}async function h(){z(t,null),Hi();try{await e.reloadCart()&&e.notifyCartUpdated(e.getCart())}catch{}$({type:`payment:ended`})}async function g(t){let r;try{r=await e.getApi().getCartStatus()}catch(e){return t?.aborted?`settled`:ki(e)?(z(n,`pending`),`settled`):`waiting`}return t?.aborted?`settled`:r.cartStatus===`confirmed`?(_(r.confirmResult??{items:[]}),`settled`):r.paymentOutcome===`failed`||r.paymentOutcome===`abandoned`?(z(n,`notCharged`),await h(),`settled`):`waiting`}function _(t){let r=t.items.length>0&&t.items.every(e=>e.statusCode>=200&&e.statusCode<300);z(n,r?`success`:`partial`,!0),r&&e.onOrderConfirmed()}async function v(){z(i,!0),z(n,null);let e=Date.now()+Uo,t=new AbortController;for(r?.abort(),r=t;!t.signal.aborted&&await g(t.signal)!==`settled`;){if(Date.now()+Ho>e){z(n,`pending`);break}await y(Ho,t.signal)}t.signal.aborted||(z(i,!1),r=null)}function y(e,t){return new Promise(n=>{let r=setTimeout(n,e);t.addEventListener(`abort`,()=>{clearTimeout(r),n()},{once:!0})})}async function b(){z(i,!0),await g()===`waiting`&&z(n,`pending`),z(i,!1)}let x=I(()=>K(i)?null:K(n)===`success`?{outcome:`successful`}:K(n)===`pending`?{outcome:`pending`}:K(n)===`partial`?{outcome:`partial`}:K(n)===`notCharged`?{outcome:`failed`,resultDescription:`Your payment could not be completed. Please try again.`,retryPayment:!0}:null);return{get paymentResult(){return K(t)},get isPaying(){return K(a)},get payError(){return K(o)},get isConfirming(){return K(i)},get resultStatus(){return K(x)},payNow:d,onPaymentComplete:f,onPaymentTimedOut:s,resumeInterruptedPayment:c,retry:m,checkStatusAgain:b,dispose:()=>r?.abort()}}function Go(e){return e.items.reduce((e,t)=>e+t.amount,0)}function Ko(e){return e.items[0]?.currencyCode??`ZAR`}function qo(e,t){return t.get(e.productId)?.title??e.productId}function Jo(e,t){return t.get(e.productId)?.options.find(t=>t.id===e.optionId)?.title??e.optionId}function Yo(e,t){let n=t.get(e.productId)?.options.find(t=>t.id===e.optionId),r=new Map;for(let t of e.unitItems)r.set(t.unitId,(r.get(t.unitId)??0)+1);return[...r.entries()].map(([e,t])=>{let r=n?.units.find(t=>t.id===e),i=r?.pricing?.[0]?.retail??0;return{unitId:e,title:r?.title??e,quantity:t,linePrice:i*t}})}function Xo(e){if(!e.availabilityId)return null;let t=e.availabilityId.match(/(\d{4})-(\d{2})-(\d{2})/);if(!t)return null;let n=new Date(+t[1],t[2]-1,+t[3]);return`${n.getDate()} ${[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][n.getMonth()]} ${n.getFullYear()}`}var Zo=J(`<div class="form svelte-12xyhj1"><div class="field svelte-12xyhj1"><label for="firstName" class="svelte-12xyhj1">First name *</label> <input id="firstName"/></div> <div class="field svelte-12xyhj1"><label for="lastName" class="svelte-12xyhj1">Last name</label> <input id="lastName" class="input"/></div> <div class="field svelte-12xyhj1"><label for="email" class="svelte-12xyhj1">Email address *</label> <input id="email" type="email"/></div> <div class="field svelte-12xyhj1"><label for="phone" class="svelte-12xyhj1">Phone number *</label> <input id="phone" type="tel"/></div></div>`);function Qo(e,t){N(t,!0);let n=Q(t,`firstName`,15,``),r=Q(t,`lastName`,15,``),i=Q(t,`emailAddress`,15,``),a=Q(t,`phoneNumber`,15,``);function o(){return n().trim()!==``&&i().trim()!==``&&a().trim()!==``}function s(){return{firstName:n().trim(),lastName:r().trim(),emailAddress:i().trim(),phoneNumber:a().trim()}}function c(e){return t.hasAttemptedSubmit&&e.trim()===``}var l={isValid:o,getContact:s},u=Zo(),d=B(u),f=H(B(d),2);Zr(f);let p;M(d);var m=H(d,2),h=H(B(m),2);Zr(h),M(m);var g=H(m,2),_=H(B(g),2);Zr(_);let v;M(g);var y=H(g,2),b=H(B(y),2);Zr(b);let x;return M(y),M(u),U((e,t,n)=>{p=qr(f,1,`input`,null,p,e),v=qr(_,1,`input`,null,v,t),x=qr(b,1,`input`,null,x,n)},[()=>({"input-error":c(n())}),()=>({"input-error":c(i())}),()=>({"input-error":c(a())})]),ri(f,n),ri(h,r),ri(_,i),ri(b,a),Y(e,u),P(l)}var $o=J(`<div class="consent svelte-19pmjwi"><label><input type="checkbox" class="svelte-19pmjwi"/> <span class="svelte-19pmjwi">I accept the privacy policy *</span></label> <label class="check svelte-19pmjwi"><input type="checkbox" class="svelte-19pmjwi"/> <span>I would like to receive marketing communications</span></label></div>`);function es(e,t){N(t,!0);var n=$o(),r=B(n);let i;var a=B(r);Zr(a),je(2),M(r);var o=H(r,2),s=B(o);Zr(s),je(2),M(o),M(n),U(()=>{i=qr(r,1,`check svelte-19pmjwi`,null,i,{error:t.hasAttemptedSubmit&&!t.privacyAccepted}),Qr(a,t.privacyAccepted),Qr(s,t.marketingOptIn)}),q(`change`,a,e=>t.onPrivacyChanged(e.target.checked)),q(`change`,s,e=>t.onMarketingChanged(e.target.checked)),Y(e,n),P()}vr([`change`]);var ts=J(`<span class="timer svelte-1u82ue3"> </span>`);function ns(e,t){N(t,!0);let n=R(``);function r(){z(n,Ji(t.expiresAt.getTime()-Date.now()),!0)}r();let i=setInterval(r,1e3);li(()=>clearInterval(i));var a=ts(),o=B(a,!0);M(a),U(()=>X(o,K(n))),Y(e,a),P()}var rs=J(`<span class="spacer"></span> <!>`,1),is=J(`<div class="error-state svelte-1ubcp68"><div class="error-icon svelte-1ubcp68">!</div> <p class="error-title svelte-1ubcp68">Unable to load payment form</p> <p class="error-msg svelte-1ubcp68"> </p> <button class="btn btn-primary svelte-1ubcp68">Start over</button></div>`),as=J(`<div id="peach-container" class="svelte-1ubcp68"></div>`),os=J(`<div class="payment-overlay svelte-1ubcp68"><div class="payment-dialog svelte-1ubcp68"><div class="page-header"><h2>Payment</h2> <!></div> <div class="body svelte-1ubcp68"><!></div></div></div>`);function ss(e,t){N(t,!0);function n(e,t){let n=t?.result??t;return{status:e,resultCode:n?.code??n?.resultCode??t?.errorCode??void 0,description:n?.description??t?.message??void 0}}let r=R(!1),i=R(``),a=null;ci(()=>{(async()=>{try{await ba();let e=window.Checkout;if(!e){z(r,!0),z(i,`Payment SDK not loaded`);return}a=e.initiate({checkoutId:t.checkoutId,key:t.entityId,customisations:{card:{submitButtonText:`Pay Now`},theme:{brand:{primary:`#E30613`}}},eventHandlers:{onCompleted:e=>{s(),t.onPaymentComplete(n(`completed`,e))},onCancelled:e=>{s(),t.onPaymentComplete(n(`cancelled`,e))},onExpired:e=>{s(),t.onPaymentComplete(n(`expired`,e))},onError:e=>{o(`Peach reported an error rendering the card form`),s(),t.onPaymentComplete(n(`error`,e))}}}),a.render(`#peach-container`)}catch(e){o(String(e)),z(r,!0),z(i,String(e),!0)}})()});function o(e){console.error(`[booking-widget] Peach checkout did not render: ${e}. SDK loaded from ${va()??`an already-present window.Checkout`} for checkoutId ${t.checkoutId}. If that environment does not match the checkout API this cart came from, set peachEnv on createBookingHost (or window.BW_CHECKOUT_PEACH_SDK_URL).`)}function s(){a&&=(a.unmount(),null)}li(s);var c=os(),l=B(c),u=B(l),d=H(B(u),2),f=e=>{var n=rs();ns(H(V(n),2),{get expiresAt(){return t.expiresAt}}),Y(e,n)};Z(d,e=>{t.expiresAt&&e(f)}),M(u);var p=H(u,2),m=B(p),h=e=>{var n=is(),r=H(B(n),4),a=B(r,!0);M(r);var o=H(r,2);M(n),U(()=>X(a,K(i)||`The checkout session may have expired.`)),q(`click`,o,()=>t.onPaymentComplete({status:`error`})),Y(e,n)},g=e=>{Y(e,as())};Z(m,e=>{K(r)?e(h):e(g,-1)}),M(p),M(l),M(c),q(`click`,l,e=>e.stopPropagation()),Y(e,c),P()}vr([`click`]);var cs=J(`<div class="spinner"></div> <p class="hint svelte-16gfovn">Verifying payment...</p>`,1),ls=J(`<button class="btn btn-primary">Check Again</button>`),us=J(`<div class="icon pending svelte-16gfovn">&hellip;</div> <h2 class="svelte-16gfovn">Still Checking Your Payment</h2> <p class="desc svelte-16gfovn"> </p> <div class="actions svelte-16gfovn"><!> <button class="btn btn-outline">Close</button></div>`,1),ds=J(`<div class="icon partial svelte-16gfovn">!</div> <h2 class="svelte-16gfovn">Booking Incomplete</h2> <p class="desc svelte-16gfovn"> </p> <button class="btn btn-outline">Close</button>`,1),fs=J(`<button class="btn btn-primary">Done</button>`),ps=J(`<button class="btn btn-outline">Try Again</button>`),ms=J(`<button class="btn btn-outline">Close</button>`),hs=J(`<div> </div> <h2 class="svelte-16gfovn"> </h2> <p class="desc svelte-16gfovn"> </p> <!>`,1),gs=J(`<div class="result svelte-16gfovn"><!></div>`);function _s(e,t){N(t,!0);let n=I(()=>t.status?.outcome===`successful`),r=I(()=>t.status?.outcome===`pending`),i=I(()=>t.status?.outcome===`partial`),a=I(()=>t.status?.outcome===`failed`&&t.status.retryPayment!==!1);var o=gs(),s=B(o),c=e=>{var t=cs();je(2),Y(e,t)},l=e=>{var n=us(),r=H(V(n),4),i=B(r,!0);M(r);var a=H(r,2),o=B(a),s=e=>{var n=ls();q(`click`,n,function(...e){t.onCheckAgain?.apply(this,e)}),Y(e,n)};Z(o,e=>{t.onCheckAgain&&e(s)});var c=H(o,2);M(a),U(()=>X(i,t.status?.resultDescription??`We couldn't confirm this payment yet. Please don't try to pay again for now - we'll email you as soon as we know where it stands.`)),q(`click`,c,function(...e){t.onDone?.apply(this,e)}),Y(e,n)},u=e=>{var n=ds(),r=H(V(n),4),i=B(r,!0);M(r);var a=H(r,2);U(()=>X(i,t.status?.resultDescription??`Your payment succeeded, but we couldn't confirm every item in your booking. Please contact us with your order details.`)),q(`click`,a,function(...e){t.onDone?.apply(this,e)}),Y(e,n)},d=e=>{var r=hs(),i=V(r);let o;var s=B(i,!0);M(i);var c=H(i,2),l=B(c,!0);M(c);var u=H(c,2),d=B(u,!0);M(u);var f=H(u,2),p=e=>{var n=fs();q(`click`,n,function(...e){t.onDone?.apply(this,e)}),Y(e,n)},m=e=>{var n=ps();q(`click`,n,function(...e){t.onRetry?.apply(this,e)}),Y(e,n)},h=e=>{var n=ms();q(`click`,n,function(...e){t.onDone?.apply(this,e)}),Y(e,n)};Z(f,e=>{K(n)?e(p):K(a)?e(m,1):e(h,-1)}),U(()=>{o=qr(i,1,`icon svelte-16gfovn`,null,o,{success:K(n),failure:!K(n)}),X(s,K(n)?`✓`:`!`),X(l,K(n)?`Payment Successful`:`Payment Failed`),X(d,K(n)?`Your booking has been confirmed.`:t.status?.resultDescription??`Something went wrong. Please try again.`)}),Y(e,r)};Z(s,e=>{t.verifying?e(c):K(r)?e(l,1):K(i)?e(u,2):e(d,-1)}),M(o),Y(e,o),P()}vr([`click`]);var vs=J(`<p class="edit-error svelte-15l4305"> </p>`),ys=J(`<div class="saving-overlay svelte-15l4305"><div class="spinner"></div></div>`),bs=J(`<div class="edit-view svelte-15l4305"><div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Edit Item</h2> <span class="spacer"></span> <button class="icon-btn" aria-label="Close">&times;</button></div> <!> <div><!> <!></div></div>`);function xs(e,t){N(t,!0);let n=Q(t,`autoSelectSingleTimeSlot`,3,!1),r=R(!1),i=R(null);async function a(e){z(r,!0),z(i,null);try{await t.api.updateCartItem(t.cartItem.id,{productId:e.productId,optionId:e.optionId,unitItems:Ei(e.units),availabilityId:e.availabilityId,localDate:e.localDate,pickupPointId:e.pickupPointId,amount:e.totalPrice}),t.onUpdated()}catch(e){if(Oi(e)){z(i,`This item's price has changed. Please check the updated price and save again.`),await t.onPriceChanged?.();return}z(i,e instanceof Di&&e.status===424?`This change could not be saved - the supplier rejected it. Please try different options.`:`Something went wrong saving your changes. Please try again.`,!0)}finally{z(r,!1)}}var o=bs(),s=B(o),c=B(s),l=H(c,6);M(s);var u=H(s,2),d=e=>{var t=vs(),n=B(t,!0);M(t),U(()=>X(n,K(i))),Y(e,t)};Z(u,e=>{K(i)&&e(d)});var f=H(u,2);let p;var m=B(f);{let e=I(()=>t.wizardPages??Ma),r=I(()=>t.editPages??t.wizardPages??Ma);Fo(m,{get product(){return t.product},get api(){return t.api},get wizardPages(){return K(e)},get editPages(){return K(r)},get editItem(){return t.cartItem},get autoSelectSingleTimeSlot(){return n()},onComplete:a,get onCancel(){return t.onBack}})}var h=H(m,2),g=e=>{Y(e,ys())};Z(h,e=>{K(r)&&e(g)}),M(f),M(o),U(()=>p=qr(f,1,`edit-body svelte-15l4305`,null,p,{saving:K(r)})),q(`click`,c,function(...e){t.onBack?.apply(this,e)}),q(`click`,l,function(...e){t.onClose?.apply(this,e)}),Y(e,o),P()}vr([`click`]);var Ss=J(`<div class="loading-center" style="height:100%"><div class="spinner"></div></div>`),Cs=J(`<p class="pay-error svelte-i0rtg0"> </p>`),ws=J(`<div class="page-header"><button class="icon-btn" aria-label="Back">&larr;</button> <h2>Checkout</h2> <span class="spacer"></span> <!> <button class="icon-btn" aria-label="Close">&times;</button></div> <div class="body svelte-i0rtg0"><!> <div class="contact-header svelte-i0rtg0"><span class="contact-title svelte-i0rtg0">Contact Details</span> <span class="required-hint svelte-i0rtg0">* Required Fields</span></div> <!> <div style="margin-top:24px"><!></div></div> <div class="pay-bar svelte-i0rtg0"><span class="pay-bar-total svelte-i0rtg0"> </span> <button class="pay-bar-btn svelte-i0rtg0"> </button></div>`,1),Ts=J(`<p class="cart-detail svelte-i0rtg0"> </p>`),Es=J(`<div class="cart-unit-line svelte-i0rtg0"><span class="cart-unit-label svelte-i0rtg0"> </span> <span class="cart-unit-price svelte-i0rtg0"> </span></div>`),Ds=J(`<div class="cart-card svelte-i0rtg0"><div class="cart-card-top svelte-i0rtg0"><h3 class="cart-product svelte-i0rtg0"> </h3> <span class="cart-item-total svelte-i0rtg0"> </span></div> <div class="cart-detail-lines svelte-i0rtg0"><!> <p class="cart-detail svelte-i0rtg0"> </p></div> <div class="cart-divider svelte-i0rtg0"></div> <div class="cart-units svelte-i0rtg0"></div> <div class="cart-actions svelte-i0rtg0"><button class="action-edit svelte-i0rtg0">Edit</button> <button class="action-remove svelte-i0rtg0">Remove</button></div></div>`),Os=J(`<div class="page-header"><h2>Your cart</h2> <span class="spacer"></span> <!> <button class="keep-shopping-btn svelte-i0rtg0">+ Keep shopping</button></div> <div class="body svelte-i0rtg0"><!> <div class="cart-total-divider svelte-i0rtg0"></div> <div class="cart-total-row svelte-i0rtg0"><span>Total payable today</span> <span class="cart-total-amount svelte-i0rtg0"> </span></div></div> <div class="action-bar"><button class="btn btn-primary">Checkout</button></div>`,1),ks=J(`<div class="modal svelte-i0rtg0"><!></div>`);function As(e,t){N(t,!0);let n=Q(t,`cart`,7),r=Q(t,`autoSelectSingleTimeSlot`,3,!1);gn(()=>qi(e=>{e.type===`cart:updated`&&`cart`in e&&e.cart===null&&b(),e.type===`payment:timed-out`&&h.onPaymentTimedOut()}));let i=R(`cart`),a=R(null),o=R(!0),s=R(!1),c=R(!1),l=R(!1),u=R(``),d=R(``),f=R(``),p=R(``),m=R(null),h=Wo({getApi:()=>t.api,getCart:()=>n(),reloadCart:T,notifyCartUpdated:E,refreshDeadlineAfterPay:()=>void ee(),setView:e=>{z(i,e,!0)},close:b,onOrderConfirmed:()=>t.onOrderConfirmed()}),g=R(Zt(new Map));async function _(){try{let e=[...new Set(n().items.map(e=>e.productId))],r=await Promise.all(e.map(e=>t.api.getProduct(e))),i=new Map;for(let e of r)i.set(e.id,e);z(g,i,!0)}catch{}finally{z(o,!1)}}_(),h.resumeInterruptedPayment();let v=I(()=>()=>Ra(Go(n()),Ko(n()),2,2)),y=I(()=>Yi(n()));li(()=>{h.dispose(),$({type:`modal:close`})});function b(){$({type:`modal:close`}),t.onClose()}function x(){b()}function S(e){z(a,e,!0),z(i,`edit`)}async function C(){await T()&&(z(i,`cart`),E(n()))}async function w(e){try{await t.api.removeCartItem(e.id)}catch(e){if(!ki(e))throw e;b();return}await T()&&(E(n()),n().items.length===0&&b())}async function T(){try{return n(await t.api.getCart()),!0}catch(e){if(!ki(e))throw e;return b(),!1}}async function ee(){try{n(await t.api.getCart()),E(n())}catch{}}function E(e){$({type:`cart:updated`,cart:e})}async function te(){z(l,!0),!(!K(m)?.isValid()||!K(s))&&await h.payNow(K(m).getContact())}var D=ks(),ne=B(D),re=e=>{Y(e,Ss())},ie=e=>{var t=Er(),n=V(t),r=e=>{ss(e,{get checkoutId(){return h.paymentResult.checkoutId},get entityId(){return h.paymentResult.entityId},get expiresAt(){return K(y)},get onPaymentComplete(){return h.onPaymentComplete}})},i=e=>{Y(e,Ss())};Z(n,e=>{h.paymentResult?e(r):e(i,-1)}),Y(e,t)},ae=e=>{{let t=I(()=>h.resultStatus?.outcome===`pending`?h.checkStatusAgain:void 0);_s(e,{get status(){return h.resultStatus},get verifying(){return h.isConfirming},onDone:()=>{$({type:`modal:close`})},get onRetry(){return h.retry},get onCheckAgain(){return K(t)}})}},O=e=>{{let n=I(()=>K(g).get(K(a).productId));xs(e,{get cartItem(){return K(a)},get product(){return K(n)},get api(){return t.api},get wizardPages(){return t.wizardPages},get editPages(){return t.editPages},get autoSelectSingleTimeSlot(){return r()},onBack:()=>{z(i,`cart`)},onClose:b,onUpdated:C,onPriceChanged:_})}},oe=I(()=>K(i)===`edit`&&K(a)&&K(g).get(K(a).productId)),se=e=>{var t=ws(),n=V(t),r=B(n),a=H(r,6);ns(a,{get expiresAt(){return K(y)}});var o=H(a,2);M(n);var g=H(n,2),_=B(g),x=e=>{var t=Cs(),n=B(t,!0);M(t),U(()=>X(n,h.payError)),Y(e,t)};Z(_,e=>{h.payError&&e(x)});var S=H(_,4);si(Qo(S,{get hasAttemptedSubmit(){return K(l)},get firstName(){return K(u)},set firstName(e){z(u,e,!0)},get lastName(){return K(d)},set lastName(e){z(d,e,!0)},get emailAddress(){return K(f)},set emailAddress(e){z(f,e,!0)},get phoneNumber(){return K(p)},set phoneNumber(e){z(p,e,!0)}}),e=>z(m,e,!0),()=>K(m));var C=H(S,2);es(B(C),{get privacyAccepted(){return K(s)},get marketingOptIn(){return K(c)},get hasAttemptedSubmit(){return K(l)},onPrivacyChanged:e=>{z(s,e,!0)},onMarketingChanged:e=>{z(c,e,!0)}}),M(C),M(g);var w=H(g,2),T=B(w),ee=B(T,!0);M(T);var E=H(T,2),D=B(E,!0);M(E),M(w),U(e=>{X(ee,e),E.disabled=h.isPaying,X(D,h.isPaying?`Paying…`:`Pay Now`)},[()=>K(v)()]),q(`click`,r,()=>{z(i,`cart`)}),q(`click`,o,b),q(`click`,E,te),Y(e,t)},ce=e=>{var t=Os(),r=V(t),a=H(B(r),4);ns(a,{get expiresAt(){return K(y)}});var o=H(a,2);M(r);var s=H(r,2),c=B(s);Lr(c,17,()=>n().items,Nr,(e,t)=>{var n=Ds(),r=B(n),i=B(r),a=B(i,!0);M(i);var o=H(i,2),s=B(o,!0);M(o),M(r);var c=H(r,2),l=B(c),u=e=>{var n=Ts(),r=B(n,!0);M(n),U(e=>X(r,e),[()=>Xo(K(t))]),Y(e,n)},d=I(()=>Xo(K(t)));Z(l,e=>{K(d)&&e(u)});var f=H(l,2),p=B(f,!0);M(f),M(c);var m=H(c,4);Lr(m,21,()=>Yo(K(t),K(g)),Nr,(e,n)=>{var r=Es(),i=B(r),a=B(i);M(i);var o=H(i,2),s=B(o,!0);M(o),M(r),U(e=>{X(a,`${K(n).title??``} × ${K(n).quantity??``}`),X(s,e)},[()=>Ra(K(n).linePrice,K(t).currencyCode,2,0)]),Y(e,r)}),M(m);var h=H(m,2),_=B(h),v=H(_,2);M(h),M(n),U((e,t,n)=>{X(a,e),X(s,t),X(p,n)},[()=>qo(K(t),K(g)),()=>Ra(K(t).amount,K(t).currencyCode,2,0),()=>Jo(K(t),K(g))]),q(`click`,_,()=>S(K(t))),q(`click`,v,()=>w(K(t))),Y(e,n)});var l=H(c,4),u=H(B(l),2),d=B(u,!0);M(u),M(l),M(s);var f=H(s,2),p=B(f);M(f),U(e=>X(d,e),[()=>K(v)()]),q(`click`,o,x),q(`click`,p,()=>{z(i,`contact`)}),Y(e,t)};Z(ne,e=>{K(o)?e(re):K(i)===`payment`?e(ie,1):K(i)===`result`?e(ae,2):K(oe)?e(O,3):K(i)===`contact`?e(se,4):e(ce,-1)}),M(D),Y(e,D),P()}vr([`click`]);var js=J(`<div class="loading-center" style="height:100vh"><div class="spinner"></div></div>`),Ms=J(`<div style="height:100vh"><!></div>`),Ns=J(`<div class="loading-center" style="height:100vh;color:var(--bw-color-text-secondary)">No items in cart.</div>`),Ps=J(`<div class="bw-widget svelte-16hmqxh"><!></div>`);function Fs(e,t){N(t,!0);let n=Q(t,`wizardPages`,3,Ma),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=I(()=>t.editPages??n()),a=R(null),o=R(!0),s=R(!1);async function c(){let e=t.api.cartToken!==``;try{z(a,await t.api.getCart(),!0)}catch(t){z(a,null),e&&ki(t)&&(l(),z(s,!0))}z(o,!1)}c();function l(){t.cartManager?.reset(),$({type:`cart:updated`,cart:null}),$({type:`cart:expired`})}function u(){z(s,!1),$({type:`modal:close`}),c()}gn(()=>qi(e=>{e.type===`cart:updated`&&`cart`in e&&z(a,e.cart,!0)}));var d=Ps(),f=B(d),p=e=>{Y(e,js())},m=e=>{As(e,{get cart(){return K(a)},get api(){return t.api},get wizardPages(){return n()},get editPages(){return K(i)},get autoSelectSingleTimeSlot(){return r()},onClose:()=>$({type:`modal:close`}),onOrderConfirmed:()=>{let e=K(a).items.reduce((e,t)=>e+t.amount,0),n=K(a).items[0]?.currencyCode??`ZAR`;$({type:`order:complete`,cartToken:K(a).cartToken??``,value:e,currency:n}),t.cartManager?.reset()}})},h=e=>{var t=Ms();aa(B(t),{onStartAgain:u}),M(t),Y(e,t)},g=e=>{Y(e,Ns())};Z(f,e=>{K(o)?e(p):K(a)&&K(a).items.length>0?e(m,1):K(s)?e(h,2):e(g,-1)}),M(d),Y(e,d),P()}var Is=J(`<div class="bw-modal-overlay svelte-5e515v"><div class="bw-modal-inner svelte-5e515v"><!></div></div>`);function Ls(e,t){N(t,!0);let n=Q(t,`wizardPages`,3,Ma),r=Q(t,`autoSelectSingleTimeSlot`,3,!1),i=Q(t,`mode`,3,`inline`),a=ca(),o=I(()=>la(t.api??a?.api,`Checkout`,`api`)),s=I(()=>t.cartManager??a?.cartManager),c=I(()=>t.open??a?.isCheckoutOpen??!0),l=I(()=>t.onClose??(a?()=>a.closeCheckout():void 0)),u=I(()=>i()===`modal`),d=R(!1),f=I(()=>!K(u)||K(c)&&!K(d)),p=!1,m=!1;gn(()=>{let e=K(c);e&&!m&&(z(d,!1),p=!1),m=e});function h(){$({type:`modal:close`})}gn(()=>qi(e=>{e.type!==`modal:close`||!K(u)||p||K(f)&&(p=!0,z(d,!0),K(l)?.())}));function g(e){K(f)&&K(u)&&e.key===`Escape`&&h()}var _=Er();_r(`keydown`,Qt,g);var v=V(_),y=e=>{var i=Er(),a=V(i),c=e=>{var i=Is(),a=B(i);Fs(B(a),{get api(){return K(o)},get cartManager(){return K(s)},get wizardPages(){return n()},get editPages(){return t.editPages},get autoSelectSingleTimeSlot(){return r()}}),M(a),M(i),Wr(i,e=>Vo?.(e)),q(`click`,i,h),q(`click`,a,e=>e.stopPropagation()),Y(e,i)};Z(a,e=>{K(f)&&e(c)}),Y(e,i)},b=e=>{Fs(e,{get api(){return K(o)},get cartManager(){return K(s)},get wizardPages(){return n()},get editPages(){return t.editPages},get autoSelectSingleTimeSlot(){return r()}})};Z(v,e=>{K(u)?e(y):e(b,-1)}),Y(e,_),P()}vr([`click`]);function Rs(e,t,n){let r=R(null),i=R(!1),a=R(!0),o=0;async function s(){let n=++o;if(z(a,!0),z(i,!1),!t().hasCart){z(r,null),z(a,!1);return}try{let t=await e().getCart();if(n!==o)return;z(r,t,!0)}catch{if(n!==o)return;z(r,null),z(i,!0)}z(a,!1)}s(),gn(()=>qi(e=>{e.type===`cart:updated`&&(o+=1,z(r,e.cart,!0),z(i,!1),z(a,!1))}));let c=I(()=>K(a)?`loading`:K(i)?`error`:(K(r)?.items?.length??0)>0?`ready`:`empty`);return gn(()=>{n?.(K(c))}),{get cart(){return K(r)},get state(){return K(c)},reload:()=>void s()}}var zs=J(`<div class="cart-bar bw-widget svelte-1xt0fxx" role="alert"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx">Cart unavailable</span> <span class="error-detail svelte-1xt0fxx">We could not load your cart just now.</span></div> <button class="btn btn-primary">Retry</button></div>`),Bs=J(`<div class="cart-bar bw-widget svelte-1xt0fxx"><div class="cart-info svelte-1xt0fxx"><span class="item-count svelte-1xt0fxx"> <!></span> <span class="total svelte-1xt0fxx"> </span></div> <button class="btn btn-primary">Checkout</button></div>`);function Vs(e,t){N(t,!0);let n=Q(t,`state`,3,`ready`),r=I(()=>t.cart?.items.length??0),i=I(()=>()=>{if(!t.cart||t.cart.items.length===0)return``;let e=t.cart.items[0].currencyCode;return Ra(t.cart.items.reduce((e,t)=>e+t.amount,0),e,2,2)}),a=I(()=>()=>t.cart?Yi(t.cart):new Date);var o=Er(),s=V(o),c=e=>{var n=zs(),r=H(B(n),2);M(n),q(`click`,r,()=>t.onRetry?.()),Y(e,n)},l=e=>{var t=Bs(),n=B(t),o=B(n),s=B(o),c=H(s);{let e=I(()=>K(a)());ns(c,{get expiresAt(){return K(e)}})}M(o);var l=H(o,2),u=B(l,!0);M(l),M(n);var d=H(n,2);M(t),U(e=>{X(s,`${K(r)===1?`1 item`:`${K(r)} items`} `),X(u,e)},[()=>K(i)()]),q(`click`,d,()=>$({type:`modal:open`})),Y(e,t)};Z(s,e=>{n()===`error`?e(c):t.cart&&t.cart.items.length>0&&e(l,1)}),Y(e,o),P()}vr([`click`]);function Hs(e,t){N(t,!0);let n=ca(),r=Rs(()=>la(t.api??n?.api,`CartBar`,`api`),()=>la(t.cartManager??n?.cartManager,`CartBar`,`cartManager`),e=>t.onStateChange?.(e));Vs(e,{get cart(){return r.cart},get state(){return r.state},get onRetry(){return r.reload}}),P()}var Us=J(`<button class="cart-overview-btn is-error bw-widget svelte-16bjfem"><span class="cart-error-label svelte-16bjfem">Cart unavailable - retry</span></button>`),Ws=J(`<button class="cart-overview-btn bw-widget svelte-16bjfem"><svg class="cart-icon svelte-16bjfem" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"></circle><circle cx="20" cy="21" r="1"></circle><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path></svg> <span class="cart-badge svelte-16bjfem"> </span> <span class="cart-timer svelte-16bjfem"> </span></button>`);function Gs(e,t){N(t,!0);let n=ca(),r=Rs(()=>la(t.api??n?.api,`CartOverviewButton`,`api`),()=>la(t.cartManager??n?.cartManager,`CartOverviewButton`,`cartManager`),e=>t.onStateChange?.(e)),i=I(()=>r.cart),a=R(``);function o(){z(a,K(i)?Ji(Yi(K(i)).getTime()-Date.now()):Ji(0),!0)}o();let s=setInterval(o,1e3);li(()=>clearInterval(s));let c=I(()=>K(i)?.items.length??0);var l=Er(),u=V(l),d=e=>{var t=Us();q(`click`,t,()=>r.reload()),Y(e,t)},f=e=>{var t=Ws(),n=H(B(t),2),r=B(n,!0);M(n);var i=H(n,2),o=B(i,!0);M(i),M(t),U(()=>{X(r,K(c)),X(o,K(a))}),q(`click`,t,()=>$({type:`modal:open`})),Y(e,t)};Z(u,e=>{r.state===`error`?e(d):K(i)&&K(i).items.length>0&&e(f,1)}),Y(e,l),P()}vr([`click`]);function Ks(e,t){N(t,!0);let n=ca(),r=I(()=>la(t.api??n?.api,`CartOverview`,`api`)),i=I(()=>la(t.cartManager??n?.cartManager,`CartOverview`,`cartManager`));var a=Er(),o=V(a),s=e=>{Gs(e,{get api(){return K(r)},get cartManager(){return K(i)},get onStateChange(){return t.onStateChange}})},c=e=>{Hs(e,{get api(){return K(r)},get cartManager(){return K(i)},get onStateChange(){return t.onStateChange}})};Z(o,e=>{t.display===`button`?e(s):e(c,-1)}),Y(e,a),P()}function qs(e,t){N(t,!0),sa(t.host);var n=Er();Ur(V(n),()=>t.children),Y(e,n),P()}async function Js(e){try{await e.host.ready}catch(t){throw e.release(),t}}function Ys(e){if(!e.host){let t=wa(e);return{host:t,release:()=>t.destroy()}}return{host:e.host,release:Xs(e)}}function Xs(e){let{onCartChange:t,onCartUpdated:n,onCartExpired:r,onOrderConfirmed:i}=e;return!t&&!n&&!r&&!i?()=>{}:qi(e=>{e.type===`cart:change`&&t?.({itemCount:e.itemCount,cartItemId:e.cartItemId,totalFormatted:e.totalFormatted}),e.type===`cart:updated`&&n?.(e.cart),e.type===`cart:expired`&&r?.(),e.type===`order:complete`&&i?.({cartToken:e.cartToken,value:e.value,currency:e.currency})})}async function Zs(e,t){let n=Ys(t),{host:r,release:i}=n;await Js(n);let a=Dr(Bo,{target:e,props:{api:r.api,cartManager:r.cartManager,productId:t.productId,wizardPages:t.wizardPages??r.options.wizardPages,autoSelectSingleTimeSlot:t.autoSelectSingleTimeSlot??r.options.autoSelectSingleTimeSlot,autoOpenCheckout:t.autoOpenCheckout!==!1,onCancel:t.onCancel}});return{destroy(){jr(a),i()}}}async function Qs(e,t){let n=Ys(t),{host:r,release:i}=n;await Js(n);let a=Dr(Ls,{target:e,props:{api:r.api,cartManager:r.cartManager,wizardPages:t.wizardPages??r.options.wizardPages,editPages:t.editPages??r.options.editPages,autoSelectSingleTimeSlot:t.autoSelectSingleTimeSlot??r.options.autoSelectSingleTimeSlot,mode:t.mode??`inline`,get open(){return r.isCheckoutOpen},onClose:t.onClose}});return{destroy(){jr(a),i()}}}async function $s(e,t){let n=Ys(t),{host:r,release:i}=n;await Js(n);let a=Dr(Ks,{target:e,props:{api:r.api,cartManager:r.cartManager,display:t.display??`bar`,onStateChange:t.onStateChange}}),o=t.onCheckout?ec(t.onCheckout):()=>{};return{destroy(){o(),jr(a),i()}}}function ec(e){return qi(t=>{t.type===`modal:open`&&e()})}e.ApiClient=Pi,e.ApiError=Di,e.BookingProvider=qs,e.CartBar=Hs,e.CartExpiryGuard=pa,e.CartManager=Gi,e.CartOverview=Ks,e.CartOverviewButton=Gs,e.Checkout=Ls,e.DEFAULT_WIZARD_PAGES=Ma,e.SessionManager=Li,e.TicketConfigurator=Bo,e.createBookingHost=wa,e.getBookingDefaults=Ca,e.getBookingHostContext=ca,e.mountCartOverview=$s,e.mountCheckout=Qs,e.mountConfigurator=Zs,e.onWidgetMessage=qi,e.portal=Vo,e.postMessage=$,e.requestCheckoutClose=Aa,e.requestCheckoutOpen=ja,e.resolveEditPages=Ia,e.resolveWizardPages=Pa,e.setBookingDefaults=Sa,e.setPeachSdk=ya});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-collective/booking-widget",
3
- "version": "1.0.14",
3
+ "version": "1.0.15",
4
4
  "type": "module",
5
5
  "main": "dist/booking-widget.umd.cjs",
6
6
  "module": "dist/booking-widget.js",
@@ -340,4 +340,184 @@
340
340
  {/if}
341
341
  </div>
342
342
 
343
- <style src="./CheckoutModal.css"></style>
343
+ <style>
344
+ .modal {
345
+ display: flex;
346
+ flex-direction: column;
347
+ height: 100%;
348
+ max-height: 100%;
349
+ overflow: hidden;
350
+ background: var(--bw-color-surface);
351
+ }
352
+ .body {
353
+ flex: 1;
354
+ overflow-y: auto;
355
+ padding: 16px;
356
+ }
357
+
358
+ /* -- Cart view -- */
359
+ .keep-shopping-btn {
360
+ padding: 8px 16px;
361
+ background: none;
362
+ border: 2px solid #222;
363
+ border-radius: var(--bw-radius-md);
364
+ font-size: 13px;
365
+ font-weight: 600;
366
+ color: #222;
367
+ cursor: pointer;
368
+ }
369
+ .keep-shopping-btn:hover {
370
+ background: #f5f5f5;
371
+ }
372
+
373
+ .cart-card {
374
+ border: 1px solid var(--bw-color-border);
375
+ border-radius: var(--bw-radius-lg);
376
+ padding: 20px;
377
+ margin-bottom: 16px;
378
+ }
379
+ .cart-card-top {
380
+ display: flex;
381
+ justify-content: space-between;
382
+ align-items: flex-start;
383
+ gap: 16px;
384
+ }
385
+ .cart-product {
386
+ font-size: 16px;
387
+ font-weight: 700;
388
+ flex: 1;
389
+ }
390
+ .cart-item-total {
391
+ font-size: 16px;
392
+ font-weight: 800;
393
+ white-space: nowrap;
394
+ }
395
+ .cart-detail-lines {
396
+ margin-top: 4px;
397
+ }
398
+ .cart-detail {
399
+ font-size: 13px;
400
+ color: var(--bw-color-text-secondary);
401
+ line-height: 1.5;
402
+ }
403
+ .cart-divider {
404
+ border-top: 1px dashed var(--bw-color-border);
405
+ margin: 14px 0;
406
+ }
407
+ .cart-units {
408
+ display: flex;
409
+ flex-direction: column;
410
+ gap: 6px;
411
+ margin-bottom: 14px;
412
+ }
413
+ .cart-unit-line {
414
+ display: flex;
415
+ justify-content: space-between;
416
+ align-items: center;
417
+ font-size: 14px;
418
+ }
419
+ .cart-unit-label {
420
+ color: #333;
421
+ }
422
+ .cart-unit-price {
423
+ font-weight: 600;
424
+ font-variant-numeric: tabular-nums;
425
+ }
426
+ .cart-actions {
427
+ display: flex;
428
+ gap: 16px;
429
+ }
430
+ .action-edit {
431
+ background: none;
432
+ border: none;
433
+ font-size: 13px;
434
+ font-weight: 700;
435
+ color: var(--bw-color-primary);
436
+ padding: 0;
437
+ cursor: pointer;
438
+ }
439
+ .action-edit:hover { text-decoration: underline; }
440
+ .action-remove {
441
+ background: none;
442
+ border: none;
443
+ font-size: 13px;
444
+ font-weight: 600;
445
+ color: #555;
446
+ padding: 0;
447
+ cursor: pointer;
448
+ }
449
+ .action-remove:hover { text-decoration: underline; }
450
+
451
+ .cart-total-divider {
452
+ border-top: 3px solid #111;
453
+ margin: 8px 0 20px;
454
+ }
455
+ .cart-total-row {
456
+ display: flex;
457
+ justify-content: space-between;
458
+ align-items: center;
459
+ font-size: 16px;
460
+ font-weight: 700;
461
+ margin-bottom: 20px;
462
+ }
463
+ .cart-total-amount {
464
+ font-size: 20px;
465
+ font-weight: 800;
466
+ }
467
+ /* -- Contact view -- */
468
+ .pay-error {
469
+ margin: 0 0 16px;
470
+ padding: 12px 16px;
471
+ background: #fdecea;
472
+ color: #b3261e;
473
+ font-size: 14px;
474
+ border-radius: var(--bw-radius-md);
475
+ }
476
+ .contact-header {
477
+ display: flex;
478
+ justify-content: space-between;
479
+ align-items: center;
480
+ margin-bottom: 20px;
481
+ }
482
+ .contact-title {
483
+ font-size: 16px;
484
+ font-weight: 700;
485
+ }
486
+ .required-hint {
487
+ font-size: 12px;
488
+ color: var(--bw-color-primary);
489
+ }
490
+
491
+ .pay-bar {
492
+ display: flex;
493
+ align-items: center;
494
+ flex-shrink: 0;
495
+ background: var(--bw-color-primary);
496
+ color: white;
497
+ position: sticky;
498
+ bottom: 0;
499
+ }
500
+ .pay-bar-total {
501
+ padding: 0 20px;
502
+ font-size: 16px;
503
+ font-weight: 700;
504
+ }
505
+ .pay-bar-btn {
506
+ flex: 1;
507
+ display: flex;
508
+ align-items: center;
509
+ justify-content: flex-end;
510
+ gap: 8px;
511
+ height: 52px;
512
+ padding: 0 20px;
513
+ background: none;
514
+ border: none;
515
+ color: white;
516
+ font-size: 16px;
517
+ font-weight: 700;
518
+ }
519
+ .pay-bar-btn:disabled {
520
+ opacity: 0.7;
521
+ cursor: default;
522
+ }
523
+ </style>
@@ -1,179 +0,0 @@
1
- .modal {
2
- display: flex;
3
- flex-direction: column;
4
- height: 100%;
5
- max-height: 100%;
6
- overflow: hidden;
7
- background: var(--bw-color-surface);
8
- }
9
- .body {
10
- flex: 1;
11
- overflow-y: auto;
12
- padding: 16px;
13
- }
14
-
15
- /* -- Cart view -- */
16
- .keep-shopping-btn {
17
- padding: 8px 16px;
18
- background: none;
19
- border: 2px solid #222;
20
- border-radius: var(--bw-radius-md);
21
- font-size: 13px;
22
- font-weight: 600;
23
- color: #222;
24
- cursor: pointer;
25
- }
26
- .keep-shopping-btn:hover {
27
- background: #f5f5f5;
28
- }
29
-
30
- .cart-card {
31
- border: 1px solid var(--bw-color-border);
32
- border-radius: var(--bw-radius-lg);
33
- padding: 20px;
34
- margin-bottom: 16px;
35
- }
36
- .cart-card-top {
37
- display: flex;
38
- justify-content: space-between;
39
- align-items: flex-start;
40
- gap: 16px;
41
- }
42
- .cart-product {
43
- font-size: 16px;
44
- font-weight: 700;
45
- flex: 1;
46
- }
47
- .cart-item-total {
48
- font-size: 16px;
49
- font-weight: 800;
50
- white-space: nowrap;
51
- }
52
- .cart-detail-lines {
53
- margin-top: 4px;
54
- }
55
- .cart-detail {
56
- font-size: 13px;
57
- color: var(--bw-color-text-secondary);
58
- line-height: 1.5;
59
- }
60
- .cart-divider {
61
- border-top: 1px dashed var(--bw-color-border);
62
- margin: 14px 0;
63
- }
64
- .cart-units {
65
- display: flex;
66
- flex-direction: column;
67
- gap: 6px;
68
- margin-bottom: 14px;
69
- }
70
- .cart-unit-line {
71
- display: flex;
72
- justify-content: space-between;
73
- align-items: center;
74
- font-size: 14px;
75
- }
76
- .cart-unit-label {
77
- color: #333;
78
- }
79
- .cart-unit-price {
80
- font-weight: 600;
81
- font-variant-numeric: tabular-nums;
82
- }
83
- .cart-actions {
84
- display: flex;
85
- gap: 16px;
86
- }
87
- .action-edit {
88
- background: none;
89
- border: none;
90
- font-size: 13px;
91
- font-weight: 700;
92
- color: var(--bw-color-primary);
93
- padding: 0;
94
- cursor: pointer;
95
- }
96
- .action-edit:hover { text-decoration: underline; }
97
- .action-remove {
98
- background: none;
99
- border: none;
100
- font-size: 13px;
101
- font-weight: 600;
102
- color: #555;
103
- padding: 0;
104
- cursor: pointer;
105
- }
106
- .action-remove:hover { text-decoration: underline; }
107
-
108
- .cart-total-divider {
109
- border-top: 3px solid #111;
110
- margin: 8px 0 20px;
111
- }
112
- .cart-total-row {
113
- display: flex;
114
- justify-content: space-between;
115
- align-items: center;
116
- font-size: 16px;
117
- font-weight: 700;
118
- margin-bottom: 20px;
119
- }
120
- .cart-total-amount {
121
- font-size: 20px;
122
- font-weight: 800;
123
- }
124
- /* -- Contact view -- */
125
- .pay-error {
126
- margin: 0 0 16px;
127
- padding: 12px 16px;
128
- background: #fdecea;
129
- color: #b3261e;
130
- font-size: 14px;
131
- border-radius: var(--bw-radius-md);
132
- }
133
- .contact-header {
134
- display: flex;
135
- justify-content: space-between;
136
- align-items: center;
137
- margin-bottom: 20px;
138
- }
139
- .contact-title {
140
- font-size: 16px;
141
- font-weight: 700;
142
- }
143
- .required-hint {
144
- font-size: 12px;
145
- color: var(--bw-color-primary);
146
- }
147
-
148
- .pay-bar {
149
- display: flex;
150
- align-items: center;
151
- flex-shrink: 0;
152
- background: var(--bw-color-primary);
153
- color: white;
154
- position: sticky;
155
- bottom: 0;
156
- }
157
- .pay-bar-total {
158
- padding: 0 20px;
159
- font-size: 16px;
160
- font-weight: 700;
161
- }
162
- .pay-bar-btn {
163
- flex: 1;
164
- display: flex;
165
- align-items: center;
166
- justify-content: flex-end;
167
- gap: 8px;
168
- height: 52px;
169
- padding: 0 20px;
170
- background: none;
171
- border: none;
172
- color: white;
173
- font-size: 16px;
174
- font-weight: 700;
175
- }
176
- .pay-bar-btn:disabled {
177
- opacity: 0.7;
178
- cursor: default;
179
- }