@planetaexo/design-system 0.2.0 → 0.2.11

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,9 +1,14 @@
1
- import * as React3 from 'react';
2
- import { CalendarIcon, MapPinIcon, CheckIcon, XIcon, MapIcon, CheckCircle2Icon, ChevronRightIcon, UsersIcon, ArrowLeftIcon, MailIcon, PhoneIcon, ChevronDownIcon } from 'lucide-react';
1
+ import * as React4 from 'react';
2
+ import { format } from 'date-fns';
3
+ import { MapIcon, MessageCircleIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, XIcon, CalendarIcon, MapPinIcon, CheckIcon, CheckCircle2Icon, ChevronRightIcon, ArrowLeftIcon, MailIcon, PhoneIcon, CompassIcon, ChevronUpIcon, ChevronDownIcon, UserPlusIcon, PlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, SearchIcon, ChevronLeftIcon } from 'lucide-react';
3
4
  import { clsx } from 'clsx';
4
5
  import { twMerge } from 'tailwind-merge';
5
6
  import { Separator as Separator$1 } from '@base-ui/react/separator';
6
7
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
+ import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
9
+ import { Button as Button$1 } from '@base-ui/react/button';
10
+ import { cva } from 'class-variance-authority';
11
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
7
12
 
8
13
  var __defProp = Object.defineProperty;
9
14
  var __defProps = Object.defineProperties;
@@ -59,10 +64,346 @@ function Separator(_a) {
59
64
  }, props)
60
65
  );
61
66
  }
62
- var FloatingInput = React3.forwardRef(
67
+ var buttonVariants = cva(
68
+ "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
69
+ {
70
+ variants: {
71
+ variant: {
72
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
73
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
74
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
75
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
76
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
77
+ link: "text-primary underline-offset-4 hover:underline"
78
+ },
79
+ size: {
80
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
81
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
82
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
83
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
84
+ icon: "size-8",
85
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
86
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
87
+ "icon-lg": "size-9"
88
+ }
89
+ },
90
+ defaultVariants: {
91
+ variant: "default",
92
+ size: "default"
93
+ }
94
+ }
95
+ );
96
+ function Button(_a) {
97
+ var _b = _a, {
98
+ className,
99
+ variant = "default",
100
+ size = "default"
101
+ } = _b, props = __objRest(_b, [
102
+ "className",
103
+ "variant",
104
+ "size"
105
+ ]);
106
+ return /* @__PURE__ */ jsx(
107
+ Button$1,
108
+ __spreadValues({
109
+ "data-slot": "button",
110
+ className: cn(buttonVariants({ variant, size, className }))
111
+ }, props)
112
+ );
113
+ }
114
+ function Dialog(_a) {
115
+ var props = __objRest(_a, []);
116
+ return /* @__PURE__ */ jsx(Dialog$1.Root, __spreadValues({ "data-slot": "dialog" }, props));
117
+ }
118
+ function DialogPortal(_a) {
119
+ var props = __objRest(_a, []);
120
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, __spreadValues({ "data-slot": "dialog-portal" }, props));
121
+ }
122
+ function DialogClose(_a) {
123
+ var props = __objRest(_a, []);
124
+ return /* @__PURE__ */ jsx(Dialog$1.Close, __spreadValues({ "data-slot": "dialog-close" }, props));
125
+ }
126
+ function DialogOverlay(_a) {
127
+ var _b = _a, {
128
+ className
129
+ } = _b, props = __objRest(_b, [
130
+ "className"
131
+ ]);
132
+ return /* @__PURE__ */ jsx(
133
+ Dialog$1.Backdrop,
134
+ __spreadValues({
135
+ "data-slot": "dialog-overlay",
136
+ className: cn(
137
+ "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
138
+ className
139
+ )
140
+ }, props)
141
+ );
142
+ }
143
+ function DialogContent(_a) {
144
+ var _b = _a, {
145
+ className,
146
+ children,
147
+ showCloseButton = true
148
+ } = _b, props = __objRest(_b, [
149
+ "className",
150
+ "children",
151
+ "showCloseButton"
152
+ ]);
153
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [
154
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
155
+ /* @__PURE__ */ jsxs(
156
+ Dialog$1.Popup,
157
+ __spreadProps(__spreadValues({
158
+ "data-slot": "dialog-content",
159
+ className: cn(
160
+ "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-background p-4 text-sm ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
161
+ className
162
+ )
163
+ }, props), {
164
+ children: [
165
+ children,
166
+ showCloseButton && /* @__PURE__ */ jsxs(
167
+ Dialog$1.Close,
168
+ {
169
+ "data-slot": "dialog-close",
170
+ render: /* @__PURE__ */ jsx(
171
+ Button,
172
+ {
173
+ variant: "ghost",
174
+ className: "absolute top-2 right-2",
175
+ size: "icon-sm"
176
+ }
177
+ ),
178
+ children: [
179
+ /* @__PURE__ */ jsx(
180
+ XIcon,
181
+ {}
182
+ ),
183
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
184
+ ]
185
+ }
186
+ )
187
+ ]
188
+ })
189
+ )
190
+ ] });
191
+ }
192
+ function DialogHeader(_a) {
193
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
194
+ return /* @__PURE__ */ jsx(
195
+ "div",
196
+ __spreadValues({
197
+ "data-slot": "dialog-header",
198
+ className: cn("flex flex-col gap-2", className)
199
+ }, props)
200
+ );
201
+ }
202
+ function DialogTitle(_a) {
203
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
204
+ return /* @__PURE__ */ jsx(
205
+ Dialog$1.Title,
206
+ __spreadValues({
207
+ "data-slot": "dialog-title",
208
+ className: cn("text-base leading-none font-medium", className)
209
+ }, props)
210
+ );
211
+ }
212
+ function Calendar(_a) {
213
+ var _b = _a, {
214
+ className,
215
+ classNames,
216
+ showOutsideDays = true,
217
+ captionLayout = "label",
218
+ buttonVariant = "ghost",
219
+ locale,
220
+ formatters,
221
+ components
222
+ } = _b, props = __objRest(_b, [
223
+ "className",
224
+ "classNames",
225
+ "showOutsideDays",
226
+ "captionLayout",
227
+ "buttonVariant",
228
+ "locale",
229
+ "formatters",
230
+ "components"
231
+ ]);
232
+ const defaultClassNames = getDefaultClassNames();
233
+ return /* @__PURE__ */ jsx(
234
+ DayPicker,
235
+ __spreadValues({
236
+ showOutsideDays,
237
+ className: cn(
238
+ "group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
239
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
240
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
241
+ className
242
+ ),
243
+ captionLayout,
244
+ locale,
245
+ formatters: __spreadValues({
246
+ formatMonthDropdown: (date) => date.toLocaleString(locale == null ? void 0 : locale.code, { month: "short" })
247
+ }, formatters),
248
+ classNames: __spreadValues({
249
+ root: cn("w-fit", defaultClassNames.root),
250
+ months: cn(
251
+ "relative flex flex-col gap-4 md:flex-row",
252
+ defaultClassNames.months
253
+ ),
254
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
255
+ nav: cn(
256
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
257
+ defaultClassNames.nav
258
+ ),
259
+ button_previous: cn(
260
+ buttonVariants({ variant: buttonVariant }),
261
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
262
+ defaultClassNames.button_previous
263
+ ),
264
+ button_next: cn(
265
+ buttonVariants({ variant: buttonVariant }),
266
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
267
+ defaultClassNames.button_next
268
+ ),
269
+ month_caption: cn(
270
+ "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",
271
+ defaultClassNames.month_caption
272
+ ),
273
+ dropdowns: cn(
274
+ "flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",
275
+ defaultClassNames.dropdowns
276
+ ),
277
+ dropdown_root: cn(
278
+ "relative rounded-(--cell-radius)",
279
+ defaultClassNames.dropdown_root
280
+ ),
281
+ dropdown: cn(
282
+ "absolute inset-0 bg-popover opacity-0",
283
+ defaultClassNames.dropdown
284
+ ),
285
+ caption_label: cn(
286
+ "font-medium select-none",
287
+ captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
288
+ defaultClassNames.caption_label
289
+ ),
290
+ table: "w-full border-collapse",
291
+ weekdays: cn("flex", defaultClassNames.weekdays),
292
+ weekday: cn(
293
+ "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",
294
+ defaultClassNames.weekday
295
+ ),
296
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
297
+ week_number_header: cn(
298
+ "w-(--cell-size) select-none",
299
+ defaultClassNames.week_number_header
300
+ ),
301
+ week_number: cn(
302
+ "text-[0.8rem] text-muted-foreground select-none",
303
+ defaultClassNames.week_number
304
+ ),
305
+ day: cn(
306
+ "group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
307
+ props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
308
+ defaultClassNames.day
309
+ ),
310
+ range_start: cn(
311
+ "relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",
312
+ defaultClassNames.range_start
313
+ ),
314
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
315
+ range_end: cn(
316
+ "relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",
317
+ defaultClassNames.range_end
318
+ ),
319
+ today: cn(
320
+ "rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",
321
+ defaultClassNames.today
322
+ ),
323
+ outside: cn(
324
+ "text-muted-foreground aria-selected:text-muted-foreground",
325
+ defaultClassNames.outside
326
+ ),
327
+ disabled: cn(
328
+ "text-muted-foreground opacity-50",
329
+ defaultClassNames.disabled
330
+ ),
331
+ hidden: cn("invisible", defaultClassNames.hidden)
332
+ }, classNames),
333
+ components: __spreadValues({
334
+ Root: (_a2) => {
335
+ var _b2 = _a2, { className: className2, rootRef } = _b2, props2 = __objRest(_b2, ["className", "rootRef"]);
336
+ return /* @__PURE__ */ jsx(
337
+ "div",
338
+ __spreadValues({
339
+ "data-slot": "calendar",
340
+ ref: rootRef,
341
+ className: cn(className2)
342
+ }, props2)
343
+ );
344
+ },
345
+ Chevron: (_c) => {
346
+ var _d = _c, { className: className2, orientation } = _d, props2 = __objRest(_d, ["className", "orientation"]);
347
+ if (orientation === "left") {
348
+ return /* @__PURE__ */ jsx(ChevronLeftIcon, __spreadValues({ className: cn("size-4", className2) }, props2));
349
+ }
350
+ if (orientation === "right") {
351
+ return /* @__PURE__ */ jsx(ChevronRightIcon, __spreadValues({ className: cn("size-4", className2) }, props2));
352
+ }
353
+ return /* @__PURE__ */ jsx(ChevronDownIcon, __spreadValues({ className: cn("size-4", className2) }, props2));
354
+ },
355
+ DayButton: (_e) => {
356
+ var props2 = __objRest(_e, []);
357
+ return /* @__PURE__ */ jsx(CalendarDayButton, __spreadValues({ locale }, props2));
358
+ },
359
+ WeekNumber: (_f) => {
360
+ var _g = _f, { children } = _g, props2 = __objRest(_g, ["children"]);
361
+ return /* @__PURE__ */ jsx("td", __spreadProps(__spreadValues({}, props2), { children: /* @__PURE__ */ jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) }));
362
+ }
363
+ }, components)
364
+ }, props)
365
+ );
366
+ }
367
+ function CalendarDayButton(_a) {
368
+ var _b = _a, {
369
+ className,
370
+ day,
371
+ modifiers,
372
+ locale
373
+ } = _b, props = __objRest(_b, [
374
+ "className",
375
+ "day",
376
+ "modifiers",
377
+ "locale"
378
+ ]);
379
+ const defaultClassNames = getDefaultClassNames();
380
+ const ref = React4.useRef(null);
381
+ React4.useEffect(() => {
382
+ var _a2;
383
+ if (modifiers.focused) (_a2 = ref.current) == null ? void 0 : _a2.focus();
384
+ }, [modifiers.focused]);
385
+ return /* @__PURE__ */ jsx(
386
+ Button,
387
+ __spreadValues({
388
+ variant: "ghost",
389
+ size: "icon",
390
+ "data-day": day.date.toLocaleDateString(locale == null ? void 0 : locale.code),
391
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
392
+ "data-range-start": modifiers.range_start,
393
+ "data-range-end": modifiers.range_end,
394
+ "data-range-middle": modifiers.range_middle,
395
+ className: cn(
396
+ "relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70",
397
+ defaultClassNames.day,
398
+ className
399
+ )
400
+ }, props)
401
+ );
402
+ }
403
+ var FloatingInput = React4.forwardRef(
63
404
  (_a, ref) => {
64
405
  var _b = _a, { label, error, id, className, required } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required"]);
65
- const inputId = id != null ? id : React3.useId();
406
+ const inputId = id != null ? id : React4.useId();
66
407
  return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
67
408
  /* @__PURE__ */ jsx(
68
409
  "input",
@@ -102,10 +443,10 @@ var FloatingInput = React3.forwardRef(
102
443
  }
103
444
  );
104
445
  FloatingInput.displayName = "FloatingInput";
105
- var FloatingSelect = React3.forwardRef(
446
+ var FloatingSelect = React4.forwardRef(
106
447
  (_a, ref) => {
107
448
  var _b = _a, { label, error, id, className, required, children } = _b, props = __objRest(_b, ["label", "error", "id", "className", "required", "children"]);
108
- const inputId = id != null ? id : React3.useId();
449
+ const inputId = id != null ? id : React4.useId();
109
450
  return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
110
451
  /* @__PURE__ */ jsx(
111
452
  "select",
@@ -366,11 +707,11 @@ function PhoneCountrySelect({
366
707
  className
367
708
  }) {
368
709
  var _a;
369
- const [open, setOpen] = React3.useState(false);
370
- const containerRef = React3.useRef(null);
371
- const listRef = React3.useRef(null);
710
+ const [open, setOpen] = React4.useState(false);
711
+ const containerRef = React4.useRef(null);
712
+ const listRef = React4.useRef(null);
372
713
  const selected = (_a = PHONE_COUNTRIES.find((c) => c.code === value)) != null ? _a : PHONE_COUNTRIES[0];
373
- React3.useEffect(() => {
714
+ React4.useEffect(() => {
374
715
  if (!open) return;
375
716
  const handler = (e) => {
376
717
  var _a2;
@@ -381,7 +722,7 @@ function PhoneCountrySelect({
381
722
  document.addEventListener("mousedown", handler);
382
723
  return () => document.removeEventListener("mousedown", handler);
383
724
  }, [open]);
384
- React3.useEffect(() => {
725
+ React4.useEffect(() => {
385
726
  if (!open || !listRef.current) return;
386
727
  const activeEl = listRef.current.querySelector("[data-selected=true]");
387
728
  activeEl == null ? void 0 : activeEl.scrollIntoView({ block: "nearest" });
@@ -477,9 +818,9 @@ function PhoneCountrySelect({
477
818
  )
478
819
  ] });
479
820
  }
480
- function OfferAdventureCard({ adventure }) {
821
+ function AdventureCard({ adventure }) {
481
822
  var _a, _b, _c;
482
- const [checked, setChecked] = React3.useState(
823
+ const [checked, setChecked] = React4.useState(
483
824
  new Set((_b = (_a = adventure.optionals) == null ? void 0 : _a.filter((o) => o.defaultChecked).map((o) => o.id)) != null ? _b : [])
484
825
  );
485
826
  const toggleOptional = (id) => setChecked((prev) => {
@@ -499,13 +840,16 @@ function OfferAdventureCard({ adventure }) {
499
840
  /* @__PURE__ */ jsxs("div", { className: "p-5 lg:p-6 flex flex-col gap-2.5", children: [
500
841
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2 min-h-[22px]", children: [
501
842
  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", children: adventure.reference }) : /* @__PURE__ */ jsx("span", {}),
502
- adventure.onRemove && /* @__PURE__ */ jsx(
843
+ adventure.onRemove && /* @__PURE__ */ jsxs(
503
844
  "button",
504
845
  {
505
846
  type: "button",
506
847
  onClick: adventure.onRemove,
507
- className: "text-[11px] text-destructive/60 hover:text-destructive transition-colors font-sans leading-none",
508
- children: "Remove from proposal"
848
+ className: "flex items-center gap-1.5 rounded-full border border-border px-3 py-1 text-xs text-muted-foreground font-ui hover:border-destructive hover:text-destructive transition-colors",
849
+ children: [
850
+ /* @__PURE__ */ jsx(XIcon, { className: "w-3 h-3" }),
851
+ "Remove"
852
+ ]
509
853
  }
510
854
  )
511
855
  ] }),
@@ -520,12 +864,12 @@ function OfferAdventureCard({ adventure }) {
520
864
  /* @__PURE__ */ jsx(MapPinIcon, { className: "w-3.5 h-3.5 text-primary shrink-0" }),
521
865
  adventure.location
522
866
  ] }),
523
- adventure.optionals && adventure.optionals.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 mt-1", children: [
867
+ adventure.optionals && adventure.optionals.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-2 rounded-xl border border-border bg-muted/30 p-4 flex flex-col gap-3", children: [
524
868
  /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Available optionals" }),
525
- /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1.5", children: adventure.optionals.map((opt) => /* @__PURE__ */ jsxs(
869
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: adventure.optionals.map((opt) => /* @__PURE__ */ jsxs(
526
870
  "label",
527
871
  {
528
- className: "flex items-center gap-2.5 cursor-pointer group",
872
+ className: "flex items-center gap-3 cursor-pointer group",
529
873
  children: [
530
874
  /* @__PURE__ */ jsx(
531
875
  "input",
@@ -539,7 +883,7 @@ function OfferAdventureCard({ adventure }) {
539
883
  /* @__PURE__ */ jsxs("span", { className: "text-sm font-sans text-foreground/80 group-hover:text-foreground transition-colors leading-snug", children: [
540
884
  opt.label,
541
885
  " ",
542
- /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
886
+ /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground font-semibold", children: [
543
887
  "(",
544
888
  opt.pricePerPerson,
545
889
  ")"
@@ -557,26 +901,30 @@ function OfferAdventureCard({ adventure }) {
557
901
  /* @__PURE__ */ jsx("p", { className: "text-base text-foreground/80 leading-relaxed font-sans", children: adventure.description })
558
902
  ] })
559
903
  ] }),
560
- adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 mt-1", children: [
561
- /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que est\xE1 incluso" }),
562
- /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-foreground/80 font-sans", children: [
563
- /* @__PURE__ */ jsx(CheckIcon, { className: "w-4 h-4 text-primary shrink-0 mt-0.5" }),
904
+ adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
905
+ /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: "O que est\xE1 incluso" }),
906
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-base text-foreground/80 font-sans", children: [
907
+ /* @__PURE__ */ jsx(CheckIcon, { className: "w-4 h-4 text-primary shrink-0 mt-1" }),
564
908
  item
565
909
  ] }, i)) })
566
910
  ] }),
567
- adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 mt-1", children: [
568
- /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "O que n\xE3o est\xE1 incluso" }),
569
- /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-foreground/80 font-sans", children: [
570
- /* @__PURE__ */ jsx(XIcon, { className: "w-4 h-4 text-destructive shrink-0 mt-0.5" }),
911
+ adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
912
+ /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: "O que n\xE3o est\xE1 incluso" }),
913
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-base text-foreground/80 font-sans", children: [
914
+ /* @__PURE__ */ jsx(XIcon, { className: "w-4 h-4 text-destructive shrink-0 mt-1" }),
571
915
  item
572
916
  ] }, i)) })
573
917
  ] }),
574
- adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 mt-1", children: [
575
- /* @__PURE__ */ jsx("h4", { className: "text-sm font-bold text-foreground font-heading", children: "Pol\xEDtica de cancelamento" }),
576
- /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1", children: adventure.cancellationPolicy.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-sm text-muted-foreground font-sans", children: [
577
- /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2" }),
918
+ adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
919
+ /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: "Pol\xEDtica de cancelamento" }),
920
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.cancellationPolicy.map((item, i) => /* @__PURE__ */ jsxs("li", { className: "flex items-start gap-2 text-base text-muted-foreground font-sans", children: [
921
+ /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2.5" }),
578
922
  item
579
923
  ] }, i)) })
924
+ ] }),
925
+ adventure.detailsSlot && /* @__PURE__ */ jsxs(Fragment, { children: [
926
+ /* @__PURE__ */ jsx(Separator, { className: "my-1" }),
927
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3 text-foreground", children: adventure.detailsSlot })
580
928
  ] })
581
929
  ] })
582
930
  ] });
@@ -585,10 +933,11 @@ function OfferSidebar({
585
933
  total,
586
934
  agent,
587
935
  onBook,
588
- bookLabel
936
+ bookLabel,
937
+ bookDisabled
589
938
  }) {
590
939
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
591
- /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 flex flex-col gap-4", children: [
940
+ /* @__PURE__ */ jsxs("div", { className: "hidden lg:flex rounded-2xl border border-border bg-card p-5 flex-col gap-4", children: [
592
941
  /* @__PURE__ */ jsxs("div", { children: [
593
942
  /* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-widest text-muted-foreground font-heading mb-1", children: "Booking Total" }),
594
943
  /* @__PURE__ */ jsx("p", { className: "text-3xl font-black text-primary font-heading leading-none", children: total })
@@ -597,11 +946,13 @@ function OfferSidebar({
597
946
  "button",
598
947
  {
599
948
  type: "button",
949
+ disabled: bookDisabled,
600
950
  onClick: onBook,
601
951
  className: cn(
602
952
  "w-full rounded-full bg-primary py-3 text-sm font-bold tracking-wide uppercase",
603
953
  "text-primary-foreground font-heading transition-colors hover:bg-primary/90",
604
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
954
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
955
+ bookDisabled && "opacity-50 pointer-events-none"
605
956
  ),
606
957
  children: bookLabel
607
958
  }
@@ -621,8 +972,8 @@ function OfferSidebar({
621
972
  )
622
973
  ) : /* @__PURE__ */ jsx("div", { className: "w-16 h-16 rounded-full bg-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "text-xl font-bold text-primary font-heading", children: agent.name.charAt(0) }) }),
623
974
  /* @__PURE__ */ jsxs("div", { children: [
624
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground font-sans", children: "Need help with your offer?" }),
625
- /* @__PURE__ */ jsxs("p", { className: "text-sm font-sans text-foreground/80 mt-0.5", children: [
975
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: "Need help with your offer?" }),
976
+ /* @__PURE__ */ jsxs("p", { className: "text-sm font-sans text-foreground mt-0.5", children: [
626
977
  "Contact",
627
978
  " ",
628
979
  /* @__PURE__ */ jsx("span", { className: "font-bold text-foreground font-heading", children: agent.name }),
@@ -631,7 +982,7 @@ function OfferSidebar({
631
982
  " ",
632
983
  "at",
633
984
  " ",
634
- /* @__PURE__ */ jsx("span", { className: "font-semibold text-primary", children: agent.company })
985
+ /* @__PURE__ */ jsx("span", { className: "font-bold text-foreground font-heading", children: agent.company })
635
986
  ] })
636
987
  ] })
637
988
  ] })
@@ -685,7 +1036,10 @@ function OfferSummarySection({
685
1036
  total,
686
1037
  depositInfo,
687
1038
  onContinue,
688
- continueLabel
1039
+ continueLabel,
1040
+ summaryNotesSlot,
1041
+ summaryDiscountLine,
1042
+ continueDisabled
689
1043
  }) {
690
1044
  return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 flex flex-col gap-4", children: [
691
1045
  /* @__PURE__ */ jsx("h3", { className: "font-bold text-foreground font-heading text-base", children: "Summary" }),
@@ -704,11 +1058,19 @@ function OfferSummarySection({
704
1058
  ] }, j)) }),
705
1059
  i < adventures.length - 1 && /* @__PURE__ */ jsx(Separator, { className: "mt-4" })
706
1060
  ] }, adventure.id)) }),
1061
+ summaryNotesSlot,
707
1062
  /* @__PURE__ */ jsx(Separator, {}),
708
1063
  subtotal && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
709
1064
  /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Subtotal" }),
710
1065
  /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: subtotal })
711
1066
  ] }),
1067
+ summaryDiscountLine && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-success", children: [
1068
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-sans", children: summaryDiscountLine.label }),
1069
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-semibold font-sans shrink-0", children: [
1070
+ "\u2212",
1071
+ summaryDiscountLine.amount
1072
+ ] })
1073
+ ] }),
712
1074
  depositInfo && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 rounded-lg bg-muted/50 border border-border p-3", children: [
713
1075
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
714
1076
  /* @__PURE__ */ jsxs("span", { className: "text-xs text-muted-foreground font-sans", children: [
@@ -735,17 +1097,322 @@ function OfferSummarySection({
735
1097
  "button",
736
1098
  {
737
1099
  type: "button",
1100
+ disabled: continueDisabled,
738
1101
  onClick: onContinue,
739
1102
  className: cn(
740
1103
  "w-full rounded-full bg-primary py-3.5 text-center text-sm font-bold uppercase tracking-wide",
741
1104
  "text-primary-foreground font-heading transition-colors hover:bg-primary/90",
742
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1105
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1106
+ continueDisabled && "opacity-50 pointer-events-none"
743
1107
  ),
744
1108
  children: continueLabel
745
1109
  }
746
1110
  )
747
1111
  ] });
748
1112
  }
1113
+ var COUNTRIES = [
1114
+ { code: "AF", name: "Afghanistan" },
1115
+ { code: "AL", name: "Albania" },
1116
+ { code: "DZ", name: "Algeria" },
1117
+ { code: "AO", name: "Angola" },
1118
+ { code: "AR", name: "Argentina" },
1119
+ { code: "AM", name: "Armenia" },
1120
+ { code: "AU", name: "Australia" },
1121
+ { code: "AT", name: "Austria" },
1122
+ { code: "AZ", name: "Azerbaijan" },
1123
+ { code: "BE", name: "Belgium" },
1124
+ { code: "BO", name: "Bolivia" },
1125
+ { code: "BA", name: "Bosnia" },
1126
+ { code: "BR", name: "Brazil" },
1127
+ { code: "BG", name: "Bulgaria" },
1128
+ { code: "KH", name: "Cambodia" },
1129
+ { code: "CA", name: "Canada" },
1130
+ { code: "CL", name: "Chile" },
1131
+ { code: "CN", name: "China" },
1132
+ { code: "CO", name: "Colombia" },
1133
+ { code: "CR", name: "Costa Rica" },
1134
+ { code: "HR", name: "Croatia" },
1135
+ { code: "CU", name: "Cuba" },
1136
+ { code: "CZ", name: "Czech Republic" },
1137
+ { code: "DK", name: "Denmark" },
1138
+ { code: "DO", name: "Dominican Republic" },
1139
+ { code: "EC", name: "Ecuador" },
1140
+ { code: "EG", name: "Egypt" },
1141
+ { code: "SV", name: "El Salvador" },
1142
+ { code: "ET", name: "Ethiopia" },
1143
+ { code: "FI", name: "Finland" },
1144
+ { code: "FR", name: "France" },
1145
+ { code: "GE", name: "Georgia" },
1146
+ { code: "DE", name: "Germany" },
1147
+ { code: "GH", name: "Ghana" },
1148
+ { code: "GR", name: "Greece" },
1149
+ { code: "GT", name: "Guatemala" },
1150
+ { code: "HN", name: "Honduras" },
1151
+ { code: "HK", name: "Hong Kong" },
1152
+ { code: "HU", name: "Hungary" },
1153
+ { code: "IS", name: "Iceland" },
1154
+ { code: "IN", name: "India" },
1155
+ { code: "ID", name: "Indonesia" },
1156
+ { code: "IR", name: "Iran" },
1157
+ { code: "IQ", name: "Iraq" },
1158
+ { code: "IE", name: "Ireland" },
1159
+ { code: "IL", name: "Israel" },
1160
+ { code: "IT", name: "Italy" },
1161
+ { code: "JM", name: "Jamaica" },
1162
+ { code: "JP", name: "Japan" },
1163
+ { code: "JO", name: "Jordan" },
1164
+ { code: "KZ", name: "Kazakhstan" },
1165
+ { code: "KE", name: "Kenya" },
1166
+ { code: "KW", name: "Kuwait" },
1167
+ { code: "LB", name: "Lebanon" },
1168
+ { code: "LY", name: "Libya" },
1169
+ { code: "MY", name: "Malaysia" },
1170
+ { code: "MX", name: "Mexico" },
1171
+ { code: "MA", name: "Morocco" },
1172
+ { code: "MZ", name: "Mozambique" },
1173
+ { code: "NP", name: "Nepal" },
1174
+ { code: "NL", name: "Netherlands" },
1175
+ { code: "NZ", name: "New Zealand" },
1176
+ { code: "NI", name: "Nicaragua" },
1177
+ { code: "NG", name: "Nigeria" },
1178
+ { code: "NO", name: "Norway" },
1179
+ { code: "PK", name: "Pakistan" },
1180
+ { code: "PA", name: "Panama" },
1181
+ { code: "PY", name: "Paraguay" },
1182
+ { code: "PE", name: "Peru" },
1183
+ { code: "PH", name: "Philippines" },
1184
+ { code: "PL", name: "Poland" },
1185
+ { code: "PT", name: "Portugal" },
1186
+ { code: "QA", name: "Qatar" },
1187
+ { code: "RO", name: "Romania" },
1188
+ { code: "RU", name: "Russia" },
1189
+ { code: "SA", name: "Saudi Arabia" },
1190
+ { code: "SN", name: "Senegal" },
1191
+ { code: "RS", name: "Serbia" },
1192
+ { code: "SG", name: "Singapore" },
1193
+ { code: "ZA", name: "South Africa" },
1194
+ { code: "KR", name: "South Korea" },
1195
+ { code: "ES", name: "Spain" },
1196
+ { code: "LK", name: "Sri Lanka" },
1197
+ { code: "SE", name: "Sweden" },
1198
+ { code: "CH", name: "Switzerland" },
1199
+ { code: "TW", name: "Taiwan" },
1200
+ { code: "TZ", name: "Tanzania" },
1201
+ { code: "TH", name: "Thailand" },
1202
+ { code: "TN", name: "Tunisia" },
1203
+ { code: "TR", name: "Turkey" },
1204
+ { code: "UA", name: "Ukraine" },
1205
+ { code: "AE", name: "United Arab Emirates" },
1206
+ { code: "GB", name: "United Kingdom" },
1207
+ { code: "US", name: "United States" },
1208
+ { code: "UY", name: "Uruguay" },
1209
+ { code: "UZ", name: "Uzbekistan" },
1210
+ { code: "VE", name: "Venezuela" },
1211
+ { code: "VN", name: "Vietnam" },
1212
+ { code: "YE", name: "Yemen" },
1213
+ { code: "ZW", name: "Zimbabwe" }
1214
+ ];
1215
+ function CountrySearchField({
1216
+ value,
1217
+ onChange,
1218
+ required
1219
+ }) {
1220
+ var _a;
1221
+ const [query, setQuery] = React4.useState("");
1222
+ const [open, setOpen] = React4.useState(false);
1223
+ const containerRef = React4.useRef(null);
1224
+ const searchRef = React4.useRef(null);
1225
+ const selected = COUNTRIES.find((c) => c.code === value);
1226
+ const isFloated = open || !!selected;
1227
+ const filtered = query.trim() ? COUNTRIES.filter((c) => c.name.toLowerCase().includes(query.toLowerCase())) : COUNTRIES;
1228
+ React4.useEffect(() => {
1229
+ if (!open) return;
1230
+ const handler = (e) => {
1231
+ var _a2;
1232
+ if (!((_a2 = containerRef.current) == null ? void 0 : _a2.contains(e.target))) {
1233
+ setOpen(false);
1234
+ setQuery("");
1235
+ }
1236
+ };
1237
+ document.addEventListener("mousedown", handler);
1238
+ return () => document.removeEventListener("mousedown", handler);
1239
+ }, [open]);
1240
+ const handleOpen = () => {
1241
+ setOpen(true);
1242
+ setQuery("");
1243
+ setTimeout(() => {
1244
+ var _a2;
1245
+ return (_a2 = searchRef.current) == null ? void 0 : _a2.focus();
1246
+ }, 0);
1247
+ };
1248
+ const handleSelect = (code) => {
1249
+ onChange(code);
1250
+ setOpen(false);
1251
+ setQuery("");
1252
+ };
1253
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "relative w-full", children: [
1254
+ /* @__PURE__ */ jsxs(
1255
+ "button",
1256
+ {
1257
+ type: "button",
1258
+ onClick: handleOpen,
1259
+ className: cn(
1260
+ "relative flex w-full items-center rounded-lg border border-border bg-background h-14 px-3 text-left transition-colors",
1261
+ open && "border-primary ring-1 ring-primary"
1262
+ ),
1263
+ children: [
1264
+ /* @__PURE__ */ jsxs(
1265
+ "span",
1266
+ {
1267
+ className: cn(
1268
+ "pointer-events-none absolute left-3 transition-all duration-150 font-ui",
1269
+ isFloated ? "top-2 text-xs text-primary" : "top-1/2 -translate-y-1/2 text-base text-muted-foreground"
1270
+ ),
1271
+ children: [
1272
+ "Country",
1273
+ required && /* @__PURE__ */ jsx("span", { className: "text-primary ml-0.5", children: "*" })
1274
+ ]
1275
+ }
1276
+ ),
1277
+ /* @__PURE__ */ jsx("span", { className: cn("flex-1 pt-3 text-base font-ui truncate", selected ? "text-foreground" : "invisible"), children: (_a = selected == null ? void 0 : selected.name) != null ? _a : "\u2014" }),
1278
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("h-4 w-4 shrink-0 text-muted-foreground transition-transform", open && "rotate-180") })
1279
+ ]
1280
+ }
1281
+ ),
1282
+ open && /* @__PURE__ */ jsxs("div", { className: "absolute top-[calc(100%+4px)] left-0 right-0 z-50 rounded-xl border border-border bg-background shadow-lg overflow-hidden", children: [
1283
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-3 py-2 border-b border-border", children: [
1284
+ /* @__PURE__ */ jsx(SearchIcon, { className: "h-3.5 w-3.5 shrink-0 text-muted-foreground" }),
1285
+ /* @__PURE__ */ jsx(
1286
+ "input",
1287
+ {
1288
+ ref: searchRef,
1289
+ type: "text",
1290
+ value: query,
1291
+ onChange: (e) => setQuery(e.target.value),
1292
+ placeholder: "Search country\u2026",
1293
+ className: "flex-1 bg-transparent text-sm font-ui text-foreground placeholder:text-muted-foreground focus:outline-none"
1294
+ }
1295
+ )
1296
+ ] }),
1297
+ /* @__PURE__ */ jsx("div", { className: "max-h-52 overflow-y-auto py-1", children: filtered.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-3 py-2 text-sm font-ui text-muted-foreground", children: "No countries found" }) : filtered.map((c) => /* @__PURE__ */ jsx(
1298
+ "button",
1299
+ {
1300
+ type: "button",
1301
+ onClick: () => handleSelect(c.code),
1302
+ className: cn(
1303
+ "flex w-full items-center px-3 py-2 text-sm font-ui text-left transition-colors hover:bg-muted",
1304
+ c.code === value && "bg-primary/10 text-primary font-semibold"
1305
+ ),
1306
+ children: c.name
1307
+ },
1308
+ c.code
1309
+ )) })
1310
+ ] })
1311
+ ] });
1312
+ }
1313
+ function BirthDateField({
1314
+ label,
1315
+ required,
1316
+ value,
1317
+ onChange
1318
+ }) {
1319
+ const [open, setOpen] = React4.useState(false);
1320
+ const [text, setText] = React4.useState(value ? format(value, "dd/MM/yyyy") : "");
1321
+ const containerRef = React4.useRef(null);
1322
+ const inputId = React4.useId();
1323
+ React4.useEffect(() => {
1324
+ setText(value ? format(value, "dd/MM/yyyy") : "");
1325
+ }, [value]);
1326
+ React4.useEffect(() => {
1327
+ if (!open) return;
1328
+ const handler = (e) => {
1329
+ var _a;
1330
+ if (!((_a = containerRef.current) == null ? void 0 : _a.contains(e.target))) setOpen(false);
1331
+ };
1332
+ document.addEventListener("mousedown", handler);
1333
+ return () => document.removeEventListener("mousedown", handler);
1334
+ }, [open]);
1335
+ const handleTextChange = (e) => {
1336
+ const digits = e.target.value.replace(/\D/g, "").slice(0, 8);
1337
+ let formatted = digits.slice(0, 2);
1338
+ if (digits.length > 2) formatted += "/" + digits.slice(2, 4);
1339
+ if (digits.length > 4) formatted += "/" + digits.slice(4, 8);
1340
+ setText(formatted);
1341
+ if (formatted.length === 10) {
1342
+ const [dd, mm, yyyy] = formatted.split("/").map(Number);
1343
+ const d = new Date(yyyy, mm - 1, dd);
1344
+ if (!isNaN(d.getTime()) && d.getFullYear() === yyyy && d <= /* @__PURE__ */ new Date()) {
1345
+ onChange(d);
1346
+ return;
1347
+ }
1348
+ }
1349
+ onChange(void 0);
1350
+ };
1351
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: "relative w-full", children: [
1352
+ /* @__PURE__ */ jsxs(
1353
+ "div",
1354
+ {
1355
+ className: cn(
1356
+ "flex items-center rounded-lg border border-border bg-background h-14 transition-colors",
1357
+ open ? "border-primary ring-1 ring-primary" : "focus-within:border-primary focus-within:ring-1 focus-within:ring-primary"
1358
+ ),
1359
+ children: [
1360
+ /* @__PURE__ */ jsxs("div", { className: "relative flex-1 h-full", children: [
1361
+ /* @__PURE__ */ jsxs(
1362
+ "label",
1363
+ {
1364
+ htmlFor: inputId,
1365
+ className: "pointer-events-none absolute left-3 top-2 text-xs text-muted-foreground font-ui",
1366
+ children: [
1367
+ label,
1368
+ required && /* @__PURE__ */ jsx("span", { className: "text-primary ml-0.5", children: "*" })
1369
+ ]
1370
+ }
1371
+ ),
1372
+ /* @__PURE__ */ jsx(
1373
+ "input",
1374
+ {
1375
+ id: inputId,
1376
+ type: "text",
1377
+ inputMode: "numeric",
1378
+ value: text,
1379
+ onChange: handleTextChange,
1380
+ placeholder: "dd/mm/yyyy",
1381
+ className: "block h-full w-full bg-transparent px-3 pt-5 pb-2 text-base text-foreground font-ui focus:outline-none placeholder:text-muted-foreground/50"
1382
+ }
1383
+ )
1384
+ ] }),
1385
+ /* @__PURE__ */ jsx(
1386
+ "button",
1387
+ {
1388
+ type: "button",
1389
+ onClick: () => setOpen((v) => !v),
1390
+ tabIndex: -1,
1391
+ "aria-label": "Open calendar",
1392
+ className: "px-3 h-full flex items-center text-muted-foreground hover:text-primary transition-colors focus:outline-none",
1393
+ children: /* @__PURE__ */ jsx(CalendarIcon, { className: "h-4 w-4" })
1394
+ }
1395
+ )
1396
+ ]
1397
+ }
1398
+ ),
1399
+ open && /* @__PURE__ */ jsx("div", { className: "absolute top-[calc(100%+4px)] left-0 right-0 z-50 rounded-xl border border-border bg-background shadow-lg overflow-hidden", children: /* @__PURE__ */ jsx(
1400
+ Calendar,
1401
+ {
1402
+ mode: "single",
1403
+ selected: value,
1404
+ onSelect: (date) => {
1405
+ onChange(date);
1406
+ setOpen(false);
1407
+ },
1408
+ defaultMonth: value != null ? value : new Date(1990, 0, 1),
1409
+ disabled: { after: /* @__PURE__ */ new Date() },
1410
+ className: "font-ui w-full",
1411
+ autoFocus: true
1412
+ }
1413
+ ) })
1414
+ ] });
1415
+ }
749
1416
  var WIZARD_STEPS = [
750
1417
  { id: "responsible", label: "Responsible party details" },
751
1418
  { id: "travellers", label: "Travellers" },
@@ -757,9 +1424,9 @@ function BookingWizard({
757
1424
  depositInfo,
758
1425
  onCancel
759
1426
  }) {
760
- const [step, setStep] = React3.useState("responsible");
761
- const [error, setError] = React3.useState(null);
762
- const [responsible, setResponsible] = React3.useState({
1427
+ const [step, setStep] = React4.useState("responsible");
1428
+ const [error, setError] = React4.useState(null);
1429
+ const [responsible, setResponsible] = React4.useState({
763
1430
  firstName: "",
764
1431
  lastName: "",
765
1432
  email: "",
@@ -778,18 +1445,21 @@ function BookingWizard({
778
1445
  return s + ((_b = (_a = a.slots) == null ? void 0 : _a.children) != null ? _b : 0);
779
1446
  }, 0);
780
1447
  const totalPax = totalAdults + totalChildren;
781
- const [travellers, setTravellers] = React3.useState(
1448
+ const [travellers, setTravellers] = React4.useState(
782
1449
  Array.from({ length: Math.max(totalPax, 1) }, () => ({
783
1450
  firstName: "",
784
1451
  lastName: "",
785
- dateOfBirth: "",
1452
+ dateOfBirth: void 0,
786
1453
  email: ""
787
1454
  }))
788
1455
  );
789
- const [payAmount, setPayAmount] = React3.useState("full");
790
- const [termsAccepted, setTermsAccepted] = React3.useState(false);
1456
+ const [payAmount, setPayAmount] = React4.useState("full");
1457
+ const [payMethod, setPayMethod] = React4.useState("stripe");
1458
+ const [termsAccepted, setTermsAccepted] = React4.useState(false);
1459
+ const [termsModalOpen, setTermsModalOpen] = React4.useState(false);
791
1460
  const setR = (k, v) => setResponsible((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
792
1461
  const setT = (i, k, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { [k]: v }) : t));
1462
+ const setTDob = (i, v) => setTravellers((prev) => prev.map((t, idx) => idx === i ? __spreadProps(__spreadValues({}, t), { dateOfBirth: v }) : t));
793
1463
  const stepIndex = WIZARD_STEPS.findIndex((s) => s.id === step);
794
1464
  const goNext = () => {
795
1465
  setError(null);
@@ -858,7 +1528,7 @@ function BookingWizard({
858
1528
  return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
859
1529
  /* @__PURE__ */ jsxs("div", { className: "border-b border-border px-5 py-4 bg-muted/20", children: [
860
1530
  /* @__PURE__ */ jsx("h3", { className: "text-base font-bold text-foreground font-heading mb-2", children: "Booking details" }),
861
- /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: WIZARD_STEPS.map((s, i) => /* @__PURE__ */ jsxs(React3.Fragment, { children: [
1531
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5 flex-wrap", children: WIZARD_STEPS.map((s, i) => /* @__PURE__ */ jsxs(React4.Fragment, { children: [
862
1532
  /* @__PURE__ */ jsx(
863
1533
  "span",
864
1534
  {
@@ -892,22 +1562,14 @@ function BookingWizard({
892
1562
  placeholder: " ",
893
1563
  value: responsible.phone,
894
1564
  onChange: (e) => setR("phone", e.target.value),
895
- className: "peer block h-14 w-full rounded-r-lg border border-border bg-background px-3 pt-5 pb-2 text-base text-foreground font-sans transition-colors placeholder-transparent focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary"
1565
+ className: "peer block h-14 w-full rounded-r-lg border border-border bg-background px-3 pt-5 pb-2 text-base text-foreground font-ui transition-colors placeholder-transparent focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary"
896
1566
  }
897
1567
  ),
898
- /* @__PURE__ */ jsx("label", { htmlFor: "wiz-phone", className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-base text-muted-foreground font-sans transition-all duration-150 peer-focus:top-3 peer-focus:translate-y-0 peer-focus:text-xs peer-focus:text-primary peer-not-placeholder-shown:top-3 peer-not-placeholder-shown:translate-y-0 peer-not-placeholder-shown:text-xs", children: "Phone" })
1568
+ /* @__PURE__ */ jsx("label", { htmlFor: "wiz-phone", className: "pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-base text-muted-foreground font-ui transition-all duration-150 peer-focus:top-3 peer-focus:translate-y-0 peer-focus:text-xs peer-focus:text-primary peer-not-placeholder-shown:top-3 peer-not-placeholder-shown:translate-y-0 peer-not-placeholder-shown:text-xs", children: "Phone" })
899
1569
  ] })
900
1570
  ] })
901
1571
  ] }),
902
- /* @__PURE__ */ jsxs(FloatingSelect, { label: "Country", required: true, value: responsible.country, onChange: (e) => setR("country", e.target.value), children: [
903
- /* @__PURE__ */ jsx("option", { value: "", disabled: true, hidden: true }),
904
- /* @__PURE__ */ jsx("option", { value: "BR", children: "Brazil" }),
905
- /* @__PURE__ */ jsx("option", { value: "FR", children: "France" }),
906
- /* @__PURE__ */ jsx("option", { value: "US", children: "United States" }),
907
- /* @__PURE__ */ jsx("option", { value: "UK", children: "United Kingdom" }),
908
- /* @__PURE__ */ jsx("option", { value: "AR", children: "Argentina" }),
909
- /* @__PURE__ */ jsx("option", { value: "PT", children: "Portugal" })
910
- ] }),
1572
+ /* @__PURE__ */ jsx(CountrySearchField, { required: true, value: responsible.country, onChange: (code) => setR("country", code) }),
911
1573
  /* @__PURE__ */ jsx(FloatingInput, { label: "Passport / CPF", required: true, value: responsible.passport, onChange: (e) => setR("passport", e.target.value) }),
912
1574
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
913
1575
  /* @__PURE__ */ jsx(
@@ -918,10 +1580,10 @@ function BookingWizard({
918
1580
  rows: 3,
919
1581
  value: responsible.notes,
920
1582
  onChange: (e) => setR("notes", e.target.value),
921
- className: "peer block w-full resize-none rounded-lg border border-border bg-background px-3 pt-6 pb-3 text-base text-foreground font-sans transition-colors placeholder-transparent focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary"
1583
+ className: "peer block w-full resize-none rounded-lg border border-border bg-background px-3 pt-6 pb-3 text-base text-foreground font-ui transition-colors placeholder-transparent focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary"
922
1584
  }
923
1585
  ),
924
- /* @__PURE__ */ jsx("label", { htmlFor: "wiz-notes", className: "pointer-events-none absolute left-3 top-4 text-base text-muted-foreground font-sans transition-all duration-150 peer-focus:top-2 peer-focus:text-xs peer-focus:text-primary peer-not-placeholder-shown:top-2 peer-not-placeholder-shown:text-xs", children: "Notes (optional)" })
1586
+ /* @__PURE__ */ jsx("label", { htmlFor: "wiz-notes", className: "pointer-events-none absolute left-3 top-4 text-base text-muted-foreground font-ui transition-all duration-150 peer-focus:top-2 peer-focus:text-xs peer-focus:text-primary peer-not-placeholder-shown:top-2 peer-not-placeholder-shown:text-xs", children: "Notes (optional)" })
925
1587
  ] })
926
1588
  ] }),
927
1589
  step === "travellers" && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5", children: [
@@ -947,23 +1609,15 @@ function BookingWizard({
947
1609
  /* @__PURE__ */ jsx(FloatingInput, { label: "Last name", required: true, value: t.lastName, onChange: (e) => setT(i, "lastName", e.target.value) })
948
1610
  ] }),
949
1611
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [
950
- /* @__PURE__ */ jsxs("div", { className: "relative", children: [
951
- /* @__PURE__ */ jsx(
952
- "input",
953
- {
954
- id: `dob-${i}`,
955
- type: "date",
956
- required: isChild,
957
- value: t.dateOfBirth,
958
- onChange: (e) => setT(i, "dateOfBirth", e.target.value),
959
- className: "peer block h-14 w-full rounded-lg border border-border bg-background px-3 pt-5 pb-2 text-base text-foreground font-sans transition-colors focus:outline-none focus:border-primary focus:ring-1 focus:ring-primary"
960
- }
961
- ),
962
- /* @__PURE__ */ jsxs("label", { htmlFor: `dob-${i}`, className: "pointer-events-none absolute left-3 top-3 text-xs text-muted-foreground font-sans", children: [
963
- "Date of birth",
964
- isChild && /* @__PURE__ */ jsx("span", { className: "text-primary ml-0.5", children: "*" })
965
- ] })
966
- ] }),
1612
+ /* @__PURE__ */ jsx(
1613
+ BirthDateField,
1614
+ {
1615
+ label: "Date of birth",
1616
+ required: isChild,
1617
+ value: t.dateOfBirth,
1618
+ onChange: (d) => setTDob(i, d)
1619
+ }
1620
+ ),
967
1621
  /* @__PURE__ */ jsx(
968
1622
  FloatingInput,
969
1623
  {
@@ -1000,20 +1654,38 @@ function BookingWizard({
1000
1654
  /* @__PURE__ */ jsx("span", { children: "$" }),
1001
1655
  " Payment method"
1002
1656
  ] }),
1003
- /* @__PURE__ */ jsx(
1657
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: [
1658
+ { id: "stripe", label: "Credit / Debit card", sub: "Secure payment via Stripe" },
1659
+ { id: "pix", label: "PIX", sub: "Instant transfer \u2014 Brazil only" },
1660
+ { id: "bank", label: "Bank transfer", sub: "Wire / TED / DOC" }
1661
+ ].map((m) => /* @__PURE__ */ jsxs(
1004
1662
  "button",
1005
1663
  {
1006
1664
  type: "button",
1007
- className: "w-full rounded-lg border-2 border-primary bg-primary/5 px-4 py-3 text-sm text-center text-primary font-semibold font-sans",
1008
- children: "Stripe (cart\xE3o)"
1009
- }
1010
- )
1665
+ onClick: () => setPayMethod(m.id),
1666
+ className: cn(
1667
+ "flex items-start gap-3 rounded-lg border-2 px-4 py-3 text-left transition-colors",
1668
+ payMethod === m.id ? "border-primary bg-primary/5" : "border-border bg-background hover:border-primary/40"
1669
+ ),
1670
+ children: [
1671
+ /* @__PURE__ */ jsx("span", { className: cn(
1672
+ "mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full border-2 transition-colors",
1673
+ payMethod === m.id ? "border-primary" : "border-border"
1674
+ ), children: payMethod === m.id && /* @__PURE__ */ jsx("span", { className: "h-2 w-2 rounded-full bg-primary" }) }),
1675
+ /* @__PURE__ */ jsxs("span", { className: "flex flex-col gap-0.5", children: [
1676
+ /* @__PURE__ */ jsx("span", { className: cn(
1677
+ "text-sm font-semibold font-sans",
1678
+ payMethod === m.id ? "text-primary" : "text-foreground"
1679
+ ), children: m.label }),
1680
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground font-sans", children: m.sub })
1681
+ ] })
1682
+ ]
1683
+ },
1684
+ m.id
1685
+ )) })
1011
1686
  ] }),
1012
1687
  /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border p-4 flex flex-col gap-3", children: [
1013
- /* @__PURE__ */ jsxs("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest flex items-center gap-1.5", children: [
1014
- /* @__PURE__ */ jsx(CalendarIcon, { className: "w-3.5 h-3.5" }),
1015
- " Terms and conditions"
1016
- ] }),
1688
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Terms and conditions" }),
1017
1689
  /* @__PURE__ */ jsxs("label", { className: "flex items-start gap-2.5 cursor-pointer", children: [
1018
1690
  /* @__PURE__ */ jsx(
1019
1691
  "input",
@@ -1024,9 +1696,52 @@ function BookingWizard({
1024
1696
  className: "h-4 w-4 shrink-0 mt-0.5 rounded border-border accent-primary cursor-pointer"
1025
1697
  }
1026
1698
  ),
1027
- /* @__PURE__ */ jsx("span", { className: "text-sm font-sans text-foreground/80 leading-snug", children: "I have read and accept the terms and conditions of the reservation." })
1699
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-sans text-foreground/80 leading-snug", children: [
1700
+ "I have read and accept the",
1701
+ " ",
1702
+ /* @__PURE__ */ jsx(
1703
+ "button",
1704
+ {
1705
+ type: "button",
1706
+ onClick: () => setTermsModalOpen(true),
1707
+ className: "underline underline-offset-2 text-primary hover:text-primary/80 transition-colors font-semibold",
1708
+ children: "terms and conditions"
1709
+ }
1710
+ ),
1711
+ " ",
1712
+ "of the reservation."
1713
+ ] })
1028
1714
  ] })
1029
- ] })
1715
+ ] }),
1716
+ /* @__PURE__ */ jsx(Dialog, { open: termsModalOpen, onOpenChange: setTermsModalOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "!max-w-[80vw] w-[80vw] max-h-[85vh] overflow-y-auto", children: [
1717
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { className: "font-heading text-xl", children: "Terms and Conditions" }) }),
1718
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 text-sm font-sans text-foreground/80 leading-relaxed", children: [
1719
+ /* @__PURE__ */ jsx("p", { children: 'These terms and conditions ("Terms") govern the booking of travel experiences offered through Planeta EXO ("Company"). By confirming a booking, you agree to these Terms in full.' }),
1720
+ /* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "1. Bookings and payments" }),
1721
+ /* @__PURE__ */ jsx("p", { children: "A booking is confirmed upon receipt of the required deposit or full payment. The deposit amount is specified in your offer. The remaining balance must be paid by the balance due date stated in your offer." }),
1722
+ /* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "2. Cancellation policy" }),
1723
+ /* @__PURE__ */ jsx("p", { children: "Cancellations made more than 60 days before departure are eligible for a full refund of the deposit. Cancellations between 30 and 60 days forfeit 50% of the deposit. Cancellations within 30 days of departure are non-refundable." }),
1724
+ /* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "3. Changes and modifications" }),
1725
+ /* @__PURE__ */ jsx("p", { children: "The Company reserves the right to modify itineraries due to weather, safety, or operational reasons. Equivalent alternatives will be offered wherever possible." }),
1726
+ /* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "4. Travel insurance" }),
1727
+ /* @__PURE__ */ jsx("p", { children: "Comprehensive travel insurance is strongly recommended. The Company is not liable for costs arising from trip interruption, medical emergencies, or personal loss." }),
1728
+ /* @__PURE__ */ jsx("h4", { className: "font-bold text-foreground font-heading text-base", children: "5. Liability" }),
1729
+ /* @__PURE__ */ jsx("p", { children: "Participation in adventure activities carries inherent risk. By booking, you acknowledge and accept these risks. The Company's liability is limited to the total booking amount." }),
1730
+ /* @__PURE__ */ jsx("div", { className: "pt-2", children: /* @__PURE__ */ jsx(
1731
+ DialogClose,
1732
+ {
1733
+ render: /* @__PURE__ */ jsx(
1734
+ "button",
1735
+ {
1736
+ type: "button",
1737
+ 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"
1738
+ }
1739
+ ),
1740
+ children: "Close"
1741
+ }
1742
+ ) })
1743
+ ] })
1744
+ ] }) })
1030
1745
  ] }),
1031
1746
  error && /* @__PURE__ */ jsx("p", { className: "text-sm text-destructive font-sans", children: error }),
1032
1747
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
@@ -1070,10 +1785,14 @@ function BookingWizard({
1070
1785
  ] })
1071
1786
  ] });
1072
1787
  }
1788
+ function OfferAdventureCard({ adventure }) {
1789
+ return /* @__PURE__ */ jsx(AdventureCard, { adventure });
1790
+ }
1073
1791
  function Offer({
1074
1792
  logo = "/logo-planetaexo.png",
1075
1793
  logoAlt = "Planeta EXO",
1076
1794
  title,
1795
+ subtitle,
1077
1796
  adventures,
1078
1797
  subtotal,
1079
1798
  total,
@@ -1081,16 +1800,21 @@ function Offer({
1081
1800
  agent,
1082
1801
  onContinue,
1083
1802
  continueLabel = "Book now",
1803
+ externalBookingFlow,
1804
+ summaryNotesSlot,
1805
+ summaryDiscountLine,
1806
+ continueDisabled,
1084
1807
  className
1085
1808
  }) {
1086
- const [showBooking, setShowBooking] = React3.useState(false);
1809
+ const [showBooking, setShowBooking] = React4.useState(false);
1087
1810
  const handleBook = () => {
1088
- setShowBooking(true);
1811
+ if (!externalBookingFlow) setShowBooking(true);
1089
1812
  onContinue == null ? void 0 : onContinue();
1090
1813
  };
1091
- return /* @__PURE__ */ jsxs("div", { className: cn("w-full max-w-5xl mx-auto flex flex-col gap-6", className), children: [
1092
- /* @__PURE__ */ jsx("img", { src: logo, alt: logoAlt, className: "w-[200px] h-auto object-contain" }),
1814
+ return /* @__PURE__ */ jsxs("div", { className: cn("w-full max-w-5xl mx-auto flex flex-col gap-6 pb-20 lg:pb-0", className), children: [
1815
+ /* @__PURE__ */ jsx("img", { src: logo, alt: logoAlt, className: "w-[150px] h-auto object-contain mx-auto block" }),
1093
1816
  /* @__PURE__ */ jsx("h1", { className: "text-2xl font-black text-foreground font-heading leading-tight", children: title }),
1817
+ subtitle && /* @__PURE__ */ jsx("div", { className: "text-sm text-muted-foreground font-sans space-y-1 leading-relaxed", children: subtitle }),
1094
1818
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-[1fr_280px] gap-6 lg:gap-8 items-start", children: [
1095
1819
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
1096
1820
  /* @__PURE__ */ jsxs("section", { className: "flex flex-col gap-5", children: [
@@ -1098,7 +1822,7 @@ function Offer({
1098
1822
  /* @__PURE__ */ jsx(MapIcon, { className: "w-5 h-5 text-primary shrink-0" }),
1099
1823
  /* @__PURE__ */ jsx("h2", { className: "font-bold text-foreground font-heading text-base", children: "Included Adventures" })
1100
1824
  ] }),
1101
- adventures.map((adventure) => /* @__PURE__ */ jsx(OfferAdventureCard, { adventure }, adventure.id))
1825
+ adventures.map((adventure) => /* @__PURE__ */ jsx(AdventureCard, { adventure }, adventure.id))
1102
1826
  ] }),
1103
1827
  !showBooking && /* @__PURE__ */ jsx(
1104
1828
  OfferSummarySection,
@@ -1108,10 +1832,13 @@ function Offer({
1108
1832
  total,
1109
1833
  depositInfo,
1110
1834
  onContinue: handleBook,
1111
- continueLabel
1835
+ continueLabel,
1836
+ summaryNotesSlot,
1837
+ summaryDiscountLine,
1838
+ continueDisabled
1112
1839
  }
1113
1840
  ),
1114
- showBooking && /* @__PURE__ */ jsx(
1841
+ showBooking && !externalBookingFlow && /* @__PURE__ */ jsx(
1115
1842
  BookingWizard,
1116
1843
  {
1117
1844
  adventures,
@@ -1127,13 +1854,845 @@ function Offer({
1127
1854
  total,
1128
1855
  agent,
1129
1856
  onBook: handleBook,
1130
- bookLabel: continueLabel
1857
+ bookLabel: continueLabel,
1858
+ bookDisabled: continueDisabled
1131
1859
  }
1132
1860
  ) })
1133
- ] })
1134
- ] });
1861
+ ] }),
1862
+ !showBooking && /* @__PURE__ */ jsx("div", { className: "fixed bottom-0 inset-x-0 z-40 border-t border-border bg-background/95 backdrop-blur-sm px-4 py-3 lg:hidden", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4 max-w-5xl mx-auto", children: [
1863
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
1864
+ /* @__PURE__ */ jsx("span", { className: "text-[10px] uppercase tracking-widest text-muted-foreground font-heading", children: "Total" }),
1865
+ /* @__PURE__ */ jsx("span", { className: "text-xl font-black text-primary font-heading leading-tight", children: total })
1866
+ ] }),
1867
+ /* @__PURE__ */ jsx(
1868
+ "button",
1869
+ {
1870
+ type: "button",
1871
+ onClick: handleBook,
1872
+ className: cn(
1873
+ "rounded-full bg-primary px-6 py-3 text-sm font-bold tracking-wide uppercase",
1874
+ "text-primary-foreground font-heading transition-colors hover:bg-primary/90",
1875
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
1876
+ ),
1877
+ children: continueLabel
1878
+ }
1879
+ )
1880
+ ] }) })
1881
+ ] });
1882
+ }
1883
+ var STATUS_STYLES = {
1884
+ pending: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",
1885
+ confirmed: "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",
1886
+ cancelled: "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400",
1887
+ completed: "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"
1888
+ };
1889
+ function StatusBadge({ status }) {
1890
+ return /* @__PURE__ */ jsx(
1891
+ "span",
1892
+ {
1893
+ className: cn(
1894
+ "inline-flex items-center rounded-full px-3 py-1 text-xs font-bold font-heading uppercase tracking-wider",
1895
+ STATUS_STYLES[status]
1896
+ ),
1897
+ children: status
1898
+ }
1899
+ );
1900
+ }
1901
+ function totalPeople(adventures) {
1902
+ var _a, _b, _c, _d, _e, _f;
1903
+ let adults = 0;
1904
+ let children = 0;
1905
+ let seniors = 0;
1906
+ for (const a of adventures) {
1907
+ adults += (_b = (_a = a.slots) == null ? void 0 : _a.adults) != null ? _b : 0;
1908
+ children += (_d = (_c = a.slots) == null ? void 0 : _c.children) != null ? _d : 0;
1909
+ seniors += (_f = (_e = a.slots) == null ? void 0 : _e.seniors) != null ? _f : 0;
1910
+ }
1911
+ return { adults, children, seniors, total: adults + children + seniors };
1912
+ }
1913
+ function InfoCard({
1914
+ label,
1915
+ children
1916
+ }) {
1917
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border bg-card p-4 flex flex-col gap-1 min-w-0", children: [
1918
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: label }),
1919
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-sans text-foreground", children })
1920
+ ] });
1921
+ }
1922
+ function AdventureSection({
1923
+ adventure,
1924
+ onAddContactAsTraveller,
1925
+ onEditTraveller,
1926
+ onRemoveTraveller,
1927
+ onAddSuggestedTraveller
1928
+ }) {
1929
+ var _a, _b, _c;
1930
+ const [detailsOpen, setDetailsOpen] = React4.useState(false);
1931
+ const [addModalOpen, setAddModalOpen] = React4.useState(false);
1932
+ const [newTraveller, setNewTraveller] = React4.useState({
1933
+ firstName: "",
1934
+ lastName: "",
1935
+ passport: "",
1936
+ type: "adult",
1937
+ email: "",
1938
+ dateOfBirth: "",
1939
+ phone: ""
1940
+ });
1941
+ const setField = (k, v) => setNewTraveller((p) => __spreadProps(__spreadValues({}, p), { [k]: v }));
1942
+ const handleCopyUrl = (url) => {
1943
+ navigator.clipboard.writeText(url);
1944
+ };
1945
+ const people = adventure.slots;
1946
+ [
1947
+ (people == null ? void 0 : people.adults) ? `Adults: ${people.adults}` : null,
1948
+ (people == null ? void 0 : people.children) ? `Children: ${people.children}` : null,
1949
+ (people == null ? void 0 : people.seniors) ? `Seniors: ${people.seniors}` : null
1950
+ ].filter(Boolean).join(" \xB7 ");
1951
+ 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);
1952
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card overflow-hidden", children: [
1953
+ /* @__PURE__ */ jsxs("div", { className: "p-5 lg:p-6 flex flex-col gap-2 bg-muted/60", children: [
1954
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
1955
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
1956
+ /* @__PURE__ */ jsxs("h3", { className: "text-xl font-bold text-foreground font-heading leading-snug", children: [
1957
+ adventure.title,
1958
+ adventure.reference && /* @__PURE__ */ jsxs("span", { className: "text-xs font-normal text-muted-foreground/40 ml-1.5", children: [
1959
+ "#",
1960
+ adventure.reference
1961
+ ] })
1962
+ ] }),
1963
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-wrap text-sm text-muted-foreground font-sans", children: [
1964
+ adventure.partner && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
1965
+ /* @__PURE__ */ jsx(CompassIcon, { className: "w-3.5 h-3.5 shrink-0 text-primary" }),
1966
+ adventure.partner
1967
+ ] }),
1968
+ adventure.location && /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
1969
+ /* @__PURE__ */ jsx(MapPinIcon, { className: "w-3.5 h-3.5 shrink-0 text-primary" }),
1970
+ adventure.location
1971
+ ] })
1972
+ ] })
1973
+ ] }),
1974
+ /* @__PURE__ */ jsxs(
1975
+ "button",
1976
+ {
1977
+ type: "button",
1978
+ onClick: () => setDetailsOpen((v) => !v),
1979
+ className: cn(
1980
+ "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",
1981
+ "hover:border-primary hover:text-primary",
1982
+ detailsOpen && "border-primary text-primary"
1983
+ ),
1984
+ children: [
1985
+ "Details",
1986
+ detailsOpen ? /* @__PURE__ */ jsx(ChevronUpIcon, { className: "w-3 h-3" }) : /* @__PURE__ */ jsx(ChevronDownIcon, { className: "w-3 h-3" })
1987
+ ]
1988
+ }
1989
+ )
1990
+ ] }),
1991
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4 flex-wrap text-sm text-muted-foreground font-sans", children: /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
1992
+ /* @__PURE__ */ jsx(CalendarIcon, { className: "w-3.5 h-3.5 shrink-0 text-primary" }),
1993
+ adventure.dateFrom,
1994
+ " \u2192 ",
1995
+ adventure.dateTo
1996
+ ] }) }),
1997
+ adventure.tags && adventure.tags.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5 mt-1", children: adventure.tags.map((tag) => /* @__PURE__ */ jsx(
1998
+ "span",
1999
+ {
2000
+ className: "inline-flex items-center rounded-full bg-primary/10 px-2.5 py-0.5 text-xs font-semibold text-primary font-heading",
2001
+ children: tag
2002
+ },
2003
+ tag
2004
+ )) })
2005
+ ] }),
2006
+ detailsOpen && /* @__PURE__ */ jsxs("div", { className: "border-t border-border px-5 lg:px-6 py-5 flex flex-col gap-5 bg-muted/10", children: [
2007
+ adventure.description && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2008
+ /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Itinerary" }),
2009
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description })
2010
+ ] }),
2011
+ adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2012
+ /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "O que est\xE1 incluso" }),
2013
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.included.map((item, i) => /* @__PURE__ */ jsxs(
2014
+ "li",
2015
+ {
2016
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2017
+ children: [
2018
+ /* @__PURE__ */ jsx(CheckIcon, { className: "w-4 h-4 text-primary shrink-0 mt-1" }),
2019
+ item
2020
+ ]
2021
+ },
2022
+ i
2023
+ )) })
2024
+ ] }),
2025
+ adventure.notIncluded && adventure.notIncluded.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2026
+ /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "O que n\xE3o est\xE1 incluso" }),
2027
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.notIncluded.map((item, i) => /* @__PURE__ */ jsxs(
2028
+ "li",
2029
+ {
2030
+ className: "flex items-start gap-2 text-sm text-foreground/80 font-sans",
2031
+ children: [
2032
+ /* @__PURE__ */ jsx(XIcon, { className: "w-4 h-4 text-destructive shrink-0 mt-1" }),
2033
+ item
2034
+ ]
2035
+ },
2036
+ i
2037
+ )) })
2038
+ ] }),
2039
+ adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2040
+ /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Pol\xEDtica de cancelamento" }),
2041
+ /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.cancellationPolicy.map((item, i) => /* @__PURE__ */ jsxs(
2042
+ "li",
2043
+ {
2044
+ className: "flex items-start gap-2 text-sm text-muted-foreground font-sans",
2045
+ children: [
2046
+ /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2.5" }),
2047
+ item
2048
+ ]
2049
+ },
2050
+ i
2051
+ )) })
2052
+ ] })
2053
+ ] }),
2054
+ /* @__PURE__ */ jsxs("div", { className: "border-t border-border px-5 lg:px-6 py-5 flex flex-col gap-4", children: [
2055
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 flex-wrap", children: [
2056
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
2057
+ /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Travellers" }),
2058
+ adventure.formName && /* @__PURE__ */ jsxs("span", { className: "text-xs font-semibold text-muted-foreground/50 font-heading tracking-wide", children: [
2059
+ "\xB7 ",
2060
+ adventure.formName
2061
+ ] })
2062
+ ] }),
2063
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
2064
+ onAddContactAsTraveller && /* @__PURE__ */ jsxs(
2065
+ "button",
2066
+ {
2067
+ type: "button",
2068
+ onClick: () => onAddContactAsTraveller(adventure.id),
2069
+ 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",
2070
+ children: [
2071
+ /* @__PURE__ */ jsx(UserPlusIcon, { className: "w-3 h-3" }),
2072
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "Add contact as traveller" }),
2073
+ /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: "Add contact" })
2074
+ ]
2075
+ }
2076
+ ),
2077
+ /* @__PURE__ */ jsxs(
2078
+ "button",
2079
+ {
2080
+ type: "button",
2081
+ onClick: () => setAddModalOpen(true),
2082
+ 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",
2083
+ children: [
2084
+ /* @__PURE__ */ jsx(PlusIcon, { className: "w-3 h-3" }),
2085
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: "More travellers" }),
2086
+ /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: "Add" })
2087
+ ]
2088
+ }
2089
+ )
2090
+ ] })
2091
+ ] }),
2092
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col divide-y divide-border", children: adventure.travellers.map((t) => /* @__PURE__ */ jsxs(
2093
+ "div",
2094
+ {
2095
+ className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3 py-3 first:pt-0",
2096
+ children: [
2097
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3 min-w-0 flex-1", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 min-w-0 flex-1", children: [
2098
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [
2099
+ /* @__PURE__ */ jsxs("p", { className: "text-sm font-semibold text-foreground font-ui truncate", children: [
2100
+ t.firstName,
2101
+ " ",
2102
+ t.lastName
2103
+ ] }),
2104
+ t.isChild && /* @__PURE__ */ 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" })
2105
+ ] }),
2106
+ t.formUrl && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
2107
+ /* @__PURE__ */ jsxs(
2108
+ "a",
2109
+ {
2110
+ href: t.formUrl,
2111
+ target: "_blank",
2112
+ rel: "noopener noreferrer",
2113
+ className: "flex items-center gap-1 text-xs text-primary hover:text-primary/80 transition-colors font-ui",
2114
+ children: [
2115
+ /* @__PURE__ */ jsx(ExternalLinkIcon, { className: "w-3 h-3" }),
2116
+ "Open"
2117
+ ]
2118
+ }
2119
+ ),
2120
+ /* @__PURE__ */ jsx(
2121
+ "button",
2122
+ {
2123
+ type: "button",
2124
+ onClick: () => handleCopyUrl(t.formUrl),
2125
+ className: "flex items-center text-xs text-muted-foreground hover:text-primary transition-colors font-ui",
2126
+ "aria-label": "Copy form URL",
2127
+ children: /* @__PURE__ */ jsx(CopyIcon, { className: "w-3 h-3" })
2128
+ }
2129
+ )
2130
+ ] })
2131
+ ] }) }),
2132
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 sm:gap-3 justify-between sm:justify-end", children: [
2133
+ /* @__PURE__ */ jsx(
2134
+ "span",
2135
+ {
2136
+ className: cn(
2137
+ "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-bold font-heading uppercase tracking-wider shrink-0",
2138
+ 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"
2139
+ ),
2140
+ children: t.status
2141
+ }
2142
+ ),
2143
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [
2144
+ onEditTraveller && /* @__PURE__ */ jsx(
2145
+ "button",
2146
+ {
2147
+ type: "button",
2148
+ onClick: () => onEditTraveller(adventure.id, t.id),
2149
+ 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",
2150
+ "aria-label": `Edit ${t.firstName}`,
2151
+ children: /* @__PURE__ */ jsx(PencilIcon, { className: "w-3.5 h-3.5" })
2152
+ }
2153
+ ),
2154
+ onRemoveTraveller && /* @__PURE__ */ jsx(
2155
+ "button",
2156
+ {
2157
+ type: "button",
2158
+ onClick: () => onRemoveTraveller(adventure.id, t.id),
2159
+ 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",
2160
+ "aria-label": `Delete ${t.firstName}`,
2161
+ children: /* @__PURE__ */ jsx(Trash2Icon, { className: "w-3.5 h-3.5" })
2162
+ }
2163
+ ),
2164
+ onRemoveTraveller && /* @__PURE__ */ jsx(
2165
+ "button",
2166
+ {
2167
+ type: "button",
2168
+ onClick: () => onRemoveTraveller(adventure.id, t.id),
2169
+ 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",
2170
+ "aria-label": `Remove ${t.firstName} from adventure`,
2171
+ children: /* @__PURE__ */ jsx(UserMinusIcon, { className: "w-3.5 h-3.5" })
2172
+ }
2173
+ )
2174
+ ] })
2175
+ ] })
2176
+ ]
2177
+ },
2178
+ t.id
2179
+ )) }),
2180
+ adventure.suggestedTravellers && adventure.suggestedTravellers.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 pt-2", children: [
2181
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground font-ui", children: "Add to this adventure" }),
2182
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: adventure.suggestedTravellers.map((st) => /* @__PURE__ */ jsxs(
2183
+ "button",
2184
+ {
2185
+ type: "button",
2186
+ onClick: () => onAddSuggestedTraveller == null ? void 0 : onAddSuggestedTraveller(adventure.id, st.id),
2187
+ 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",
2188
+ children: [
2189
+ /* @__PURE__ */ jsx(PlusIcon, { className: "w-3 h-3" }),
2190
+ st.firstName,
2191
+ " ",
2192
+ st.lastName
2193
+ ]
2194
+ },
2195
+ st.id
2196
+ )) })
2197
+ ] }),
2198
+ adventure.travellers.length > 0 && totalSlots > 0 && (() => {
2199
+ const completed = adventure.travellers.filter((t) => t.status === "completed").length;
2200
+ const percent = Math.round(completed / totalSlots * 100);
2201
+ const isComplete = completed === totalSlots;
2202
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 mt-1", children: [
2203
+ /* @__PURE__ */ jsx("div", { className: "flex-1 h-2 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsx(
2204
+ "div",
2205
+ {
2206
+ className: "h-full rounded-full bg-primary transition-all duration-500",
2207
+ style: { width: `${percent}%` }
2208
+ }
2209
+ ) }),
2210
+ /* @__PURE__ */ jsxs("span", { className: cn(
2211
+ "text-xs font-semibold font-ui shrink-0 flex items-center gap-1",
2212
+ isComplete ? "text-primary" : "text-destructive"
2213
+ ), children: [
2214
+ completed,
2215
+ " of ",
2216
+ totalSlots,
2217
+ " travellers registered",
2218
+ !isComplete && /* @__PURE__ */ jsx(AlertTriangleIcon, { className: "w-3 h-3" })
2219
+ ] })
2220
+ ] });
2221
+ })()
2222
+ ] }),
2223
+ /* @__PURE__ */ jsx(Dialog, { open: addModalOpen, onOpenChange: setAddModalOpen, children: /* @__PURE__ */ jsxs(DialogContent, { className: "sm:max-w-md", children: [
2224
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { className: "font-heading text-xl", children: "Add traveller" }) }),
2225
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 pt-2", children: [
2226
+ /* @__PURE__ */ jsx(
2227
+ FloatingInput,
2228
+ {
2229
+ label: "First name",
2230
+ required: true,
2231
+ value: newTraveller.firstName,
2232
+ onChange: (e) => setField("firstName", e.target.value)
2233
+ }
2234
+ ),
2235
+ /* @__PURE__ */ jsx(
2236
+ FloatingInput,
2237
+ {
2238
+ label: "Last name",
2239
+ required: true,
2240
+ value: newTraveller.lastName,
2241
+ onChange: (e) => setField("lastName", e.target.value)
2242
+ }
2243
+ ),
2244
+ /* @__PURE__ */ jsx(
2245
+ FloatingInput,
2246
+ {
2247
+ label: "Passport (optional)",
2248
+ value: newTraveller.passport,
2249
+ onChange: (e) => setField("passport", e.target.value)
2250
+ }
2251
+ ),
2252
+ /* @__PURE__ */ jsxs(
2253
+ FloatingSelect,
2254
+ {
2255
+ label: "Type (adult/child/senior)",
2256
+ value: newTraveller.type,
2257
+ onChange: (e) => setField("type", e.target.value),
2258
+ children: [
2259
+ /* @__PURE__ */ jsx("option", { value: "adult", children: "Adult" }),
2260
+ /* @__PURE__ */ jsx("option", { value: "child", children: "Child" }),
2261
+ /* @__PURE__ */ jsx("option", { value: "senior", children: "Senior" })
2262
+ ]
2263
+ }
2264
+ ),
2265
+ /* @__PURE__ */ jsx(
2266
+ FloatingInput,
2267
+ {
2268
+ label: "Email",
2269
+ type: "email",
2270
+ required: true,
2271
+ value: newTraveller.email,
2272
+ onChange: (e) => setField("email", e.target.value)
2273
+ }
2274
+ ),
2275
+ /* @__PURE__ */ jsx(
2276
+ FloatingInput,
2277
+ {
2278
+ label: "Date of birth",
2279
+ type: "date",
2280
+ value: newTraveller.dateOfBirth,
2281
+ onChange: (e) => setField("dateOfBirth", e.target.value)
2282
+ }
2283
+ ),
2284
+ /* @__PURE__ */ jsx(
2285
+ FloatingInput,
2286
+ {
2287
+ label: "Phone (optional)",
2288
+ type: "tel",
2289
+ value: newTraveller.phone,
2290
+ onChange: (e) => setField("phone", e.target.value)
2291
+ }
2292
+ ),
2293
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-3 pt-2", children: [
2294
+ /* @__PURE__ */ jsx(
2295
+ "button",
2296
+ {
2297
+ type: "button",
2298
+ onClick: () => setAddModalOpen(false),
2299
+ className: "text-sm font-ui text-muted-foreground hover:text-foreground transition-colors",
2300
+ children: "Cancel"
2301
+ }
2302
+ ),
2303
+ /* @__PURE__ */ jsx(
2304
+ "button",
2305
+ {
2306
+ type: "button",
2307
+ onClick: () => {
2308
+ setAddModalOpen(false);
2309
+ setNewTraveller({
2310
+ firstName: "",
2311
+ lastName: "",
2312
+ passport: "",
2313
+ type: "adult",
2314
+ email: "",
2315
+ dateOfBirth: "",
2316
+ phone: ""
2317
+ });
2318
+ },
2319
+ 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",
2320
+ children: "Add"
2321
+ }
2322
+ )
2323
+ ] })
2324
+ ] })
2325
+ ] }) })
2326
+ ] });
2327
+ }
2328
+ function OrderSummary({
2329
+ adventures,
2330
+ summaryLineItems,
2331
+ subtotal,
2332
+ total,
2333
+ depositInfo
2334
+ }) {
2335
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 lg:p-6 flex flex-col gap-4", children: [
2336
+ /* @__PURE__ */ jsx("h3", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Order Summary" }),
2337
+ /* @__PURE__ */ jsx(Separator, {}),
2338
+ adventures.map((adventure, i) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2339
+ /* @__PURE__ */ jsx("p", { className: "text-base font-bold text-foreground font-heading", children: adventure.title }),
2340
+ adventure.lineItems && adventure.lineItems.length > 0 && /* @__PURE__ */ 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__ */ jsxs(
2341
+ "div",
2342
+ {
2343
+ className: "flex items-start justify-between gap-3",
2344
+ children: [
2345
+ /* @__PURE__ */ jsx(
2346
+ "span",
2347
+ {
2348
+ className: cn(
2349
+ "text-sm font-sans leading-tight",
2350
+ item.isBold ? "font-semibold text-foreground" : "text-muted-foreground"
2351
+ ),
2352
+ children: item.label
2353
+ }
2354
+ ),
2355
+ /* @__PURE__ */ jsxs(
2356
+ "span",
2357
+ {
2358
+ className: cn(
2359
+ "text-sm font-sans shrink-0",
2360
+ item.isDiscount ? "text-green-600 dark:text-green-400" : item.isBold ? "font-semibold text-foreground" : "text-foreground"
2361
+ ),
2362
+ children: [
2363
+ item.isDiscount ? "\u2212" : "",
2364
+ item.price
2365
+ ]
2366
+ }
2367
+ )
2368
+ ]
2369
+ },
2370
+ j
2371
+ )) }),
2372
+ adventure.subtotal && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mt-1", children: [
2373
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Subtotal this adventure" }),
2374
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: adventure.subtotal })
2375
+ ] }),
2376
+ i < adventures.length - 1 && /* @__PURE__ */ jsx(Separator, { className: "mt-2" })
2377
+ ] }, adventure.id)),
2378
+ /* @__PURE__ */ jsx(Separator, {}),
2379
+ summaryLineItems && summaryLineItems.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
2380
+ summaryLineItems.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2381
+ /* @__PURE__ */ jsx(
2382
+ "span",
2383
+ {
2384
+ className: cn(
2385
+ "text-sm font-sans",
2386
+ item.isBold ? "font-semibold text-foreground" : "text-muted-foreground"
2387
+ ),
2388
+ children: item.label
2389
+ }
2390
+ ),
2391
+ /* @__PURE__ */ jsxs(
2392
+ "span",
2393
+ {
2394
+ className: cn(
2395
+ "text-sm font-sans",
2396
+ item.isDiscount ? "text-green-600 dark:text-green-400" : item.isBold ? "font-semibold text-foreground" : "text-foreground"
2397
+ ),
2398
+ children: [
2399
+ item.isDiscount ? "\u2212" : "",
2400
+ item.price
2401
+ ]
2402
+ }
2403
+ )
2404
+ ] }, i)),
2405
+ /* @__PURE__ */ jsx(Separator, {})
2406
+ ] }),
2407
+ subtotal && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2408
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Subtotal" }),
2409
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: subtotal })
2410
+ ] }),
2411
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between pt-1", children: [
2412
+ /* @__PURE__ */ jsx("span", { className: "text-base font-bold text-foreground font-heading", children: "Total" }),
2413
+ /* @__PURE__ */ jsx("span", { className: "text-2xl font-black text-primary font-heading", children: total })
2414
+ ] }),
2415
+ depositInfo && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 rounded-lg bg-muted/50 border border-border p-4", children: [
2416
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2417
+ /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground font-sans", children: [
2418
+ "Deposit (",
2419
+ depositInfo.depositPercent,
2420
+ "%)"
2421
+ ] }),
2422
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.depositAmount })
2423
+ ] }),
2424
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2425
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Remaining balance" }),
2426
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.remainingAmount })
2427
+ ] }),
2428
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
2429
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Balance due" }),
2430
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.balanceDueDate })
2431
+ ] })
2432
+ ] })
2433
+ ] });
2434
+ }
2435
+ function BookingDetails({
2436
+ bookingId,
2437
+ status,
2438
+ createdAt,
2439
+ contact,
2440
+ agentName,
2441
+ agentContactUrl,
2442
+ adventures,
2443
+ summaryLineItems,
2444
+ subtotal,
2445
+ total,
2446
+ depositInfo,
2447
+ onAddContactAsTraveller,
2448
+ onEditTraveller,
2449
+ onRemoveTraveller,
2450
+ onAddSuggestedTraveller,
2451
+ onPayBalance,
2452
+ onCancelRequest,
2453
+ className
2454
+ }) {
2455
+ var _a, _b, _c;
2456
+ const people = totalPeople(adventures);
2457
+ return /* @__PURE__ */ jsxs(
2458
+ "div",
2459
+ {
2460
+ className: cn("w-full max-w-5xl mx-auto flex flex-col gap-6 px-4 sm:px-6 lg:px-0", className),
2461
+ children: [
2462
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4 flex-wrap", children: [
2463
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
2464
+ /* @__PURE__ */ jsxs("h1", { className: "text-2xl font-black text-foreground font-heading leading-tight", children: [
2465
+ "Booking",
2466
+ " ",
2467
+ /* @__PURE__ */ jsxs("span", { className: "text-primary", children: [
2468
+ "#",
2469
+ bookingId
2470
+ ] })
2471
+ ] }),
2472
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground font-sans", children: [
2473
+ "Created on ",
2474
+ createdAt
2475
+ ] })
2476
+ ] }),
2477
+ /* @__PURE__ */ jsx(StatusBadge, { status })
2478
+ ] }),
2479
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-3", children: [
2480
+ /* @__PURE__ */ jsxs(InfoCard, { label: "Contact", children: [
2481
+ /* @__PURE__ */ jsx("p", { className: "font-semibold", children: contact.name }),
2482
+ contact.email && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground font-sans truncate", children: contact.email })
2483
+ ] }),
2484
+ agentName && /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border bg-card p-4 flex items-center gap-3.5 min-w-0", children: [
2485
+ /* @__PURE__ */ 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) }),
2486
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
2487
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Your Agent" }),
2488
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-foreground font-sans", children: agentName })
2489
+ ] }),
2490
+ agentContactUrl && /* @__PURE__ */ jsxs(
2491
+ "a",
2492
+ {
2493
+ href: agentContactUrl,
2494
+ target: "_blank",
2495
+ rel: "noopener noreferrer",
2496
+ 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",
2497
+ children: [
2498
+ /* @__PURE__ */ jsx(MessageCircleIcon, { className: "w-3.5 h-3.5" }),
2499
+ "Contact"
2500
+ ]
2501
+ }
2502
+ )
2503
+ ] }),
2504
+ /* @__PURE__ */ jsxs(InfoCard, { label: "Total People", children: [
2505
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
2506
+ /* @__PURE__ */ jsx(UsersIcon, { className: "w-4 h-4 text-primary shrink-0" }),
2507
+ /* @__PURE__ */ jsxs("span", { className: "font-semibold", children: [
2508
+ people.total,
2509
+ " person(s)"
2510
+ ] })
2511
+ ] }),
2512
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground font-sans", children: [
2513
+ people.adults > 0 ? `Adults: ${people.adults}` : null,
2514
+ people.children > 0 ? `Children: ${people.children}` : null,
2515
+ people.seniors > 0 ? `Seniors: ${people.seniors}` : null
2516
+ ].filter(Boolean).join(" \xB7 ") })
2517
+ ] })
2518
+ ] }),
2519
+ /* @__PURE__ */ jsxs("section", { className: "flex flex-col gap-4", children: [
2520
+ /* @__PURE__ */ jsxs("h2", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: [
2521
+ "Adventures (",
2522
+ adventures.length,
2523
+ ")"
2524
+ ] }),
2525
+ adventures.map((adventure) => /* @__PURE__ */ jsx(
2526
+ AdventureSection,
2527
+ {
2528
+ adventure,
2529
+ onAddContactAsTraveller,
2530
+ onEditTraveller,
2531
+ onRemoveTraveller,
2532
+ onAddSuggestedTraveller
2533
+ },
2534
+ adventure.id
2535
+ ))
2536
+ ] }),
2537
+ /* @__PURE__ */ jsx(
2538
+ OrderSummary,
2539
+ {
2540
+ adventures,
2541
+ summaryLineItems,
2542
+ subtotal,
2543
+ total,
2544
+ depositInfo
2545
+ }
2546
+ ),
2547
+ /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 lg:p-6 flex flex-col gap-4", children: [
2548
+ /* @__PURE__ */ jsx("h3", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Responsible Person" }),
2549
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-3", children: [
2550
+ /* @__PURE__ */ jsxs("div", { children: [
2551
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Name" }),
2552
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold text-foreground font-sans", children: contact.name })
2553
+ ] }),
2554
+ /* @__PURE__ */ jsxs("div", { children: [
2555
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Email" }),
2556
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans truncate", children: (_a = contact.email) != null ? _a : "\u2014" })
2557
+ ] }),
2558
+ /* @__PURE__ */ jsxs("div", { children: [
2559
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Phone" }),
2560
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: (_b = contact.phone) != null ? _b : "\u2014" })
2561
+ ] }),
2562
+ /* @__PURE__ */ jsxs("div", { children: [
2563
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Country" }),
2564
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: (_c = contact.country) != null ? _c : "\u2014" })
2565
+ ] }),
2566
+ contact.passport && /* @__PURE__ */ jsxs("div", { children: [
2567
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Passport / CPF" }),
2568
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: contact.passport })
2569
+ ] })
2570
+ ] })
2571
+ ] }),
2572
+ (onPayBalance || onCancelRequest) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-4", children: [
2573
+ depositInfo && !depositInfo.isPaidInFull && onPayBalance && /* @__PURE__ */ jsxs(
2574
+ "button",
2575
+ {
2576
+ type: "button",
2577
+ onClick: onPayBalance,
2578
+ className: cn(
2579
+ "w-full rounded-full bg-primary py-3.5 text-center text-sm font-bold uppercase tracking-wide",
2580
+ "text-primary-foreground font-heading transition-colors hover:bg-primary/90",
2581
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
2582
+ "flex items-center justify-center gap-2"
2583
+ ),
2584
+ children: [
2585
+ /* @__PURE__ */ jsx(CreditCardIcon, { className: "w-4 h-4" }),
2586
+ "Pay remaining balance \u2014 ",
2587
+ depositInfo.remainingAmount
2588
+ ]
2589
+ }
2590
+ ),
2591
+ onCancelRequest && status !== "cancelled" && /* @__PURE__ */ jsxs(
2592
+ "button",
2593
+ {
2594
+ type: "button",
2595
+ onClick: onCancelRequest,
2596
+ className: "flex items-center gap-1.5 text-xs font-ui text-muted-foreground hover:text-destructive transition-colors underline underline-offset-2",
2597
+ children: [
2598
+ /* @__PURE__ */ jsx(AlertCircleIcon, { className: "w-3 h-3" }),
2599
+ "Request cancellation"
2600
+ ]
2601
+ }
2602
+ )
2603
+ ] })
2604
+ ]
2605
+ }
2606
+ );
2607
+ }
2608
+ var DEFAULT_LOGO = "/logo-planetaexo.png";
2609
+ function BookingConfirmationEmail({
2610
+ recipientName,
2611
+ addTravellersUrl,
2612
+ logoUrl = DEFAULT_LOGO,
2613
+ bookingNumber,
2614
+ activity,
2615
+ adventure,
2616
+ startingDate,
2617
+ numberOfPeople,
2618
+ host,
2619
+ className
2620
+ }) {
2621
+ const AddTravellersCta = addTravellersUrl ? /* @__PURE__ */ jsx(
2622
+ "a",
2623
+ {
2624
+ href: addTravellersUrl,
2625
+ 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",
2626
+ children: "Add travellers to your booking"
2627
+ }
2628
+ ) : /* @__PURE__ */ jsx(
2629
+ "span",
2630
+ {
2631
+ className: "inline-flex items-center justify-center rounded-lg bg-primary px-6 py-3 text-sm font-bold text-primary-foreground font-heading",
2632
+ role: "presentation",
2633
+ children: "Add travellers to your booking"
2634
+ }
2635
+ );
2636
+ return /* @__PURE__ */ jsxs(
2637
+ "div",
2638
+ {
2639
+ className: cn(
2640
+ "max-w-xl mx-auto bg-white text-foreground font-sans text-base leading-relaxed",
2641
+ className
2642
+ ),
2643
+ children: [
2644
+ /* @__PURE__ */ jsx("div", { className: "mt-8 mb-8 flex justify-center", children: /* @__PURE__ */ jsx(
2645
+ "img",
2646
+ {
2647
+ src: logoUrl,
2648
+ alt: "PlanetaEXO",
2649
+ className: "h-[70px] w-auto object-contain"
2650
+ }
2651
+ ) }),
2652
+ /* @__PURE__ */ jsxs("p", { className: "mb-4", children: [
2653
+ "Hi ",
2654
+ recipientName,
2655
+ ","
2656
+ ] }),
2657
+ /* @__PURE__ */ jsx("p", { className: "mb-4", children: "Thank you for booking your adventure with PlanetaEXO \u2014 we're really looking forward to your adventure." }),
2658
+ /* @__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." }),
2659
+ /* @__PURE__ */ jsx("div", { className: "mb-8", children: AddTravellersCta }),
2660
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border mb-8" }),
2661
+ /* @__PURE__ */ jsx("p", { className: "mb-4 font-heading font-bold text-foreground", children: "\u{1F4DD} Here's a quick summary of your booking:" }),
2662
+ /* @__PURE__ */ jsx("table", { className: "w-full text-sm mb-8", children: /* @__PURE__ */ jsxs("tbody", { className: "divide-y divide-border", children: [
2663
+ /* @__PURE__ */ jsxs("tr", { children: [
2664
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Booking Number:" }),
2665
+ /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: bookingNumber })
2666
+ ] }),
2667
+ /* @__PURE__ */ jsxs("tr", { children: [
2668
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Activity:" }),
2669
+ /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: activity })
2670
+ ] }),
2671
+ /* @__PURE__ */ jsxs("tr", { children: [
2672
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Adventure:" }),
2673
+ /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: adventure })
2674
+ ] }),
2675
+ /* @__PURE__ */ jsxs("tr", { children: [
2676
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Starting Date:" }),
2677
+ /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: startingDate })
2678
+ ] }),
2679
+ /* @__PURE__ */ jsxs("tr", { children: [
2680
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Number of People:" }),
2681
+ /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: numberOfPeople })
2682
+ ] }),
2683
+ /* @__PURE__ */ jsxs("tr", { children: [
2684
+ /* @__PURE__ */ jsx("td", { className: "py-1 pr-4 text-muted-foreground font-ui", children: "Host:" }),
2685
+ /* @__PURE__ */ jsx("td", { className: "py-1 font-medium text-foreground", children: host })
2686
+ ] })
2687
+ ] }) }),
2688
+ /* @__PURE__ */ jsx("hr", { className: "border-t border-border mb-8" }),
2689
+ /* @__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." }),
2690
+ /* @__PURE__ */ jsx("p", { children: "If you have any questions, just reply to this email \u2014 happy to help." })
2691
+ ]
2692
+ }
2693
+ );
1135
2694
  }
1136
2695
 
1137
- export { Offer, OfferAdventureCard, cn };
2696
+ export { BookingConfirmationEmail, BookingDetails, Offer, OfferAdventureCard, cn };
1138
2697
  //# sourceMappingURL=index.js.map
1139
2698
  //# sourceMappingURL=index.js.map