@loczer/storefront-sdk 0.164.0 → 0.165.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/StorefrontProvider.d.ts +29 -3
  2. package/dist/StorefrontProvider.d.ts.map +1 -1
  3. package/dist/StorefrontProvider.js +64 -55
  4. package/dist/chunks/booking-engine/dist/schemas/{base-booking-D9k8ehGi.js → base-booking-BMAjsw9r.js} +29 -26
  5. package/dist/chunks/booking-engine/dist/schemas/booking-engine-configuration-DTJD2G9w.js +123 -0
  6. package/dist/chunks/booking-engine/dist/schemas/{cart-inputs-ByBK0IVJ.js → cart-inputs-BI_9nAXG.js} +1 -1
  7. package/dist/chunks/booking-engine/dist/schemas/{public-booking-engine-configuration-DKoak4s5.js → public-booking-engine-configuration-CrwffLO4.js} +1 -1
  8. package/dist/chunks/ui/dist/{MorphingModalWizard-D7hc-dDP.js → MorphingModalWizard-BuRND-yE.js} +3 -3
  9. package/dist/chunks/ui/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id-CNQuVmXa.js +6 -0
  10. package/dist/chunks/ui/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node-DL2q-YuA.js +9 -0
  11. package/dist/chunks/ui/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash-C-3PLS5x.js +6 -0
  12. package/dist/components/AboutSection/index.js +1 -1
  13. package/dist/components/BikeProductCard/index.d.ts +2 -1
  14. package/dist/components/BikeProductCard/index.d.ts.map +1 -1
  15. package/dist/components/BikeProductCard/index.js +59 -41
  16. package/dist/components/BookingBikeVariantDialog/index.js +1 -1
  17. package/dist/components/BookingFlowSteps/index.js +8 -8
  18. package/dist/components/BookingPeriodSelector/components/BookingEndDateField.js +1 -1
  19. package/dist/components/BookingPeriodSelector/components/BookingEndTimeField.js +1 -1
  20. package/dist/components/BookingPeriodSelector/components/BookingMobileDateDrawer.js +28 -28
  21. package/dist/components/BookingPeriodSelector/components/BookingStartDateField.js +1 -1
  22. package/dist/components/BookingPeriodSelector/components/BookingStartTimeField.js +1 -1
  23. package/dist/components/BookingPeriodSelector/useBookingPeriodController.d.ts.map +1 -1
  24. package/dist/components/BookingPeriodSelector/useBookingPeriodController.js +197 -203
  25. package/dist/components/ContactSection/index.js +4 -4
  26. package/dist/components/Header/index.js +1 -1
  27. package/dist/components/PoweredByLoczerBadge/index.js +1 -1
  28. package/dist/components/ProductPriceBadge/index.js +1 -1
  29. package/dist/components/ProductWarningNotice/index.js +10 -10
  30. package/dist/components/StorefrontCancellationPolicyNotice/index.d.ts +11 -0
  31. package/dist/components/StorefrontCancellationPolicyNotice/index.d.ts.map +1 -0
  32. package/dist/components/StorefrontCancellationPolicyNotice/index.js +93 -0
  33. package/dist/components/payment/MollieCardFieldsForm.js +1 -1
  34. package/dist/components/payment/StripeCardFieldsForm.js +13 -13
  35. package/dist/i18n/en.d.ts +12 -0
  36. package/dist/i18n/en.d.ts.map +1 -1
  37. package/dist/i18n/en.js +12 -0
  38. package/dist/i18n/fr.d.ts +12 -0
  39. package/dist/i18n/fr.d.ts.map +1 -1
  40. package/dist/i18n/fr.js +12 -0
  41. package/dist/index.d.ts +116 -7
  42. package/dist/index.js +312 -305
  43. package/dist/lib/cart.js +1 -1
  44. package/dist/lib/cartSummary.d.ts.map +1 -1
  45. package/dist/lib/cartSummary.js +28 -28
  46. package/dist/lib/checkoutPaymentDecision.d.ts +8 -0
  47. package/dist/lib/checkoutPaymentDecision.d.ts.map +1 -1
  48. package/dist/lib/checkoutPaymentDecision.js +14 -6
  49. package/dist/lib/checkoutPaymentSession.d.ts +1 -0
  50. package/dist/lib/checkoutPaymentSession.d.ts.map +1 -1
  51. package/dist/lib/checkoutPaymentSession.js +12 -11
  52. package/dist/lib/checkoutSubmit.js +4 -4
  53. package/dist/lib/productVariants.d.ts.map +1 -1
  54. package/dist/lib/productVariants.js +34 -15
  55. package/dist/lib/products.d.ts +4 -0
  56. package/dist/lib/products.d.ts.map +1 -1
  57. package/dist/lib/products.js +74 -39
  58. package/dist/lib/securePaymentLink.d.ts +1 -0
  59. package/dist/lib/securePaymentLink.d.ts.map +1 -1
  60. package/dist/lib/securePaymentLink.js +1 -0
  61. package/dist/lib/storefrontAvailability.d.ts +9 -0
  62. package/dist/lib/storefrontAvailability.d.ts.map +1 -1
  63. package/dist/lib/storefrontAvailability.js +28 -18
  64. package/dist/pages/BookingPage.d.ts.map +1 -1
  65. package/dist/pages/BookingPage.js +290 -289
  66. package/dist/pages/CheckoutPage.d.ts.map +1 -1
  67. package/dist/pages/CheckoutPage.js +224 -216
  68. package/dist/pages/CheckoutPaymentPage.d.ts.map +1 -1
  69. package/dist/pages/CheckoutPaymentPage.js +92 -92
  70. package/dist/pages/ContractSaleDocumentPage.js +3 -3
  71. package/dist/pages/HomePage.d.ts.map +1 -1
  72. package/dist/pages/HomePage.js +167 -161
  73. package/dist/pages/PaymentLinkPage.d.ts.map +1 -1
  74. package/dist/pages/PaymentLinkPage.js +62 -62
  75. package/dist/pages/PaymentLinkSuccessPage.js +7 -7
  76. package/dist/pages/ProductPage.d.ts.map +1 -1
  77. package/dist/pages/ProductPage.js +161 -161
  78. package/dist/pages/checkout/components/CheckoutCouponCard.js +6 -6
  79. package/dist/pages/checkout/components/CheckoutPaymentSummaryCard.js +15 -15
  80. package/dist/storefront.css +1 -1
  81. package/dist/storefrontSchemas.d.ts +14 -2
  82. package/dist/storefrontSchemas.d.ts.map +1 -1
  83. package/dist/storefrontSchemas.js +4 -4
  84. package/dist/ui/day-picker.js +5 -5
  85. package/package.json +2 -2
  86. package/dist/chunks/booking-engine/dist/schemas/booking-engine-configuration-BKlzwJJX.js +0 -105
  87. package/dist/chunks/ui/dist/node_modules/framer-motion/dist/es/animation/optimized-appear/data-id-DunDwGdX.js +0 -6
  88. package/dist/chunks/ui/dist/node_modules/framer-motion/dist/es/projection/node/create-projection-node-BDwaGtmx.js +0 -9
  89. package/dist/chunks/ui/dist/node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash-h54_qXon.js +0 -4
@@ -62,7 +62,7 @@ function w({
62
62
  /* @__PURE__ */ e(m, { className: C("h-8 w-8 flex-shrink-0", n) }),
63
63
  /* @__PURE__ */ o("span", { className: "flex flex-col items-start leading-tight text-left", children: [
64
64
  /* @__PURE__ */ e("span", { className: "font-medium text-white/90 group-hover:text-white", children: i("platform_footer_powered_by") }),
65
- a ? /* @__PURE__ */ e("span", { className: "text-[11px] text-white/60 group-hover:text-white/80", children: i("platform_footer_tagline") }) : null
65
+ a ? /* @__PURE__ */ e("span", { className: "text-xs text-white/60 group-hover:text-white/80", children: i("platform_footer_tagline") }) : null
66
66
  ] })
67
67
  ]
68
68
  }
@@ -113,7 +113,7 @@ const W = 180, he = "(max-width: 767px)", C = "loczer:storefront:product-price-p
113
113
  /* @__PURE__ */ t("span", { className: "mx-1 flex-1 border-b border-dotted border-slate-300", "aria-hidden": "true" }),
114
114
  /* @__PURE__ */ n("span", { className: "shrink-0 font-medium leading-tight text-slate-950", children: [
115
115
  Z,
116
- /* @__PURE__ */ n("span", { className: m("ml-1 font-medium text-slate-500", a === "popover" ? "text-[11px]" : "text-sm"), children: [
116
+ /* @__PURE__ */ n("span", { className: m("ml-1 font-medium text-slate-500", a === "popover" ? "text-xs" : "text-sm"), children: [
117
117
  /* @__PURE__ */ t("span", { children: "(" }),
118
118
  /* @__PURE__ */ t("span", { children: ne }),
119
119
  /* @__PURE__ */ t("span", { children: ")" })
@@ -1,22 +1,22 @@
1
- import { jsxs as t, jsx as e } from "react/jsx-runtime";
1
+ import { jsxs as t, jsx as n } from "react/jsx-runtime";
2
2
  import { AlertCircle as a } from "lucide-react";
3
- import { cn as m } from "@rpcbase/ui";
4
- function l({ warning: n, className: i }) {
5
- const r = n?.trim();
3
+ import { cn as o } from "@rpcbase/ui";
4
+ function c({ warning: e, className: i }) {
5
+ const r = e?.trim();
6
6
  return r ? /* @__PURE__ */ t(
7
- "div",
7
+ "p",
8
8
  {
9
- className: m(
10
- "flex items-center gap-2 text-xs font-medium text-amber-700",
9
+ className: o(
10
+ "text-xs leading-snug text-orange-700",
11
11
  i
12
12
  ),
13
13
  children: [
14
- /* @__PURE__ */ e(a, { className: "h-4 w-4 shrink-0", "aria-hidden": "true" }),
15
- /* @__PURE__ */ e("span", { className: "leading-snug", children: r })
14
+ /* @__PURE__ */ n(a, { className: "mr-1 inline h-3.5 w-3.5 align-[-0.125em]", "aria-hidden": "true" }),
15
+ /* @__PURE__ */ n("span", { children: r })
16
16
  ]
17
17
  }
18
18
  ) : null;
19
19
  }
20
20
  export {
21
- l as ProductWarningNotice
21
+ c as ProductWarningNotice
22
22
  };
@@ -0,0 +1,11 @@
1
+ import { StorefrontConfiguration } from '../../storefrontSchemas';
2
+ type CancellationPolicy = StorefrontConfiguration["bookingEngine"]["cancellationPolicy"];
3
+ type CancellationPolicyTier = CancellationPolicy["tiers"][number];
4
+ type StorefrontCancellationPolicyNoticeProps = {
5
+ policy: CancellationPolicy;
6
+ className?: string;
7
+ };
8
+ export declare const resolveStorefrontCancellationPolicyTeaserTier: (policy: CancellationPolicy) => CancellationPolicyTier | null;
9
+ export declare function StorefrontCancellationPolicyNotice({ policy, className, }: StorefrontCancellationPolicyNoticeProps): import("react/jsx-runtime").JSX.Element | null;
10
+ export {};
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/StorefrontCancellationPolicyNotice/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAMtE,KAAK,kBAAkB,GAAG,uBAAuB,CAAC,eAAe,CAAC,CAAC,oBAAoB,CAAC,CAAA;AACxF,KAAK,sBAAsB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,KAAK,uCAAuC,GAAG;IAC7C,MAAM,EAAE,kBAAkB,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAOD,eAAO,MAAM,6CAA6C,GACxD,QAAQ,kBAAkB,KACzB,sBAAsB,GAAG,IAG3B,CAAA;AAaD,wBAAgB,kCAAkC,CAAC,EACjD,MAAM,EACN,SAAS,GACV,EAAE,uCAAuC,kDAmGzC"}
@@ -0,0 +1,93 @@
1
+ import { jsxs as n, jsx as e } from "react/jsx-runtime";
2
+ import { useState as f } from "react";
3
+ import { ResponsiveDialog as x, ResponsiveDialogContent as g, ResponsiveDialogHeader as _, ResponsiveDialogTitle as N, ResponsiveDialogDescription as b, ResponsiveDialogFooter as y } from "../../chunks/ui/dist/ResponsiveDialog-D8YzB_3J.js";
4
+ import { cn as v } from "@rpcbase/ui";
5
+ import { CheckCircle2 as w, Info as d } from "lucide-react";
6
+ import { useTranslation as T } from "react-i18next";
7
+ import { Button as D } from "../../ui/button.js";
8
+ const C = 0.95, m = (a) => a.tiers.length === 0 ? [] : [...a.tiers].sort((l, t) => l.upToHours - t.upToHours), H = (a) => m(a).find((t) => t.refundPercentage >= C) ?? null, R = (a, l) => {
9
+ try {
10
+ return new Intl.NumberFormat(l, {
11
+ style: "percent",
12
+ maximumFractionDigits: 2
13
+ }).format(a);
14
+ } catch {
15
+ return `${Math.round(a * 100)}%`;
16
+ }
17
+ };
18
+ function O({
19
+ policy: a,
20
+ className: l
21
+ }) {
22
+ const { t, i18n: p } = T(), [u, r] = f(!1), h = m(a), o = H(a);
23
+ if (!o)
24
+ return null;
25
+ const c = (s) => {
26
+ const i = Math.max(1, Math.round(s));
27
+ return i >= 72 && i % 24 === 0 ? t("cancellation_policy_duration_days", { count: i / 24 }) : t("cancellation_policy_duration_hours", { count: i });
28
+ };
29
+ return /* @__PURE__ */ n("li", { className: v("flex items-start gap-3", l), "data-testid": "storefront-cancellation-policy-notice", children: [
30
+ /* @__PURE__ */ e(w, { className: "mt-0.5 h-5 w-5 shrink-0 text-slate-900", "aria-hidden": "true" }),
31
+ /* @__PURE__ */ n("div", { className: "min-w-0 flex-1", children: [
32
+ /* @__PURE__ */ n("div", { className: "flex min-w-0 items-start gap-1.5", children: [
33
+ /* @__PURE__ */ e("p", { className: "min-w-0 text-sm font-medium text-slate-950", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_teaser", { duration: c(o.upToHours) }) }) }),
34
+ /* @__PURE__ */ e(
35
+ "button",
36
+ {
37
+ type: "button",
38
+ className: "mt-[-1px] inline-flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-slate-500 transition hover:bg-slate-100 hover:text-slate-950 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2",
39
+ "aria-label": t("cancellation_policy_info_aria_label"),
40
+ onClick: () => r(!0),
41
+ children: /* @__PURE__ */ e(d, { className: "h-3.5 w-3.5", "aria-hidden": "true" })
42
+ }
43
+ )
44
+ ] }),
45
+ /* @__PURE__ */ e("p", { className: "text-xs text-slate-600", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_teaser_description") }) })
46
+ ] }),
47
+ /* @__PURE__ */ e(x, { open: u, onOpenChange: r, children: /* @__PURE__ */ e(
48
+ g,
49
+ {
50
+ "data-testid": "storefront-cancellation-policy-modal",
51
+ className: "overflow-hidden border-slate-200 bg-white p-0",
52
+ desktopClassName: "max-w-lg gap-0",
53
+ mobileClassName: "max-h-[92dvh] gap-0",
54
+ children: /* @__PURE__ */ n("div", { className: "flex max-h-[90dvh] w-full min-w-0 flex-col", children: [
55
+ /* @__PURE__ */ e(_, { className: "border-b border-slate-200 px-5 py-4 text-left sm:px-6", children: /* @__PURE__ */ n("div", { className: "flex items-start gap-3", children: [
56
+ /* @__PURE__ */ e("span", { className: "mt-0.5 inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-slate-950 text-white", children: /* @__PURE__ */ e(d, { className: "h-4 w-4", "aria-hidden": "true" }) }),
57
+ /* @__PURE__ */ n("span", { className: "min-w-0 space-y-1", children: [
58
+ /* @__PURE__ */ e(N, { className: "text-left text-lg font-semibold leading-6 text-slate-950", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_modal_title") }) }),
59
+ /* @__PURE__ */ e(b, { className: "text-left text-sm text-slate-600", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_modal_description") }) })
60
+ ] })
61
+ ] }) }),
62
+ /* @__PURE__ */ e("div", { className: "overflow-y-auto px-5 py-5 sm:px-6", children: /* @__PURE__ */ e("dl", { className: "grid gap-3", children: h.map((s) => /* @__PURE__ */ n(
63
+ "div",
64
+ {
65
+ className: "rounded-lg border border-slate-200 bg-slate-50 px-4 py-3",
66
+ children: [
67
+ /* @__PURE__ */ e("dt", { className: "text-sm font-medium text-slate-950", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_modal_tier_deadline", { duration: c(s.upToHours) }) }) }),
68
+ /* @__PURE__ */ e("dd", { className: "mt-1 text-sm text-slate-600", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_modal_tier_refund", {
69
+ percentage: R(s.refundPercentage, p.language)
70
+ }) }) })
71
+ ]
72
+ },
73
+ `${s.upToHours}-${s.refundPercentage}`
74
+ )) }) }),
75
+ /* @__PURE__ */ e(y, { className: "border-t border-slate-200 px-5 py-4 sm:px-6", children: /* @__PURE__ */ e(
76
+ D,
77
+ {
78
+ type: "button",
79
+ variant: "outline",
80
+ className: "h-11 w-full rounded-xl sm:w-auto",
81
+ onClick: () => r(!1),
82
+ children: /* @__PURE__ */ e("span", { children: t("close_modal") })
83
+ }
84
+ ) })
85
+ ] })
86
+ }
87
+ ) })
88
+ ] });
89
+ }
90
+ export {
91
+ O as StorefrontCancellationPolicyNotice,
92
+ H as resolveStorefrontCancellationPolicyTeaserTier
93
+ };
@@ -123,7 +123,7 @@ function Q({
123
123
  /* @__PURE__ */ e("div", { className: "min-h-11", children: /* @__PURE__ */ e("div", { id: t.current.verificationCode, className: "min-h-11" }) })
124
124
  ] })
125
125
  ] }),
126
- k ? /* @__PURE__ */ e("p", { className: "text-sm text-red-600", children: /* @__PURE__ */ e("span", { children: k }) }) : null,
126
+ k ? /* @__PURE__ */ e("p", { className: "text-sm text-destructive", children: /* @__PURE__ */ e("span", { children: k }) }) : null,
127
127
  /* @__PURE__ */ c(I, { type: "submit", disabled: d || b || D || !m.current, className: "h-11 gap-2", children: [
128
128
  b ? /* @__PURE__ */ e(H, { className: "h-4 w-4 animate-spin", "aria-hidden": "true" }) : /* @__PURE__ */ e(j, { className: "h-4 w-4", "aria-hidden": "true" }),
129
129
  /* @__PURE__ */ e("span", { children: b ? p ?? r("secure_payment_link.form.submitting_button") : f ?? r("secure_payment_link.form.submit_button") })
@@ -1,4 +1,4 @@
1
- import { jsxs as n, jsx as e } from "react/jsx-runtime";
1
+ import { jsxs as t, jsx as e } from "react/jsx-runtime";
2
2
  import { useState as u } from "react";
3
3
  import { useStripe as w, useElements as M, CardNumberElement as g, CardExpiryElement as S, CardCvcElement as F } from "@stripe/react-stripe-js";
4
4
  import { Loader2 as j, CreditCard as q } from "lucide-react";
@@ -14,8 +14,8 @@ function K({
14
14
  submittingLabel: x,
15
15
  onSubmit: C
16
16
  }) {
17
- const { t: r } = z(), d = w(), l = M(), [_, E] = u(""), [t, s] = u(!1), [y, a] = u(null);
18
- return /* @__PURE__ */ n("form", { onSubmit: async (c) => {
17
+ const { t: r } = z(), d = w(), l = M(), [_, E] = u(""), [n, s] = u(!1), [y, a] = u(null);
18
+ return /* @__PURE__ */ t("form", { onSubmit: async (c) => {
19
19
  if (c.preventDefault(), !d || !l) {
20
20
  a(r("secure_payment_link.errors.stripe_not_ready"));
21
21
  return;
@@ -59,7 +59,7 @@ function K({
59
59
  s(!1);
60
60
  }
61
61
  }, className: "grid gap-3", children: [
62
- /* @__PURE__ */ n("div", { className: "space-y-1", children: [
62
+ /* @__PURE__ */ t("div", { className: "space-y-1", children: [
63
63
  /* @__PURE__ */ e(m, { htmlFor: "payment-cardholder-name", children: /* @__PURE__ */ e("span", { children: r("secure_payment_link.form.cardholder_name_label") }) }),
64
64
  /* @__PURE__ */ e(
65
65
  L,
@@ -70,28 +70,28 @@ function K({
70
70
  E(c.target.value);
71
71
  },
72
72
  placeholder: r("secure_payment_link.form.cardholder_name_placeholder"),
73
- disabled: h || t
73
+ disabled: h || n
74
74
  }
75
75
  )
76
76
  ] }),
77
- /* @__PURE__ */ n("div", { className: "space-y-1", children: [
77
+ /* @__PURE__ */ t("div", { className: "space-y-1", children: [
78
78
  /* @__PURE__ */ e(m, { htmlFor: "payment-card-number", children: /* @__PURE__ */ e("span", { children: r("secure_payment_link.form.card_number_label") }) }),
79
79
  /* @__PURE__ */ e("div", { className: "rounded-md border border-slate-200 bg-white px-3 py-2", children: /* @__PURE__ */ e(g, { id: "payment-card-number" }) })
80
80
  ] }),
81
- /* @__PURE__ */ n("div", { className: "grid gap-3 sm:grid-cols-2", children: [
82
- /* @__PURE__ */ n("div", { className: "space-y-1", children: [
81
+ /* @__PURE__ */ t("div", { className: "grid gap-3 sm:grid-cols-2", children: [
82
+ /* @__PURE__ */ t("div", { className: "space-y-1", children: [
83
83
  /* @__PURE__ */ e(m, { htmlFor: "payment-card-expiry", children: /* @__PURE__ */ e("span", { children: r("secure_payment_link.form.card_expiry_label") }) }),
84
84
  /* @__PURE__ */ e("div", { className: "rounded-md border border-slate-200 bg-white px-3 py-2", children: /* @__PURE__ */ e(S, { id: "payment-card-expiry" }) })
85
85
  ] }),
86
- /* @__PURE__ */ n("div", { className: "space-y-1", children: [
86
+ /* @__PURE__ */ t("div", { className: "space-y-1", children: [
87
87
  /* @__PURE__ */ e(m, { htmlFor: "payment-card-cvc", children: /* @__PURE__ */ e("span", { children: r("secure_payment_link.form.card_cvc_label") }) }),
88
88
  /* @__PURE__ */ e("div", { className: "rounded-md border border-slate-200 bg-white px-3 py-2", children: /* @__PURE__ */ e(F, { id: "payment-card-cvc" }) })
89
89
  ] })
90
90
  ] }),
91
- y ? /* @__PURE__ */ e("p", { className: "text-sm text-red-600", children: /* @__PURE__ */ e("span", { children: y }) }) : null,
92
- /* @__PURE__ */ n(I, { type: "submit", disabled: h || t || !d || !l, className: "gap-2", children: [
93
- t ? /* @__PURE__ */ e(j, { className: "h-4 w-4 animate-spin", "aria-hidden": "true" }) : /* @__PURE__ */ e(q, { className: "h-4 w-4", "aria-hidden": "true" }),
94
- /* @__PURE__ */ e("span", { children: t ? x ?? r("secure_payment_link.form.submitting_button") : k ?? r("secure_payment_link.form.submit_button") })
91
+ y ? /* @__PURE__ */ e("p", { className: "text-sm text-destructive", children: /* @__PURE__ */ e("span", { children: y }) }) : null,
92
+ /* @__PURE__ */ t(I, { type: "submit", disabled: h || n || !d || !l, className: "gap-2", children: [
93
+ n ? /* @__PURE__ */ e(j, { className: "h-4 w-4 animate-spin", "aria-hidden": "true" }) : /* @__PURE__ */ e(q, { className: "h-4 w-4", "aria-hidden": "true" }),
94
+ /* @__PURE__ */ e("span", { children: n ? x ?? r("secure_payment_link.form.submitting_button") : k ?? r("secure_payment_link.form.submit_button") })
95
95
  ] })
96
96
  ] });
97
97
  }
package/dist/i18n/en.d.ts CHANGED
@@ -23,6 +23,17 @@ export declare const storefront: {
23
23
  feature_delivery_description: string;
24
24
  feature_ready_in_minutes_title: string;
25
25
  feature_ready_in_minutes_description: string;
26
+ cancellation_policy_teaser: string;
27
+ cancellation_policy_teaser_description: string;
28
+ cancellation_policy_info_aria_label: string;
29
+ cancellation_policy_modal_title: string;
30
+ cancellation_policy_modal_description: string;
31
+ cancellation_policy_modal_tier_deadline: string;
32
+ cancellation_policy_modal_tier_refund: string;
33
+ cancellation_policy_duration_hours_one: string;
34
+ cancellation_policy_duration_hours_other: string;
35
+ cancellation_policy_duration_days_one: string;
36
+ cancellation_policy_duration_days_other: string;
26
37
  booking_title: string;
27
38
  booking_subtitle: string;
28
39
  booking_pickup_label: string;
@@ -165,6 +176,7 @@ export declare const storefront: {
165
176
  checkout_payment_due_now_helper_deposit_refundable_until: string;
166
177
  checkout_payment_due_now_helper_deposit: string;
167
178
  checkout_payment_due_now_helper_none: string;
179
+ checkout_payment_cancellation_policy_helper: string;
168
180
  checkout_payment_provider: string;
169
181
  checkout_payment_loading: string;
170
182
  checkout_payment_error: string;
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4YtB,CAAA"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwZtB,CAAA"}
package/dist/i18n/en.js CHANGED
@@ -23,6 +23,17 @@ const e = {
23
23
  feature_delivery_description: "Ask about delivery options for your address.",
24
24
  feature_ready_in_minutes_title: "Ready in a few minutes",
25
25
  feature_ready_in_minutes_description: "Select your dates and get availability instantly.",
26
+ cancellation_policy_teaser: "Refund until {{duration}} in advance",
27
+ cancellation_policy_teaser_description: "See cancellation conditions before booking.",
28
+ cancellation_policy_info_aria_label: "Show cancellation policy",
29
+ cancellation_policy_modal_title: "Cancellation policy",
30
+ cancellation_policy_modal_description: "Refunds depend on how far in advance you cancel.",
31
+ cancellation_policy_modal_tier_deadline: "Up to {{duration}} in advance",
32
+ cancellation_policy_modal_tier_refund: "{{percentage}} refund",
33
+ cancellation_policy_duration_hours_one: "{{count}} hour",
34
+ cancellation_policy_duration_hours_other: "{{count}} hours",
35
+ cancellation_policy_duration_days_one: "{{count}} day",
36
+ cancellation_policy_duration_days_other: "{{count}} days",
26
37
  booking_title: "Book now in 2 minutes!",
27
38
  booking_subtitle: "Choose dates and times, then browse available bikes.",
28
39
  booking_pickup_label: "Store pickup",
@@ -165,6 +176,7 @@ const e = {
165
176
  checkout_payment_due_now_helper_deposit_refundable_until: "{{percent}} deposit due now. Refundable until {{date}}.",
166
177
  checkout_payment_due_now_helper_deposit: "{{percent}} deposit due now.",
167
178
  checkout_payment_due_now_helper_none: "No payment required now.",
179
+ checkout_payment_cancellation_policy_helper: "Cancellation refund estimate: {{percent}} up to {{amount}}.",
168
180
  checkout_payment_provider: "Provider",
169
181
  checkout_payment_loading: "Checking payment options…",
170
182
  checkout_payment_error: "Unable to check payment options.",
package/dist/i18n/fr.d.ts CHANGED
@@ -23,6 +23,17 @@ export declare const storefront: {
23
23
  feature_delivery_description: string;
24
24
  feature_ready_in_minutes_title: string;
25
25
  feature_ready_in_minutes_description: string;
26
+ cancellation_policy_teaser: string;
27
+ cancellation_policy_teaser_description: string;
28
+ cancellation_policy_info_aria_label: string;
29
+ cancellation_policy_modal_title: string;
30
+ cancellation_policy_modal_description: string;
31
+ cancellation_policy_modal_tier_deadline: string;
32
+ cancellation_policy_modal_tier_refund: string;
33
+ cancellation_policy_duration_hours_one: string;
34
+ cancellation_policy_duration_hours_other: string;
35
+ cancellation_policy_duration_days_one: string;
36
+ cancellation_policy_duration_days_other: string;
26
37
  booking_title: string;
27
38
  booking_subtitle: string;
28
39
  booking_pickup_label: string;
@@ -165,6 +176,7 @@ export declare const storefront: {
165
176
  checkout_payment_due_now_helper_deposit_refundable_until: string;
166
177
  checkout_payment_due_now_helper_deposit: string;
167
178
  checkout_payment_due_now_helper_none: string;
179
+ checkout_payment_cancellation_policy_helper: string;
168
180
  checkout_payment_provider: string;
169
181
  checkout_payment_loading: string;
170
182
  checkout_payment_error: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4YtB,CAAA"}
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwZtB,CAAA"}
package/dist/i18n/fr.js CHANGED
@@ -23,6 +23,17 @@ const e = {
23
23
  feature_delivery_description: "Demandez les options de livraison à votre adresse.",
24
24
  feature_ready_in_minutes_title: "En quelques minutes",
25
25
  feature_ready_in_minutes_description: "Sélectionnez vos dates et consultez la disponibilité.",
26
+ cancellation_policy_teaser: "Remboursement jusqu'à {{duration}} à l'avance",
27
+ cancellation_policy_teaser_description: "Consultez les conditions d'annulation avant de réserver.",
28
+ cancellation_policy_info_aria_label: "Afficher les conditions d'annulation",
29
+ cancellation_policy_modal_title: "Conditions d'annulation",
30
+ cancellation_policy_modal_description: "Le remboursement dépend du délai entre l'annulation et le début de la réservation.",
31
+ cancellation_policy_modal_tier_deadline: "Jusqu'à {{duration}} à l'avance",
32
+ cancellation_policy_modal_tier_refund: "Remboursement de {{percentage}}",
33
+ cancellation_policy_duration_hours_one: "{{count}} heure",
34
+ cancellation_policy_duration_hours_other: "{{count}} heures",
35
+ cancellation_policy_duration_days_one: "{{count}} jour",
36
+ cancellation_policy_duration_days_other: "{{count}} jours",
26
37
  booking_title: "Réservez en 2 minutes !",
27
38
  booking_subtitle: "Choisissez les dates et horaires, puis parcourez les vélos disponibles.",
28
39
  booking_pickup_label: "Retrait en boutique",
@@ -165,6 +176,7 @@ const e = {
165
176
  checkout_payment_due_now_helper_deposit_refundable_until: "Acompte de {{percent}} à payer maintenant. Remboursable jusqu’au {{date}}.",
166
177
  checkout_payment_due_now_helper_deposit: "Acompte de {{percent}} à payer maintenant.",
167
178
  checkout_payment_due_now_helper_none: "Aucun paiement n’est requis maintenant.",
179
+ checkout_payment_cancellation_policy_helper: "Estimation d'annulation : {{percent}} jusqu'à {{amount}}.",
168
180
  checkout_payment_provider: "Prestataire",
169
181
  checkout_payment_loading: "Vérification des options de paiement…",
170
182
  checkout_payment_error: "Impossible de vérifier les options de paiement.",
package/dist/index.d.ts CHANGED
@@ -357,6 +357,18 @@ export declare const baseBookingSchema: z.ZodObject<{
357
357
  couponAutoApplied: z.ZodOptional<z.ZodBoolean>;
358
358
  couponPriceRuleId: z.ZodOptional<z.ZodString>;
359
359
  totalPriceUnits: z.ZodOptional<z.ZodNumber>;
360
+ cancellationPolicySnapshot: z.ZodOptional<z.ZodObject<{
361
+ tiers: z.ZodDefault<z.ZodArray<z.ZodObject<{
362
+ upToHours: z.ZodNumber;
363
+ refundPercentage: z.ZodNumber;
364
+ }, z.core.$strip>>>;
365
+ }, z.core.$strip>>;
366
+ cancellationPolicyOverride: z.ZodOptional<z.ZodObject<{
367
+ tiers: z.ZodDefault<z.ZodArray<z.ZodObject<{
368
+ upToHours: z.ZodNumber;
369
+ refundPercentage: z.ZodNumber;
370
+ }, z.core.$strip>>>;
371
+ }, z.core.$strip>>;
360
372
  createdAt: z.ZodString;
361
373
  updatedAt: z.ZodString;
362
374
  }, z.core.$strip>;
@@ -786,6 +798,8 @@ export declare const buildStorefrontProductSlug: ({ id, productShortCode, name,
786
798
  name?: LocalizedString;
787
799
  }) => string;
788
800
 
801
+ export declare const buildVariantStorefrontProductId: (productId: string, variantId: string) => string;
802
+
789
803
  export declare function buildWhatsAppHref(phone: string | undefined, message?: string): string | undefined;
790
804
 
791
805
  export declare const Button: React_2.ForwardRefExoticComponent<ButtonProps & React_2.RefAttributes<HTMLButtonElement>>;
@@ -801,6 +815,22 @@ export declare const buttonVariants: (props?: ({
801
815
 
802
816
  export declare function calculateDailyPriceForQuantity(prices: StorefrontPublicProductPrice[] | undefined, dayCount: number): number | null;
803
817
 
818
+ export declare type CancellationPolicy = z.infer<typeof cancellationPolicySchema>;
819
+
820
+ export declare const cancellationPolicySchema: z.ZodObject<{
821
+ tiers: z.ZodDefault<z.ZodArray<z.ZodObject<{
822
+ upToHours: z.ZodNumber;
823
+ refundPercentage: z.ZodNumber;
824
+ }, z.core.$strip>>>;
825
+ }, z.core.$strip>;
826
+
827
+ export declare type CancellationPolicyTier = z.infer<typeof cancellationPolicyTierSchema>;
828
+
829
+ export declare const cancellationPolicyTierSchema: z.ZodObject<{
830
+ upToHours: z.ZodNumber;
831
+ refundPercentage: z.ZodNumber;
832
+ }, z.core.$strip>;
833
+
804
834
  export declare function Card({ className, ...props }: React_2.ComponentProps<"div">): JSX.Element;
805
835
 
806
836
  export declare function CardAction({ className, ...props }: React_2.ComponentProps<"div">): JSX.Element;
@@ -1369,6 +1399,8 @@ export declare type DailyPriceRow = {
1369
1399
  perDayPriceLabel: string;
1370
1400
  };
1371
1401
 
1402
+ export declare const DEFAULT_CANCELLATION_POLICY: CancellationPolicy;
1403
+
1372
1404
  export declare const DEFAULT_PAYMENT_POLICIES: PaymentPolicies;
1373
1405
 
1374
1406
  export declare const DEFAULT_STOREFRONT_PRESET: StorefrontPreset;
@@ -1810,8 +1842,14 @@ export declare const loader: ({ ctx, params }: LoaderArgs) => Promise<{
1810
1842
  percentage: number;
1811
1843
  optimizeDepositAmount: boolean;
1812
1844
  };
1845
+ cancellationPolicy: {
1846
+ tiers: {
1847
+ upToHours: number;
1848
+ refundPercentage: number;
1849
+ }[];
1850
+ };
1813
1851
  securityDeposit: {
1814
- mode: "optional" | "required" | "disabled";
1852
+ mode: "optional" | "disabled" | "required";
1815
1853
  };
1816
1854
  shop: {
1817
1855
  timeZone: string;
@@ -1967,6 +2005,8 @@ export declare const loader: ({ ctx, params }: LoaderArgs) => Promise<{
1967
2005
  };
1968
2006
  bikes: BikeProduct[];
1969
2007
  accessories: AccessoryProduct[];
2008
+ bookingBikes: BikeProduct[];
2009
+ bookingAccessories: AccessoryProduct[];
1970
2010
  language: StorefrontI18nLanguage;
1971
2011
  }>;
1972
2012
 
@@ -2017,8 +2057,8 @@ export declare const paymentPoliciesSchema: z.ZodObject<{
2017
2057
  securityDeposit: z.ZodObject<{
2018
2058
  mode: z.ZodEnum<{
2019
2059
  optional: "optional";
2020
- required: "required";
2021
2060
  disabled: "disabled";
2061
+ required: "required";
2022
2062
  }>;
2023
2063
  }, z.core.$strip>;
2024
2064
  }, z.core.$strip>;
@@ -2391,11 +2431,17 @@ export declare const publicBookingEngineConfigurationSchema: z.ZodObject<{
2391
2431
  percentage: z.ZodNumber;
2392
2432
  optimizeDepositAmount: z.ZodDefault<z.ZodBoolean>;
2393
2433
  }, z.core.$strip>;
2434
+ cancellationPolicy: z.ZodDefault<z.ZodObject<{
2435
+ tiers: z.ZodDefault<z.ZodArray<z.ZodObject<{
2436
+ upToHours: z.ZodNumber;
2437
+ refundPercentage: z.ZodNumber;
2438
+ }, z.core.$strip>>>;
2439
+ }, z.core.$strip>>;
2394
2440
  securityDeposit: z.ZodObject<{
2395
2441
  mode: z.ZodEnum<{
2396
2442
  optional: "optional";
2397
- required: "required";
2398
2443
  disabled: "disabled";
2444
+ required: "required";
2399
2445
  }>;
2400
2446
  }, z.core.$strip>;
2401
2447
  shop: z.ZodObject<{
@@ -2788,6 +2834,7 @@ export declare const storefrontAvailabilityResponseSchema: z.ZodObject<{
2788
2834
  remainingCounts: "remainingCounts";
2789
2835
  }>;
2790
2836
  soldOut: z.ZodBoolean;
2837
+ unlimited: z.ZodBoolean;
2791
2838
  insufficientCapacity: z.ZodOptional<z.ZodBoolean>;
2792
2839
  fewRemaining: z.ZodOptional<z.ZodBoolean>;
2793
2840
  remaining: z.ZodOptional<z.ZodNumber>;
@@ -2813,6 +2860,8 @@ export declare type StorefrontBookingParams = {
2813
2860
  end_address: string;
2814
2861
  };
2815
2862
 
2863
+ export declare type StorefrontBookingProductsCollections = StorefrontProductsCollections;
2864
+
2816
2865
  declare type StorefrontCartContextValue = {
2817
2866
  items: StorefrontCartItem[];
2818
2867
  itemCount: number;
@@ -3070,8 +3119,14 @@ export declare const storefrontConfigurationSchema: z.ZodObject<{
3070
3119
  percentage: number;
3071
3120
  optimizeDepositAmount: boolean;
3072
3121
  };
3122
+ cancellationPolicy: {
3123
+ tiers: {
3124
+ upToHours: number;
3125
+ refundPercentage: number;
3126
+ }[];
3127
+ };
3073
3128
  securityDeposit: {
3074
- mode: "optional" | "required" | "disabled";
3129
+ mode: "optional" | "disabled" | "required";
3075
3130
  };
3076
3131
  shop: {
3077
3132
  timeZone: string;
@@ -3138,8 +3193,14 @@ export declare const storefrontConfigurationSchema: z.ZodObject<{
3138
3193
  percentage: number;
3139
3194
  optimizeDepositAmount: boolean;
3140
3195
  };
3196
+ cancellationPolicy: {
3197
+ tiers: {
3198
+ upToHours: number;
3199
+ refundPercentage: number;
3200
+ }[];
3201
+ };
3141
3202
  securityDeposit: {
3142
- mode: "optional" | "required" | "disabled";
3203
+ mode: "optional" | "disabled" | "required";
3143
3204
  };
3144
3205
  shop: {
3145
3206
  timeZone: string;
@@ -3380,6 +3441,8 @@ declare type StorefrontContextValue = {
3380
3441
  storefrontConfiguration: StorefrontConfiguration;
3381
3442
  bikes: BikeProduct[];
3382
3443
  accessories: AccessoryProduct[];
3444
+ bookingBikes: BikeProduct[];
3445
+ bookingAccessories: AccessoryProduct[];
3383
3446
  mapboxToken?: string;
3384
3447
  language: StorefrontI18nLanguage;
3385
3448
  };
@@ -3409,6 +3472,17 @@ export declare const storefrontEn: {
3409
3472
  feature_delivery_description: string;
3410
3473
  feature_ready_in_minutes_title: string;
3411
3474
  feature_ready_in_minutes_description: string;
3475
+ cancellation_policy_teaser: string;
3476
+ cancellation_policy_teaser_description: string;
3477
+ cancellation_policy_info_aria_label: string;
3478
+ cancellation_policy_modal_title: string;
3479
+ cancellation_policy_modal_description: string;
3480
+ cancellation_policy_modal_tier_deadline: string;
3481
+ cancellation_policy_modal_tier_refund: string;
3482
+ cancellation_policy_duration_hours_one: string;
3483
+ cancellation_policy_duration_hours_other: string;
3484
+ cancellation_policy_duration_days_one: string;
3485
+ cancellation_policy_duration_days_other: string;
3412
3486
  booking_title: string;
3413
3487
  booking_subtitle: string;
3414
3488
  booking_pickup_label: string;
@@ -3551,6 +3625,7 @@ export declare const storefrontEn: {
3551
3625
  checkout_payment_due_now_helper_deposit_refundable_until: string;
3552
3626
  checkout_payment_due_now_helper_deposit: string;
3553
3627
  checkout_payment_due_now_helper_none: string;
3628
+ checkout_payment_cancellation_policy_helper: string;
3554
3629
  checkout_payment_provider: string;
3555
3630
  checkout_payment_loading: string;
3556
3631
  checkout_payment_error: string;
@@ -3838,6 +3913,17 @@ export declare const storefrontFr: {
3838
3913
  feature_delivery_description: string;
3839
3914
  feature_ready_in_minutes_title: string;
3840
3915
  feature_ready_in_minutes_description: string;
3916
+ cancellation_policy_teaser: string;
3917
+ cancellation_policy_teaser_description: string;
3918
+ cancellation_policy_info_aria_label: string;
3919
+ cancellation_policy_modal_title: string;
3920
+ cancellation_policy_modal_description: string;
3921
+ cancellation_policy_modal_tier_deadline: string;
3922
+ cancellation_policy_modal_tier_refund: string;
3923
+ cancellation_policy_duration_hours_one: string;
3924
+ cancellation_policy_duration_hours_other: string;
3925
+ cancellation_policy_duration_days_one: string;
3926
+ cancellation_policy_duration_days_other: string;
3841
3927
  booking_title: string;
3842
3928
  booking_subtitle: string;
3843
3929
  booking_pickup_label: string;
@@ -3980,6 +4066,7 @@ export declare const storefrontFr: {
3980
4066
  checkout_payment_due_now_helper_deposit_refundable_until: string;
3981
4067
  checkout_payment_due_now_helper_deposit: string;
3982
4068
  checkout_payment_due_now_helper_none: string;
4069
+ checkout_payment_cancellation_policy_helper: string;
3983
4070
  checkout_payment_provider: string;
3984
4071
  checkout_payment_loading: string;
3985
4072
  checkout_payment_error: string;
@@ -4503,6 +4590,7 @@ export declare const storefrontPublicAvailabilityRecordSchema: z.ZodObject<{
4503
4590
  remainingCounts: "remainingCounts";
4504
4591
  }>;
4505
4592
  soldOut: z.ZodBoolean;
4593
+ unlimited: z.ZodBoolean;
4506
4594
  insufficientCapacity: z.ZodOptional<z.ZodBoolean>;
4507
4595
  fewRemaining: z.ZodOptional<z.ZodBoolean>;
4508
4596
  remaining: z.ZodOptional<z.ZodNumber>;
@@ -4833,6 +4921,10 @@ export declare const toStorefrontAccessoryProducts: (accessories: StorefrontPubl
4833
4921
 
4834
4922
  export declare const toStorefrontBikeProducts: (bikes: StorefrontPublicBikeProduct[]) => BikeProduct[];
4835
4923
 
4924
+ export declare const toStorefrontBookingProducts: <T extends StorefrontProduct>(products: T[]) => T[];
4925
+
4926
+ export declare const toStorefrontBookingProductsCollections: (products: StorefrontProductsCollections) => StorefrontBookingProductsCollections;
4927
+
4836
4928
  export declare const useBookingPeriod: () => BookingPeriodControllerValue;
4837
4929
 
4838
4930
  export declare const useFormField: () => {
@@ -4852,6 +4944,11 @@ export declare function useOptionalStorefront(): StorefrontContextValue | undefi
4852
4944
 
4853
4945
  export declare function useStorefront(): StorefrontContextValue;
4854
4946
 
4947
+ export declare function useStorefrontBookingProducts(): {
4948
+ bikes: BikeProduct[];
4949
+ accessories: AccessoryProduct[];
4950
+ };
4951
+
4855
4952
  export declare const useStorefrontCart: () => StorefrontCartContextValue;
4856
4953
 
4857
4954
  export declare function useStorefrontConfig(): {
@@ -4916,8 +5013,14 @@ export declare function useStorefrontConfig(): {
4916
5013
  percentage: number;
4917
5014
  optimizeDepositAmount: boolean;
4918
5015
  };
5016
+ cancellationPolicy: {
5017
+ tiers: {
5018
+ upToHours: number;
5019
+ refundPercentage: number;
5020
+ }[];
5021
+ };
4919
5022
  securityDeposit: {
4920
- mode: "optional" | "required" | "disabled";
5023
+ mode: "optional" | "disabled" | "required";
4921
5024
  };
4922
5025
  shop: {
4923
5026
  timeZone: string;
@@ -5132,8 +5235,14 @@ export declare function useStorefrontConfig(): {
5132
5235
  percentage: number;
5133
5236
  optimizeDepositAmount: boolean;
5134
5237
  };
5238
+ cancellationPolicy: {
5239
+ tiers: {
5240
+ upToHours: number;
5241
+ refundPercentage: number;
5242
+ }[];
5243
+ };
5135
5244
  securityDeposit: {
5136
- mode: "optional" | "required" | "disabled";
5245
+ mode: "optional" | "disabled" | "required";
5137
5246
  };
5138
5247
  shop: {
5139
5248
  timeZone: string;