@loczer/storefront-sdk 0.166.0 → 0.168.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 (56) hide show
  1. package/dist/chunks/booking-engine/dist/schemas/base-booking-Dlgnuu6k.js +74 -0
  2. package/dist/chunks/ui/dist/{Dialog-COr6fnKd.js → Dialog-CR_9vgBQ.js} +1 -1
  3. package/dist/chunks/ui/dist/{MorphingModalWizard-BuRND-yE.js → MorphingModalWizard-CPLr3dh2.js} +3 -3
  4. package/dist/chunks/ui/dist/{ResponsiveDialog-D8YzB_3J.js → ResponsiveDialog-DhFgsW_0.js} +2 -2
  5. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/Icon-OkokCq-b.js +37 -0
  6. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/context-C4oH64Wf.js +5 -0
  7. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/createLucideIcon-BI4k0Tt0.js +23 -0
  8. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/icons/{arrow-left-asE1l_Qw.js → arrow-left-DMMNgJEB.js} +1 -1
  9. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/icons/{x-Cdi8GS7U.js → x-BDxS-rYd.js} +1 -1
  10. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp-Lff9pF65.js +9 -0
  11. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses-HV-Vu34x.js +4 -0
  12. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase-BZAgYi2F.js +7 -0
  13. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase-DsnfsuSi.js +4 -0
  14. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase-DZxyG2X3.js +8 -0
  15. package/dist/components/BikeProductCard/index.d.ts.map +1 -1
  16. package/dist/components/BikeProductCard/index.js +40 -45
  17. package/dist/components/BookingBikeVariantDialog/index.js +1 -1
  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/BookingStartDateField.js +1 -1
  21. package/dist/components/BookingPeriodSelector/components/BookingStartTimeField.js +1 -1
  22. package/dist/components/ContactSection/index.d.ts.map +1 -1
  23. package/dist/components/ContactSection/index.js +73 -98
  24. package/dist/components/DelayedReveal/index.js +1 -1
  25. package/dist/components/Footer/index.d.ts +2 -1
  26. package/dist/components/Footer/index.d.ts.map +1 -1
  27. package/dist/components/Footer/index.js +38 -48
  28. package/dist/components/Header/index.d.ts +2 -1
  29. package/dist/components/Header/index.d.ts.map +1 -1
  30. package/dist/components/Header/index.js +55 -62
  31. package/dist/components/Layout/index.d.ts.map +1 -1
  32. package/dist/components/Layout/index.js +35 -26
  33. package/dist/components/StorefrontCancellationPolicyNotice/index.js +3 -3
  34. package/dist/components/StorefrontPopupMessages/index.js +1 -1
  35. package/dist/i18n/en.d.ts +2 -5
  36. package/dist/i18n/en.d.ts.map +1 -1
  37. package/dist/i18n/en.js +7 -10
  38. package/dist/i18n/fr.d.ts +2 -5
  39. package/dist/i18n/fr.d.ts.map +1 -1
  40. package/dist/i18n/fr.js +8 -11
  41. package/dist/index.d.ts +8 -20
  42. package/dist/index.js +2 -2
  43. package/dist/lib/checkoutSubmit.js +1 -1
  44. package/dist/pages/CheckoutPage.d.ts.map +1 -1
  45. package/dist/pages/CheckoutPage.js +171 -179
  46. package/dist/pages/CheckoutPaymentPage.d.ts.map +1 -1
  47. package/dist/pages/CheckoutPaymentPage.js +124 -145
  48. package/dist/pages/HomePage.d.ts.map +1 -1
  49. package/dist/pages/HomePage.js +185 -173
  50. package/dist/storefront.css +1 -1
  51. package/dist/storefrontSchemas.js +1 -1
  52. package/package.json +2 -2
  53. package/dist/chunks/booking-engine/dist/schemas/base-booking-BMAjsw9r.js +0 -78
  54. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/Icon-BNiQfVqr.js +0 -35
  55. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/createLucideIcon-5_J8fxOF.js +0 -21
  56. package/dist/chunks/ui/dist/node_modules/lucide-react/dist/esm/shared/src/utils-nzQUBs6v.js +0 -18
@@ -1,62 +1,55 @@
1
- import { jsxs as a, jsx as e } from "react/jsx-runtime";
2
- import { useMediaQuery as T, useThrottledMeasure as H } from "@rpcbase/client";
3
- import { useParams as W, useLocation as q, Link as r } from "@rpcbase/router";
4
- import { useScrollHideOnDown as A, cn as _ } from "@rpcbase/ui";
5
- import { ArrowRight as y, Bike as E, ShoppingCart as F } from "lucide-react";
6
- import { useTranslation as O } from "react-i18next";
7
- import { useStorefrontCart as Y } from "../../lib/cart.js";
8
- import { resolveBookingSearchParamsFromSessionStorage as C } from "../../lib/booking.js";
9
- import { Badge as G } from "../../ui/badge.js";
1
+ import { jsxs as t, jsx as e } from "react/jsx-runtime";
2
+ import { useMediaQuery as A, useThrottledMeasure as H } from "@rpcbase/client";
3
+ import { useParams as W, useLocation as q, Link as s } from "@rpcbase/router";
4
+ import { useScrollHideOnDown as E, cn as $ } from "@rpcbase/ui";
5
+ import { Bike as F, ShoppingCart as O, ArrowRight as Y } from "lucide-react";
6
+ import { useTranslation as C } from "react-i18next";
7
+ import G from "../../chunks/assets/whatsapp.svg-grlzka-t.js";
8
+ import { useStorefrontCart as Q } from "../../lib/cart.js";
9
+ import { resolveBookingSearchParamsFromSessionStorage as V } from "../../lib/booking.js";
10
+ import { Badge as D } from "../../ui/badge.js";
10
11
  import { Button as g } from "../../ui/button.js";
11
- import { DelayedReveal as Q, DelayedPlaceholder as V } from "../DelayedReveal/index.js";
12
12
  import { buildStorefrontImageUrl as J } from "../../lib/storefrontImage.js";
13
13
  import { getLocalizedValue as L } from "../../localization.js";
14
- const K = 36, $ = (n, s) => {
15
- const l = n?.trim() ?? "";
16
- return l ? J(l, s ?? "") : "";
14
+ const K = 36, _ = (r, a) => {
15
+ const l = r?.trim() ?? "";
16
+ return l ? J(l, a ?? "") : "";
17
17
  };
18
- function de({ preset: n, storefrontConfiguration: s, whatsappHref: l }) {
19
- const { t, i18n: c } = O(), { storeSlug: m } = W(), B = q(), { itemCount: p } = Y(), u = T("(max-width: 640px)"), [j, P] = H(), x = P?.height ?? K, I = A({
20
- enabled: u,
18
+ function de({ preset: r, storefrontConfiguration: a, whatsappHref: l, whatsappPhoneDisplay: c }) {
19
+ const { t: n, i18n: m } = C(), { storeSlug: d } = W(), y = q(), { itemCount: u } = Q(), p = A("(max-width: 640px)"), [B, j] = H(), x = j?.height ?? K, I = E({
20
+ enabled: p,
21
21
  thresholdPx: x
22
- }), f = u && I ? `translateY(-${x}px)` : "translateY(0)", z = () => {
23
- const h = c.language.startsWith("fr") ? "en" : "fr";
24
- c.changeLanguage(h);
25
- }, i = `/${m ?? ""}`, w = C(
26
- new URLSearchParams(B.search),
27
- m
28
- ).toString(), o = w ? `?${w}` : "", b = `${i}/booking${o}`, R = `${i}/checkout${o}`, N = s?.shop.name?.trim() || n.name, v = s?.workspace?.workspaceLanguage, U = L(s?.content?.tagline, c.language, v).trim() || n.tagline, D = L(s?.content?.topBannerMessage, c.language, v).trim() || t("top_bar_message"), k = $(s?.content?.logoWideImageId, m), S = $(s?.content?.logoSquareImageId, m), d = k.length > 0, M = S.length > 0;
29
- return /* @__PURE__ */ a("div", { className: "sticky top-0 z-30", children: [
30
- /* @__PURE__ */ e("div", { className: "transition-transform duration-300", style: { transform: f }, children: /* @__PURE__ */ e("div", { ref: j, className: "bg-slate-950 text-white", children: /* @__PURE__ */ a("div", { className: "mx-auto flex max-w-7xl items-center justify-between gap-3 px-4 py-2 text-xs sm:px-6", children: [
31
- /* @__PURE__ */ e("p", { className: "flex items-center gap-2", children: /* @__PURE__ */ e("span", { children: D }) }),
32
- /* @__PURE__ */ a("div", { className: "hidden items-center gap-4 sm:flex", children: [
22
+ }), f = p && I ? `translateY(-${x}px)` : "translateY(0)", z = () => {
23
+ const T = m.language.startsWith("fr") ? "en" : "fr";
24
+ m.changeLanguage(T);
25
+ }, i = `/${d ?? ""}`, b = V(
26
+ new URLSearchParams(y.search),
27
+ d
28
+ ).toString(), o = b ? `?${b}` : "", w = `${i}/booking${o}`, U = `${i}/checkout${o}`, N = a?.shop.name?.trim() || r.name, v = a?.workspace?.workspaceLanguage, M = L(a?.content?.tagline, m.language, v).trim() || r.tagline, P = L(a?.content?.topBannerMessage, m.language, v).trim() || n("top_bar_message"), k = _(a?.content?.logoWideImageId, d), S = _(a?.content?.logoSquareImageId, d), h = k.length > 0, R = S.length > 0;
29
+ return /* @__PURE__ */ t("div", { className: "sticky top-0 z-30", children: [
30
+ /* @__PURE__ */ e("div", { className: "transition-transform duration-300", style: { transform: f }, children: /* @__PURE__ */ e("div", { ref: B, className: "bg-slate-950 text-white", children: /* @__PURE__ */ t("div", { className: "mx-auto flex max-w-7xl items-center justify-between gap-3 px-4 py-2 text-xs sm:px-6", children: [
31
+ /* @__PURE__ */ e("p", { className: "flex items-center gap-2", children: /* @__PURE__ */ e("span", { children: P }) }),
32
+ /* @__PURE__ */ t("div", { className: "hidden items-center gap-4 sm:flex", children: [
33
33
  /* @__PURE__ */ e(
34
34
  "a",
35
35
  {
36
36
  className: "inline-flex items-center gap-2 rounded-md px-2 py-1 text-white/90 hover:bg-white/10 hover:text-white",
37
- href: `mailto:${n.email}`,
38
- "aria-label": n.email,
39
- children: /* @__PURE__ */ e(
40
- Q,
41
- {
42
- value: n.email,
43
- reserveWidth: "11.5rem",
44
- fallback: /* @__PURE__ */ e(V, { value: n.email, className: "bg-white/30" }),
45
- children: (h) => /* @__PURE__ */ e("span", { children: h })
46
- }
47
- )
37
+ href: `mailto:${r.email}`,
38
+ "aria-label": r.email,
39
+ children: /* @__PURE__ */ e("span", { children: r.email })
48
40
  }
49
41
  ),
50
- l ? /* @__PURE__ */ a(
42
+ l ? /* @__PURE__ */ t(
51
43
  "a",
52
44
  {
53
45
  className: "inline-flex items-center gap-2 rounded-md px-2 py-1 text-white/90 hover:bg-white/10 hover:text-white",
54
46
  href: l,
55
47
  target: "_blank",
56
48
  rel: "noreferrer",
49
+ "aria-label": `WhatsApp${c ? ` ${c}` : ""}`,
57
50
  children: [
58
- /* @__PURE__ */ e("span", { children: t("top_bar_whatsapp") }),
59
- /* @__PURE__ */ e(y, { className: "h-4 w-4", "aria-hidden": "true" })
51
+ /* @__PURE__ */ e("img", { src: G, className: "h-5 w-5 shrink-0", alt: "", "aria-hidden": "true" }),
52
+ c ? /* @__PURE__ */ e("span", { children: c }) : null
60
53
  ]
61
54
  }
62
55
  ) : null
@@ -67,11 +60,11 @@ function de({ preset: n, storefrontConfiguration: s, whatsappHref: l }) {
67
60
  {
68
61
  className: "sticky top-0 z-30 border-b bg-white/90 backdrop-blur transition-transform duration-300",
69
62
  style: { transform: f },
70
- children: /* @__PURE__ */ a("div", { className: "mx-auto flex max-w-7xl items-center justify-between gap-4 px-4 py-3 sm:px-6", children: [
71
- /* @__PURE__ */ a(r, { to: i, className: "flex min-w-0 items-center gap-3", children: [
72
- M && !d ? /* @__PURE__ */ e("span", { className: "inline-flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-slate-200 bg-white", children: /* @__PURE__ */ e("img", { src: S, alt: "", className: "h-full w-full object-contain", "aria-hidden": "true" }) }) : /* @__PURE__ */ e("span", { className: _("inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-slate-950 text-white", d && "hidden"), children: /* @__PURE__ */ e(E, { className: "h-5 w-5", "aria-hidden": "true" }) }),
73
- /* @__PURE__ */ a("span", { className: "flex min-w-0 flex-col leading-tight", children: [
74
- d ? /* @__PURE__ */ e(
63
+ children: /* @__PURE__ */ t("div", { className: "mx-auto flex max-w-7xl items-center justify-between gap-4 px-4 py-3 sm:px-6", children: [
64
+ /* @__PURE__ */ t(s, { to: i, className: "flex min-w-0 items-center gap-3", children: [
65
+ R && !h ? /* @__PURE__ */ e("span", { className: "inline-flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded-lg border border-slate-200 bg-white", children: /* @__PURE__ */ e("img", { src: S, alt: "", className: "h-full w-full object-contain", "aria-hidden": "true" }) }) : /* @__PURE__ */ e("span", { className: $("inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-slate-950 text-white", h && "hidden"), children: /* @__PURE__ */ e(F, { className: "h-5 w-5", "aria-hidden": "true" }) }),
66
+ /* @__PURE__ */ t("span", { className: "flex min-w-0 flex-col leading-tight", children: [
67
+ h ? /* @__PURE__ */ e(
75
68
  "img",
76
69
  {
77
70
  src: k,
@@ -79,34 +72,34 @@ function de({ preset: n, storefrontConfiguration: s, whatsappHref: l }) {
79
72
  className: "h-8 max-w-[10rem] object-contain object-left sm:max-w-[14rem]"
80
73
  }
81
74
  ) : /* @__PURE__ */ e("span", { className: "truncate text-sm font-semibold", children: N }),
82
- /* @__PURE__ */ e("span", { className: "truncate text-xs text-slate-600", children: U })
75
+ /* @__PURE__ */ e("span", { className: "truncate text-xs text-slate-600", children: M })
83
76
  ] })
84
77
  ] }),
85
- /* @__PURE__ */ a("nav", { className: "hidden items-center gap-6 text-sm font-medium text-slate-700 md:flex", children: [
86
- /* @__PURE__ */ e(r, { className: "hover:text-slate-950", to: `${i}${o}#categories`, children: /* @__PURE__ */ e("span", { children: t("nav_categories") }) }),
87
- /* @__PURE__ */ e(r, { className: "hover:text-slate-950", to: `${i}${o}#featured`, children: /* @__PURE__ */ e("span", { children: t("nav_featured") }) }),
88
- /* @__PURE__ */ e(r, { className: "hover:text-slate-950", to: b, children: /* @__PURE__ */ e("span", { children: t("nav_products") }) }),
89
- /* @__PURE__ */ e(r, { className: "hover:text-slate-950", to: `${i}${o}#contact`, children: /* @__PURE__ */ e("span", { children: t("nav_contact") }) })
78
+ /* @__PURE__ */ t("nav", { className: "hidden items-center gap-6 text-sm font-medium text-slate-700 md:flex", children: [
79
+ /* @__PURE__ */ e(s, { className: "hover:text-slate-950", to: `${i}${o}#categories`, children: /* @__PURE__ */ e("span", { children: n("nav_categories") }) }),
80
+ /* @__PURE__ */ e(s, { className: "hover:text-slate-950", to: `${i}${o}#featured`, children: /* @__PURE__ */ e("span", { children: n("nav_featured") }) }),
81
+ /* @__PURE__ */ e(s, { className: "hover:text-slate-950", to: w, children: /* @__PURE__ */ e("span", { children: n("nav_products") }) }),
82
+ /* @__PURE__ */ e(s, { className: "hover:text-slate-950", to: `${i}${o}#contact`, children: /* @__PURE__ */ e("span", { children: n("nav_contact") }) })
90
83
  ] }),
91
- /* @__PURE__ */ a("div", { className: "flex items-center gap-2", children: [
92
- /* @__PURE__ */ e(g, { variant: "outline", size: "sm", className: "hidden sm:inline-flex", onClick: z, children: /* @__PURE__ */ e("span", { children: t("language_toggle") }) }),
84
+ /* @__PURE__ */ t("div", { className: "flex items-center gap-2", children: [
85
+ /* @__PURE__ */ e(g, { variant: "outline", size: "sm", className: "hidden sm:inline-flex", onClick: z, children: /* @__PURE__ */ e("span", { children: n("language_toggle") }) }),
93
86
  /* @__PURE__ */ e(
94
87
  g,
95
88
  {
96
89
  asChild: !0,
97
90
  variant: "outline",
98
91
  size: "sm",
99
- className: _("relative gap-2", p > 0 ? "inline-flex" : "hidden"),
100
- children: /* @__PURE__ */ a(r, { to: R, children: [
101
- /* @__PURE__ */ e(F, { className: "h-4 w-4", "aria-hidden": "true" }),
102
- /* @__PURE__ */ e("span", { children: t("cart_button") }),
103
- /* @__PURE__ */ e(G, { className: "absolute -right-2 -top-2 h-5 min-w-5 rounded-full px-1.5 text-xs", children: /* @__PURE__ */ e("span", { children: p }) })
92
+ className: $("relative gap-2", u > 0 ? "inline-flex" : "hidden"),
93
+ children: /* @__PURE__ */ t(s, { to: U, children: [
94
+ /* @__PURE__ */ e(O, { className: "h-4 w-4", "aria-hidden": "true" }),
95
+ /* @__PURE__ */ e("span", { children: n("cart_button") }),
96
+ /* @__PURE__ */ e(D, { className: "absolute -right-2 -top-2 h-5 min-w-5 rounded-full px-1.5 text-xs", children: /* @__PURE__ */ e("span", { children: u }) })
104
97
  ] })
105
98
  }
106
99
  ),
107
- /* @__PURE__ */ e(g, { asChild: !0, size: "sm", className: "gap-2", children: /* @__PURE__ */ a(r, { to: b, children: [
108
- /* @__PURE__ */ e("span", { children: t("cta_book_now") }),
109
- /* @__PURE__ */ e(y, { className: "h-4 w-4", "aria-hidden": "true" })
100
+ /* @__PURE__ */ e(g, { asChild: !0, size: "sm", className: "gap-2", children: /* @__PURE__ */ t(s, { to: w, children: [
101
+ /* @__PURE__ */ e("span", { children: n("cta_book_now") }),
102
+ /* @__PURE__ */ e(Y, { className: "h-4 w-4", "aria-hidden": "true" })
110
103
  ] }) })
111
104
  ] })
112
105
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Layout/index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAItE,KAAK,WAAW,GAAG;IACjB,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;CAClD,CAAA;AAED,wBAAgB,MAAM,CAAC,EAAE,uBAAuB,EAAE,EAAE,WAAW,2CAoD9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Layout/index.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AAItE,KAAK,WAAW,GAAG;IACjB,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;CAClD,CAAA;AAED,wBAAgB,MAAM,CAAC,EAAE,uBAAuB,EAAE,EAAE,WAAW,2CA2D9D"}
@@ -1,47 +1,56 @@
1
- import { jsx as e, jsxs as c, Fragment as d } from "react/jsx-runtime";
1
+ import { jsx as o, jsxs as h, Fragment as d } from "react/jsx-runtime";
2
2
  import { useEffect as f } from "react";
3
- import { RootProvider as h } from "@rpcbase/client";
4
- import { useParams as u, useLocation as g, Outlet as a } from "@rpcbase/router";
3
+ import { RootProvider as u } from "@rpcbase/client";
4
+ import { useParams as g, useLocation as P, Outlet as m } from "@rpcbase/router";
5
5
  import { useTranslation as v } from "react-i18next";
6
- import { Footer as P } from "../Footer/index.js";
6
+ import { Footer as w } from "../Footer/index.js";
7
7
  import { Header as x } from "../Header/index.js";
8
- import { PlatformFooter as H } from "../PlatformFooter/index.js";
8
+ import { PlatformFooter as y } from "../PlatformFooter/index.js";
9
9
  import { PlaygroundDevFloatingButton as S } from "../PlaygroundDevFloatingButton/index.js";
10
10
  import { StorefrontPopupMessages as b } from "../StorefrontPopupMessages/index.js";
11
- import { WhatsAppFloatingButton as w } from "../WhatsAppFloatingButton/WhatsAppFloatingButton.js";
11
+ import { WhatsAppFloatingButton as D } from "../WhatsAppFloatingButton/WhatsAppFloatingButton.js";
12
12
  import "interactjs";
13
13
  import { getStorefrontPreset as F } from "../../data/config.js";
14
- import { StorefrontCartProvider as y } from "../../lib/cart.js";
15
- import { resolveStorefrontWhatsAppHref as E } from "../../lib/whatsapp.js";
14
+ import { StorefrontCartProvider as H } from "../../lib/cart.js";
15
+ import { resolveStorefrontWhatsAppContact as E } from "../../lib/whatsapp.js";
16
16
  import { Provider as k } from "../../ui/tooltip.js";
17
- function G({ storefrontConfiguration: o }) {
18
- const { storeSlug: i, referenceId: s } = u(), l = g(), { i18n: p } = v();
17
+ function J({ storefrontConfiguration: e }) {
18
+ const { storeSlug: i, referenceId: a } = g(), l = P(), { i18n: c } = v();
19
19
  f(() => {
20
20
  document.documentElement.setAttribute("data-hydrated", "true");
21
21
  }, []);
22
- const t = F(i), r = E({
22
+ const t = F(i), n = E({
23
23
  preset: t,
24
- storefrontConfiguration: o,
25
- language: p.language
26
- }), n = typeof s == "string" && s.trim().length > 0, m = n && new URLSearchParams(l.search).get("pdf") === "1";
27
- return /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(k, { children: /* @__PURE__ */ e(y, { storeSlug: i ?? "", children: /* @__PURE__ */ e("div", { className: `loczer-storefront flex flex-col bg-background text-foreground ${n && !m ? "h-dvh overflow-hidden" : "min-h-screen"}`, children: n ? /* @__PURE__ */ e("main", { className: `flex-1 ${m ? "bg-white" : "overflow-hidden"}`, children: /* @__PURE__ */ e(a, {}) }) : /* @__PURE__ */ c(d, { children: [
28
- /* @__PURE__ */ e(x, { preset: t, storefrontConfiguration: o, whatsappHref: r }),
29
- /* @__PURE__ */ e("main", { className: "flex-1", children: /* @__PURE__ */ e(a, {}) }),
30
- /* @__PURE__ */ e(
31
- P,
24
+ storefrontConfiguration: e,
25
+ language: c.language
26
+ }), r = n?.href, s = typeof a == "string" && a.trim().length > 0, p = s && new URLSearchParams(l.search).get("pdf") === "1";
27
+ return /* @__PURE__ */ o(u, { children: /* @__PURE__ */ o(k, { children: /* @__PURE__ */ o(H, { storeSlug: i ?? "", children: /* @__PURE__ */ o("div", { className: `loczer-storefront flex flex-col bg-background text-foreground ${s && !p ? "h-dvh overflow-hidden" : "min-h-screen"}`, children: s ? /* @__PURE__ */ o("main", { className: `flex-1 ${p ? "bg-white" : "overflow-hidden"}`, children: /* @__PURE__ */ o(m, {}) }) : /* @__PURE__ */ h(d, { children: [
28
+ /* @__PURE__ */ o(
29
+ x,
32
30
  {
33
31
  preset: t,
32
+ storefrontConfiguration: e,
34
33
  whatsappHref: r,
35
- openingHours: o?.bookingEngine.shop.openingHours,
36
- openingHoursOverrides: o?.bookingEngine.shop.openingHoursOverrides
34
+ whatsappPhoneDisplay: n?.phoneDisplay
37
35
  }
38
36
  ),
39
- /* @__PURE__ */ e(H, {}),
40
- r && o?.content?.showWhatsappFloatingButton !== !1 ? /* @__PURE__ */ e(w, { href: r }) : null,
41
- /* @__PURE__ */ e(S, {}),
42
- /* @__PURE__ */ e(b, { storefrontConfiguration: o })
37
+ /* @__PURE__ */ o("main", { className: "flex-1", children: /* @__PURE__ */ o(m, {}) }),
38
+ /* @__PURE__ */ o(
39
+ w,
40
+ {
41
+ preset: t,
42
+ whatsappHref: r,
43
+ whatsappPhoneDisplay: n?.phoneDisplay,
44
+ openingHours: e?.bookingEngine.shop.openingHours,
45
+ openingHoursOverrides: e?.bookingEngine.shop.openingHoursOverrides
46
+ }
47
+ ),
48
+ /* @__PURE__ */ o(y, {}),
49
+ r && e?.content?.showWhatsappFloatingButton !== !1 ? /* @__PURE__ */ o(D, { href: r }) : null,
50
+ /* @__PURE__ */ o(S, {}),
51
+ /* @__PURE__ */ o(b, { storefrontConfiguration: e })
43
52
  ] }) }) }) }) });
44
53
  }
45
54
  export {
46
- G as Layout
55
+ J as Layout
47
56
  };
@@ -1,6 +1,6 @@
1
1
  import { jsxs as n, jsx as e } from "react/jsx-runtime";
2
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";
3
+ import { ResponsiveDialog as x, ResponsiveDialogContent as g, ResponsiveDialogHeader as _, ResponsiveDialogTitle as N, ResponsiveDialogDescription as b, ResponsiveDialogFooter as y } from "../../chunks/ui/dist/ResponsiveDialog-DhFgsW_0.js";
4
4
  import { cn as v } from "@rpcbase/ui";
5
5
  import { CheckCircle2 as w, Info as d } from "lucide-react";
6
6
  import { useTranslation as T } from "react-i18next";
@@ -27,7 +27,7 @@ function O({
27
27
  return i >= 72 && i % 24 === 0 ? t("cancellation_policy_duration_days", { count: i / 24 }) : t("cancellation_policy_duration_hours", { count: i });
28
28
  };
29
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" }),
30
+ /* @__PURE__ */ e(w, { className: "mt-0.5 h-5 w-5 shrink-0 text-emerald-600", "aria-hidden": "true" }),
31
31
  /* @__PURE__ */ n("div", { className: "min-w-0 flex-1", children: [
32
32
  /* @__PURE__ */ n("div", { className: "flex min-w-0 items-start gap-1.5", children: [
33
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) }) }) }),
@@ -42,7 +42,7 @@ function O({
42
42
  }
43
43
  )
44
44
  ] }),
45
- /* @__PURE__ */ e("p", { className: "text-xs text-slate-600", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_teaser_description") }) })
45
+ /* @__PURE__ */ e("p", { className: "text-xs text-slate-600", children: /* @__PURE__ */ e("span", { children: t("cancellation_policy_teaser_description", { duration: c(o.upToHours) }) }) })
46
46
  ] }),
47
47
  /* @__PURE__ */ e(x, { open: u, onOpenChange: r, children: /* @__PURE__ */ e(
48
48
  g,
@@ -1,6 +1,6 @@
1
1
  import { jsx as t, jsxs as m } from "react/jsx-runtime";
2
2
  import { useState as S, useEffect as $ } from "react";
3
- import { ResponsiveDialog as R, ResponsiveDialogContent as E, ResponsiveDialogHeader as D, ResponsiveDialogTitle as I, ResponsiveDialogDescription as P, ResponsiveDialogFooter as O } from "../../chunks/ui/dist/ResponsiveDialog-D8YzB_3J.js";
3
+ import { ResponsiveDialog as R, ResponsiveDialogContent as E, ResponsiveDialogHeader as D, ResponsiveDialogTitle as I, ResponsiveDialogDescription as P, ResponsiveDialogFooter as O } from "../../chunks/ui/dist/ResponsiveDialog-DhFgsW_0.js";
4
4
  import { useParams as j, useLocation as z } from "@rpcbase/router";
5
5
  import { cn as x } from "@rpcbase/ui";
6
6
  import { X as H, Info as L } from "lucide-react";
package/dist/i18n/en.d.ts CHANGED
@@ -4,7 +4,6 @@ export declare const storefront: {
4
4
  slug_label: string;
5
5
  info: string;
6
6
  top_bar_message: string;
7
- top_bar_whatsapp: string;
8
7
  nav_categories: string;
9
8
  nav_featured: string;
10
9
  nav_products: string;
@@ -21,8 +20,8 @@ export declare const storefront: {
21
20
  feature_secure_payment_description: string;
22
21
  feature_delivery_title: string;
23
22
  feature_delivery_description: string;
24
- feature_ready_in_minutes_title: string;
25
- feature_ready_in_minutes_description: string;
23
+ feature_guarantee_insurance_title: string;
24
+ feature_guarantee_insurance_description: string;
26
25
  cancellation_policy_teaser: string;
27
26
  cancellation_policy_teaser_description: string;
28
27
  cancellation_policy_info_aria_label: string;
@@ -176,7 +175,6 @@ export declare const storefront: {
176
175
  checkout_payment_due_now_helper_deposit_refundable_until: string;
177
176
  checkout_payment_due_now_helper_deposit: string;
178
177
  checkout_payment_due_now_helper_none: string;
179
- checkout_payment_cancellation_policy_helper: string;
180
178
  checkout_payment_provider: string;
181
179
  checkout_payment_loading: string;
182
180
  checkout_payment_error: string;
@@ -190,7 +188,6 @@ export declare const storefront: {
190
188
  checkout_payment_return_loading: string;
191
189
  checkout_payment_return_missing_session: string;
192
190
  checkout_payment_return_status_error: string;
193
- checkout_payment_return_refresh_status: string;
194
191
  checkout_payment_return_back_to_checkout: string;
195
192
  checkout_payment_return_retry_checkout: string;
196
193
  checkout_payment_return_go_to_success: string;
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwZtB,CAAA"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqZtB,CAAA"}
package/dist/i18n/en.js CHANGED
@@ -4,7 +4,6 @@ const e = {
4
4
  slug_label: "Store path",
5
5
  info: "Each store URL currently renders the same storefront experience.",
6
6
  top_bar_message: "Questions? Contact us to book your bikes in advance.",
7
- top_bar_whatsapp: "WhatsApp",
8
7
  nav_categories: "Categories",
9
8
  nav_featured: "Featured",
10
9
  nav_products: "Bikes",
@@ -18,13 +17,13 @@ const e = {
18
17
  hero_title: "Book your bike in minutes",
19
18
  hero_description: "Pick your dates, then choose the right bike for your trip.",
20
19
  feature_secure_payment_title: "Secure payment",
21
- feature_secure_payment_description: "Pay online with a secure checkout.",
20
+ feature_secure_payment_description: "Pay online with a secure checkout",
22
21
  feature_delivery_title: "Delivery available",
23
22
  feature_delivery_description: "Ask about delivery options for your address.",
24
- feature_ready_in_minutes_title: "Ready in a few minutes",
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.",
23
+ feature_guarantee_insurance_title: "Guarantee and Insurance",
24
+ feature_guarantee_insurance_description: "Rental covered according to the shop's terms",
25
+ cancellation_policy_teaser: "Refund* until {{duration}} in advance",
26
+ cancellation_policy_teaser_description: "See cancellation conditions before booking",
28
27
  cancellation_policy_info_aria_label: "Show cancellation policy",
29
28
  cancellation_policy_modal_title: "Cancellation policy",
30
29
  cancellation_policy_modal_description: "Refunds depend on how far in advance you cancel.",
@@ -34,7 +33,7 @@ const e = {
34
33
  cancellation_policy_duration_hours_other: "{{count}} hours",
35
34
  cancellation_policy_duration_days_one: "{{count}} day",
36
35
  cancellation_policy_duration_days_other: "{{count}} days",
37
- booking_title: "Book now in 2 minutes!",
36
+ booking_title: "Choose your rental dates",
38
37
  booking_subtitle: "Choose dates and times, then browse available bikes.",
39
38
  booking_pickup_label: "Store pickup",
40
39
  booking_delivery_label: "Delivery",
@@ -176,7 +175,6 @@ const e = {
176
175
  checkout_payment_due_now_helper_deposit_refundable_until: "{{percent}} deposit due now. Refundable until {{date}}.",
177
176
  checkout_payment_due_now_helper_deposit: "{{percent}} deposit due now.",
178
177
  checkout_payment_due_now_helper_none: "No payment required now.",
179
- checkout_payment_cancellation_policy_helper: "Cancellation refund estimate: {{percent}} up to {{amount}}.",
180
178
  checkout_payment_provider: "Provider",
181
179
  checkout_payment_loading: "Checking payment options…",
182
180
  checkout_payment_error: "Unable to check payment options.",
@@ -190,7 +188,6 @@ const e = {
190
188
  checkout_payment_return_loading: "Checking payment status…",
191
189
  checkout_payment_return_missing_session: "Checkout payment session is missing. Please restart checkout.",
192
190
  checkout_payment_return_status_error: "Unable to verify checkout payment status.",
193
- checkout_payment_return_refresh_status: "Refresh status",
194
191
  checkout_payment_return_back_to_checkout: "Back to checkout",
195
192
  checkout_payment_return_retry_checkout: "Try checkout again",
196
193
  checkout_payment_return_go_to_success: "Continue",
@@ -291,7 +288,7 @@ const e = {
291
288
  footer_brand_title: "Need help choosing?",
292
289
  footer_brand_description: "Contact us and we’ll help you pick the right bikes and accessories.",
293
290
  footer_contact_title: "Contact",
294
- footer_whatsapp_link: "Chat on WhatsApp",
291
+ footer_whatsapp_link: "WhatsApp",
295
292
  footer_hours_title: "Opening hours",
296
293
  footer_business_hours_closed: "Closed",
297
294
  footer_business_hours_weekday_range: "{{start}} - {{end}}",
package/dist/i18n/fr.d.ts CHANGED
@@ -4,7 +4,6 @@ export declare const storefront: {
4
4
  slug_label: string;
5
5
  info: string;
6
6
  top_bar_message: string;
7
- top_bar_whatsapp: string;
8
7
  nav_categories: string;
9
8
  nav_featured: string;
10
9
  nav_products: string;
@@ -21,8 +20,8 @@ export declare const storefront: {
21
20
  feature_secure_payment_description: string;
22
21
  feature_delivery_title: string;
23
22
  feature_delivery_description: string;
24
- feature_ready_in_minutes_title: string;
25
- feature_ready_in_minutes_description: string;
23
+ feature_guarantee_insurance_title: string;
24
+ feature_guarantee_insurance_description: string;
26
25
  cancellation_policy_teaser: string;
27
26
  cancellation_policy_teaser_description: string;
28
27
  cancellation_policy_info_aria_label: string;
@@ -176,7 +175,6 @@ export declare const storefront: {
176
175
  checkout_payment_due_now_helper_deposit_refundable_until: string;
177
176
  checkout_payment_due_now_helper_deposit: string;
178
177
  checkout_payment_due_now_helper_none: string;
179
- checkout_payment_cancellation_policy_helper: string;
180
178
  checkout_payment_provider: string;
181
179
  checkout_payment_loading: string;
182
180
  checkout_payment_error: string;
@@ -190,7 +188,6 @@ export declare const storefront: {
190
188
  checkout_payment_return_loading: string;
191
189
  checkout_payment_return_missing_session: string;
192
190
  checkout_payment_return_status_error: string;
193
- checkout_payment_return_refresh_status: string;
194
191
  checkout_payment_return_back_to_checkout: string;
195
192
  checkout_payment_return_retry_checkout: string;
196
193
  checkout_payment_return_go_to_success: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwZtB,CAAA"}
1
+ {"version":3,"file":"fr.d.ts","sourceRoot":"","sources":["../../src/i18n/fr.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqZtB,CAAA"}
package/dist/i18n/fr.js CHANGED
@@ -3,8 +3,7 @@ const e = {
3
3
  subtitle: "Pages vitrines partagées pour chaque URL de magasin.",
4
4
  slug_label: "Chemin du magasin",
5
5
  info: "Chaque URL de magasin affiche pour l'instant la même expérience vitrine.",
6
- top_bar_message: "Une question ? Contactez-nous pour réserver vos vélos à l’avance.",
7
- top_bar_whatsapp: "WhatsApp",
6
+ top_bar_message: "Contactez-nous pour réserver vos vélos à l’avance.",
8
7
  nav_categories: "Catégories",
9
8
  nav_featured: "Sélection",
10
9
  nav_products: "Vélos",
@@ -18,13 +17,13 @@ const e = {
18
17
  hero_title: "Réservez votre vélo en quelques minutes",
19
18
  hero_description: "Choisissez vos dates, puis sélectionnez le vélo adapté à votre sortie.",
20
19
  feature_secure_payment_title: "Paiement sécurisé",
21
- feature_secure_payment_description: "Payez en ligne via un paiement sécurisé.",
20
+ feature_secure_payment_description: "Payez en ligne via un paiement sécurisé",
22
21
  feature_delivery_title: "Livraison disponible",
23
22
  feature_delivery_description: "Demandez les options de livraison à votre adresse.",
24
- feature_ready_in_minutes_title: "En quelques minutes",
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.",
23
+ feature_guarantee_insurance_title: "Garantie et Assurance",
24
+ feature_guarantee_insurance_description: "Vous pouvez souscrire à une assurance pour protéger le matériel loué",
25
+ cancellation_policy_teaser: "Annulation et remboursement* jusqu'à {{duration}} à l'avance",
26
+ cancellation_policy_teaser_description: "Vous pouvez annuler ou modifier votre réservation jusqu'à {{duration}} avant son début",
28
27
  cancellation_policy_info_aria_label: "Afficher les conditions d'annulation",
29
28
  cancellation_policy_modal_title: "Conditions d'annulation",
30
29
  cancellation_policy_modal_description: "Le remboursement dépend du délai entre l'annulation et le début de la réservation.",
@@ -34,7 +33,7 @@ const e = {
34
33
  cancellation_policy_duration_hours_other: "{{count}} heures",
35
34
  cancellation_policy_duration_days_one: "{{count}} jour",
36
35
  cancellation_policy_duration_days_other: "{{count}} jours",
37
- booking_title: "Réservez en 2 minutes !",
36
+ booking_title: "Choisissez vos dates de location",
38
37
  booking_subtitle: "Choisissez les dates et horaires, puis parcourez les vélos disponibles.",
39
38
  booking_pickup_label: "Retrait en boutique",
40
39
  booking_delivery_label: "Livraison",
@@ -176,7 +175,6 @@ const e = {
176
175
  checkout_payment_due_now_helper_deposit_refundable_until: "Acompte de {{percent}} à payer maintenant. Remboursable jusqu’au {{date}}.",
177
176
  checkout_payment_due_now_helper_deposit: "Acompte de {{percent}} à payer maintenant.",
178
177
  checkout_payment_due_now_helper_none: "Aucun paiement n’est requis maintenant.",
179
- checkout_payment_cancellation_policy_helper: "Estimation d'annulation : {{percent}} jusqu'à {{amount}}.",
180
178
  checkout_payment_provider: "Prestataire",
181
179
  checkout_payment_loading: "Vérification des options de paiement…",
182
180
  checkout_payment_error: "Impossible de vérifier les options de paiement.",
@@ -190,7 +188,6 @@ const e = {
190
188
  checkout_payment_return_loading: "Vérification du statut du paiement…",
191
189
  checkout_payment_return_missing_session: "La session de paiement checkout est manquante. Veuillez recommencer le checkout.",
192
190
  checkout_payment_return_status_error: "Impossible de vérifier le statut du paiement checkout.",
193
- checkout_payment_return_refresh_status: "Actualiser le statut",
194
191
  checkout_payment_return_back_to_checkout: "Retour au checkout",
195
192
  checkout_payment_return_retry_checkout: "Réessayer le checkout",
196
193
  checkout_payment_return_go_to_success: "Continuer",
@@ -291,7 +288,7 @@ const e = {
291
288
  footer_brand_title: "Besoin de conseils ?",
292
289
  footer_brand_description: "Contactez-nous, on vous aide à choisir les bons vélos et accessoires.",
293
290
  footer_contact_title: "Contact",
294
- footer_whatsapp_link: "Discuter sur WhatsApp",
291
+ footer_whatsapp_link: "WhatsApp",
295
292
  footer_hours_title: "Horaires d’ouverture",
296
293
  footer_business_hours_closed: "Fermé",
297
294
  footer_business_hours_weekday_range: "{{start}} - {{end}}",