@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/README.md +121 -121
- package/dist/index.cjs +1660 -99
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +126 -2
- package/dist/index.d.ts +126 -2
- package/dist/index.js +1659 -100
- package/dist/index.js.map +1 -1
- package/package.json +61 -61
package/dist/index.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import {
|
|
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
|
|
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 :
|
|
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 =
|
|
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 :
|
|
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] =
|
|
370
|
-
const containerRef =
|
|
371
|
-
const listRef =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
821
|
+
function AdventureCard({ adventure }) {
|
|
481
822
|
var _a, _b, _c;
|
|
482
|
-
const [checked, setChecked] =
|
|
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__ */
|
|
843
|
+
adventure.onRemove && /* @__PURE__ */ jsxs(
|
|
503
844
|
"button",
|
|
504
845
|
{
|
|
505
846
|
type: "button",
|
|
506
847
|
onClick: adventure.onRemove,
|
|
507
|
-
className: "text-
|
|
508
|
-
children:
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
563
|
-
/* @__PURE__ */ jsx(CheckIcon, { className: "w-4 h-4 text-primary shrink-0 mt-
|
|
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-
|
|
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-
|
|
570
|
-
/* @__PURE__ */ jsx(XIcon, { className: "w-4 h-4 text-destructive shrink-0 mt-
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
625
|
-
/* @__PURE__ */ jsxs("p", { className: "text-sm font-sans text-foreground
|
|
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-
|
|
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] =
|
|
761
|
-
const [error, setError] =
|
|
762
|
-
const [responsible, setResponsible] =
|
|
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] =
|
|
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] =
|
|
790
|
-
const [
|
|
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(
|
|
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-
|
|
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-
|
|
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__ */
|
|
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-
|
|
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-
|
|
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__ */
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
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
|
-
|
|
1008
|
-
|
|
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__ */
|
|
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__ */
|
|
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] =
|
|
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-[
|
|
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(
|
|
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
|