@planetaexo/design-system 0.2.15 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1069,21 +1069,33 @@ function CountrySearchField({
1069
1069
  ] });
1070
1070
  }
1071
1071
  function AdventureCard({ adventure }) {
1072
- var _a, _b, _c;
1073
- const [checked, setChecked] = React18__namespace.useState(
1074
- new Set((_b = (_a = adventure.optionals) == null ? void 0 : _a.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _b : [])
1072
+ var _a, _b, _c, _d, _e;
1073
+ const isControlled = (_b = (_a = adventure.optionals) == null ? void 0 : _a.some((o) => o.onCheckedChange !== void 0)) != null ? _b : false;
1074
+ const [checkedInternal, setCheckedInternal] = React18__namespace.useState(
1075
+ new Set((_d = (_c = adventure.optionals) == null ? void 0 : _c.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _d : [])
1075
1076
  );
1076
- const toggleOptional = (id) => setChecked((prev) => {
1077
- const next = new Set(prev);
1078
- next.has(id) ? next.delete(id) : next.add(id);
1079
- return next;
1080
- });
1077
+ const isChecked = (opt) => {
1078
+ var _a2;
1079
+ return isControlled ? (_a2 = opt.checked) != null ? _a2 : false : checkedInternal.has(opt.id);
1080
+ };
1081
+ const toggleOptional = (opt) => {
1082
+ var _a2;
1083
+ if (isControlled) {
1084
+ (_a2 = opt.onCheckedChange) == null ? void 0 : _a2.call(opt, opt.id, !opt.checked);
1085
+ } else {
1086
+ setCheckedInternal((prev) => {
1087
+ const next = new Set(prev);
1088
+ next.has(opt.id) ? next.delete(opt.id) : next.add(opt.id);
1089
+ return next;
1090
+ });
1091
+ }
1092
+ };
1081
1093
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
1082
1094
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/7] overflow-hidden bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(
1083
1095
  "img",
1084
1096
  {
1085
1097
  src: adventure.image,
1086
- alt: (_c = adventure.imageAlt) != null ? _c : adventure.title,
1098
+ alt: (_e = adventure.imageAlt) != null ? _e : adventure.title,
1087
1099
  className: "w-full h-full object-cover"
1088
1100
  }
1089
1101
  ) }),
@@ -1125,8 +1137,8 @@ function AdventureCard({ adventure }) {
1125
1137
  "input",
1126
1138
  {
1127
1139
  type: "checkbox",
1128
- checked: checked.has(opt.id),
1129
- onChange: () => toggleOptional(opt.id),
1140
+ checked: isChecked(opt),
1141
+ onChange: () => toggleOptional(opt),
1130
1142
  className: "h-4 w-4 shrink-0 rounded border-border accent-primary cursor-pointer"
1131
1143
  }
1132
1144
  ),
@@ -2655,6 +2667,42 @@ function BookingDetails({
2655
2667
  }
2656
2668
  );
2657
2669
  }
2670
+ var DEFAULT_LABELS = {
2671
+ ctaButton: "View booking details",
2672
+ logoAlt: "PlanetaEXO",
2673
+ greeting: (recipientName) => `Hi ${recipientName},`,
2674
+ confirmationMessage: "Great news \u2014 your booking has been confirmed! Everything is set and we\u2019re getting ready for your adventure.",
2675
+ detailsIntro: "Below you\u2019ll find the full details of your reservation, including the adventures, travellers, and payment summary.",
2676
+ nextStepsHeading: "\u{1F4CB} Next Steps",
2677
+ nextSteps: [
2678
+ "Each traveller will receive a separate email with a link to complete their individual registration.",
2679
+ "Make sure everyone completes their registration so we can organise everything properly.",
2680
+ "You will receive a final confirmation once all travellers are registered and ready to go."
2681
+ ],
2682
+ bookingSummaryHeading: "\u{1F4DD} Booking Summary",
2683
+ bookingNumberLabel: "Booking Number",
2684
+ adventuresLabel: "Adventures",
2685
+ totalTravellersLabel: "Total Travellers",
2686
+ agentLabel: "Agent",
2687
+ adultsUnit: "adult(s)",
2688
+ childrenUnit: "child(ren)",
2689
+ travellersLabel: "Travellers",
2690
+ childBadge: "child",
2691
+ itineraryLabel: "Itinerary",
2692
+ includedLabel: "O que est\xE1 incluso",
2693
+ notIncludedLabel: "O que n\xE3o est\xE1 incluso",
2694
+ pricingLabel: "Pricing",
2695
+ subtotalLabel: "Subtotal",
2696
+ totalLabel: "Total",
2697
+ paymentSummaryHeading: "\u{1F4B0} Payment Summary",
2698
+ paymentDetailsHeading: "Payment Details",
2699
+ depositLabel: (percent) => `Deposit (${percent}%)`,
2700
+ remainingBalanceLabel: "Remaining balance",
2701
+ balanceDueLabel: "Balance due",
2702
+ paidInFullLabel: "\u2705 Paid in full",
2703
+ footerMessage: "All travellers have been registered for this booking. Each person will receive a separate email with their individual details and any pre-departure information.",
2704
+ footerContact: (agent) => `If you have any questions, just reply to this email or contact ${agent} \u2014 happy to help.`
2705
+ };
2658
2706
  var DEFAULT_LOGO = "/logo-planetaexo.png";
2659
2707
  function BookingConfirmation({
2660
2708
  recipientName,
@@ -2667,8 +2715,10 @@ function BookingConfirmation({
2667
2715
  depositInfo,
2668
2716
  agent,
2669
2717
  viewBookingUrl,
2718
+ labels,
2670
2719
  className
2671
2720
  }) {
2721
+ const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS), labels);
2672
2722
  const allTravellers = adventures.flatMap((a) => {
2673
2723
  var _a;
2674
2724
  return (_a = a.travellers) != null ? _a : [];
@@ -2678,14 +2728,14 @@ function BookingConfirmation({
2678
2728
  {
2679
2729
  href: viewBookingUrl,
2680
2730
  className: "inline-flex items-center justify-center rounded-lg bg-primary px-8 py-3.5 text-sm font-bold text-primary-foreground font-heading hover:bg-primary/90 transition-colors no-underline",
2681
- children: "View booking details"
2731
+ children: l.ctaButton
2682
2732
  }
2683
2733
  ) : /* @__PURE__ */ jsxRuntime.jsx(
2684
2734
  "span",
2685
2735
  {
2686
2736
  className: "inline-flex items-center justify-center rounded-lg bg-primary px-8 py-3.5 text-sm font-bold text-primary-foreground font-heading",
2687
2737
  role: "presentation",
2688
- children: "View booking details"
2738
+ children: l.ctaButton
2689
2739
  }
2690
2740
  );
2691
2741
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2700,50 +2750,42 @@ function BookingConfirmation({
2700
2750
  "img",
2701
2751
  {
2702
2752
  src: logoUrl,
2703
- alt: "PlanetaEXO",
2753
+ alt: l.logoAlt,
2704
2754
  className: "h-[70px] w-auto object-contain"
2705
2755
  }
2706
2756
  ) }),
2707
2757
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8", children: [
2708
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mb-5 text-base", children: [
2709
- "Hi ",
2710
- recipientName,
2711
- ","
2712
- ] }),
2713
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 text-base", children: "Great news \u2014 your booking has been confirmed! Everything is set and we're getting ready for your adventure." }),
2714
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-8 text-base", children: "Below you'll find the full details of your reservation, including the adventures, travellers, and payment summary." }),
2758
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 text-base", children: l.greeting(recipientName) }),
2759
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 text-base", children: l.confirmationMessage }),
2760
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-8 text-base", children: l.detailsIntro }),
2715
2761
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-10", children: ViewBookingCta })
2716
2762
  ] }),
2717
2763
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2718
2764
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8", children: [
2719
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4CB} Next Steps" }),
2720
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl border border-border p-5 flex flex-col gap-4", children: [
2721
- "Each traveller will receive a separate email with a link to complete their individual registration.",
2722
- "Make sure everyone completes their registration so we can organise everything properly.",
2723
- "You will receive a final confirmation once all travellers are registered and ready to go."
2724
- ].map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3.5", children: [
2765
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: l.nextStepsHeading }),
2766
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl border border-border p-5 flex flex-col gap-4", children: l.nextSteps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3.5", children: [
2725
2767
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary/10 text-xs font-bold text-primary font-heading mt-0.5", children: i + 1 }),
2726
2768
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/80 leading-relaxed", children: step })
2727
2769
  ] }, i)) })
2728
2770
  ] }),
2729
2771
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2730
2772
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8", children: [
2731
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4DD} Booking Summary" }),
2773
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: l.bookingSummaryHeading }),
2732
2774
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl border border-border overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
2733
2775
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2734
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Booking Number" }),
2776
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.bookingNumberLabel }),
2735
2777
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-semibold text-primary", children: bookingReference })
2736
2778
  ] }),
2737
2779
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2738
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Adventures" }),
2780
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.adventuresLabel }),
2739
2781
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: adventures.length })
2740
2782
  ] }),
2741
2783
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2742
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Total Travellers" }),
2784
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.totalTravellersLabel }),
2743
2785
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: allTravellers.length })
2744
2786
  ] }),
2745
2787
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2746
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Agent" }),
2788
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.agentLabel }),
2747
2789
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: agent })
2748
2790
  ] })
2749
2791
  ] }) }) })
@@ -2793,8 +2835,8 @@ function BookingConfirmation({
2793
2835
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
2794
2836
  ] }),
2795
2837
  [
2796
- adventure.slots.adults ? `${adventure.slots.adults} adult(s)` : null,
2797
- adventure.slots.children ? `${adventure.slots.children} child(ren)` : null
2838
+ adventure.slots.adults ? `${adventure.slots.adults} ${l.adultsUnit}` : null,
2839
+ adventure.slots.children ? `${adventure.slots.children} ${l.childrenUnit}` : null
2798
2840
  ].filter(Boolean).join(" \xB7 ")
2799
2841
  ] }),
2800
2842
  adventure.partner && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
@@ -2807,7 +2849,7 @@ function BookingConfirmation({
2807
2849
  adventure.travellers && adventure.travellers.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2808
2850
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border my-1" }),
2809
2851
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2810
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Travellers" }),
2852
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: l.travellersLabel }),
2811
2853
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-1.5", children: adventure.travellers.map((t) => /* @__PURE__ */ jsxRuntime.jsxs(
2812
2854
  "div",
2813
2855
  {
@@ -2818,7 +2860,7 @@ function BookingConfirmation({
2818
2860
  " ",
2819
2861
  t.lastName
2820
2862
  ] }),
2821
- t.isChild && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-semibold text-muted-foreground bg-muted rounded-full px-2 py-0.5 font-heading uppercase tracking-wide", children: "child" })
2863
+ t.isChild && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-semibold text-muted-foreground bg-muted rounded-full px-2 py-0.5 font-heading uppercase tracking-wide", children: l.childBadge })
2822
2864
  ]
2823
2865
  },
2824
2866
  t.id
@@ -2828,12 +2870,12 @@ function BookingConfirmation({
2828
2870
  adventure.description && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2829
2871
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border my-1" }),
2830
2872
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2831
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Itinerary" }),
2873
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: l.itineraryLabel }),
2832
2874
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description })
2833
2875
  ] })
2834
2876
  ] }),
2835
2877
  adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2836
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que est\xE1 incluso" }),
2878
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: l.includedLabel }),
2837
2879
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2838
2880
  "li",
2839
2881
  {
@@ -2847,7 +2889,7 @@ function BookingConfirmation({
2847
2889
  )) })
2848
2890
  ] }),
2849
2891
  adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2850
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que n\xE3o est\xE1 incluso" }),
2892
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: l.notIncludedLabel }),
2851
2893
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2852
2894
  "li",
2853
2895
  {
@@ -2866,7 +2908,7 @@ function BookingConfirmation({
2866
2908
  adventure.lineItems && adventure.lineItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2867
2909
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border my-1" }),
2868
2910
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2869
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Pricing" }),
2911
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: l.pricingLabel }),
2870
2912
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
2871
2913
  adventure.lineItems.map((item, j) => /* @__PURE__ */ jsxRuntime.jsxs(
2872
2914
  "div",
@@ -2892,7 +2934,7 @@ function BookingConfirmation({
2892
2934
  j
2893
2935
  )),
2894
2936
  adventure.subtotal && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between pt-2 mt-1 border-t border-border", children: [
2895
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-foreground font-heading", children: "Subtotal" }),
2937
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-foreground font-heading", children: l.subtotalLabel }),
2896
2938
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-foreground font-heading whitespace-nowrap", children: adventure.subtotal })
2897
2939
  ] })
2898
2940
  ] })
@@ -2906,7 +2948,7 @@ function BookingConfirmation({
2906
2948
  }) }),
2907
2949
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2908
2950
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8", children: [
2909
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4B0} Payment Summary" }),
2951
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: l.paymentSummaryHeading }),
2910
2952
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl border border-border overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
2911
2953
  summaryLineItems && summaryLineItems.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2912
2954
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: item.label }),
@@ -2925,27 +2967,23 @@ function BookingConfirmation({
2925
2967
  )
2926
2968
  ] }, i)),
2927
2969
  subtotal && /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2928
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground font-ui", children: "Subtotal" }),
2970
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground font-ui", children: l.subtotalLabel }),
2929
2971
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: subtotal })
2930
2972
  ] }),
2931
2973
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "bg-muted/30", children: [
2932
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-4 px-4 font-bold text-foreground font-heading text-base", children: "Total" }),
2974
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-4 px-4 font-bold text-foreground font-heading text-base", children: l.totalLabel }),
2933
2975
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-4 px-4 text-right font-bold text-primary font-heading text-xl whitespace-nowrap", children: total })
2934
2976
  ] })
2935
2977
  ] }) }) }),
2936
2978
  depositInfo && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border mt-4 overflow-hidden", children: [
2937
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3 bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Payment Details" }) }),
2979
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-3 bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: l.paymentDetailsHeading }) }),
2938
2980
  /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
2939
2981
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2940
- /* @__PURE__ */ jsxRuntime.jsxs("td", { className: "py-2.5 px-4 text-muted-foreground", children: [
2941
- "Deposit (",
2942
- depositInfo.depositPercent,
2943
- "%)"
2944
- ] }),
2982
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: l.depositLabel(depositInfo.depositPercent) }),
2945
2983
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.depositAmount })
2946
2984
  ] }),
2947
2985
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2948
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Remaining balance" }),
2986
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: l.remainingBalanceLabel }),
2949
2987
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.remainingAmount })
2950
2988
  ] }),
2951
2989
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2955,7 +2993,7 @@ function BookingConfirmation({
2955
2993
  depositInfo.isPaidInFull && "border-b border-border"
2956
2994
  ),
2957
2995
  children: [
2958
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Balance due" }),
2996
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: l.balanceDueLabel }),
2959
2997
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.balanceDueDate })
2960
2998
  ]
2961
2999
  }
@@ -2965,7 +3003,7 @@ function BookingConfirmation({
2965
3003
  {
2966
3004
  colSpan: 2,
2967
3005
  className: "py-3 px-4 text-center font-semibold text-green-600 bg-green-50",
2968
- children: "\u2705 Paid in full"
3006
+ children: l.paidInFullLabel
2969
3007
  }
2970
3008
  ) })
2971
3009
  ] }) })
@@ -2973,18 +3011,29 @@ function BookingConfirmation({
2973
3011
  ] }),
2974
3012
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2975
3013
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8 pb-10", children: [
2976
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 text-base", children: "All travellers have been registered for this booking. Each person will receive a separate email with their individual details and any pre-departure information." }),
2977
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-base", children: [
2978
- "If you have any questions, just reply to this email or contact",
2979
- " ",
2980
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: agent }),
2981
- " \u2014 happy to help."
2982
- ] })
3014
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 text-base", children: l.footerMessage }),
3015
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base", children: l.footerContact(agent) })
2983
3016
  ] })
2984
3017
  ]
2985
3018
  }
2986
3019
  );
2987
3020
  }
3021
+ var DEFAULT_LABELS2 = {
3022
+ ctaButton: "Add travellers to your booking",
3023
+ logoAlt: "PlanetaEXO",
3024
+ greeting: (recipientName) => `Hi ${recipientName},`,
3025
+ thankYouMessage: "Thank you for booking your adventure with PlanetaEXO \u2014 we\u2019re really looking forward to your adventure.",
3026
+ addTravellersInstruction: "To move forward, the first step is to add all travellers included in your booking. Once you do this, each person \u2014 including you \u2014 will receive an email with a link to complete their individual registration.",
3027
+ summaryHeading: "\u{1F4DD} Here\u2019s a quick summary of your booking:",
3028
+ bookingNumberLabel: "Booking Number:",
3029
+ activityLabel: "Activity:",
3030
+ adventureLabel: "Adventure:",
3031
+ startingDateLabel: "Starting Date:",
3032
+ numberOfPeopleLabel: "Number of People:",
3033
+ hostLabel: "Host:",
3034
+ postCtaMessage: "After adding everyone, you will also receive your own registration email, just like the other travellers. Please make sure everyone completes this step so we can organise everything properly.",
3035
+ closingMessage: "If you have any questions, just reply to this email \u2014 happy to help."
3036
+ };
2988
3037
  var DEFAULT_LOGO2 = "/logo-planetaexo.png";
2989
3038
  function BookingConfirmationEmail({
2990
3039
  recipientName,
@@ -2996,21 +3045,23 @@ function BookingConfirmationEmail({
2996
3045
  startingDate,
2997
3046
  numberOfPeople,
2998
3047
  host,
3048
+ labels,
2999
3049
  className
3000
3050
  }) {
3051
+ const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS2), labels);
3001
3052
  const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsxRuntime.jsx(
3002
3053
  "a",
3003
3054
  {
3004
3055
  href: addTravellersUrl,
3005
3056
  className: "inline-flex items-center justify-center rounded-lg bg-primary px-6 py-3 text-sm font-bold text-primary-foreground font-heading hover:bg-primary-800 transition-colors no-underline",
3006
- children: "Add travellers to your booking"
3057
+ children: l.ctaButton
3007
3058
  }
3008
3059
  ) : /* @__PURE__ */ jsxRuntime.jsx(
3009
3060
  "span",
3010
3061
  {
3011
3062
  className: "inline-flex items-center justify-center rounded-lg bg-primary px-6 py-3 text-sm font-bold text-primary-foreground font-heading",
3012
3063
  role: "presentation",
3013
- children: "Add travellers to your booking"
3064
+ children: l.ctaButton
3014
3065
  }
3015
3066
  );
3016
3067
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3025,49 +3076,45 @@ function BookingConfirmationEmail({
3025
3076
  "img",
3026
3077
  {
3027
3078
  src: logoUrl,
3028
- alt: "PlanetaEXO",
3079
+ alt: l.logoAlt,
3029
3080
  className: "h-[70px] w-auto object-contain"
3030
3081
  }
3031
3082
  ) }),
3032
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mb-4", children: [
3033
- "Hi ",
3034
- recipientName,
3035
- ","
3036
- ] }),
3037
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4", children: "Thank you for booking your adventure with PlanetaEXO \u2014 we're really looking forward to your adventure." }),
3038
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4", children: "To move forward, the first step is to add all travellers included in your booking. Once you do this, each person \u2014 including you \u2014 will receive an email with a link to complete their individual registration." }),
3083
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4", children: l.greeting(recipientName) }),
3084
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4", children: l.thankYouMessage }),
3085
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4", children: l.addTravellersInstruction }),
3039
3086
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-8", children: AddTravellersCta }),
3040
3087
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mb-8" }),
3041
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 font-heading font-bold text-foreground", children: "\u{1F4DD} Here's a quick summary of your booking:" }),
3088
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 font-heading font-bold text-foreground", children: l.summaryHeading }),
3042
3089
  /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full text-sm mb-8", children: /* @__PURE__ */ jsxRuntime.jsxs("tbody", { className: "divide-y divide-border", children: [
3043
3090
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
3044
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Booking Number:" }),
3091
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.bookingNumberLabel }),
3045
3092
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: bookingNumber })
3046
3093
  ] }),
3047
3094
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
3048
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Activity:" }),
3095
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.activityLabel }),
3049
3096
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: activity })
3050
3097
  ] }),
3051
3098
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
3052
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Adventure:" }),
3099
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.adventureLabel }),
3053
3100
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: adventure })
3054
3101
  ] }),
3055
3102
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
3056
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Starting Date:" }),
3103
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.startingDateLabel }),
3057
3104
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: startingDate })
3058
3105
  ] }),
3059
3106
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
3060
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Number of People:" }),
3107
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.numberOfPeopleLabel }),
3061
3108
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: numberOfPeople })
3062
3109
  ] }),
3063
3110
  /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
3064
- /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Host:" }),
3111
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.hostLabel }),
3065
3112
  /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: host })
3066
3113
  ] })
3067
3114
  ] }) }),
3068
3115
  /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mb-8" }),
3069
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4", children: "After adding everyone, you will also receive your own registration email, just like the other travellers. Please make sure everyone completes this step so we can organise everything properly." }),
3070
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: "If you have any questions, just reply to this email \u2014 happy to help." })
3116
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4", children: l.postCtaMessage }),
3117
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: l.closingMessage })
3071
3118
  ]
3072
3119
  }
3073
3120
  );