@planetaexo/design-system 0.2.11 → 0.2.13

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.d.cts CHANGED
@@ -198,6 +198,80 @@ interface BookingConfirmationEmailProps {
198
198
  }
199
199
  declare function BookingConfirmationEmail({ recipientName, addTravellersUrl, logoUrl, bookingNumber, activity, adventure, startingDate, numberOfPeople, host, className, }: BookingConfirmationEmailProps): react_jsx_runtime.JSX.Element;
200
200
 
201
+ interface ConfirmationLineItem {
202
+ label: string;
203
+ price: string;
204
+ isDiscount?: boolean;
205
+ }
206
+ interface ConfirmationTraveller {
207
+ id: string;
208
+ firstName: string;
209
+ lastName: string;
210
+ isChild?: boolean;
211
+ }
212
+ interface ConfirmationAdventure {
213
+ id: string;
214
+ reference?: string;
215
+ image: string;
216
+ imageAlt?: string;
217
+ title: string;
218
+ partner?: string;
219
+ location?: string;
220
+ dateFrom: string;
221
+ dateTo: string;
222
+ slots?: {
223
+ adults: number;
224
+ children?: number;
225
+ };
226
+ description?: string;
227
+ included?: string[];
228
+ notIncluded?: string[];
229
+ lineItems?: ConfirmationLineItem[];
230
+ subtotal?: string;
231
+ travellers?: ConfirmationTraveller[];
232
+ }
233
+ interface ConfirmationDepositInfo {
234
+ depositPercent: number;
235
+ depositAmount: string;
236
+ remainingAmount: string;
237
+ balanceDueDate: string;
238
+ isPaidInFull?: boolean;
239
+ }
240
+ interface BookingConfirmationProps {
241
+ /** Nome do destinatario (ex: "Maria") */
242
+ recipientName: string;
243
+ /** URL da logo. Para e-mails reais, use URL absoluta. Default: /logo-planetaexo.png */
244
+ logoUrl?: string;
245
+ /** Numero da reserva */
246
+ bookingReference: string;
247
+ /** Adventures included in the booking */
248
+ adventures: ConfirmationAdventure[];
249
+ /** Global line items (e.g. coupons, fees) */
250
+ summaryLineItems?: ConfirmationLineItem[];
251
+ subtotal?: string;
252
+ total: string;
253
+ depositInfo?: ConfirmationDepositInfo;
254
+ /** Nome do agente responsavel */
255
+ agent: string;
256
+ /** URL para ver os detalhes completos do booking */
257
+ viewBookingUrl?: string;
258
+ /** className adicional no container */
259
+ className?: string;
260
+ }
261
+ declare function BookingConfirmation({ recipientName, logoUrl, bookingReference, adventures, summaryLineItems, subtotal, total, depositInfo, agent, viewBookingUrl, className, }: BookingConfirmationProps): react_jsx_runtime.JSX.Element;
262
+
263
+ interface FloatingInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
264
+ label: string;
265
+ error?: string;
266
+ }
267
+ declare const FloatingInput: React.ForwardRefExoticComponent<FloatingInputProps & React.RefAttributes<HTMLInputElement>>;
268
+ interface FloatingSelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {
269
+ label: string;
270
+ error?: string;
271
+ children: React.ReactNode;
272
+ }
273
+ declare const FloatingSelect: React.ForwardRefExoticComponent<FloatingSelectProps & React.RefAttributes<HTMLSelectElement>>;
274
+
201
275
  declare function cn(...inputs: ClassValue[]): string;
202
276
 
203
- export { type BookingAdventure, BookingConfirmationEmail, type BookingConfirmationEmailProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type SuggestedTraveller, cn };
277
+ export { type BookingAdventure, BookingConfirmation, BookingConfirmationEmail, type BookingConfirmationEmailProps, type BookingConfirmationProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type SuggestedTraveller, cn };
package/dist/index.d.ts CHANGED
@@ -198,6 +198,80 @@ interface BookingConfirmationEmailProps {
198
198
  }
199
199
  declare function BookingConfirmationEmail({ recipientName, addTravellersUrl, logoUrl, bookingNumber, activity, adventure, startingDate, numberOfPeople, host, className, }: BookingConfirmationEmailProps): react_jsx_runtime.JSX.Element;
200
200
 
201
+ interface ConfirmationLineItem {
202
+ label: string;
203
+ price: string;
204
+ isDiscount?: boolean;
205
+ }
206
+ interface ConfirmationTraveller {
207
+ id: string;
208
+ firstName: string;
209
+ lastName: string;
210
+ isChild?: boolean;
211
+ }
212
+ interface ConfirmationAdventure {
213
+ id: string;
214
+ reference?: string;
215
+ image: string;
216
+ imageAlt?: string;
217
+ title: string;
218
+ partner?: string;
219
+ location?: string;
220
+ dateFrom: string;
221
+ dateTo: string;
222
+ slots?: {
223
+ adults: number;
224
+ children?: number;
225
+ };
226
+ description?: string;
227
+ included?: string[];
228
+ notIncluded?: string[];
229
+ lineItems?: ConfirmationLineItem[];
230
+ subtotal?: string;
231
+ travellers?: ConfirmationTraveller[];
232
+ }
233
+ interface ConfirmationDepositInfo {
234
+ depositPercent: number;
235
+ depositAmount: string;
236
+ remainingAmount: string;
237
+ balanceDueDate: string;
238
+ isPaidInFull?: boolean;
239
+ }
240
+ interface BookingConfirmationProps {
241
+ /** Nome do destinatario (ex: "Maria") */
242
+ recipientName: string;
243
+ /** URL da logo. Para e-mails reais, use URL absoluta. Default: /logo-planetaexo.png */
244
+ logoUrl?: string;
245
+ /** Numero da reserva */
246
+ bookingReference: string;
247
+ /** Adventures included in the booking */
248
+ adventures: ConfirmationAdventure[];
249
+ /** Global line items (e.g. coupons, fees) */
250
+ summaryLineItems?: ConfirmationLineItem[];
251
+ subtotal?: string;
252
+ total: string;
253
+ depositInfo?: ConfirmationDepositInfo;
254
+ /** Nome do agente responsavel */
255
+ agent: string;
256
+ /** URL para ver os detalhes completos do booking */
257
+ viewBookingUrl?: string;
258
+ /** className adicional no container */
259
+ className?: string;
260
+ }
261
+ declare function BookingConfirmation({ recipientName, logoUrl, bookingReference, adventures, summaryLineItems, subtotal, total, depositInfo, agent, viewBookingUrl, className, }: BookingConfirmationProps): react_jsx_runtime.JSX.Element;
262
+
263
+ interface FloatingInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
264
+ label: string;
265
+ error?: string;
266
+ }
267
+ declare const FloatingInput: React.ForwardRefExoticComponent<FloatingInputProps & React.RefAttributes<HTMLInputElement>>;
268
+ interface FloatingSelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {
269
+ label: string;
270
+ error?: string;
271
+ children: React.ReactNode;
272
+ }
273
+ declare const FloatingSelect: React.ForwardRefExoticComponent<FloatingSelectProps & React.RefAttributes<HTMLSelectElement>>;
274
+
201
275
  declare function cn(...inputs: ClassValue[]): string;
202
276
 
203
- export { type BookingAdventure, BookingConfirmationEmail, type BookingConfirmationEmailProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type SuggestedTraveller, cn };
277
+ export { type BookingAdventure, BookingConfirmation, BookingConfirmationEmail, type BookingConfirmationEmailProps, type BookingConfirmationProps, type BookingContact, type BookingDepositInfo, BookingDetails, type BookingDetailsProps, type BookingStatus, type BookingSummaryLineItem, type BookingTraveller, type ConfirmationAdventure, type ConfirmationDepositInfo, type ConfirmationLineItem, type ConfirmationTraveller, FloatingInput, type FloatingInputProps, FloatingSelect, type FloatingSelectProps, Offer, OfferAdventureCard, type OfferAdventureItem, type OfferAgentInfo, type OfferDepositInfo, type OfferOptionalItem, type OfferProps, type OfferSummaryLineItem, type SuggestedTraveller, cn };
package/dist/index.js CHANGED
@@ -2692,7 +2692,337 @@ function BookingConfirmationEmail({
2692
2692
  }
2693
2693
  );
2694
2694
  }
2695
+ var DEFAULT_LOGO2 = "/logo-planetaexo.png";
2696
+ function BookingConfirmation({
2697
+ recipientName,
2698
+ logoUrl = DEFAULT_LOGO2,
2699
+ bookingReference,
2700
+ adventures,
2701
+ summaryLineItems,
2702
+ subtotal,
2703
+ total,
2704
+ depositInfo,
2705
+ agent,
2706
+ viewBookingUrl,
2707
+ className
2708
+ }) {
2709
+ const allTravellers = adventures.flatMap((a) => {
2710
+ var _a;
2711
+ return (_a = a.travellers) != null ? _a : [];
2712
+ });
2713
+ const ViewBookingCta = viewBookingUrl ? /* @__PURE__ */ jsx(
2714
+ "a",
2715
+ {
2716
+ href: viewBookingUrl,
2717
+ 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",
2718
+ children: "View booking details"
2719
+ }
2720
+ ) : /* @__PURE__ */ jsx(
2721
+ "span",
2722
+ {
2723
+ 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",
2724
+ role: "presentation",
2725
+ children: "View booking details"
2726
+ }
2727
+ );
2728
+ return /* @__PURE__ */ jsxs(
2729
+ "div",
2730
+ {
2731
+ className: cn(
2732
+ "max-w-xl mx-auto bg-white text-foreground font-sans text-base leading-relaxed",
2733
+ className
2734
+ ),
2735
+ children: [
2736
+ /* @__PURE__ */ jsx("div", { className: "pt-10 pb-8 flex justify-center", children: /* @__PURE__ */ jsx(
2737
+ "img",
2738
+ {
2739
+ src: logoUrl,
2740
+ alt: "PlanetaEXO",
2741
+ className: "h-[70px] w-auto object-contain"
2742
+ }
2743
+ ) }),
2744
+ /* @__PURE__ */ jsxs("div", { className: "px-8", children: [
2745
+ /* @__PURE__ */ jsxs("p", { className: "mb-5 text-base", children: [
2746
+ "Hi ",
2747
+ recipientName,
2748
+ ","
2749
+ ] }),
2750
+ /* @__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." }),
2751
+ /* @__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." }),
2752
+ /* @__PURE__ */ jsx("div", { className: "mb-10", children: ViewBookingCta })
2753
+ ] }),
2754
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2755
+ /* @__PURE__ */ jsxs("div", { className: "px-8 py-8", children: [
2756
+ /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4CB} Next Steps" }),
2757
+ /* @__PURE__ */ jsx("div", { className: "rounded-xl border border-border p-5 flex flex-col gap-4", children: [
2758
+ "Each traveller will receive a separate email with a link to complete their individual registration.",
2759
+ "Make sure everyone completes their registration so we can organise everything properly.",
2760
+ "You will receive a final confirmation once all travellers are registered and ready to go."
2761
+ ].map((step, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3.5", children: [
2762
+ /* @__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 }),
2763
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground/80 leading-relaxed", children: step })
2764
+ ] }, i)) })
2765
+ ] }),
2766
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2767
+ /* @__PURE__ */ jsxs("div", { className: "px-8 py-8", children: [
2768
+ /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4DD} Booking Summary" }),
2769
+ /* @__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: [
2770
+ /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2771
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Booking Number" }),
2772
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-semibold text-primary", children: bookingReference })
2773
+ ] }),
2774
+ /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2775
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Adventures" }),
2776
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: adventures.length })
2777
+ ] }),
2778
+ /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2779
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Total Travellers" }),
2780
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: allTravellers.length })
2781
+ ] }),
2782
+ /* @__PURE__ */ jsxs("tr", { children: [
2783
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Agent" }),
2784
+ /* @__PURE__ */ jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: agent })
2785
+ ] })
2786
+ ] }) }) })
2787
+ ] }),
2788
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2789
+ /* @__PURE__ */ jsx("div", { className: "px-8 py-8 flex flex-col gap-6", children: adventures.map((adventure) => {
2790
+ var _a;
2791
+ return /* @__PURE__ */ jsxs(
2792
+ "div",
2793
+ {
2794
+ className: "rounded-2xl border border-border bg-card overflow-hidden",
2795
+ children: [
2796
+ /* @__PURE__ */ jsx("div", { className: "aspect-[16/7] overflow-hidden bg-muted", children: /* @__PURE__ */ jsx(
2797
+ "img",
2798
+ {
2799
+ src: adventure.image,
2800
+ alt: (_a = adventure.imageAlt) != null ? _a : adventure.title,
2801
+ className: "w-full h-full object-cover"
2802
+ }
2803
+ ) }),
2804
+ /* @__PURE__ */ jsxs("div", { className: "p-5 flex flex-col gap-2.5", children: [
2805
+ adventure.reference && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center rounded-md bg-primary/10 px-2 py-0.5 text-xs font-semibold text-primary font-heading tracking-wide self-start", children: adventure.reference }),
2806
+ /* @__PURE__ */ jsx("h3", { className: "text-xl font-bold text-foreground font-heading leading-snug mt-0.5", children: adventure.title }),
2807
+ /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2808
+ /* @__PURE__ */ jsxs("svg", { className: "w-3.5 h-3.5 text-primary shrink-0", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2809
+ /* @__PURE__ */ jsx("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", ry: "2" }),
2810
+ /* @__PURE__ */ jsx("line", { x1: "16", x2: "16", y1: "2", y2: "6" }),
2811
+ /* @__PURE__ */ jsx("line", { x1: "8", x2: "8", y1: "2", y2: "6" }),
2812
+ /* @__PURE__ */ jsx("line", { x1: "3", x2: "21", y1: "10", y2: "10" })
2813
+ ] }),
2814
+ adventure.dateFrom,
2815
+ " \u2192 ",
2816
+ adventure.dateTo
2817
+ ] }),
2818
+ adventure.location && /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2819
+ /* @__PURE__ */ jsxs("svg", { className: "w-3.5 h-3.5 text-primary shrink-0", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2820
+ /* @__PURE__ */ jsx("path", { d: "M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z" }),
2821
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "10", r: "3" })
2822
+ ] }),
2823
+ adventure.location
2824
+ ] }),
2825
+ adventure.slots && /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2826
+ /* @__PURE__ */ jsxs("svg", { className: "w-3.5 h-3.5 text-primary shrink-0", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2827
+ /* @__PURE__ */ jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
2828
+ /* @__PURE__ */ jsx("circle", { cx: "9", cy: "7", r: "4" }),
2829
+ /* @__PURE__ */ jsx("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }),
2830
+ /* @__PURE__ */ jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
2831
+ ] }),
2832
+ [
2833
+ adventure.slots.adults ? `${adventure.slots.adults} adult(s)` : null,
2834
+ adventure.slots.children ? `${adventure.slots.children} child(ren)` : null
2835
+ ].filter(Boolean).join(" \xB7 ")
2836
+ ] }),
2837
+ adventure.partner && /* @__PURE__ */ jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2838
+ /* @__PURE__ */ jsxs("svg", { className: "w-3.5 h-3.5 text-primary shrink-0", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2839
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
2840
+ /* @__PURE__ */ jsx("polygon", { points: "16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76" })
2841
+ ] }),
2842
+ adventure.partner
2843
+ ] }),
2844
+ adventure.travellers && adventure.travellers.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
2845
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border my-1" }),
2846
+ /* @__PURE__ */ jsxs("div", { children: [
2847
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Travellers" }),
2848
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1.5", children: adventure.travellers.map((t) => /* @__PURE__ */ jsxs(
2849
+ "div",
2850
+ {
2851
+ className: "flex items-center justify-between",
2852
+ children: [
2853
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-foreground font-sans", children: [
2854
+ t.firstName,
2855
+ " ",
2856
+ t.lastName
2857
+ ] }),
2858
+ 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" })
2859
+ ]
2860
+ },
2861
+ t.id
2862
+ )) })
2863
+ ] })
2864
+ ] }),
2865
+ adventure.description && /* @__PURE__ */ jsxs(Fragment, { children: [
2866
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border my-1" }),
2867
+ /* @__PURE__ */ jsxs("div", { children: [
2868
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Itinerary" }),
2869
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description })
2870
+ ] })
2871
+ ] }),
2872
+ adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2873
+ /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que est\xE1 incluso" }),
2874
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxs(
2875
+ "li",
2876
+ {
2877
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2878
+ children: [
2879
+ /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 text-primary shrink-0 mt-0.5", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "20 6 9 17 4 12" }) }),
2880
+ item
2881
+ ]
2882
+ },
2883
+ i
2884
+ )) })
2885
+ ] }),
2886
+ adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2887
+ /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que n\xE3o est\xE1 incluso" }),
2888
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxs(
2889
+ "li",
2890
+ {
2891
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2892
+ children: [
2893
+ /* @__PURE__ */ jsxs("svg", { className: "w-4 h-4 text-destructive shrink-0 mt-0.5", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
2894
+ /* @__PURE__ */ jsx("path", { d: "M18 6 6 18" }),
2895
+ /* @__PURE__ */ jsx("path", { d: "m6 6 12 12" })
2896
+ ] }),
2897
+ item
2898
+ ]
2899
+ },
2900
+ i
2901
+ )) })
2902
+ ] }),
2903
+ adventure.lineItems && adventure.lineItems.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
2904
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border my-1" }),
2905
+ /* @__PURE__ */ jsxs("div", { children: [
2906
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Pricing" }),
2907
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
2908
+ adventure.lineItems.map((item, j) => /* @__PURE__ */ jsxs(
2909
+ "div",
2910
+ {
2911
+ className: "flex items-center justify-between",
2912
+ children: [
2913
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: item.label }),
2914
+ /* @__PURE__ */ jsxs(
2915
+ "span",
2916
+ {
2917
+ className: cn(
2918
+ "text-sm font-medium font-sans whitespace-nowrap",
2919
+ item.isDiscount ? "text-green-600" : "text-foreground"
2920
+ ),
2921
+ children: [
2922
+ item.isDiscount ? "\u2212" : "",
2923
+ item.price
2924
+ ]
2925
+ }
2926
+ )
2927
+ ]
2928
+ },
2929
+ j
2930
+ )),
2931
+ adventure.subtotal && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between pt-2 mt-1 border-t border-border", children: [
2932
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-foreground font-heading", children: "Subtotal" }),
2933
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-bold text-foreground font-heading whitespace-nowrap", children: adventure.subtotal })
2934
+ ] })
2935
+ ] })
2936
+ ] })
2937
+ ] })
2938
+ ] })
2939
+ ]
2940
+ },
2941
+ adventure.id
2942
+ );
2943
+ }) }),
2944
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
2945
+ /* @__PURE__ */ jsxs("div", { className: "px-8 py-8", children: [
2946
+ /* @__PURE__ */ jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4B0} Payment Summary" }),
2947
+ /* @__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: [
2948
+ summaryLineItems && summaryLineItems.map((item, i) => /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2949
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: item.label }),
2950
+ /* @__PURE__ */ jsxs(
2951
+ "td",
2952
+ {
2953
+ className: cn(
2954
+ "py-2.5 px-4 text-right font-medium whitespace-nowrap",
2955
+ item.isDiscount ? "text-green-600" : "text-foreground"
2956
+ ),
2957
+ children: [
2958
+ item.isDiscount ? "\u2212" : "",
2959
+ item.price
2960
+ ]
2961
+ }
2962
+ )
2963
+ ] }, i)),
2964
+ subtotal && /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2965
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground font-ui", children: "Subtotal" }),
2966
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: subtotal })
2967
+ ] }),
2968
+ /* @__PURE__ */ jsxs("tr", { className: "bg-muted/30", children: [
2969
+ /* @__PURE__ */ jsx("td", { className: "py-4 px-4 font-bold text-foreground font-heading text-base", children: "Total" }),
2970
+ /* @__PURE__ */ jsx("td", { className: "py-4 px-4 text-right font-bold text-primary font-heading text-xl whitespace-nowrap", children: total })
2971
+ ] })
2972
+ ] }) }) }),
2973
+ depositInfo && /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border mt-4 overflow-hidden", children: [
2974
+ /* @__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" }) }),
2975
+ /* @__PURE__ */ jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxs("tbody", { children: [
2976
+ /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2977
+ /* @__PURE__ */ jsxs("td", { className: "py-2.5 px-4 text-muted-foreground", children: [
2978
+ "Deposit (",
2979
+ depositInfo.depositPercent,
2980
+ "%)"
2981
+ ] }),
2982
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.depositAmount })
2983
+ ] }),
2984
+ /* @__PURE__ */ jsxs("tr", { className: "border-b border-border", children: [
2985
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Remaining balance" }),
2986
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.remainingAmount })
2987
+ ] }),
2988
+ /* @__PURE__ */ jsxs(
2989
+ "tr",
2990
+ {
2991
+ className: cn(
2992
+ depositInfo.isPaidInFull && "border-b border-border"
2993
+ ),
2994
+ children: [
2995
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Balance due" }),
2996
+ /* @__PURE__ */ jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.balanceDueDate })
2997
+ ]
2998
+ }
2999
+ ),
3000
+ depositInfo.isPaidInFull && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
3001
+ "td",
3002
+ {
3003
+ colSpan: 2,
3004
+ className: "py-3 px-4 text-center font-semibold text-green-600 bg-green-50",
3005
+ children: "\u2705 Paid in full"
3006
+ }
3007
+ ) })
3008
+ ] }) })
3009
+ ] })
3010
+ ] }),
3011
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border mx-8" }),
3012
+ /* @__PURE__ */ jsxs("div", { className: "px-8 py-8 pb-10", children: [
3013
+ /* @__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." }),
3014
+ /* @__PURE__ */ jsxs("p", { className: "text-base", children: [
3015
+ "If you have any questions, just reply to this email or contact",
3016
+ " ",
3017
+ /* @__PURE__ */ jsx("span", { className: "font-semibold", children: agent }),
3018
+ " \u2014 happy to help."
3019
+ ] })
3020
+ ] })
3021
+ ]
3022
+ }
3023
+ );
3024
+ }
2695
3025
 
2696
- export { BookingConfirmationEmail, BookingDetails, Offer, OfferAdventureCard, cn };
3026
+ export { BookingConfirmation, BookingConfirmationEmail, BookingDetails, FloatingInput, FloatingSelect, Offer, OfferAdventureCard, cn };
2697
3027
  //# sourceMappingURL=index.js.map
2698
3028
  //# sourceMappingURL=index.js.map