@planetaexo/design-system 0.2.10 → 0.2.12

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
@@ -1902,7 +1902,1152 @@ function Offer({
1902
1902
  ] }) })
1903
1903
  ] });
1904
1904
  }
1905
+ var STATUS_STYLES = {
1906
+ pending: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",
1907
+ confirmed: "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",
1908
+ cancelled: "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400",
1909
+ completed: "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"
1910
+ };
1911
+ function StatusBadge({ status }) {
1912
+ return /* @__PURE__ */ jsxRuntime.jsx(
1913
+ "span",
1914
+ {
1915
+ className: cn(
1916
+ "inline-flex items-center rounded-full px-3 py-1 text-xs font-bold font-heading uppercase tracking-wider",
1917
+ STATUS_STYLES[status]
1918
+ ),
1919
+ children: status
1920
+ }
1921
+ );
1922
+ }
1923
+ function totalPeople(adventures) {
1924
+ var _a, _b, _c, _d, _e, _f;
1925
+ let adults = 0;
1926
+ let children = 0;
1927
+ let seniors = 0;
1928
+ for (const a of adventures) {
1929
+ adults += (_b = (_a = a.slots) == null ? void 0 : _a.adults) != null ? _b : 0;
1930
+ children += (_d = (_c = a.slots) == null ? void 0 : _c.children) != null ? _d : 0;
1931
+ seniors += (_f = (_e = a.slots) == null ? void 0 : _e.seniors) != null ? _f : 0;
1932
+ }
1933
+ return { adults, children, seniors, total: adults + children + seniors };
1934
+ }
1935
+ function InfoCard({
1936
+ label,
1937
+ children
1938
+ }) {
1939
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border bg-card p-4 flex flex-col gap-1 min-w-0", children: [
1940
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: label }),
1941
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm font-sans text-foreground", children })
1942
+ ] });
1943
+ }
1944
+ function AdventureSection({
1945
+ adventure,
1946
+ onAddContactAsTraveller,
1947
+ onEditTraveller,
1948
+ onRemoveTraveller,
1949
+ onAddSuggestedTraveller
1950
+ }) {
1951
+ var _a, _b, _c;
1952
+ const [detailsOpen, setDetailsOpen] = React4__namespace.useState(false);
1953
+ const [addModalOpen, setAddModalOpen] = React4__namespace.useState(false);
1954
+ const [newTraveller, setNewTraveller] = React4__namespace.useState({
1955
+ firstName: "",
1956
+ lastName: "",
1957
+ passport: "",
1958
+ type: "adult",
1959
+ email: "",
1960
+ dateOfBirth: "",
1961
+ phone: ""
1962
+ });
1963
+ const setField = (k, v) => setNewTraveller((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
1964
+ const handleCopyUrl = (url) => {
1965
+ navigator.clipboard.writeText(url);
1966
+ };
1967
+ const people = adventure.slots;
1968
+ [
1969
+ (people == null ? void 0 : people.adults) ? `Adults: ${people.adults}` : null,
1970
+ (people == null ? void 0 : people.children) ? `Children: ${people.children}` : null,
1971
+ (people == null ? void 0 : people.seniors) ? `Seniors: ${people.seniors}` : null
1972
+ ].filter(Boolean).join(" \xB7 ");
1973
+ const totalSlots = ((_a = people == null ? void 0 : people.adults) != null ? _a : 0) + ((_b = people == null ? void 0 : people.children) != null ? _b : 0) + ((_c = people == null ? void 0 : people.seniors) != null ? _c : 0);
1974
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
1975
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5 lg:p-6 flex flex-col gap-2 bg-muted/60", children: [
1976
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-3", children: [
1977
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
1978
+ /* @__PURE__ */ jsxRuntime.jsxs("h3", { className: "text-xl font-bold text-foreground font-heading leading-snug", children: [
1979
+ adventure.title,
1980
+ adventure.reference && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-normal text-muted-foreground/40 ml-1.5", children: [
1981
+ "#",
1982
+ adventure.reference
1983
+ ] })
1984
+ ] }),
1985
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 flex-wrap text-sm text-muted-foreground font-sans", children: [
1986
+ adventure.partner && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1.5", children: [
1987
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CompassIcon, { className: "w-3.5 h-3.5 shrink-0 text-primary" }),
1988
+ adventure.partner
1989
+ ] }),
1990
+ adventure.location && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1.5", children: [
1991
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MapPinIcon, { className: "w-3.5 h-3.5 shrink-0 text-primary" }),
1992
+ adventure.location
1993
+ ] })
1994
+ ] })
1995
+ ] }),
1996
+ /* @__PURE__ */ jsxRuntime.jsxs(
1997
+ "button",
1998
+ {
1999
+ type: "button",
2000
+ onClick: () => setDetailsOpen((v) => !v),
2001
+ className: cn(
2002
+ "flex items-center gap-1.5 rounded-full border border-border px-3 py-1.5 text-xs font-ui text-muted-foreground shrink-0 transition-colors",
2003
+ "hover:border-primary hover:text-primary",
2004
+ detailsOpen && "border-primary text-primary"
2005
+ ),
2006
+ children: [
2007
+ "Details",
2008
+ detailsOpen ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUpIcon, { className: "w-3 h-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: "w-3 h-3" })
2009
+ ]
2010
+ }
2011
+ )
2012
+ ] }),
2013
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-4 flex-wrap text-sm text-muted-foreground font-sans", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-1.5", children: [
2014
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "w-3.5 h-3.5 shrink-0 text-primary" }),
2015
+ adventure.dateFrom,
2016
+ " \u2192 ",
2017
+ adventure.dateTo
2018
+ ] }) }),
2019
+ adventure.tags && adventure.tags.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1.5 mt-1", children: adventure.tags.map((tag) => /* @__PURE__ */ jsxRuntime.jsx(
2020
+ "span",
2021
+ {
2022
+ className: "inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary font-heading",
2023
+ children: tag
2024
+ },
2025
+ tag
2026
+ )) })
2027
+ ] }),
2028
+ detailsOpen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border px-5 lg:px-6 py-5 flex flex-col gap-5 bg-muted/10", children: [
2029
+ adventure.description && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2030
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Itinerary" }),
2031
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description })
2032
+ ] }),
2033
+ adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2034
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "O que est\xE1 incluso" }),
2035
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2036
+ "li",
2037
+ {
2038
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2039
+ children: [
2040
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckIcon, { className: "w-4 h-4 text-primary shrink-0 mt-1" }),
2041
+ item
2042
+ ]
2043
+ },
2044
+ i
2045
+ )) })
2046
+ ] }),
2047
+ adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2048
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "O que n\xE3o est\xE1 incluso" }),
2049
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2050
+ "li",
2051
+ {
2052
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2053
+ children: [
2054
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "w-4 h-4 text-destructive shrink-0 mt-1" }),
2055
+ item
2056
+ ]
2057
+ },
2058
+ i
2059
+ )) })
2060
+ ] }),
2061
+ adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2062
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Pol\xEDtica de cancelamento" }),
2063
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.cancellationPolicy.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2064
+ "li",
2065
+ {
2066
+ className: "flex items-start gap-2 text-sm text-muted-foreground font-sans",
2067
+ children: [
2068
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2.5" }),
2069
+ item
2070
+ ]
2071
+ },
2072
+ i
2073
+ )) })
2074
+ ] })
2075
+ ] }),
2076
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border px-5 lg:px-6 py-5 flex flex-col gap-4", children: [
2077
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3 flex-wrap", children: [
2078
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2079
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Travellers" }),
2080
+ adventure.formName && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-semibold text-muted-foreground/50 font-heading tracking-wide", children: [
2081
+ "\xB7 ",
2082
+ adventure.formName
2083
+ ] })
2084
+ ] }),
2085
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
2086
+ onAddContactAsTraveller && /* @__PURE__ */ jsxRuntime.jsxs(
2087
+ "button",
2088
+ {
2089
+ type: "button",
2090
+ onClick: () => onAddContactAsTraveller(adventure.id),
2091
+ className: "flex items-center gap-1.5 rounded-full border border-border px-3 py-1.5 text-xs font-ui text-muted-foreground hover:border-primary hover:text-primary hover:bg-primary/5 transition-colors",
2092
+ children: [
2093
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserPlusIcon, { className: "w-3 h-3" }),
2094
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:inline", children: "Add contact as traveller" }),
2095
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sm:hidden", children: "Add contact" })
2096
+ ]
2097
+ }
2098
+ ),
2099
+ /* @__PURE__ */ jsxRuntime.jsxs(
2100
+ "button",
2101
+ {
2102
+ type: "button",
2103
+ onClick: () => setAddModalOpen(true),
2104
+ className: "flex items-center gap-1.5 rounded-full border border-border px-3 py-1.5 text-xs font-ui text-primary hover:border-primary hover:bg-primary/5 transition-colors",
2105
+ children: [
2106
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlusIcon, { className: "w-3 h-3" }),
2107
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "hidden sm:inline", children: "More travellers" }),
2108
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sm:hidden", children: "Add" })
2109
+ ]
2110
+ }
2111
+ )
2112
+ ] })
2113
+ ] }),
2114
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col divide-y divide-border", children: adventure.travellers.map((t) => /* @__PURE__ */ jsxRuntime.jsxs(
2115
+ "div",
2116
+ {
2117
+ className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3 py-3 first:pt-0",
2118
+ children: [
2119
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3 min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 min-w-0 flex-1", children: [
2120
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [
2121
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold text-foreground font-ui truncate", children: [
2122
+ t.firstName,
2123
+ " ",
2124
+ t.lastName
2125
+ ] }),
2126
+ t.isChild && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold font-heading rounded-full px-2 py-0.5 bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400 shrink-0", children: "Child" })
2127
+ ] }),
2128
+ t.formUrl && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2129
+ /* @__PURE__ */ jsxRuntime.jsxs(
2130
+ "a",
2131
+ {
2132
+ href: t.formUrl,
2133
+ target: "_blank",
2134
+ rel: "noopener noreferrer",
2135
+ className: "flex items-center gap-1 text-xs text-primary hover:text-primary/80 transition-colors font-ui",
2136
+ children: [
2137
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLinkIcon, { className: "w-3 h-3" }),
2138
+ "Open"
2139
+ ]
2140
+ }
2141
+ ),
2142
+ /* @__PURE__ */ jsxRuntime.jsx(
2143
+ "button",
2144
+ {
2145
+ type: "button",
2146
+ onClick: () => handleCopyUrl(t.formUrl),
2147
+ className: "flex items-center text-xs text-muted-foreground hover:text-primary transition-colors font-ui",
2148
+ "aria-label": "Copy form URL",
2149
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CopyIcon, { className: "w-3 h-3" })
2150
+ }
2151
+ )
2152
+ ] })
2153
+ ] }) }),
2154
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 sm:gap-3 justify-between sm:justify-end", children: [
2155
+ /* @__PURE__ */ jsxRuntime.jsx(
2156
+ "span",
2157
+ {
2158
+ className: cn(
2159
+ "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-bold font-heading uppercase tracking-wider shrink-0",
2160
+ t.status === "completed" ? "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400" : "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400"
2161
+ ),
2162
+ children: t.status
2163
+ }
2164
+ ),
2165
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [
2166
+ onEditTraveller && /* @__PURE__ */ jsxRuntime.jsx(
2167
+ "button",
2168
+ {
2169
+ type: "button",
2170
+ onClick: () => onEditTraveller(adventure.id, t.id),
2171
+ className: "flex h-8 w-8 sm:h-7 sm:w-7 items-center justify-center rounded-lg text-muted-foreground hover:text-primary hover:bg-primary/10 transition-colors",
2172
+ "aria-label": `Edit ${t.firstName}`,
2173
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PencilIcon, { className: "w-3.5 h-3.5" })
2174
+ }
2175
+ ),
2176
+ onRemoveTraveller && /* @__PURE__ */ jsxRuntime.jsx(
2177
+ "button",
2178
+ {
2179
+ type: "button",
2180
+ onClick: () => onRemoveTraveller(adventure.id, t.id),
2181
+ className: "flex h-8 w-8 sm:h-7 sm:w-7 items-center justify-center rounded-lg text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",
2182
+ "aria-label": `Delete ${t.firstName}`,
2183
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2Icon, { className: "w-3.5 h-3.5" })
2184
+ }
2185
+ ),
2186
+ onRemoveTraveller && /* @__PURE__ */ jsxRuntime.jsx(
2187
+ "button",
2188
+ {
2189
+ type: "button",
2190
+ onClick: () => onRemoveTraveller(adventure.id, t.id),
2191
+ className: "flex h-8 w-8 sm:h-7 sm:w-7 items-center justify-center rounded-lg text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors",
2192
+ "aria-label": `Remove ${t.firstName} from adventure`,
2193
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserMinusIcon, { className: "w-3.5 h-3.5" })
2194
+ }
2195
+ )
2196
+ ] })
2197
+ ] })
2198
+ ]
2199
+ },
2200
+ t.id
2201
+ )) }),
2202
+ adventure.suggestedTravellers && adventure.suggestedTravellers.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 pt-2", children: [
2203
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui", children: "Add to this adventure" }),
2204
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: adventure.suggestedTravellers.map((st) => /* @__PURE__ */ jsxRuntime.jsxs(
2205
+ "button",
2206
+ {
2207
+ type: "button",
2208
+ onClick: () => onAddSuggestedTraveller == null ? void 0 : onAddSuggestedTraveller(adventure.id, st.id),
2209
+ className: "flex items-center gap-1.5 rounded-full border border-border px-3 py-1.5 text-xs font-ui text-foreground hover:border-primary hover:text-primary hover:bg-primary/5 transition-colors",
2210
+ children: [
2211
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PlusIcon, { className: "w-3 h-3" }),
2212
+ st.firstName,
2213
+ " ",
2214
+ st.lastName
2215
+ ]
2216
+ },
2217
+ st.id
2218
+ )) })
2219
+ ] }),
2220
+ adventure.travellers.length > 0 && totalSlots > 0 && (() => {
2221
+ const completed = adventure.travellers.filter((t) => t.status === "completed").length;
2222
+ const percent = Math.round(completed / totalSlots * 100);
2223
+ const isComplete = completed === totalSlots;
2224
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 mt-1", children: [
2225
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 h-2 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
2226
+ "div",
2227
+ {
2228
+ className: "h-full rounded-full bg-primary transition-all duration-500",
2229
+ style: { width: `${percent}%` }
2230
+ }
2231
+ ) }),
2232
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn(
2233
+ "text-xs font-semibold font-ui shrink-0 flex items-center gap-1",
2234
+ isComplete ? "text-primary" : "text-destructive"
2235
+ ), children: [
2236
+ completed,
2237
+ " of ",
2238
+ totalSlots,
2239
+ " travellers registered",
2240
+ !isComplete && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangleIcon, { className: "w-3 h-3" })
2241
+ ] })
2242
+ ] });
2243
+ })()
2244
+ ] }),
2245
+ /* @__PURE__ */ jsxRuntime.jsx(Dialog, { open: addModalOpen, onOpenChange: setAddModalOpen, children: /* @__PURE__ */ jsxRuntime.jsxs(DialogContent, { className: "sm:max-w-md", children: [
2246
+ /* @__PURE__ */ jsxRuntime.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(DialogTitle, { className: "font-heading text-xl", children: "Add traveller" }) }),
2247
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-4 pt-2", children: [
2248
+ /* @__PURE__ */ jsxRuntime.jsx(
2249
+ FloatingInput,
2250
+ {
2251
+ label: "First name",
2252
+ required: true,
2253
+ value: newTraveller.firstName,
2254
+ onChange: (e) => setField("firstName", e.target.value)
2255
+ }
2256
+ ),
2257
+ /* @__PURE__ */ jsxRuntime.jsx(
2258
+ FloatingInput,
2259
+ {
2260
+ label: "Last name",
2261
+ required: true,
2262
+ value: newTraveller.lastName,
2263
+ onChange: (e) => setField("lastName", e.target.value)
2264
+ }
2265
+ ),
2266
+ /* @__PURE__ */ jsxRuntime.jsx(
2267
+ FloatingInput,
2268
+ {
2269
+ label: "Passport (optional)",
2270
+ value: newTraveller.passport,
2271
+ onChange: (e) => setField("passport", e.target.value)
2272
+ }
2273
+ ),
2274
+ /* @__PURE__ */ jsxRuntime.jsxs(
2275
+ FloatingSelect,
2276
+ {
2277
+ label: "Type (adult/child/senior)",
2278
+ value: newTraveller.type,
2279
+ onChange: (e) => setField("type", e.target.value),
2280
+ children: [
2281
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "adult", children: "Adult" }),
2282
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "child", children: "Child" }),
2283
+ /* @__PURE__ */ jsxRuntime.jsx("option", { value: "senior", children: "Senior" })
2284
+ ]
2285
+ }
2286
+ ),
2287
+ /* @__PURE__ */ jsxRuntime.jsx(
2288
+ FloatingInput,
2289
+ {
2290
+ label: "Email",
2291
+ type: "email",
2292
+ required: true,
2293
+ value: newTraveller.email,
2294
+ onChange: (e) => setField("email", e.target.value)
2295
+ }
2296
+ ),
2297
+ /* @__PURE__ */ jsxRuntime.jsx(
2298
+ FloatingInput,
2299
+ {
2300
+ label: "Date of birth",
2301
+ type: "date",
2302
+ value: newTraveller.dateOfBirth,
2303
+ onChange: (e) => setField("dateOfBirth", e.target.value)
2304
+ }
2305
+ ),
2306
+ /* @__PURE__ */ jsxRuntime.jsx(
2307
+ FloatingInput,
2308
+ {
2309
+ label: "Phone (optional)",
2310
+ type: "tel",
2311
+ value: newTraveller.phone,
2312
+ onChange: (e) => setField("phone", e.target.value)
2313
+ }
2314
+ ),
2315
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-3 pt-2", children: [
2316
+ /* @__PURE__ */ jsxRuntime.jsx(
2317
+ "button",
2318
+ {
2319
+ type: "button",
2320
+ onClick: () => setAddModalOpen(false),
2321
+ className: "text-sm font-ui text-muted-foreground hover:text-foreground transition-colors",
2322
+ children: "Cancel"
2323
+ }
2324
+ ),
2325
+ /* @__PURE__ */ jsxRuntime.jsx(
2326
+ "button",
2327
+ {
2328
+ type: "button",
2329
+ onClick: () => {
2330
+ setAddModalOpen(false);
2331
+ setNewTraveller({
2332
+ firstName: "",
2333
+ lastName: "",
2334
+ passport: "",
2335
+ type: "adult",
2336
+ email: "",
2337
+ dateOfBirth: "",
2338
+ phone: ""
2339
+ });
2340
+ },
2341
+ className: "rounded-full bg-primary px-6 py-2.5 text-sm font-bold text-primary-foreground font-heading hover:bg-primary/90 transition-colors",
2342
+ children: "Add"
2343
+ }
2344
+ )
2345
+ ] })
2346
+ ] })
2347
+ ] }) })
2348
+ ] });
2349
+ }
2350
+ function OrderSummary({
2351
+ adventures,
2352
+ summaryLineItems,
2353
+ subtotal,
2354
+ total,
2355
+ depositInfo
2356
+ }) {
2357
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 lg:p-6 flex flex-col gap-4", children: [
2358
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Order Summary" }),
2359
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, {}),
2360
+ adventures.map((adventure, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2361
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-bold text-foreground font-heading", children: adventure.title }),
2362
+ adventure.lineItems && adventure.lineItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-1.5 pl-3 border-l-2 border-primary/20 ml-1", children: adventure.lineItems.map((item, j) => /* @__PURE__ */ jsxRuntime.jsxs(
2363
+ "div",
2364
+ {
2365
+ className: "flex items-start justify-between gap-3",
2366
+ children: [
2367
+ /* @__PURE__ */ jsxRuntime.jsx(
2368
+ "span",
2369
+ {
2370
+ className: cn(
2371
+ "text-sm font-sans leading-tight",
2372
+ item.isBold ? "font-semibold text-foreground" : "text-muted-foreground"
2373
+ ),
2374
+ children: item.label
2375
+ }
2376
+ ),
2377
+ /* @__PURE__ */ jsxRuntime.jsxs(
2378
+ "span",
2379
+ {
2380
+ className: cn(
2381
+ "text-sm font-sans shrink-0",
2382
+ item.isDiscount ? "text-green-600 dark:text-green-400" : item.isBold ? "font-semibold text-foreground" : "text-foreground"
2383
+ ),
2384
+ children: [
2385
+ item.isDiscount ? "\u2212" : "",
2386
+ item.price
2387
+ ]
2388
+ }
2389
+ )
2390
+ ]
2391
+ },
2392
+ j
2393
+ )) }),
2394
+ adventure.subtotal && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mt-1", children: [
2395
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Subtotal this adventure" }),
2396
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: adventure.subtotal })
2397
+ ] }),
2398
+ i < adventures.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "mt-2" })
2399
+ ] }, adventure.id)),
2400
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, {}),
2401
+ summaryLineItems && summaryLineItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2402
+ summaryLineItems.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2403
+ /* @__PURE__ */ jsxRuntime.jsx(
2404
+ "span",
2405
+ {
2406
+ className: cn(
2407
+ "text-sm font-sans",
2408
+ item.isBold ? "font-semibold text-foreground" : "text-muted-foreground"
2409
+ ),
2410
+ children: item.label
2411
+ }
2412
+ ),
2413
+ /* @__PURE__ */ jsxRuntime.jsxs(
2414
+ "span",
2415
+ {
2416
+ className: cn(
2417
+ "text-sm font-sans",
2418
+ item.isDiscount ? "text-green-600 dark:text-green-400" : item.isBold ? "font-semibold text-foreground" : "text-foreground"
2419
+ ),
2420
+ children: [
2421
+ item.isDiscount ? "\u2212" : "",
2422
+ item.price
2423
+ ]
2424
+ }
2425
+ )
2426
+ ] }, i)),
2427
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, {})
2428
+ ] }),
2429
+ subtotal && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2430
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Subtotal" }),
2431
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: subtotal })
2432
+ ] }),
2433
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between pt-1", children: [
2434
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-bold text-foreground font-heading", children: "Total" }),
2435
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-2xl font-black text-primary font-heading", children: total })
2436
+ ] }),
2437
+ depositInfo && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 rounded-lg bg-muted/50 border border-border p-4", children: [
2438
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2439
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-muted-foreground font-sans", children: [
2440
+ "Deposit (",
2441
+ depositInfo.depositPercent,
2442
+ "%)"
2443
+ ] }),
2444
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.depositAmount })
2445
+ ] }),
2446
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2447
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Remaining balance" }),
2448
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.remainingAmount })
2449
+ ] }),
2450
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2451
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Balance due" }),
2452
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.balanceDueDate })
2453
+ ] })
2454
+ ] })
2455
+ ] });
2456
+ }
2457
+ function BookingDetails({
2458
+ bookingId,
2459
+ status,
2460
+ createdAt,
2461
+ contact,
2462
+ agentName,
2463
+ agentContactUrl,
2464
+ adventures,
2465
+ summaryLineItems,
2466
+ subtotal,
2467
+ total,
2468
+ depositInfo,
2469
+ onAddContactAsTraveller,
2470
+ onEditTraveller,
2471
+ onRemoveTraveller,
2472
+ onAddSuggestedTraveller,
2473
+ onPayBalance,
2474
+ onCancelRequest,
2475
+ className
2476
+ }) {
2477
+ var _a, _b, _c;
2478
+ const people = totalPeople(adventures);
2479
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2480
+ "div",
2481
+ {
2482
+ className: cn("w-full max-w-5xl mx-auto flex flex-col gap-6 px-4 sm:px-6 lg:px-0", className),
2483
+ children: [
2484
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-4 flex-wrap", children: [
2485
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
2486
+ /* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-2xl font-black text-foreground font-heading leading-tight", children: [
2487
+ "Booking",
2488
+ " ",
2489
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-primary", children: [
2490
+ "#",
2491
+ bookingId
2492
+ ] })
2493
+ ] }),
2494
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground font-sans", children: [
2495
+ "Created on ",
2496
+ createdAt
2497
+ ] })
2498
+ ] }),
2499
+ /* @__PURE__ */ jsxRuntime.jsx(StatusBadge, { status })
2500
+ ] }),
2501
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-3", children: [
2502
+ /* @__PURE__ */ jsxRuntime.jsxs(InfoCard, { label: "Contact", children: [
2503
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: contact.name }),
2504
+ contact.email && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground font-sans truncate", children: contact.email })
2505
+ ] }),
2506
+ agentName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border bg-card p-4 flex items-center gap-3.5 min-w-0", children: [
2507
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary font-heading font-bold text-sm uppercase", children: agentName.charAt(0) }),
2508
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
2509
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Your Agent" }),
2510
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold text-foreground font-sans", children: agentName })
2511
+ ] }),
2512
+ agentContactUrl && /* @__PURE__ */ jsxRuntime.jsxs(
2513
+ "a",
2514
+ {
2515
+ href: agentContactUrl,
2516
+ target: "_blank",
2517
+ rel: "noopener noreferrer",
2518
+ className: "ml-auto shrink-0 flex items-center gap-1.5 rounded-full bg-primary/10 px-3.5 py-1.5 text-xs font-semibold text-primary font-ui transition-colors hover:bg-primary/20",
2519
+ children: [
2520
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleIcon, { className: "w-3.5 h-3.5" }),
2521
+ "Contact"
2522
+ ]
2523
+ }
2524
+ )
2525
+ ] }),
2526
+ /* @__PURE__ */ jsxRuntime.jsxs(InfoCard, { label: "Total People", children: [
2527
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2528
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UsersIcon, { className: "w-4 h-4 text-primary shrink-0" }),
2529
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold", children: [
2530
+ people.total,
2531
+ " person(s)"
2532
+ ] })
2533
+ ] }),
2534
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground font-sans", children: [
2535
+ people.adults > 0 ? `Adults: ${people.adults}` : null,
2536
+ people.children > 0 ? `Children: ${people.children}` : null,
2537
+ people.seniors > 0 ? `Seniors: ${people.seniors}` : null
2538
+ ].filter(Boolean).join(" \xB7 ") })
2539
+ ] })
2540
+ ] }),
2541
+ /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "flex flex-col gap-4", children: [
2542
+ /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: [
2543
+ "Adventures (",
2544
+ adventures.length,
2545
+ ")"
2546
+ ] }),
2547
+ adventures.map((adventure) => /* @__PURE__ */ jsxRuntime.jsx(
2548
+ AdventureSection,
2549
+ {
2550
+ adventure,
2551
+ onAddContactAsTraveller,
2552
+ onEditTraveller,
2553
+ onRemoveTraveller,
2554
+ onAddSuggestedTraveller
2555
+ },
2556
+ adventure.id
2557
+ ))
2558
+ ] }),
2559
+ /* @__PURE__ */ jsxRuntime.jsx(
2560
+ OrderSummary,
2561
+ {
2562
+ adventures,
2563
+ summaryLineItems,
2564
+ subtotal,
2565
+ total,
2566
+ depositInfo
2567
+ }
2568
+ ),
2569
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 lg:p-6 flex flex-col gap-4", children: [
2570
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Responsible Person" }),
2571
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-3", children: [
2572
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2573
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Name" }),
2574
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold text-foreground font-sans", children: contact.name })
2575
+ ] }),
2576
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2577
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Email" }),
2578
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground font-sans truncate", children: (_a = contact.email) != null ? _a : "\u2014" })
2579
+ ] }),
2580
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2581
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Phone" }),
2582
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground font-sans", children: (_b = contact.phone) != null ? _b : "\u2014" })
2583
+ ] }),
2584
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2585
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Country" }),
2586
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground font-sans", children: (_c = contact.country) != null ? _c : "\u2014" })
2587
+ ] }),
2588
+ contact.passport && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2589
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Passport / CPF" }),
2590
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground font-sans", children: contact.passport })
2591
+ ] })
2592
+ ] })
2593
+ ] }),
2594
+ (onPayBalance || onCancelRequest) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", children: [
2595
+ depositInfo && !depositInfo.isPaidInFull && onPayBalance && /* @__PURE__ */ jsxRuntime.jsxs(
2596
+ "button",
2597
+ {
2598
+ type: "button",
2599
+ onClick: onPayBalance,
2600
+ className: cn(
2601
+ "w-full rounded-full bg-primary py-3.5 text-center text-sm font-bold uppercase tracking-wide",
2602
+ "text-primary-foreground font-heading transition-colors hover:bg-primary/90",
2603
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2604
+ "flex items-center justify-center gap-2"
2605
+ ),
2606
+ children: [
2607
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CreditCardIcon, { className: "w-4 h-4" }),
2608
+ "Pay remaining balance \u2014 ",
2609
+ depositInfo.remainingAmount
2610
+ ]
2611
+ }
2612
+ ),
2613
+ onCancelRequest && status !== "cancelled" && /* @__PURE__ */ jsxRuntime.jsxs(
2614
+ "button",
2615
+ {
2616
+ type: "button",
2617
+ onClick: onCancelRequest,
2618
+ className: "flex items-center gap-1.5 text-xs font-ui text-muted-foreground hover:text-destructive transition-colors underline underline-offset-2",
2619
+ children: [
2620
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircleIcon, { className: "w-3 h-3" }),
2621
+ "Request cancellation"
2622
+ ]
2623
+ }
2624
+ )
2625
+ ] })
2626
+ ]
2627
+ }
2628
+ );
2629
+ }
2630
+ var DEFAULT_LOGO = "/logo-planetaexo.png";
2631
+ function BookingConfirmationEmail({
2632
+ recipientName,
2633
+ addTravellersUrl,
2634
+ logoUrl = DEFAULT_LOGO,
2635
+ bookingNumber,
2636
+ activity,
2637
+ adventure,
2638
+ startingDate,
2639
+ numberOfPeople,
2640
+ host,
2641
+ className
2642
+ }) {
2643
+ const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsxRuntime.jsx(
2644
+ "a",
2645
+ {
2646
+ href: addTravellersUrl,
2647
+ 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",
2648
+ children: "Add travellers to your booking"
2649
+ }
2650
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
2651
+ "span",
2652
+ {
2653
+ className: "inline-flex items-center justify-center rounded-lg bg-primary px-6 py-3 text-sm font-bold text-primary-foreground font-heading",
2654
+ role: "presentation",
2655
+ children: "Add travellers to your booking"
2656
+ }
2657
+ );
2658
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2659
+ "div",
2660
+ {
2661
+ className: cn(
2662
+ "max-w-xl mx-auto bg-white text-foreground font-sans text-base leading-relaxed",
2663
+ className
2664
+ ),
2665
+ children: [
2666
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 mb-8 flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
2667
+ "img",
2668
+ {
2669
+ src: logoUrl,
2670
+ alt: "PlanetaEXO",
2671
+ className: "h-[70px] w-auto object-contain"
2672
+ }
2673
+ ) }),
2674
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mb-4", children: [
2675
+ "Hi ",
2676
+ recipientName,
2677
+ ","
2678
+ ] }),
2679
+ /* @__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." }),
2680
+ /* @__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." }),
2681
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-8", children: AddTravellersCta }),
2682
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mb-8" }),
2683
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 font-heading font-bold text-foreground", children: "\u{1F4DD} Here's a quick summary of your booking:" }),
2684
+ /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full text-sm mb-8", children: /* @__PURE__ */ jsxRuntime.jsxs("tbody", { className: "divide-y divide-border", children: [
2685
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2686
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Booking Number:" }),
2687
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: bookingNumber })
2688
+ ] }),
2689
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2690
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Activity:" }),
2691
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: activity })
2692
+ ] }),
2693
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2694
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Adventure:" }),
2695
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: adventure })
2696
+ ] }),
2697
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2698
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Starting Date:" }),
2699
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: startingDate })
2700
+ ] }),
2701
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2702
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Number of People:" }),
2703
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: numberOfPeople })
2704
+ ] }),
2705
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2706
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Host:" }),
2707
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-1 font-medium text-foreground", children: host })
2708
+ ] })
2709
+ ] }) }),
2710
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mb-8" }),
2711
+ /* @__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." }),
2712
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "If you have any questions, just reply to this email \u2014 happy to help." })
2713
+ ]
2714
+ }
2715
+ );
2716
+ }
2717
+ var DEFAULT_LOGO2 = "/logo-planetaexo.png";
2718
+ function BookingConfirmation({
2719
+ recipientName,
2720
+ logoUrl = DEFAULT_LOGO2,
2721
+ bookingReference,
2722
+ adventures,
2723
+ summaryLineItems,
2724
+ subtotal,
2725
+ total,
2726
+ depositInfo,
2727
+ agent,
2728
+ viewBookingUrl,
2729
+ className
2730
+ }) {
2731
+ const allTravellers = adventures.flatMap((a) => {
2732
+ var _a;
2733
+ return (_a = a.travellers) != null ? _a : [];
2734
+ });
2735
+ const ViewBookingCta = viewBookingUrl ? /* @__PURE__ */ jsxRuntime.jsx(
2736
+ "a",
2737
+ {
2738
+ href: viewBookingUrl,
2739
+ 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",
2740
+ children: "View booking details"
2741
+ }
2742
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
2743
+ "span",
2744
+ {
2745
+ 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",
2746
+ role: "presentation",
2747
+ children: "View booking details"
2748
+ }
2749
+ );
2750
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2751
+ "div",
2752
+ {
2753
+ className: cn(
2754
+ "max-w-xl mx-auto bg-white text-foreground font-sans text-base leading-relaxed",
2755
+ className
2756
+ ),
2757
+ children: [
2758
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-10 pb-8 flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
2759
+ "img",
2760
+ {
2761
+ src: logoUrl,
2762
+ alt: "PlanetaEXO",
2763
+ className: "h-[70px] w-auto object-contain"
2764
+ }
2765
+ ) }),
2766
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8", children: [
2767
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mb-5 text-base", children: [
2768
+ "Hi ",
2769
+ recipientName,
2770
+ ","
2771
+ ] }),
2772
+ /* @__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." }),
2773
+ /* @__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." }),
2774
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-10", children: ViewBookingCta })
2775
+ ] }),
2776
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2777
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8", children: [
2778
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4CB} Next Steps" }),
2779
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl border border-border p-5 flex flex-col gap-4", children: [
2780
+ "Each traveller will receive a separate email with a link to complete their individual registration.",
2781
+ "Make sure everyone completes their registration so we can organise everything properly.",
2782
+ "You will receive a final confirmation once all travellers are registered and ready to go."
2783
+ ].map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3.5", children: [
2784
+ /* @__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 }),
2785
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/80 leading-relaxed", children: step })
2786
+ ] }, i)) })
2787
+ ] }),
2788
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2789
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8", children: [
2790
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4DD} Booking Summary" }),
2791
+ /* @__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: [
2792
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2793
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Booking Number" }),
2794
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-semibold text-primary", children: bookingReference })
2795
+ ] }),
2796
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2797
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Adventures" }),
2798
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: adventures.length })
2799
+ ] }),
2800
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2801
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Total Travellers" }),
2802
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: allTravellers.length })
2803
+ ] }),
2804
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
2805
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 text-muted-foreground font-ui bg-muted/30", children: "Agent" }),
2806
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-3 px-5 font-medium text-foreground", children: agent })
2807
+ ] })
2808
+ ] }) }) })
2809
+ ] }),
2810
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2811
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-8 py-8 flex flex-col gap-6", children: adventures.map((adventure) => {
2812
+ var _a;
2813
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2814
+ "div",
2815
+ {
2816
+ className: "rounded-2xl border border-border bg-card overflow-hidden",
2817
+ children: [
2818
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/7] overflow-hidden bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(
2819
+ "img",
2820
+ {
2821
+ src: adventure.image,
2822
+ alt: (_a = adventure.imageAlt) != null ? _a : adventure.title,
2823
+ className: "w-full h-full object-cover"
2824
+ }
2825
+ ) }),
2826
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-5 flex flex-col gap-2.5", children: [
2827
+ adventure.reference && /* @__PURE__ */ jsxRuntime.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 }),
2828
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl font-bold text-foreground font-heading leading-snug mt-0.5", children: adventure.title }),
2829
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2830
+ /* @__PURE__ */ jsxRuntime.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: [
2831
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", ry: "2" }),
2832
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "16", x2: "16", y1: "2", y2: "6" }),
2833
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "8", x2: "8", y1: "2", y2: "6" }),
2834
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "3", x2: "21", y1: "10", y2: "10" })
2835
+ ] }),
2836
+ adventure.dateFrom,
2837
+ " \u2192 ",
2838
+ adventure.dateTo
2839
+ ] }),
2840
+ adventure.location && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2841
+ /* @__PURE__ */ jsxRuntime.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: [
2842
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z" }),
2843
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "10", r: "3" })
2844
+ ] }),
2845
+ adventure.location
2846
+ ] }),
2847
+ adventure.slots && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2848
+ /* @__PURE__ */ jsxRuntime.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: [
2849
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
2850
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "7", r: "4" }),
2851
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }),
2852
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
2853
+ ] }),
2854
+ [
2855
+ adventure.slots.adults ? `${adventure.slots.adults} adult(s)` : null,
2856
+ adventure.slots.children ? `${adventure.slots.children} child(ren)` : null
2857
+ ].filter(Boolean).join(" \xB7 ")
2858
+ ] }),
2859
+ adventure.partner && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "flex items-center gap-1.5 text-sm text-muted-foreground font-sans leading-none", children: [
2860
+ /* @__PURE__ */ jsxRuntime.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: [
2861
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
2862
+ /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: "16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76" })
2863
+ ] }),
2864
+ adventure.partner
2865
+ ] }),
2866
+ adventure.travellers && adventure.travellers.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2867
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border my-1" }),
2868
+ /* @__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: "Travellers" }),
2870
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-1.5", children: adventure.travellers.map((t) => /* @__PURE__ */ jsxRuntime.jsxs(
2871
+ "div",
2872
+ {
2873
+ className: "flex items-center justify-between",
2874
+ children: [
2875
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-foreground font-sans", children: [
2876
+ t.firstName,
2877
+ " ",
2878
+ t.lastName
2879
+ ] }),
2880
+ 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" })
2881
+ ]
2882
+ },
2883
+ t.id
2884
+ )) })
2885
+ ] })
2886
+ ] }),
2887
+ adventure.description && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2888
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border my-1" }),
2889
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2890
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Itinerary" }),
2891
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description })
2892
+ ] })
2893
+ ] }),
2894
+ adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2895
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que est\xE1 incluso" }),
2896
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2897
+ "li",
2898
+ {
2899
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2900
+ children: [
2901
+ /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }),
2902
+ item
2903
+ ]
2904
+ },
2905
+ i
2906
+ )) })
2907
+ ] }),
2908
+ adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
2909
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que n\xE3o est\xE1 incluso" }),
2910
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(
2911
+ "li",
2912
+ {
2913
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2914
+ children: [
2915
+ /* @__PURE__ */ jsxRuntime.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: [
2916
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6 6 18" }),
2917
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m6 6 12 12" })
2918
+ ] }),
2919
+ item
2920
+ ]
2921
+ },
2922
+ i
2923
+ )) })
2924
+ ] }),
2925
+ adventure.lineItems && adventure.lineItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2926
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border my-1" }),
2927
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2928
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-2", children: "Pricing" }),
2929
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
2930
+ adventure.lineItems.map((item, j) => /* @__PURE__ */ jsxRuntime.jsxs(
2931
+ "div",
2932
+ {
2933
+ className: "flex items-center justify-between",
2934
+ children: [
2935
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground font-sans", children: item.label }),
2936
+ /* @__PURE__ */ jsxRuntime.jsxs(
2937
+ "span",
2938
+ {
2939
+ className: cn(
2940
+ "text-sm font-medium font-sans whitespace-nowrap",
2941
+ item.isDiscount ? "text-green-600" : "text-foreground"
2942
+ ),
2943
+ children: [
2944
+ item.isDiscount ? "\u2212" : "",
2945
+ item.price
2946
+ ]
2947
+ }
2948
+ )
2949
+ ]
2950
+ },
2951
+ j
2952
+ )),
2953
+ adventure.subtotal && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between pt-2 mt-1 border-t border-border", children: [
2954
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-foreground font-heading", children: "Subtotal" }),
2955
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-foreground font-heading whitespace-nowrap", children: adventure.subtotal })
2956
+ ] })
2957
+ ] })
2958
+ ] })
2959
+ ] })
2960
+ ] })
2961
+ ]
2962
+ },
2963
+ adventure.id
2964
+ );
2965
+ }) }),
2966
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
2967
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8", children: [
2968
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-5 font-heading font-bold text-foreground text-lg", children: "\u{1F4B0} Payment Summary" }),
2969
+ /* @__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: [
2970
+ summaryLineItems && summaryLineItems.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2971
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: item.label }),
2972
+ /* @__PURE__ */ jsxRuntime.jsxs(
2973
+ "td",
2974
+ {
2975
+ className: cn(
2976
+ "py-2.5 px-4 text-right font-medium whitespace-nowrap",
2977
+ item.isDiscount ? "text-green-600" : "text-foreground"
2978
+ ),
2979
+ children: [
2980
+ item.isDiscount ? "\u2212" : "",
2981
+ item.price
2982
+ ]
2983
+ }
2984
+ )
2985
+ ] }, i)),
2986
+ subtotal && /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2987
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground font-ui", children: "Subtotal" }),
2988
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: subtotal })
2989
+ ] }),
2990
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "bg-muted/30", children: [
2991
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-4 px-4 font-bold text-foreground font-heading text-base", children: "Total" }),
2992
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-4 px-4 text-right font-bold text-primary font-heading text-xl whitespace-nowrap", children: total })
2993
+ ] })
2994
+ ] }) }) }),
2995
+ depositInfo && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border mt-4 overflow-hidden", children: [
2996
+ /* @__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" }) }),
2997
+ /* @__PURE__ */ jsxRuntime.jsx("table", { className: "w-full text-sm", children: /* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
2998
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
2999
+ /* @__PURE__ */ jsxRuntime.jsxs("td", { className: "py-2.5 px-4 text-muted-foreground", children: [
3000
+ "Deposit (",
3001
+ depositInfo.depositPercent,
3002
+ "%)"
3003
+ ] }),
3004
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.depositAmount })
3005
+ ] }),
3006
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b border-border", children: [
3007
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Remaining balance" }),
3008
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.remainingAmount })
3009
+ ] }),
3010
+ /* @__PURE__ */ jsxRuntime.jsxs(
3011
+ "tr",
3012
+ {
3013
+ className: cn(
3014
+ depositInfo.isPaidInFull && "border-b border-border"
3015
+ ),
3016
+ children: [
3017
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-muted-foreground", children: "Balance due" }),
3018
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "py-2.5 px-4 text-right font-medium text-foreground whitespace-nowrap", children: depositInfo.balanceDueDate })
3019
+ ]
3020
+ }
3021
+ ),
3022
+ depositInfo.isPaidInFull && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx(
3023
+ "td",
3024
+ {
3025
+ colSpan: 2,
3026
+ className: "py-3 px-4 text-center font-semibold text-green-600 bg-green-50",
3027
+ children: "\u2705 Paid in full"
3028
+ }
3029
+ ) })
3030
+ ] }) })
3031
+ ] })
3032
+ ] }),
3033
+ /* @__PURE__ */ jsxRuntime.jsx("hr", { className: "border-t border-border mx-8" }),
3034
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-8 pb-10", children: [
3035
+ /* @__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." }),
3036
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-base", children: [
3037
+ "If you have any questions, just reply to this email or contact",
3038
+ " ",
3039
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold", children: agent }),
3040
+ " \u2014 happy to help."
3041
+ ] })
3042
+ ] })
3043
+ ]
3044
+ }
3045
+ );
3046
+ }
1905
3047
 
3048
+ exports.BookingConfirmation = BookingConfirmation;
3049
+ exports.BookingConfirmationEmail = BookingConfirmationEmail;
3050
+ exports.BookingDetails = BookingDetails;
1906
3051
  exports.Offer = Offer;
1907
3052
  exports.OfferAdventureCard = OfferAdventureCard;
1908
3053
  exports.cn = cn;