@planetaexo/design-system 0.2.14 → 0.3.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.
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as React18 from 'react';
2
+ import { useState, useRef, useCallback, useEffect } from 'react';
2
3
  import { format } from 'date-fns';
3
- import { ChevronDownIcon, SearchIcon, MapIcon, MessageCircleIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CalendarIcon, ChevronLeftIcon, ChevronRightIcon, ClockIcon, ChevronUpIcon, UserIcon, MenuIcon, XIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, InfoIcon, CheckIcon, CheckCircle2Icon, ArrowLeftIcon, MailIcon, PhoneIcon, CompassIcon, UserPlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, CarIcon, ZoomInIcon, StarIcon, LayoutGridIcon } from 'lucide-react';
4
+ import { ChevronDownIcon, SearchIcon, MapIcon, MessageCircleIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CalendarIcon, ChevronLeftIcon, ChevronRightIcon, ClockIcon, ChevronUpIcon, UserIcon, MenuIcon, XIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, InfoIcon, Loader2Icon, SendIcon, CheckCircleIcon, CheckIcon, CheckCircle2Icon, ArrowLeftIcon, MailIcon, PhoneIcon, CompassIcon, UserPlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, CarIcon, ZoomInIcon, StarIcon, LayoutGridIcon } from 'lucide-react';
4
5
  import { clsx } from 'clsx';
5
6
  import { twMerge } from 'tailwind-merge';
6
7
  import { Separator as Separator$1 } from '@base-ui/react/separator';
@@ -14,6 +15,7 @@ import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
14
15
  import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
15
16
  import { mergeProps } from '@base-ui/react/merge-props';
16
17
  import { useRender } from '@base-ui/react/use-render';
18
+ import { Input as Input$1 } from '@base-ui/react/input';
17
19
 
18
20
  var __defProp = Object.defineProperty;
19
21
  var __defProps = Object.defineProperties;
@@ -2632,6 +2634,42 @@ function BookingDetails({
2632
2634
  }
2633
2635
  );
2634
2636
  }
2637
+ var DEFAULT_LABELS = {
2638
+ ctaButton: "View booking details",
2639
+ logoAlt: "PlanetaEXO",
2640
+ greeting: (recipientName) => `Hi ${recipientName},`,
2641
+ confirmationMessage: "Great news \u2014 your booking has been confirmed! Everything is set and we\u2019re getting ready for your adventure.",
2642
+ detailsIntro: "Below you\u2019ll find the full details of your reservation, including the adventures, travellers, and payment summary.",
2643
+ nextStepsHeading: "\u{1F4CB} Next Steps",
2644
+ nextSteps: [
2645
+ "Each traveller will receive a separate email with a link to complete their individual registration.",
2646
+ "Make sure everyone completes their registration so we can organise everything properly.",
2647
+ "You will receive a final confirmation once all travellers are registered and ready to go."
2648
+ ],
2649
+ bookingSummaryHeading: "\u{1F4DD} Booking Summary",
2650
+ bookingNumberLabel: "Booking Number",
2651
+ adventuresLabel: "Adventures",
2652
+ totalTravellersLabel: "Total Travellers",
2653
+ agentLabel: "Agent",
2654
+ adultsUnit: "adult(s)",
2655
+ childrenUnit: "child(ren)",
2656
+ travellersLabel: "Travellers",
2657
+ childBadge: "child",
2658
+ itineraryLabel: "Itinerary",
2659
+ includedLabel: "O que est\xE1 incluso",
2660
+ notIncludedLabel: "O que n\xE3o est\xE1 incluso",
2661
+ pricingLabel: "Pricing",
2662
+ subtotalLabel: "Subtotal",
2663
+ totalLabel: "Total",
2664
+ paymentSummaryHeading: "\u{1F4B0} Payment Summary",
2665
+ paymentDetailsHeading: "Payment Details",
2666
+ depositLabel: (percent) => `Deposit (${percent}%)`,
2667
+ remainingBalanceLabel: "Remaining balance",
2668
+ balanceDueLabel: "Balance due",
2669
+ paidInFullLabel: "\u2705 Paid in full",
2670
+ 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.",
2671
+ footerContact: (agent) => `If you have any questions, just reply to this email or contact ${agent} \u2014 happy to help.`
2672
+ };
2635
2673
  var DEFAULT_LOGO = "/logo-planetaexo.png";
2636
2674
  function BookingConfirmation({
2637
2675
  recipientName,
@@ -2644,8 +2682,10 @@ function BookingConfirmation({
2644
2682
  depositInfo,
2645
2683
  agent,
2646
2684
  viewBookingUrl,
2685
+ labels,
2647
2686
  className
2648
2687
  }) {
2688
+ const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS), labels);
2649
2689
  const allTravellers = adventures.flatMap((a) => {
2650
2690
  var _a;
2651
2691
  return (_a = a.travellers) != null ? _a : [];
@@ -2655,14 +2695,14 @@ function BookingConfirmation({
2655
2695
  {
2656
2696
  href: viewBookingUrl,
2657
2697
  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",
2658
- children: "View booking details"
2698
+ children: l.ctaButton
2659
2699
  }
2660
2700
  ) : /* @__PURE__ */ jsx(
2661
2701
  "span",
2662
2702
  {
2663
2703
  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",
2664
2704
  role: "presentation",
2665
- children: "View booking details"
2705
+ children: l.ctaButton
2666
2706
  }
2667
2707
  );
2668
2708
  return /* @__PURE__ */ jsxs(
@@ -2677,50 +2717,42 @@ function BookingConfirmation({
2677
2717
  "img",
2678
2718
  {
2679
2719
  src: logoUrl,
2680
- alt: "PlanetaEXO",
2720
+ alt: l.logoAlt,
2681
2721
  className: "h-[70px] w-auto object-contain"
2682
2722
  }
2683
2723
  ) }),
2684
2724
  /* @__PURE__ */ jsxs("div", { className: "px-8", children: [
2685
- /* @__PURE__ */ jsxs("p", { className: "mb-5 text-base", children: [
2686
- "Hi ",
2687
- recipientName,
2688
- ","
2689
- ] }),
2690
- /* @__PURE__ */ 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." }),
2691
- /* @__PURE__ */ 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." }),
2725
+ /* @__PURE__ */ jsx("p", { className: "mb-5 text-base", children: l.greeting(recipientName) }),
2726
+ /* @__PURE__ */ jsx("p", { className: "mb-5 text-base", children: l.confirmationMessage }),
2727
+ /* @__PURE__ */ jsx("p", { className: "mb-8 text-base", children: l.detailsIntro }),
2692
2728
  /* @__PURE__ */ jsx("div", { className: "mb-10", children: ViewBookingCta })
2693
2729
  ] }),
2694
2730
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2695
2731
  /* @__PURE__ */ jsxs("div", { className: "px-8 py-8", children: [
2696
- /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4CB} Next Steps" }),
2697
- /* @__PURE__ */ jsx("div", { className: "rounded-xl border border-border p-5 flex flex-col gap-4", children: [
2698
- "Each traveller will receive a separate email with a link to complete their individual registration.",
2699
- "Make sure everyone completes their registration so we can organise everything properly.",
2700
- "You will receive a final confirmation once all travellers are registered and ready to go."
2701
- ].map((step, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3.5", children: [
2732
+ /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: l.nextStepsHeading }),
2733
+ /* @__PURE__ */ jsx("div", { className: "rounded-xl border border-border p-5 flex flex-col gap-4", children: l.nextSteps.map((step, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3.5", children: [
2702
2734
  /* @__PURE__ */ 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 }),
2703
2735
  /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground/80 leading-relaxed", children: step })
2704
2736
  ] }, i)) })
2705
2737
  ] }),
2706
2738
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2707
2739
  /* @__PURE__ */ jsxs("div", { className: "px-8 py-8", children: [
2708
- /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4DD} Booking Summary" }),
2740
+ /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: l.bookingSummaryHeading }),
2709
2741
  /* @__PURE__ */ jsx("div", { className: "rounded-xl border border-border overflow-hidden", children: /* @__PURE__ */ jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxs("tbody", { children: [
2710
2742
  /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2711
- /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Booking Number" }),
2743
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.bookingNumberLabel }),
2712
2744
  /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-semibold text-primary", children: bookingReference })
2713
2745
  ] }),
2714
2746
  /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2715
- /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Adventures" }),
2747
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.adventuresLabel }),
2716
2748
  /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: adventures.length })
2717
2749
  ] }),
2718
2750
  /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2719
- /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Total Travellers" }),
2751
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.totalTravellersLabel }),
2720
2752
  /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: allTravellers.length })
2721
2753
  ] }),
2722
2754
  /* @__PURE__ */ jsxs("tr", { children: [
2723
- /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Agent" }),
2755
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: l.agentLabel }),
2724
2756
  /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: agent })
2725
2757
  ] })
2726
2758
  ] }) }) })
@@ -2770,8 +2802,8 @@ function BookingConfirmation({
2770
2802
  /* @__PURE__ */ jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
2771
2803
  ] }),
2772
2804
  [
2773
- adventure.slots.adults ? `${adventure.slots.adults} adult(s)` : null,
2774
- adventure.slots.children ? `${adventure.slots.children} child(ren)` : null
2805
+ adventure.slots.adults ? `${adventure.slots.adults} ${l.adultsUnit}` : null,
2806
+ adventure.slots.children ? `${adventure.slots.children} ${l.childrenUnit}` : null
2775
2807
  ].filter(Boolean).join(" \xB7 ")
2776
2808
  ] }),
2777
2809
  adventure.partner && /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
@@ -2784,7 +2816,7 @@ function BookingConfirmation({
2784
2816
  adventure.travellers && adventure.travellers.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
2785
2817
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border my-1" }),
2786
2818
  /* @__PURE__ */ jsxs("div", { children: [
2787
- /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Travellers" }),
2819
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: l.travellersLabel }),
2788
2820
  /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1.5", children: adventure.travellers.map((t) => /* @__PURE__ */ jsxs(
2789
2821
  "div",
2790
2822
  {
@@ -2795,7 +2827,7 @@ function BookingConfirmation({
2795
2827
  " ",
2796
2828
  t.lastName
2797
2829
  ] }),
2798
- t.isChild && /* @__PURE__ */ 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" })
2830
+ t.isChild && /* @__PURE__ */ 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 })
2799
2831
  ]
2800
2832
  },
2801
2833
  t.id
@@ -2805,12 +2837,12 @@ function BookingConfirmation({
2805
2837
  adventure.description && /* @__PURE__ */ jsxs(Fragment, { children: [
2806
2838
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border my-1" }),
2807
2839
  /* @__PURE__ */ jsxs("div", { children: [
2808
- /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Itinerary" }),
2840
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: l.itineraryLabel }),
2809
2841
  /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description })
2810
2842
  ] })
2811
2843
  ] }),
2812
2844
  adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2813
- /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que est\xE1 incluso" }),
2845
+ /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: l.includedLabel }),
2814
2846
  /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxs(
2815
2847
  "li",
2816
2848
  {
@@ -2824,7 +2856,7 @@ function BookingConfirmation({
2824
2856
  )) })
2825
2857
  ] }),
2826
2858
  adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2827
- /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que n\xE3o est\xE1 incluso" }),
2859
+ /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: l.notIncludedLabel }),
2828
2860
  /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxs(
2829
2861
  "li",
2830
2862
  {
@@ -2843,7 +2875,7 @@ function BookingConfirmation({
2843
2875
  adventure.lineItems && adventure.lineItems.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
2844
2876
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border my-1" }),
2845
2877
  /* @__PURE__ */ jsxs("div", { children: [
2846
- /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Pricing" }),
2878
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: l.pricingLabel }),
2847
2879
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
2848
2880
  adventure.lineItems.map((item, j) => /* @__PURE__ */ jsxs(
2849
2881
  "div",
@@ -2869,7 +2901,7 @@ function BookingConfirmation({
2869
2901
  j
2870
2902
  )),
2871
2903
  adventure.subtotal && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between pt-2 mt-1 border-t border-border", children: [
2872
- /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-foreground font-heading", children: "Subtotal" }),
2904
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-foreground font-heading", children: l.subtotalLabel }),
2873
2905
  /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-foreground font-heading whitespace-nowrap", children: adventure.subtotal })
2874
2906
  ] })
2875
2907
  ] })
@@ -2883,7 +2915,7 @@ function BookingConfirmation({
2883
2915
  }) }),
2884
2916
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2885
2917
  /* @__PURE__ */ jsxs("div", { className: "px-8 py-8", children: [
2886
- /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4B0} Payment Summary" }),
2918
+ /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: l.paymentSummaryHeading }),
2887
2919
  /* @__PURE__ */ jsx("div", { className: "rounded-xl border border-border overflow-hidden", children: /* @__PURE__ */ jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxs("tbody", { children: [
2888
2920
  summaryLineItems && summaryLineItems.map((item, i) => /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2889
2921
  /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: item.label }),
@@ -2902,27 +2934,23 @@ function BookingConfirmation({
2902
2934
  )
2903
2935
  ] }, i)),
2904
2936
  subtotal && /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2905
- /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground font-ui", children: "Subtotal" }),
2937
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground font-ui", children: l.subtotalLabel }),
2906
2938
  /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: subtotal })
2907
2939
  ] }),
2908
2940
  /* @__PURE__ */ jsxs("tr", { className: "bg-muted/30", children: [
2909
- /* @__PURE__ */ jsx("td", { className: "py-4 px-4 font-bold text-foreground font-heading text-base", children: "Total" }),
2941
+ /* @__PURE__ */ jsx("td", { className: "py-4 px-4 font-bold text-foreground font-heading text-base", children: l.totalLabel }),
2910
2942
  /* @__PURE__ */ jsx("td", { className: "py-4 px-4 text-right font-bold text-primary font-heading text-xl whitespace-nowrap", children: total })
2911
2943
  ] })
2912
2944
  ] }) }) }),
2913
2945
  depositInfo && /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border mt-4 overflow-hidden", children: [
2914
- /* @__PURE__ */ jsx("div", { className: "px-4 py-3 bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Payment Details" }) }),
2946
+ /* @__PURE__ */ jsx("div", { className: "px-4 py-3 bg-muted/30 border-b border-border", children: /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: l.paymentDetailsHeading }) }),
2915
2947
  /* @__PURE__ */ jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxs("tbody", { children: [
2916
2948
  /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2917
- /* @__PURE__ */ jsxs("td", { className: "py-2.5 px-4 text-muted-foreground", children: [
2918
- "Deposit (",
2919
- depositInfo.depositPercent,
2920
- "%)"
2921
- ] }),
2949
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: l.depositLabel(depositInfo.depositPercent) }),
2922
2950
  /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.depositAmount })
2923
2951
  ] }),
2924
2952
  /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2925
- /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Remaining balance" }),
2953
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: l.remainingBalanceLabel }),
2926
2954
  /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.remainingAmount })
2927
2955
  ] }),
2928
2956
  /* @__PURE__ */ jsxs(
@@ -2932,7 +2960,7 @@ function BookingConfirmation({
2932
2960
  depositInfo.isPaidInFull && "border-b border-border"
2933
2961
  ),
2934
2962
  children: [
2935
- /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Balance due" }),
2963
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: l.balanceDueLabel }),
2936
2964
  /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.balanceDueDate })
2937
2965
  ]
2938
2966
  }
@@ -2942,7 +2970,7 @@ function BookingConfirmation({
2942
2970
  {
2943
2971
  colSpan: 2,
2944
2972
  className: "py-3 px-4 text-center font-semibold text-green-600 bg-green-50",
2945
- children: "\u2705 Paid in full"
2973
+ children: l.paidInFullLabel
2946
2974
  }
2947
2975
  ) })
2948
2976
  ] }) })
@@ -2950,18 +2978,29 @@ function BookingConfirmation({
2950
2978
  ] }),
2951
2979
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2952
2980
  /* @__PURE__ */ jsxs("div", { className: "px-8 py-8 pb-10", children: [
2953
- /* @__PURE__ */ 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." }),
2954
- /* @__PURE__ */ jsxs("p", { className: "text-base", children: [
2955
- "If you have any questions, just reply to this email or contact",
2956
- " ",
2957
- /* @__PURE__ */ jsx("span", { className: "font-semibold", children: agent }),
2958
- " \u2014 happy to help."
2959
- ] })
2981
+ /* @__PURE__ */ jsx("p", { className: "mb-5 text-base", children: l.footerMessage }),
2982
+ /* @__PURE__ */ jsx("p", { className: "text-base", children: l.footerContact(agent) })
2960
2983
  ] })
2961
2984
  ]
2962
2985
  }
2963
2986
  );
2964
2987
  }
2988
+ var DEFAULT_LABELS2 = {
2989
+ ctaButton: "Add travellers to your booking",
2990
+ logoAlt: "PlanetaEXO",
2991
+ greeting: (recipientName) => `Hi ${recipientName},`,
2992
+ thankYouMessage: "Thank you for booking your adventure with PlanetaEXO \u2014 we\u2019re really looking forward to your adventure.",
2993
+ 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.",
2994
+ summaryHeading: "\u{1F4DD} Here\u2019s a quick summary of your booking:",
2995
+ bookingNumberLabel: "Booking Number:",
2996
+ activityLabel: "Activity:",
2997
+ adventureLabel: "Adventure:",
2998
+ startingDateLabel: "Starting Date:",
2999
+ numberOfPeopleLabel: "Number of People:",
3000
+ hostLabel: "Host:",
3001
+ 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.",
3002
+ closingMessage: "If you have any questions, just reply to this email \u2014 happy to help."
3003
+ };
2965
3004
  var DEFAULT_LOGO2 = "/logo-planetaexo.png";
2966
3005
  function BookingConfirmationEmail({
2967
3006
  recipientName,
@@ -2973,21 +3012,23 @@ function BookingConfirmationEmail({
2973
3012
  startingDate,
2974
3013
  numberOfPeople,
2975
3014
  host,
3015
+ labels,
2976
3016
  className
2977
3017
  }) {
3018
+ const l = __spreadValues(__spreadValues({}, DEFAULT_LABELS2), labels);
2978
3019
  const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsx(
2979
3020
  "a",
2980
3021
  {
2981
3022
  href: addTravellersUrl,
2982
3023
  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",
2983
- children: "Add travellers to your booking"
3024
+ children: l.ctaButton
2984
3025
  }
2985
3026
  ) : /* @__PURE__ */ jsx(
2986
3027
  "span",
2987
3028
  {
2988
3029
  className: "inline-flex items-center justify-center rounded-lg bg-primary px-6 py-3 text-sm font-bold text-primary-foreground font-heading",
2989
3030
  role: "presentation",
2990
- children: "Add travellers to your booking"
3031
+ children: l.ctaButton
2991
3032
  }
2992
3033
  );
2993
3034
  return /* @__PURE__ */ jsxs(
@@ -3002,49 +3043,45 @@ function BookingConfirmationEmail({
3002
3043
  "img",
3003
3044
  {
3004
3045
  src: logoUrl,
3005
- alt: "PlanetaEXO",
3046
+ alt: l.logoAlt,
3006
3047
  className: "h-[70px] w-auto object-contain"
3007
3048
  }
3008
3049
  ) }),
3009
- /* @__PURE__ */ jsxs("p", { className: "mb-4", children: [
3010
- "Hi ",
3011
- recipientName,
3012
- ","
3013
- ] }),
3014
- /* @__PURE__ */ jsx("p", { className: "mb-4", children: "Thank you for booking your adventure with PlanetaEXO \u2014 we're really looking forward to your adventure." }),
3015
- /* @__PURE__ */ 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." }),
3050
+ /* @__PURE__ */ jsx("p", { className: "mb-4", children: l.greeting(recipientName) }),
3051
+ /* @__PURE__ */ jsx("p", { className: "mb-4", children: l.thankYouMessage }),
3052
+ /* @__PURE__ */ jsx("p", { className: "mb-4", children: l.addTravellersInstruction }),
3016
3053
  /* @__PURE__ */ jsx("div", { className: "mb-8", children: AddTravellersCta }),
3017
3054
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border mb-8" }),
3018
- /* @__PURE__ */ jsx("p", { className: "mb-4 font-heading font-bold text-foreground", children: "\u{1F4DD} Here's a quick summary of your booking:" }),
3055
+ /* @__PURE__ */ jsx("p", { className: "mb-4 font-heading font-bold text-foreground", children: l.summaryHeading }),
3019
3056
  /* @__PURE__ */ jsx("table", { className: "w-full text-sm mb-8", children: /* @__PURE__ */ jsxs("tbody", { className: "divide-y divide-border", children: [
3020
3057
  /* @__PURE__ */ jsxs("tr", { children: [
3021
- /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Booking Number:" }),
3058
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.bookingNumberLabel }),
3022
3059
  /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: bookingNumber })
3023
3060
  ] }),
3024
3061
  /* @__PURE__ */ jsxs("tr", { children: [
3025
- /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Activity:" }),
3062
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.activityLabel }),
3026
3063
  /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: activity })
3027
3064
  ] }),
3028
3065
  /* @__PURE__ */ jsxs("tr", { children: [
3029
- /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Adventure:" }),
3066
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.adventureLabel }),
3030
3067
  /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: adventure })
3031
3068
  ] }),
3032
3069
  /* @__PURE__ */ jsxs("tr", { children: [
3033
- /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Starting Date:" }),
3070
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.startingDateLabel }),
3034
3071
  /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: startingDate })
3035
3072
  ] }),
3036
3073
  /* @__PURE__ */ jsxs("tr", { children: [
3037
- /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Number of People:" }),
3074
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.numberOfPeopleLabel }),
3038
3075
  /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: numberOfPeople })
3039
3076
  ] }),
3040
3077
  /* @__PURE__ */ jsxs("tr", { children: [
3041
- /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Host:" }),
3078
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: l.hostLabel }),
3042
3079
  /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: host })
3043
3080
  ] })
3044
3081
  ] }) }),
3045
3082
  /* @__PURE__ */ jsx("hr", { className: "border-t border-border mb-8" }),
3046
- /* @__PURE__ */ 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." }),
3047
- /* @__PURE__ */ jsx("p", { children: "If you have any questions, just reply to this email \u2014 happy to help." })
3083
+ /* @__PURE__ */ jsx("p", { className: "mb-4", children: l.postCtaMessage }),
3084
+ /* @__PURE__ */ jsx("p", { children: l.closingMessage })
3048
3085
  ]
3049
3086
  }
3050
3087
  );
@@ -6252,7 +6289,369 @@ function ActivityCard({
6252
6289
  }
6253
6290
  );
6254
6291
  }
6292
+ function Input(_a) {
6293
+ var _b = _a, { className, type } = _b, props = __objRest(_b, ["className", "type"]);
6294
+ return /* @__PURE__ */ jsx(
6295
+ Input$1,
6296
+ __spreadValues({
6297
+ type,
6298
+ "data-slot": "input",
6299
+ className: cn(
6300
+ "h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
6301
+ className
6302
+ )
6303
+ }, props)
6304
+ );
6305
+ }
6306
+ function Label(_a) {
6307
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
6308
+ return /* @__PURE__ */ jsx(
6309
+ "label",
6310
+ __spreadValues({
6311
+ "data-slot": "label",
6312
+ className: cn(
6313
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
6314
+ className
6315
+ )
6316
+ }, props)
6317
+ );
6318
+ }
6319
+ var DEFAULTS = {
6320
+ heading: "Where will your next adventure take you?",
6321
+ subtitle: "Tell us about your dream trip and our travel experts will craft the perfect itinerary for you.",
6322
+ nameLabel: "Your name",
6323
+ namePlaceholder: "e.g. Maria Silva",
6324
+ emailLabel: "Email",
6325
+ emailPlaceholder: "you@example.com",
6326
+ travelDateLabel: "When are you planning to travel?",
6327
+ travelDateOptions: [
6328
+ "In the next 30 days",
6329
+ "1 \u2013 3 months from now",
6330
+ "3 \u2013 6 months from now",
6331
+ "6 \u2013 12 months from now",
6332
+ "I'm just exploring"
6333
+ ],
6334
+ submitLabel: "Send my request",
6335
+ successHeading: "Thank you!",
6336
+ successMessage: "One of our travel experts will reach out soon to help plan your perfect trip.",
6337
+ privacyText: 'By submitting you agree to our <a href="/privacy-policy" target="_blank" rel="noopener">Privacy Policy</a>.',
6338
+ trigger: "delay",
6339
+ delaySeconds: 5,
6340
+ scrollPercent: 50,
6341
+ dismissDays: 7,
6342
+ overlayOpacity: 40,
6343
+ position: "center"
6344
+ };
6345
+ var COOKIE_NAME = "pexo_lead_popup_dismissed";
6346
+ function isDismissed() {
6347
+ return document.cookie.includes(`${COOKIE_NAME}=1`);
6348
+ }
6349
+ function setDismissed(days) {
6350
+ const expires = new Date(Date.now() + days * 864e5).toUTCString();
6351
+ document.cookie = `${COOKIE_NAME}=1; expires=${expires}; path=/; SameSite=Lax`;
6352
+ }
6353
+ function LeadCapturePopup({
6354
+ config: _config
6355
+ }) {
6356
+ var _a;
6357
+ const config = __spreadValues(__spreadValues({}, DEFAULTS), _config);
6358
+ const [open, setOpen] = useState(false);
6359
+ const [closing, setClosing] = useState(false);
6360
+ const [submitted, setSubmitted] = useState(false);
6361
+ const [submitting, setSubmitting] = useState(false);
6362
+ const [error, setError] = useState(null);
6363
+ const [name, setName] = useState("");
6364
+ const [email, setEmail] = useState("");
6365
+ const [travelDate, setTravelDate] = useState("");
6366
+ const panelRef = useRef(null);
6367
+ const nameRef = useRef(null);
6368
+ const show = useCallback(() => {
6369
+ if (isDismissed()) return;
6370
+ setOpen(true);
6371
+ }, []);
6372
+ useEffect(() => {
6373
+ var _a2;
6374
+ if (isDismissed()) return;
6375
+ if (config.trigger === "delay") {
6376
+ const t = setTimeout(show, ((_a2 = config.delaySeconds) != null ? _a2 : 5) * 1e3);
6377
+ return () => clearTimeout(t);
6378
+ }
6379
+ if (config.trigger === "exit_intent") {
6380
+ const handler = (e) => {
6381
+ if (e.clientY <= 5) show();
6382
+ };
6383
+ document.addEventListener("mouseout", handler);
6384
+ return () => document.removeEventListener("mouseout", handler);
6385
+ }
6386
+ if (config.trigger === "scroll") {
6387
+ const handler = () => {
6388
+ var _a3;
6389
+ const pct = window.scrollY / (document.documentElement.scrollHeight - window.innerHeight) * 100;
6390
+ if (pct >= ((_a3 = config.scrollPercent) != null ? _a3 : 50)) {
6391
+ show();
6392
+ window.removeEventListener("scroll", handler);
6393
+ }
6394
+ };
6395
+ window.addEventListener("scroll", handler, { passive: true });
6396
+ return () => window.removeEventListener("scroll", handler);
6397
+ }
6398
+ }, [config.trigger, config.delaySeconds, config.scrollPercent, show]);
6399
+ useEffect(() => {
6400
+ if (open && !submitted) {
6401
+ requestAnimationFrame(() => {
6402
+ var _a2;
6403
+ return (_a2 = nameRef.current) == null ? void 0 : _a2.focus();
6404
+ });
6405
+ }
6406
+ }, [open, submitted]);
6407
+ const close = useCallback(() => {
6408
+ setClosing(true);
6409
+ setDismissed(config.dismissDays);
6410
+ setTimeout(() => {
6411
+ setOpen(false);
6412
+ setClosing(false);
6413
+ }, 250);
6414
+ }, [config.dismissDays]);
6415
+ useEffect(() => {
6416
+ if (!open) return;
6417
+ const handler = (e) => {
6418
+ if (e.key === "Escape") close();
6419
+ };
6420
+ document.addEventListener("keydown", handler);
6421
+ return () => document.removeEventListener("keydown", handler);
6422
+ }, [open, close]);
6423
+ const onOverlayClick = useCallback(
6424
+ (e) => {
6425
+ if (panelRef.current && !panelRef.current.contains(e.target)) {
6426
+ close();
6427
+ }
6428
+ },
6429
+ [close]
6430
+ );
6431
+ const handleSubmit = async (e) => {
6432
+ var _a2;
6433
+ e.preventDefault();
6434
+ setError(null);
6435
+ if (!name.trim() || !email.trim() || !travelDate) {
6436
+ setError("Please fill in all fields.");
6437
+ return;
6438
+ }
6439
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
6440
+ setError("Please enter a valid email address.");
6441
+ return;
6442
+ }
6443
+ setSubmitting(true);
6444
+ try {
6445
+ if (config.ajaxUrl) {
6446
+ const res = await fetch(config.ajaxUrl, {
6447
+ method: "POST",
6448
+ headers: { "Content-Type": "application/json" },
6449
+ body: JSON.stringify({
6450
+ name: name.trim(),
6451
+ email: email.trim(),
6452
+ travel_date: travelDate,
6453
+ nonce: (_a2 = config.nonce) != null ? _a2 : ""
6454
+ })
6455
+ });
6456
+ if (!res.ok) throw new Error("Server error");
6457
+ }
6458
+ setSubmitted(true);
6459
+ setDismissed(config.dismissDays);
6460
+ } catch (e2) {
6461
+ setError("Something went wrong. Please try again.");
6462
+ } finally {
6463
+ setSubmitting(false);
6464
+ }
6465
+ };
6466
+ if (!open) return null;
6467
+ const accentStyle = config.accentColor ? { "--popup-accent": config.accentColor } : void 0;
6468
+ const isCenter = config.position === "center";
6469
+ return /* @__PURE__ */ jsxs(
6470
+ "div",
6471
+ {
6472
+ className: cn(
6473
+ "pexo-lead-popup fixed inset-0 z-[99999] flex",
6474
+ isCenter ? "items-center justify-center" : "items-end justify-end",
6475
+ closing ? "animate-fade-out" : "animate-fade-in"
6476
+ ),
6477
+ style: {
6478
+ backgroundColor: `rgba(0,0,0,${((_a = config.overlayOpacity) != null ? _a : 40) / 100})`,
6479
+ backdropFilter: "blur(4px)",
6480
+ WebkitBackdropFilter: "blur(4px)"
6481
+ },
6482
+ onClick: onOverlayClick,
6483
+ role: "dialog",
6484
+ "aria-modal": "true",
6485
+ "aria-label": config.heading,
6486
+ children: [
6487
+ /* @__PURE__ */ jsxs(
6488
+ "div",
6489
+ {
6490
+ ref: panelRef,
6491
+ className: cn(
6492
+ "relative flex flex-col overflow-hidden bg-background text-foreground shadow-2xl ring-1 ring-foreground/5",
6493
+ isCenter ? "m-4 w-full max-w-md rounded-2xl sm:max-w-lg" : "m-4 w-full max-w-sm rounded-2xl sm:m-6",
6494
+ closing ? isCenter ? "animate-zoom-out" : "animate-slide-out-right" : isCenter ? "animate-zoom-in" : "animate-slide-in-right"
6495
+ ),
6496
+ style: accentStyle,
6497
+ children: [
6498
+ /* @__PURE__ */ jsx(
6499
+ "button",
6500
+ {
6501
+ onClick: close,
6502
+ className: "absolute top-3 right-3 z-10 flex h-8 w-8 items-center justify-center rounded-full bg-black/30 text-white backdrop-blur-sm transition-colors hover:bg-black/50",
6503
+ "aria-label": "Close",
6504
+ children: /* @__PURE__ */ jsx(XIcon, { className: "h-4 w-4" })
6505
+ }
6506
+ ),
6507
+ config.imageUrl && /* @__PURE__ */ jsxs("div", { className: "relative h-44 w-full shrink-0 overflow-hidden sm:h-52", children: [
6508
+ /* @__PURE__ */ jsx(
6509
+ "img",
6510
+ {
6511
+ src: config.imageUrl,
6512
+ alt: "",
6513
+ className: "h-full w-full object-cover",
6514
+ loading: "eager"
6515
+ }
6516
+ ),
6517
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/50 to-transparent" })
6518
+ ] }),
6519
+ /* @__PURE__ */ jsx("div", { className: "flex flex-1 flex-col gap-5 p-5 sm:p-6", children: !submitted ? /* @__PURE__ */ jsxs(Fragment, { children: [
6520
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
6521
+ /* @__PURE__ */ jsx("h2", { className: "font-heading text-lg font-bold leading-tight tracking-tight text-foreground sm:text-xl", children: config.heading }),
6522
+ config.subtitle && /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: config.subtitle })
6523
+ ] }),
6524
+ /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "flex flex-col gap-4", children: [
6525
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
6526
+ /* @__PURE__ */ jsx(Label, { htmlFor: "pexo-lead-name", className: "text-xs uppercase tracking-wider text-muted-foreground", children: config.nameLabel }),
6527
+ /* @__PURE__ */ jsx(
6528
+ Input,
6529
+ {
6530
+ ref: nameRef,
6531
+ id: "pexo-lead-name",
6532
+ type: "text",
6533
+ placeholder: config.namePlaceholder,
6534
+ value: name,
6535
+ onChange: (e) => setName(e.target.value),
6536
+ autoComplete: "name",
6537
+ className: "h-10 rounded-lg border-border/60 bg-muted/30 px-3 text-sm focus-visible:border-primary focus-visible:ring-primary/30"
6538
+ }
6539
+ )
6540
+ ] }),
6541
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
6542
+ /* @__PURE__ */ jsx(Label, { htmlFor: "pexo-lead-email", className: "text-xs uppercase tracking-wider text-muted-foreground", children: config.emailLabel }),
6543
+ /* @__PURE__ */ jsx(
6544
+ Input,
6545
+ {
6546
+ id: "pexo-lead-email",
6547
+ type: "email",
6548
+ placeholder: config.emailPlaceholder,
6549
+ value: email,
6550
+ onChange: (e) => setEmail(e.target.value),
6551
+ autoComplete: "email",
6552
+ className: "h-10 rounded-lg border-border/60 bg-muted/30 px-3 text-sm focus-visible:border-primary focus-visible:ring-primary/30"
6553
+ }
6554
+ )
6555
+ ] }),
6556
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
6557
+ /* @__PURE__ */ jsx(Label, { htmlFor: "pexo-lead-travel", className: "text-xs uppercase tracking-wider text-muted-foreground", children: config.travelDateLabel }),
6558
+ /* @__PURE__ */ jsxs(
6559
+ "select",
6560
+ {
6561
+ id: "pexo-lead-travel",
6562
+ value: travelDate,
6563
+ onChange: (e) => setTravelDate(e.target.value),
6564
+ className: cn(
6565
+ "h-10 w-full appearance-none rounded-lg border border-border/60 bg-muted/30 px-3 text-sm text-foreground outline-none transition-colors",
6566
+ "focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/30",
6567
+ !travelDate && "text-muted-foreground"
6568
+ ),
6569
+ style: {
6570
+ backgroundImage: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E")`,
6571
+ backgroundRepeat: "no-repeat",
6572
+ backgroundPosition: "right 0.75rem center",
6573
+ paddingRight: "2.5rem"
6574
+ },
6575
+ children: [
6576
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: "Select a timeframe\u2026" }),
6577
+ config.travelDateOptions.map((opt) => /* @__PURE__ */ jsx("option", { value: opt, children: opt }, opt))
6578
+ ]
6579
+ }
6580
+ )
6581
+ ] }),
6582
+ error && /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-destructive", role: "alert", children: error }),
6583
+ /* @__PURE__ */ jsxs(
6584
+ Button,
6585
+ {
6586
+ type: "submit",
6587
+ disabled: submitting,
6588
+ className: cn(
6589
+ "h-11 w-full gap-2 rounded-lg text-sm font-bold tracking-wide",
6590
+ config.accentColor ? "border-transparent text-white" : "bg-primary text-primary-foreground hover:bg-primary/90"
6591
+ ),
6592
+ style: config.accentColor ? { backgroundColor: config.accentColor } : void 0,
6593
+ children: [
6594
+ submitting ? /* @__PURE__ */ jsx(Loader2Icon, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx(SendIcon, { className: "h-4 w-4" }),
6595
+ submitting ? "Sending\u2026" : config.submitLabel
6596
+ ]
6597
+ }
6598
+ ),
6599
+ config.privacyText && /* @__PURE__ */ jsx(
6600
+ "p",
6601
+ {
6602
+ className: "text-center text-[11px] leading-relaxed text-muted-foreground [&_a]:underline [&_a]:underline-offset-2 [&_a]:hover:text-foreground",
6603
+ dangerouslySetInnerHTML: { __html: config.privacyText }
6604
+ }
6605
+ )
6606
+ ] })
6607
+ ] }) : (
6608
+ /* ---- Success state ---- */
6609
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-1 flex-col items-center justify-center gap-4 py-8 text-center", children: [
6610
+ /* @__PURE__ */ jsx("div", { className: "flex h-16 w-16 items-center justify-center rounded-full bg-primary/10", children: /* @__PURE__ */ jsx(CheckCircleIcon, { className: "h-8 w-8 text-primary" }) }),
6611
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
6612
+ /* @__PURE__ */ jsx("h2", { className: "font-heading text-lg font-bold text-foreground", children: config.successHeading }),
6613
+ /* @__PURE__ */ jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", children: config.successMessage })
6614
+ ] }),
6615
+ /* @__PURE__ */ jsx(
6616
+ Button,
6617
+ {
6618
+ onClick: close,
6619
+ variant: "outline",
6620
+ className: "mt-2 h-10 px-6 text-sm",
6621
+ children: "Close"
6622
+ }
6623
+ )
6624
+ ] })
6625
+ ) })
6626
+ ]
6627
+ }
6628
+ ),
6629
+ /* @__PURE__ */ jsx("style", { children: `
6630
+ @keyframes pexo-fade-in { from { opacity: 0 } to { opacity: 1 } }
6631
+ @keyframes pexo-fade-out { from { opacity: 1 } to { opacity: 0 } }
6632
+ @keyframes pexo-zoom-in { from { opacity: 0; transform: scale(0.92) } to { opacity: 1; transform: scale(1) } }
6633
+ @keyframes pexo-zoom-out { from { opacity: 1; transform: scale(1) } to { opacity: 0; transform: scale(0.92) } }
6634
+ @keyframes pexo-slide-in-right { from { opacity: 0; transform: translateX(100%) } to { opacity: 1; transform: translateX(0) } }
6635
+ @keyframes pexo-slide-out-right { from { opacity: 1; transform: translateX(0) } to { opacity: 0; transform: translateX(100%) } }
6636
+
6637
+ .pexo-lead-popup .animate-fade-in { animation: pexo-fade-in 0.3s ease-out both }
6638
+ .pexo-lead-popup .animate-fade-out { animation: pexo-fade-out 0.25s ease-in both }
6639
+ .pexo-lead-popup .animate-zoom-in { animation: pexo-zoom-in 0.35s cubic-bezier(0.16,1,0.3,1) both }
6640
+ .pexo-lead-popup .animate-zoom-out { animation: pexo-zoom-out 0.25s ease-in both }
6641
+ .pexo-lead-popup .animate-slide-in-right { animation: pexo-slide-in-right 0.4s cubic-bezier(0.16,1,0.3,1) both }
6642
+ .pexo-lead-popup .animate-slide-out-right { animation: pexo-slide-out-right 0.3s ease-in both }
6643
+
6644
+ /* Ensure popup fonts inherit from design system */
6645
+ .pexo-lead-popup { font-family: var(--font-sans, "Literata", Georgia, serif); }
6646
+ .pexo-lead-popup h1, .pexo-lead-popup h2, .pexo-lead-popup h3 { font-family: var(--font-heading, "ArcaMajora3", sans-serif); }
6647
+ .pexo-lead-popup button, .pexo-lead-popup label { font-family: var(--font-ui, "ArcaMajora3", sans-serif); }
6648
+ .pexo-lead-popup select { font-family: var(--font-sans, "Literata", Georgia, serif); }
6649
+ ` })
6650
+ ]
6651
+ }
6652
+ );
6653
+ }
6255
6654
 
6256
- export { ActivityCard, BookingConfirmation, BookingConfirmationEmail, BookingDetails, BookingForm, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, FilterPanel, FloatingInput, FloatingSelect, Itinerary, MenuTrip, Offer, OfferAdventureCard, PhoneCountrySelect, PhotoGallery, PricingTrip, SiteHeader, ThemeToggle, TripCard, TripHeader, TripPage, cn };
6655
+ export { ActivityCard, BookingConfirmation, BookingConfirmationEmail, BookingDetails, BookingForm, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LeadCapturePopup, MenuTrip, Offer, OfferAdventureCard, PhoneCountrySelect, PhotoGallery, PricingTrip, SiteHeader, ThemeToggle, TripCard, TripHeader, TripPage, cn };
6257
6656
  //# sourceMappingURL=index.js.map
6258
6657
  //# sourceMappingURL=index.js.map