@planetaexo/design-system 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2268,10 +2268,12 @@ function AdventureSection({
2268
2268
  hasConfirmRemoveTraveller,
2269
2269
  onRequestOpenAddModal,
2270
2270
  onRequestOpenEditModal,
2271
- onRequestOpenDeleteModal
2271
+ onRequestOpenDeleteModal,
2272
+ cannotRemoveLastTravellerLabel
2272
2273
  }) {
2273
2274
  var _a, _b, _c, _d;
2274
2275
  const [detailsOpen, setDetailsOpen] = React22__namespace.useState(false);
2276
+ const [itineraryOpen, setItineraryOpen] = React22__namespace.useState(true);
2275
2277
  const handleCopyUrl = (url) => {
2276
2278
  navigator.clipboard.writeText(url);
2277
2279
  };
@@ -2337,8 +2339,31 @@ function AdventureSection({
2337
2339
  )) })
2338
2340
  ] }),
2339
2341
  (adventure.detailsSlot || adventure.description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border px-5 lg:px-6 py-5 flex flex-col gap-2", children: [
2340
- /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: (_d = adventure.itineraryLabel) != null ? _d : "Itinerary" }),
2341
- adventure.detailsSlot ? /* @__PURE__ */ jsxRuntime.jsx(
2342
+ /* @__PURE__ */ jsxRuntime.jsxs(
2343
+ "button",
2344
+ {
2345
+ type: "button",
2346
+ onClick: () => setItineraryOpen((v) => !v),
2347
+ className: cn(
2348
+ "group flex w-full items-center justify-between gap-2 text-left",
2349
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded"
2350
+ ),
2351
+ "aria-expanded": itineraryOpen,
2352
+ children: [
2353
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest group-hover:text-foreground transition-colors", children: (_d = adventure.itineraryLabel) != null ? _d : "Itinerary" }),
2354
+ /* @__PURE__ */ jsxRuntime.jsx(
2355
+ lucideReact.ChevronDownIcon,
2356
+ {
2357
+ className: cn(
2358
+ "w-4 h-4 text-muted-foreground shrink-0 transition-transform",
2359
+ itineraryOpen && "rotate-180"
2360
+ )
2361
+ }
2362
+ )
2363
+ ]
2364
+ }
2365
+ ),
2366
+ itineraryOpen && (adventure.detailsSlot ? /* @__PURE__ */ jsxRuntime.jsx(
2342
2367
  "div",
2343
2368
  {
2344
2369
  className: cn(
@@ -2355,7 +2380,7 @@ function AdventureSection({
2355
2380
  ),
2356
2381
  children: adventure.detailsSlot
2357
2382
  }
2358
- ) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description })
2383
+ ) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground/80 leading-relaxed font-sans", children: adventure.description }))
2359
2384
  ] }),
2360
2385
  detailsOpen && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-t border-border px-5 lg:px-6 py-5 flex flex-col gap-5 bg-muted/10", children: [
2361
2386
  adventure.included && adventure.included.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
@@ -2450,114 +2475,132 @@ function AdventureSection({
2450
2475
  )
2451
2476
  ] })
2452
2477
  ] }),
2453
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col divide-y divide-border", children: adventure.travellers.map((t) => /* @__PURE__ */ jsxRuntime.jsxs(
2454
- "div",
2455
- {
2456
- className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3 py-3 first:pt-0",
2457
- children: [
2458
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3 min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 min-w-0 flex-1", children: [
2459
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [
2460
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold text-foreground font-ui truncate", children: [
2461
- t.firstName,
2462
- " ",
2463
- t.lastName
2478
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col divide-y divide-border", children: adventure.travellers.map((t) => {
2479
+ const canRemoveTraveller = adventure.travellers.length > 1;
2480
+ const disabledRemoveTitle = canRemoveTraveller ? void 0 : cannotRemoveLastTravellerLabel != null ? cannotRemoveLastTravellerLabel : "Cannot remove last traveller";
2481
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2482
+ "div",
2483
+ {
2484
+ className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:gap-3 py-3 first:pt-0",
2485
+ children: [
2486
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3 min-w-0 flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 min-w-0 flex-1", children: [
2487
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [
2488
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm font-semibold text-foreground font-ui truncate", children: [
2489
+ t.firstName,
2490
+ " ",
2491
+ t.lastName
2492
+ ] }),
2493
+ t.isChild && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold font-heading rounded-full px-2 py-0.5 bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400 shrink-0", children: "Child" })
2464
2494
  ] }),
2465
- t.isChild && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold font-heading rounded-full px-2 py-0.5 bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400 shrink-0", children: "Child" })
2466
- ] }),
2467
- t.formUrl && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2468
- /* @__PURE__ */ jsxRuntime.jsxs(
2469
- "a",
2470
- {
2471
- href: t.formUrl,
2472
- target: "_blank",
2473
- rel: "noopener noreferrer",
2474
- className: "flex items-center gap-1 text-xs text-primary hover:text-primary/80 transition-colors font-ui",
2475
- children: [
2476
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLinkIcon, { className: "w-3 h-3" }),
2477
- "Open"
2478
- ]
2479
- }
2480
- ),
2481
- /* @__PURE__ */ jsxRuntime.jsx(
2482
- "button",
2483
- {
2484
- type: "button",
2485
- onClick: () => handleCopyUrl(t.formUrl),
2486
- className: "flex items-center text-xs text-muted-foreground hover:text-primary transition-colors font-ui",
2487
- "aria-label": "Copy form URL",
2488
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CopyIcon, { className: "w-3 h-3" })
2489
- }
2490
- )
2491
- ] })
2492
- ] }) }),
2493
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 sm:gap-3 justify-between sm:justify-end", children: [
2494
- /* @__PURE__ */ jsxRuntime.jsx(
2495
- "span",
2496
- {
2497
- className: cn(
2498
- "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-bold font-heading uppercase tracking-wider shrink-0",
2499
- 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"
2495
+ t.formUrl && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
2496
+ /* @__PURE__ */ jsxRuntime.jsxs(
2497
+ "a",
2498
+ {
2499
+ href: t.formUrl,
2500
+ target: "_blank",
2501
+ rel: "noopener noreferrer",
2502
+ className: "flex items-center gap-1 text-xs text-primary hover:text-primary/80 transition-colors font-ui",
2503
+ children: [
2504
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLinkIcon, { className: "w-3 h-3" }),
2505
+ "Open"
2506
+ ]
2507
+ }
2500
2508
  ),
2501
- children: t.status
2502
- }
2503
- ),
2504
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [
2505
- (onEditTraveller || hasSubmitEditTraveller) && /* @__PURE__ */ jsxRuntime.jsx(
2506
- "button",
2507
- {
2508
- type: "button",
2509
- onClick: () => {
2510
- if (onEditTraveller) {
2511
- onEditTraveller(adventure.id, t.id);
2512
- } else {
2513
- onRequestOpenEditModal == null ? void 0 : onRequestOpenEditModal(adventure.id, t);
2514
- }
2515
- },
2516
- 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",
2517
- "aria-label": `Edit ${t.firstName}`,
2518
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PencilIcon, { className: "w-3.5 h-3.5" })
2519
- }
2520
- ),
2521
- (onRemoveTraveller || hasConfirmRemoveTraveller) && /* @__PURE__ */ jsxRuntime.jsx(
2522
- "button",
2509
+ /* @__PURE__ */ jsxRuntime.jsx(
2510
+ "button",
2511
+ {
2512
+ type: "button",
2513
+ onClick: () => handleCopyUrl(t.formUrl),
2514
+ className: "flex items-center text-xs text-muted-foreground hover:text-primary transition-colors font-ui",
2515
+ "aria-label": "Copy form URL",
2516
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CopyIcon, { className: "w-3 h-3" })
2517
+ }
2518
+ )
2519
+ ] })
2520
+ ] }) }),
2521
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 sm:gap-3 justify-between sm:justify-end", children: [
2522
+ /* @__PURE__ */ jsxRuntime.jsx(
2523
+ "span",
2523
2524
  {
2524
- type: "button",
2525
- onClick: () => {
2526
- if (onRemoveTraveller) {
2527
- onRemoveTraveller(adventure.id, t.id);
2528
- } else {
2529
- onRequestOpenDeleteModal == null ? void 0 : onRequestOpenDeleteModal(adventure.id, t);
2530
- }
2531
- },
2532
- 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",
2533
- "aria-label": `Delete ${t.firstName}`,
2534
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2Icon, { className: "w-3.5 h-3.5" })
2525
+ className: cn(
2526
+ "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-bold font-heading uppercase tracking-wider shrink-0",
2527
+ 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"
2528
+ ),
2529
+ children: t.status
2535
2530
  }
2536
2531
  ),
2537
- (onUnassignFromAdventure || onRemoveTraveller || hasConfirmRemoveTraveller) && /* @__PURE__ */ jsxRuntime.jsx(
2538
- "button",
2539
- {
2540
- type: "button",
2541
- onClick: () => {
2542
- if (onUnassignFromAdventure) {
2543
- onUnassignFromAdventure(adventure.id, t.id);
2544
- } else if (onRemoveTraveller) {
2545
- onRemoveTraveller(adventure.id, t.id);
2546
- } else {
2547
- onRequestOpenDeleteModal == null ? void 0 : onRequestOpenDeleteModal(adventure.id, t);
2548
- }
2549
- },
2550
- className: "flex h-8 w-8 sm:h-7 sm:w-7 items-center justify-center rounded-lg text-muted-foreground hover:text-amber-500 hover:bg-amber-500/10 transition-colors",
2551
- "aria-label": `Remove ${t.firstName} from adventure`,
2552
- children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserMinusIcon, { className: "w-3.5 h-3.5" })
2553
- }
2554
- )
2532
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-0.5 shrink-0", children: [
2533
+ (onEditTraveller || hasSubmitEditTraveller) && /* @__PURE__ */ jsxRuntime.jsx(
2534
+ "button",
2535
+ {
2536
+ type: "button",
2537
+ onClick: () => {
2538
+ if (onEditTraveller) {
2539
+ onEditTraveller(adventure.id, t.id);
2540
+ } else {
2541
+ onRequestOpenEditModal == null ? void 0 : onRequestOpenEditModal(adventure.id, t);
2542
+ }
2543
+ },
2544
+ 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",
2545
+ "aria-label": `Edit ${t.firstName}`,
2546
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.PencilIcon, { className: "w-3.5 h-3.5" })
2547
+ }
2548
+ ),
2549
+ (onRemoveTraveller || hasConfirmRemoveTraveller) && /* @__PURE__ */ jsxRuntime.jsx(
2550
+ "button",
2551
+ {
2552
+ type: "button",
2553
+ onClick: () => {
2554
+ if (!canRemoveTraveller) return;
2555
+ if (onRemoveTraveller) {
2556
+ onRemoveTraveller(adventure.id, t.id);
2557
+ } else {
2558
+ onRequestOpenDeleteModal == null ? void 0 : onRequestOpenDeleteModal(adventure.id, t);
2559
+ }
2560
+ },
2561
+ disabled: !canRemoveTraveller,
2562
+ title: disabledRemoveTitle,
2563
+ "aria-disabled": !canRemoveTraveller,
2564
+ className: cn(
2565
+ "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",
2566
+ "disabled:opacity-40 disabled:cursor-not-allowed disabled:pointer-events-none disabled:hover:text-muted-foreground disabled:hover:bg-transparent"
2567
+ ),
2568
+ "aria-label": `Delete ${t.firstName}`,
2569
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2Icon, { className: "w-3.5 h-3.5" })
2570
+ }
2571
+ ),
2572
+ (onUnassignFromAdventure || onRemoveTraveller || hasConfirmRemoveTraveller) && /* @__PURE__ */ jsxRuntime.jsx(
2573
+ "button",
2574
+ {
2575
+ type: "button",
2576
+ onClick: () => {
2577
+ if (!canRemoveTraveller) return;
2578
+ if (onUnassignFromAdventure) {
2579
+ onUnassignFromAdventure(adventure.id, t.id);
2580
+ } else if (onRemoveTraveller) {
2581
+ onRemoveTraveller(adventure.id, t.id);
2582
+ } else {
2583
+ onRequestOpenDeleteModal == null ? void 0 : onRequestOpenDeleteModal(adventure.id, t);
2584
+ }
2585
+ },
2586
+ disabled: !canRemoveTraveller,
2587
+ title: disabledRemoveTitle,
2588
+ "aria-disabled": !canRemoveTraveller,
2589
+ className: cn(
2590
+ "flex h-8 w-8 sm:h-7 sm:w-7 items-center justify-center rounded-lg text-muted-foreground hover:text-amber-500 hover:bg-amber-500/10 transition-colors",
2591
+ "disabled:opacity-40 disabled:cursor-not-allowed disabled:pointer-events-none disabled:hover:text-muted-foreground disabled:hover:bg-transparent"
2592
+ ),
2593
+ "aria-label": `Remove ${t.firstName} from adventure`,
2594
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UserMinusIcon, { className: "w-3.5 h-3.5" })
2595
+ }
2596
+ )
2597
+ ] })
2555
2598
  ] })
2556
- ] })
2557
- ]
2558
- },
2559
- t.id
2560
- )) }),
2599
+ ]
2600
+ },
2601
+ t.id
2602
+ );
2603
+ }) }),
2561
2604
  adventure.suggestedTravellers && adventure.suggestedTravellers.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2 pt-2", children: [
2562
2605
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground font-ui", children: "Add to this adventure" }),
2563
2606
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: adventure.suggestedTravellers.map((st) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -3015,6 +3058,10 @@ function BookingDetails({
3015
3058
  contact,
3016
3059
  agentName,
3017
3060
  agentContactUrl,
3061
+ agentNameFallback,
3062
+ agentLabel,
3063
+ agentContactLabel,
3064
+ cannotRemoveLastTravellerLabel,
3018
3065
  adventures,
3019
3066
  summaryLineItems,
3020
3067
  subtotal,
@@ -3164,26 +3211,49 @@ function BookingDetails({
3164
3211
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: contact.name }),
3165
3212
  contact.email && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground font-sans truncate", children: contact.email })
3166
3213
  ] }),
3167
- agentName && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border bg-card p-4 flex items-center gap-3.5 min-w-0", children: [
3168
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-primary/10 text-primary font-heading font-bold text-sm uppercase", children: agentName.charAt(0) }),
3169
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
3170
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: "Your Agent" }),
3171
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-semibold text-foreground font-sans", children: agentName })
3172
- ] }),
3173
- agentContactUrl && /* @__PURE__ */ jsxRuntime.jsxs(
3174
- "a",
3175
- {
3176
- href: agentContactUrl,
3177
- target: "_blank",
3178
- rel: "noopener noreferrer",
3179
- 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",
3180
- children: [
3181
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleIcon, { className: "w-3.5 h-3.5" }),
3182
- "Contact"
3183
- ]
3184
- }
3185
- )
3186
- ] }),
3214
+ (() => {
3215
+ const hasAgent = !!agentName;
3216
+ const displayName = hasAgent ? agentName : agentNameFallback != null ? agentNameFallback : "No agent assigned";
3217
+ const initial = hasAgent ? agentName.charAt(0) : "?";
3218
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-xl border border-border bg-card p-4 flex items-center gap-3.5 min-w-0", children: [
3219
+ /* @__PURE__ */ jsxRuntime.jsx(
3220
+ "div",
3221
+ {
3222
+ className: cn(
3223
+ "flex h-10 w-10 shrink-0 items-center justify-center rounded-full font-heading font-bold text-sm uppercase",
3224
+ hasAgent ? "bg-primary/10 text-primary" : "bg-muted text-muted-foreground"
3225
+ ),
3226
+ children: initial
3227
+ }
3228
+ ),
3229
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
3230
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: agentLabel != null ? agentLabel : "Your Agent" }),
3231
+ /* @__PURE__ */ jsxRuntime.jsx(
3232
+ "p",
3233
+ {
3234
+ className: cn(
3235
+ "text-sm font-sans truncate",
3236
+ hasAgent ? "font-semibold text-foreground" : "italic text-muted-foreground"
3237
+ ),
3238
+ children: displayName
3239
+ }
3240
+ )
3241
+ ] }),
3242
+ hasAgent && agentContactUrl && /* @__PURE__ */ jsxRuntime.jsxs(
3243
+ "a",
3244
+ {
3245
+ href: agentContactUrl,
3246
+ target: "_blank",
3247
+ rel: "noopener noreferrer",
3248
+ 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",
3249
+ children: [
3250
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageCircleIcon, { className: "w-3.5 h-3.5" }),
3251
+ agentContactLabel != null ? agentContactLabel : "Contact"
3252
+ ]
3253
+ }
3254
+ )
3255
+ ] });
3256
+ })(),
3187
3257
  /* @__PURE__ */ jsxRuntime.jsxs(InfoCard, { label: "Total People", children: [
3188
3258
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3189
3259
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.UsersIcon, { className: "w-4 h-4 text-primary shrink-0" }),
@@ -3220,7 +3290,8 @@ function BookingDetails({
3220
3290
  hasConfirmRemoveTraveller,
3221
3291
  onRequestOpenAddModal: handleRequestOpenAddModal,
3222
3292
  onRequestOpenEditModal: handleRequestOpenEditModal,
3223
- onRequestOpenDeleteModal: handleRequestOpenDeleteModal
3293
+ onRequestOpenDeleteModal: handleRequestOpenDeleteModal,
3294
+ cannotRemoveLastTravellerLabel
3224
3295
  },
3225
3296
  adventure.id
3226
3297
  ))