@planetaexo/design-system 0.9.5 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { cva } from 'class-variance-authority';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
- import { XIcon, ChevronDownIcon, CalendarIcon, SearchIcon, ChevronRightIcon, ArrowLeftIcon, CheckCircle2Icon, MapIcon, LogOutIcon, MessageCircleIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CircleCheckIcon, ChevronLeftIcon, ClockIcon, ChevronUpIcon, UserIcon, MenuIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, InfoIcon, Loader2Icon, SendIcon, CheckCircleIcon, CheckIcon, MailIcon, PhoneIcon, CompassIcon, UserPlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, CarIcon, ZoomInIcon, StarIcon, LayoutGridIcon } from 'lucide-react';
7
+ import { XIcon, ChevronDownIcon, CalendarIcon, SearchIcon, ChevronRightIcon, ArrowLeftIcon, CheckCircle2Icon, MapIcon, LogOutIcon, UsersIcon, CreditCardIcon, AlertCircleIcon, MinusIcon, PlusIcon, CircleCheckIcon, ChevronLeftIcon, ClockIcon, ChevronUpIcon, UserIcon, MenuIcon, SunIcon, MoonIcon, MapPinIcon, PackageIcon, InfoIcon, Loader2Icon, SendIcon, CheckCircleIcon, CheckIcon, MailIcon, PhoneIcon, MessageCircleIcon, CompassIcon, UserPlusIcon, ExternalLinkIcon, CopyIcon, PencilIcon, Trash2Icon, UserMinusIcon, AlertTriangleIcon, CarIcon, ZoomInIcon, StarIcon, LayoutGridIcon } from 'lucide-react';
8
8
  import { Separator as Separator$1 } from '@base-ui/react/separator';
9
9
  import { Dialog as Dialog$1 } from '@base-ui/react/dialog';
10
10
  import { Button as Button$1 } from '@base-ui/react/button';
@@ -1352,7 +1352,7 @@ function AdventureCard({ adventure }) {
1352
1352
  (adventure.description || adventure.detailsSlot) && /* @__PURE__ */ jsxs(Fragment, { children: [
1353
1353
  /* @__PURE__ */ jsx(Separator, { className: "my-1" }),
1354
1354
  /* @__PURE__ */ jsxs("div", { children: [
1355
- /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-3", children: (_f = adventure.itineraryLabel) != null ? _f : "Itinerary" }),
1355
+ /* @__PURE__ */ jsx("p", { className: "text-[10px] font-bold text-muted-foreground font-heading uppercase tracking-widest mb-3", children: (_f = adventure.itineraryLabel) != null ? _f : "Details" }),
1356
1356
  adventure.description && !adventure.detailsSlot && /* @__PURE__ */ jsx("p", { className: "text-base text-foreground/80 leading-snug font-sans", children: adventure.description }),
1357
1357
  adventure.detailsSlot && /* @__PURE__ */ jsx("div", { className: cn(
1358
1358
  "text-foreground",
@@ -2195,13 +2195,206 @@ function Offer({
2195
2195
  ] }) })
2196
2196
  ] });
2197
2197
  }
2198
+ function getInitial(name) {
2199
+ return name && name.length > 0 ? name.charAt(0).toUpperCase() : "?";
2200
+ }
2201
+ function CompactAgentCard({
2202
+ name,
2203
+ avatar,
2204
+ email,
2205
+ whatsappUrl,
2206
+ label,
2207
+ nameFallback,
2208
+ legacyContactUrl,
2209
+ legacyContactLabel,
2210
+ className
2211
+ }) {
2212
+ const hasAgent = !!name;
2213
+ const displayName = hasAgent ? name : nameFallback != null ? nameFallback : "No agent assigned";
2214
+ const showLegacyContact = hasAgent && !email && !whatsappUrl && !!legacyContactUrl;
2215
+ return /* @__PURE__ */ jsxs(
2216
+ "div",
2217
+ {
2218
+ className: cn(
2219
+ "rounded-xl border border-border bg-card p-4 flex items-center gap-3.5 min-w-0",
2220
+ className
2221
+ ),
2222
+ children: [
2223
+ hasAgent && avatar ? (
2224
+ // eslint-disable-next-line @next/next/no-img-element
2225
+ /* @__PURE__ */ jsx(
2226
+ "img",
2227
+ {
2228
+ src: avatar,
2229
+ alt: displayName,
2230
+ className: "h-10 w-10 shrink-0 rounded-full object-cover ring-2 ring-primary/20"
2231
+ }
2232
+ )
2233
+ ) : /* @__PURE__ */ jsx(
2234
+ "div",
2235
+ {
2236
+ className: cn(
2237
+ "flex h-10 w-10 shrink-0 items-center justify-center rounded-full font-heading font-bold text-sm uppercase",
2238
+ hasAgent ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
2239
+ ),
2240
+ children: getInitial(name)
2241
+ }
2242
+ ),
2243
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 min-w-0 flex-1", children: [
2244
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: label != null ? label : "Your Agent" }),
2245
+ /* @__PURE__ */ jsx(
2246
+ "p",
2247
+ {
2248
+ className: cn(
2249
+ "text-sm font-sans truncate",
2250
+ hasAgent ? "font-semibold text-foreground" : "italic text-muted-foreground"
2251
+ ),
2252
+ children: displayName
2253
+ }
2254
+ )
2255
+ ] }),
2256
+ hasAgent && (email || whatsappUrl) && /* @__PURE__ */ jsxs("div", { className: "ml-auto shrink-0 flex items-center gap-1.5", children: [
2257
+ email && /* @__PURE__ */ jsx(
2258
+ "a",
2259
+ {
2260
+ href: `mailto:${email}`,
2261
+ className: "flex items-center justify-center h-8 w-8 rounded-full bg-primary/10 text-primary transition-colors hover:bg-primary/20",
2262
+ "aria-label": `Email ${displayName}`,
2263
+ title: email,
2264
+ children: /* @__PURE__ */ jsx(MailIcon, { className: "w-3.5 h-3.5" })
2265
+ }
2266
+ ),
2267
+ whatsappUrl && /* @__PURE__ */ jsx(
2268
+ "a",
2269
+ {
2270
+ href: whatsappUrl,
2271
+ target: "_blank",
2272
+ rel: "noopener noreferrer",
2273
+ className: "flex items-center justify-center h-8 w-8 rounded-full bg-[#25D366]/15 text-[#25D366] transition-colors hover:bg-[#25D366]/25",
2274
+ "aria-label": `WhatsApp ${displayName}`,
2275
+ children: /* @__PURE__ */ jsx("svg", { className: "w-3.5 h-3.5", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z" }) })
2276
+ }
2277
+ )
2278
+ ] }),
2279
+ showLegacyContact && /* @__PURE__ */ jsxs(
2280
+ "a",
2281
+ {
2282
+ href: legacyContactUrl,
2283
+ target: "_blank",
2284
+ rel: "noopener noreferrer",
2285
+ 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",
2286
+ children: [
2287
+ /* @__PURE__ */ jsx(MessageCircleIcon, { className: "w-3.5 h-3.5" }),
2288
+ legacyContactLabel != null ? legacyContactLabel : "Contact"
2289
+ ]
2290
+ }
2291
+ )
2292
+ ]
2293
+ }
2294
+ );
2295
+ }
2296
+ function WideAgentCard({
2297
+ name,
2298
+ avatar,
2299
+ email,
2300
+ whatsappUrl,
2301
+ label,
2302
+ nameFallback,
2303
+ helperText,
2304
+ className
2305
+ }) {
2306
+ const hasAgent = !!name;
2307
+ const displayName = hasAgent ? name : nameFallback != null ? nameFallback : "No agent assigned";
2308
+ return /* @__PURE__ */ jsxs(
2309
+ "div",
2310
+ {
2311
+ className: cn(
2312
+ "rounded-2xl border border-border bg-card p-5 flex flex-col gap-4",
2313
+ className
2314
+ ),
2315
+ children: [
2316
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-3 text-center", children: [
2317
+ hasAgent && avatar ? (
2318
+ // eslint-disable-next-line @next/next/no-img-element
2319
+ /* @__PURE__ */ jsx(
2320
+ "img",
2321
+ {
2322
+ src: avatar,
2323
+ alt: displayName,
2324
+ className: "w-16 h-16 rounded-full object-cover ring-2 ring-primary/20"
2325
+ }
2326
+ )
2327
+ ) : /* @__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: getInitial(name) }) }),
2328
+ /* @__PURE__ */ jsxs("div", { children: [
2329
+ label && /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: label }),
2330
+ /* @__PURE__ */ jsxs("p", { className: "text-sm font-sans text-foreground mt-0.5", children: [
2331
+ /* @__PURE__ */ jsx("span", { className: "font-bold text-foreground font-heading", children: displayName }),
2332
+ helperText && /* @__PURE__ */ jsxs(Fragment, { children: [
2333
+ " ",
2334
+ helperText
2335
+ ] })
2336
+ ] })
2337
+ ] })
2338
+ ] }),
2339
+ (whatsappUrl || email) && /* @__PURE__ */ jsxs(Fragment, { children: [
2340
+ /* @__PURE__ */ jsx(Separator, {}),
2341
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2342
+ whatsappUrl && /* @__PURE__ */ jsxs(
2343
+ "a",
2344
+ {
2345
+ href: whatsappUrl,
2346
+ target: "_blank",
2347
+ rel: "noopener noreferrer",
2348
+ className: "flex items-center gap-2.5 rounded-lg border border-border px-4 py-2.5 text-sm font-sans text-foreground hover:bg-muted/50 transition-colors",
2349
+ children: [
2350
+ /* @__PURE__ */ jsx("svg", { className: "w-4 h-4 shrink-0 text-[#25D366]", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx("path", { d: "M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z" }) }),
2351
+ "WhatsApp"
2352
+ ]
2353
+ }
2354
+ ),
2355
+ email && /* @__PURE__ */ jsxs(
2356
+ "a",
2357
+ {
2358
+ href: `mailto:${email}`,
2359
+ className: "flex items-center gap-2.5 rounded-lg border border-border px-4 py-2.5 text-sm font-sans text-foreground hover:bg-muted/50 transition-colors",
2360
+ children: [
2361
+ /* @__PURE__ */ jsx(MailIcon, { className: "w-4 h-4 shrink-0 text-primary" }),
2362
+ "Email"
2363
+ ]
2364
+ }
2365
+ )
2366
+ ] })
2367
+ ] })
2368
+ ]
2369
+ }
2370
+ );
2371
+ }
2372
+ function AgentContactCard(props) {
2373
+ if (props.layout === "wide") return /* @__PURE__ */ jsx(WideAgentCard, __spreadValues({}, props));
2374
+ return /* @__PURE__ */ jsx(CompactAgentCard, __spreadValues({}, props));
2375
+ }
2198
2376
  var STATUS_STYLES = {
2199
2377
  pending: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",
2200
2378
  confirmed: "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400",
2201
2379
  cancelled: "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400",
2202
- completed: "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"
2380
+ completed: "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400",
2381
+ pendingRegistration: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400",
2382
+ pendingPayment: "bg-warning/15 text-warning-foreground dark:bg-warning/20 dark:text-warning",
2383
+ pendingPaymentOverdue: "bg-destructive/15 text-destructive dark:bg-destructive/25 dark:text-destructive",
2384
+ complete: "bg-success/15 text-success dark:bg-success/20 dark:text-success"
2385
+ };
2386
+ var STATUS_DEFAULT_LABELS = {
2387
+ pending: "Pending",
2388
+ confirmed: "Confirmed",
2389
+ cancelled: "Cancelled",
2390
+ completed: "Completed",
2391
+ pendingRegistration: "Pending registration",
2392
+ pendingPayment: "Pending payment",
2393
+ pendingPaymentOverdue: "Payment overdue",
2394
+ complete: "Complete"
2203
2395
  };
2204
- function StatusBadge({ status }) {
2396
+ function StatusBadge({ status, label }) {
2397
+ var _a;
2205
2398
  return /* @__PURE__ */ jsx(
2206
2399
  "span",
2207
2400
  {
@@ -2209,7 +2402,7 @@ function StatusBadge({ status }) {
2209
2402
  "inline-flex items-center rounded-full px-3 py-1 text-xs font-bold font-heading uppercase tracking-wider",
2210
2403
  STATUS_STYLES[status]
2211
2404
  ),
2212
- children: status
2405
+ children: (_a = label != null ? label : STATUS_DEFAULT_LABELS[status]) != null ? _a : status
2213
2406
  }
2214
2407
  );
2215
2408
  }
@@ -2264,7 +2457,7 @@ function AdventureSection({
2264
2457
  onRequestOpenDeleteModal,
2265
2458
  cannotRemoveLastTravellerLabel
2266
2459
  }) {
2267
- var _a, _b, _c, _d, _e, _f, _g;
2460
+ var _a, _b, _c, _d, _e, _f, _g, _h;
2268
2461
  const [detailsOpen, setDetailsOpen] = React22.useState(false);
2269
2462
  const handleCopyUrl = (url) => {
2270
2463
  if (onCopyFormLink) {
@@ -2336,7 +2529,7 @@ function AdventureSection({
2336
2529
  ] }),
2337
2530
  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: [
2338
2531
  (adventure.detailsSlot || adventure.description) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2339
- /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Itinerary" }),
2532
+ /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: (_e = adventure.itineraryLabel) != null ? _e : "Details" }),
2340
2533
  adventure.detailsSlot ? /* @__PURE__ */ jsx(
2341
2534
  "div",
2342
2535
  {
@@ -2441,8 +2634,8 @@ function AdventureSection({
2441
2634
  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",
2442
2635
  children: [
2443
2636
  /* @__PURE__ */ jsx(PlusIcon, { className: "w-3 h-3" }),
2444
- /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: (_e = adventure.addTravellerLabel) != null ? _e : "More travellers" }),
2445
- /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: (_g = (_f = adventure.addTravellerShortLabel) != null ? _f : adventure.addTravellerLabel) != null ? _g : "Add" })
2637
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: (_f = adventure.addTravellerLabel) != null ? _f : "More travellers" }),
2638
+ /* @__PURE__ */ jsx("span", { className: "sm:hidden", children: (_h = (_g = adventure.addTravellerShortLabel) != null ? _g : adventure.addTravellerLabel) != null ? _h : "Add" })
2446
2639
  ]
2447
2640
  }
2448
2641
  )
@@ -2936,7 +3129,8 @@ function OrderSummary({
2936
3129
  summaryLineItems,
2937
3130
  subtotal,
2938
3131
  total,
2939
- depositInfo
3132
+ depositInfo,
3133
+ balanceDueLabel
2940
3134
  }) {
2941
3135
  return /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 lg:p-6 flex flex-col gap-4", children: [
2942
3136
  /* @__PURE__ */ jsx("h3", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Order Summary" }),
@@ -3032,7 +3226,7 @@ function OrderSummary({
3032
3226
  /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.remainingAmount })
3033
3227
  ] }),
3034
3228
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
3035
- /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: "Balance due" }),
3229
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground font-sans", children: balanceDueLabel != null ? balanceDueLabel : "Balance due" }),
3036
3230
  /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold text-foreground font-sans", children: depositInfo.balanceDueDate })
3037
3231
  ] })
3038
3232
  ] })
@@ -3041,13 +3235,18 @@ function OrderSummary({
3041
3235
  function BookingDetails({
3042
3236
  bookingId,
3043
3237
  status,
3238
+ statusLabel,
3044
3239
  createdAt,
3045
3240
  contact,
3241
+ agent,
3046
3242
  agentName,
3047
3243
  agentContactUrl,
3048
3244
  agentNameFallback,
3049
3245
  agentLabel,
3050
3246
  agentContactLabel,
3247
+ contactSectionLabel,
3248
+ payBalanceLabel,
3249
+ balanceDueLabel,
3051
3250
  cannotRemoveLastTravellerLabel,
3052
3251
  adventures,
3053
3252
  summaryLineItems,
@@ -3077,7 +3276,7 @@ function BookingDetails({
3077
3276
  signOutLabel,
3078
3277
  className
3079
3278
  }) {
3080
- var _a, _b, _c;
3279
+ var _a, _b, _c, _d;
3081
3280
  const people = totalPeople(adventures);
3082
3281
  const hasSubmitAddTraveller = !!onSubmitAddTraveller;
3083
3282
  const hasSubmitEditTraveller = !!onSubmitEditTraveller;
@@ -3192,56 +3391,27 @@ function BookingDetails({
3192
3391
  createdAt
3193
3392
  ] })
3194
3393
  ] }),
3195
- /* @__PURE__ */ jsx(StatusBadge, { status })
3394
+ /* @__PURE__ */ jsx(StatusBadge, { status, label: statusLabel })
3196
3395
  ] }),
3197
3396
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-3 gap-3", children: [
3198
3397
  /* @__PURE__ */ jsxs(InfoCard, { label: "Contact", children: [
3199
3398
  /* @__PURE__ */ jsx("p", { className: "font-semibold", children: contact.name }),
3200
3399
  contact.email && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground font-sans truncate", children: contact.email })
3201
3400
  ] }),
3202
- (() => {
3203
- const hasAgent = !!agentName;
3204
- const displayName = hasAgent ? agentName : agentNameFallback != null ? agentNameFallback : "No agent assigned";
3205
- const initial = hasAgent ? agentName.charAt(0) : "?";
3206
- return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border bg-card p-4 flex items-center gap-3.5 min-w-0", children: [
3207
- /* @__PURE__ */ jsx(
3208
- "div",
3209
- {
3210
- className: cn(
3211
- "flex h-10 w-10 shrink-0 items-center justify-center rounded-full font-heading font-bold text-sm uppercase",
3212
- hasAgent ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
3213
- ),
3214
- children: initial
3215
- }
3216
- ),
3217
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
3218
- /* @__PURE__ */ jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: agentLabel != null ? agentLabel : "Your Agent" }),
3219
- /* @__PURE__ */ jsx(
3220
- "p",
3221
- {
3222
- className: cn(
3223
- "text-sm font-sans truncate",
3224
- hasAgent ? "font-semibold text-foreground" : "italic text-muted-foreground"
3225
- ),
3226
- children: displayName
3227
- }
3228
- )
3229
- ] }),
3230
- hasAgent && agentContactUrl && /* @__PURE__ */ jsxs(
3231
- "a",
3232
- {
3233
- href: agentContactUrl,
3234
- target: "_blank",
3235
- rel: "noopener noreferrer",
3236
- 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",
3237
- children: [
3238
- /* @__PURE__ */ jsx(MessageCircleIcon, { className: "w-3.5 h-3.5" }),
3239
- agentContactLabel != null ? agentContactLabel : "Contact"
3240
- ]
3241
- }
3242
- )
3243
- ] });
3244
- })(),
3401
+ /* @__PURE__ */ jsx(
3402
+ AgentContactCard,
3403
+ {
3404
+ layout: "compact",
3405
+ name: (_a = agent == null ? void 0 : agent.name) != null ? _a : agentName,
3406
+ avatar: agent == null ? void 0 : agent.avatar,
3407
+ email: agent == null ? void 0 : agent.email,
3408
+ whatsappUrl: agent == null ? void 0 : agent.whatsappUrl,
3409
+ label: agentLabel,
3410
+ nameFallback: agentNameFallback,
3411
+ legacyContactUrl: agentContactUrl,
3412
+ legacyContactLabel: agentContactLabel
3413
+ }
3414
+ ),
3245
3415
  /* @__PURE__ */ jsxs(InfoCard, { label: "Total People", children: [
3246
3416
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3247
3417
  /* @__PURE__ */ jsx(UsersIcon, { className: "w-4 h-4 text-primary shrink-0" }),
@@ -3292,11 +3462,12 @@ function BookingDetails({
3292
3462
  summaryLineItems,
3293
3463
  subtotal,
3294
3464
  total,
3295
- depositInfo
3465
+ depositInfo,
3466
+ balanceDueLabel
3296
3467
  }
3297
3468
  ),
3298
3469
  /* @__PURE__ */ jsxs("div", { className: "rounded-2xl border border-border bg-card p-5 lg:p-6 flex flex-col gap-4", children: [
3299
- /* @__PURE__ */ jsx("h3", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Responsible Person" }),
3470
+ /* @__PURE__ */ jsx("h3", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: contactSectionLabel != null ? contactSectionLabel : "Responsible Person" }),
3300
3471
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 sm:grid-cols-3 gap-x-6 gap-y-3", children: [
3301
3472
  /* @__PURE__ */ jsxs("div", { children: [
3302
3473
  /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Name" }),
@@ -3304,15 +3475,15 @@ function BookingDetails({
3304
3475
  ] }),
3305
3476
  /* @__PURE__ */ jsxs("div", { children: [
3306
3477
  /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Email" }),
3307
- /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans truncate", children: (_a = contact.email) != null ? _a : "\u2014" })
3478
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans truncate", children: (_b = contact.email) != null ? _b : "\u2014" })
3308
3479
  ] }),
3309
3480
  /* @__PURE__ */ jsxs("div", { children: [
3310
3481
  /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Phone" }),
3311
- /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: (_b = contact.phone) != null ? _b : "\u2014" })
3482
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: (_c = contact.phone) != null ? _c : "\u2014" })
3312
3483
  ] }),
3313
3484
  /* @__PURE__ */ jsxs("div", { children: [
3314
3485
  /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Country" }),
3315
- /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: (_c = contact.country) != null ? _c : "\u2014" })
3486
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground font-sans", children: (_d = contact.country) != null ? _d : "\u2014" })
3316
3487
  ] }),
3317
3488
  contact.passport && /* @__PURE__ */ jsxs("div", { children: [
3318
3489
  /* @__PURE__ */ jsx("p", { className: "text-xs font-bold text-muted-foreground/60 font-heading uppercase tracking-widest mb-0.5", children: "Passport / CPF" }),
@@ -3323,24 +3494,38 @@ function BookingDetails({
3323
3494
  (onPayBalance || onCancelRequest) && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-4", children: [
3324
3495
  depositInfo && !depositInfo.isPaidInFull && // Se consumer passar remainingAmountValue, só mostra botão quando saldo > 0.
3325
3496
  // Quando undefined, mantém comportamento antigo (backward compat).
3326
- (depositInfo.remainingAmountValue === void 0 || depositInfo.remainingAmountValue > 0) && onPayBalance && /* @__PURE__ */ jsxs(
3327
- "button",
3328
- {
3329
- type: "button",
3330
- onClick: onPayBalance,
3331
- className: cn(
3332
- "w-full rounded-full bg-primary py-3.5 text-center text-sm font-bold uppercase tracking-wide",
3333
- "text-primary-foreground font-heading transition-colors hover:bg-primary/90",
3334
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
3335
- "flex items-center justify-center gap-2"
3336
- ),
3337
- children: [
3338
- /* @__PURE__ */ jsx(CreditCardIcon, { className: "w-4 h-4" }),
3339
- "Pay remaining balance \u2014 ",
3340
- depositInfo.remainingAmount
3341
- ]
3342
- }
3343
- ),
3497
+ (depositInfo.remainingAmountValue === void 0 || depositInfo.remainingAmountValue > 0) && onPayBalance && /* @__PURE__ */ jsxs("div", { className: "w-full flex flex-col items-center gap-1.5", children: [
3498
+ /* @__PURE__ */ jsxs(
3499
+ "button",
3500
+ {
3501
+ type: "button",
3502
+ onClick: onPayBalance,
3503
+ className: cn(
3504
+ "w-full rounded-full py-3.5 text-center text-sm font-bold uppercase tracking-wide font-heading",
3505
+ depositInfo.isOverdue ? "bg-destructive text-destructive-foreground hover:bg-destructive/90" : "bg-primary text-primary-foreground hover:bg-primary/90",
3506
+ "transition-colors",
3507
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
3508
+ "flex items-center justify-center gap-2"
3509
+ ),
3510
+ children: [
3511
+ /* @__PURE__ */ jsx(CreditCardIcon, { className: "w-4 h-4" }),
3512
+ payBalanceLabel != null ? payBalanceLabel : "Pay remaining balance",
3513
+ " \u2014 ",
3514
+ depositInfo.remainingAmount
3515
+ ]
3516
+ }
3517
+ ),
3518
+ depositInfo.dueDateLabel && /* @__PURE__ */ jsx(
3519
+ "p",
3520
+ {
3521
+ className: cn(
3522
+ "text-xs font-sans",
3523
+ depositInfo.isOverdue ? "text-destructive font-semibold" : "text-muted-foreground"
3524
+ ),
3525
+ children: depositInfo.dueDateLabel
3526
+ }
3527
+ )
3528
+ ] }),
3344
3529
  onCancelRequest && status !== "cancelled" && /* @__PURE__ */ jsxs(
3345
3530
  "button",
3346
3531
  {
@@ -3492,7 +3677,7 @@ var DEFAULT_LABELS = {
3492
3677
  childrenUnit: "child(ren)",
3493
3678
  travellersLabel: "Travellers",
3494
3679
  childBadge: "child",
3495
- itineraryLabel: "Itinerary",
3680
+ itineraryLabel: "Details",
3496
3681
  includedLabel: "O que est\xE1 incluso",
3497
3682
  notIncludedLabel: "O que n\xE3o est\xE1 incluso",
3498
3683
  pricingLabel: "Pricing",
@@ -9200,6 +9385,6 @@ function LeadCapturePopup({
9200
9385
  );
9201
9386
  }
9202
9387
 
9203
- export { ActivityCard, Alert, BirthDateField, BookingConfirmation, BookingConfirmationEmail, BookingConfirmedCard, BookingDetails, BookingForm, BookingOtpEmail, BookingShell, Button, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, MenuTrip, OTPCodeInput, Offer, OfferAdventureCard, PaymentAmountSelector, PaymentMethodSelector, PaymentModalShell, PhoneCountrySelect, PhotoGallery, PricingTrip, RegistrationForm, RegistrationSuccessCard, SiteHeader, TERMS_ACCEPT_KEY, TermsSection, ThemeToggle, Toast, TravellerFormInviteEmail, TripCard, TripHeader, TripPage, buttonVariants, cn, emailTokens, getStripeAppearance, stripeAppearance, wrapEmailHtml };
9388
+ export { ActivityCard, AgentContactCard, Alert, BirthDateField, BookingConfirmation, BookingConfirmationEmail, BookingConfirmedCard, BookingDetails, BookingForm, BookingOtpEmail, BookingShell, Button, COUNTRIES, CounterField, CountrySearchField, DEFAULT_HEADER_LINKS, DEFAULT_LANGUAGES, DatePickerField, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, FilterPanel, FloatingInput, FloatingSelect, Itinerary, LOGO_PLANETAEXO_DATA_URI, LeadCapturePopup, MenuTrip, OTPCodeInput, Offer, OfferAdventureCard, PaymentAmountSelector, PaymentMethodSelector, PaymentModalShell, PhoneCountrySelect, PhotoGallery, PricingTrip, RegistrationForm, RegistrationSuccessCard, SiteHeader, TERMS_ACCEPT_KEY, TermsSection, ThemeToggle, Toast, TravellerFormInviteEmail, TripCard, TripHeader, TripPage, buttonVariants, cn, emailTokens, getStripeAppearance, stripeAppearance, wrapEmailHtml };
9204
9389
  //# sourceMappingURL=index.js.map
9205
9390
  //# sourceMappingURL=index.js.map