@planetaexo/design-system 0.77.0 → 0.78.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.d.cts CHANGED
@@ -81,6 +81,8 @@ interface BookingAdventureCardLabels {
81
81
  includedHeading?: string;
82
82
  /** Heading "O que não está incluso" (usado pelo BookingConfirmation). */
83
83
  notIncludedHeading?: string;
84
+ /** Heading "Cancellation policy" (usado pelo BookingConfirmation). */
85
+ cancellationPolicyHeading?: string;
84
86
  /** Texto do pill de badge "child" (usado pelo BookingConfirmation). */
85
87
  childBadge?: string;
86
88
  /** Unidade adulto em slots (ex.: "adult(s)"). */
@@ -159,6 +161,8 @@ interface BookingAdventureCardProps {
159
161
  included?: string[];
160
162
  /** Lista de itens não inclusos (legado BookingConfirmation). */
161
163
  notIncluded?: string[];
164
+ /** Política de cancelamento (HTML) — JÁ SANITIZADA no backend; renderiza seção dedicada quando não-vazia. */
165
+ cancellationPolicy?: string;
162
166
  /** Line items de pricing por categoria. */
163
167
  lineItems: BookingAdventureCardLineItem[];
164
168
  /** Subtotal formatado, ex.: "R$ 1.500,00". Quando ausente, linha do subtotal some. */
@@ -182,7 +186,7 @@ interface BookingAdventureCardProps {
182
186
  /** className extra no container. */
183
187
  className?: string;
184
188
  }
185
- declare function BookingAdventureCard({ tag, name, startDate, endDate, travellerCount, slots, travellers, itinerary, description, image, imageAlt, location, destination, partner, included, notIncluded, lineItems, subtotal, rooms, roomLayout, labels, className, }: BookingAdventureCardProps): react_jsx_runtime.JSX.Element;
189
+ declare function BookingAdventureCard({ tag, name, startDate, endDate, travellerCount, slots, travellers, itinerary, description, image, imageAlt, location, destination, partner, included, notIncluded, cancellationPolicy, lineItems, subtotal, rooms, roomLayout, labels, className, }: BookingAdventureCardProps): react_jsx_runtime.JSX.Element;
186
190
 
187
191
  interface OfferSummaryLineItem {
188
192
  label: string;
@@ -249,7 +253,8 @@ interface OfferAdventureItem {
249
253
  description?: string;
250
254
  included?: string[];
251
255
  notIncluded?: string[];
252
- cancellationPolicy?: string[];
256
+ /** Cancellation policy as sanitized HTML (rendered via dangerouslySetInnerHTML). */
257
+ cancellationPolicy?: string;
253
258
  totalPrice: string;
254
259
  lineItems?: OfferSummaryLineItem[];
255
260
  /** Called when user clicks "Remove from proposal" */
@@ -792,7 +797,8 @@ interface BookingAdventure {
792
797
  itineraryLabel?: string;
793
798
  included?: string[];
794
799
  notIncluded?: string[];
795
- cancellationPolicy?: string[];
800
+ /** Cancellation policy as sanitized HTML (rendered via dangerouslySetInnerHTML). */
801
+ cancellationPolicy?: string;
796
802
  lineItems?: BookingSummaryLineItem[];
797
803
  subtotal?: string;
798
804
  suggestedTravellers?: SuggestedTraveller[];
@@ -1021,6 +1027,8 @@ interface BookingPaymentConfirmationEmailLabels {
1021
1027
  itineraryLabel?: string;
1022
1028
  includedLabel?: string;
1023
1029
  notIncludedLabel?: string;
1030
+ /** Heading da seção "Cancellation policy" no card. Default EN: "Cancellation policy". */
1031
+ cancellationPolicyLabel?: string;
1024
1032
  pricingLabel?: string;
1025
1033
  subtotalLabel?: string;
1026
1034
  totalLabel?: string;
@@ -1104,6 +1112,8 @@ interface ConfirmationAdventure {
1104
1112
  description?: string;
1105
1113
  included?: string[];
1106
1114
  notIncluded?: string[];
1115
+ /** Política de cancelamento já resolvida e SANITIZADA no backend (HTML). Renderiza seção dedicada no card. */
1116
+ cancellationPolicy?: string;
1107
1117
  lineItems?: ConfirmationLineItem[];
1108
1118
  subtotal?: string;
1109
1119
  travellers?: ConfirmationTraveller[];
package/dist/index.d.ts CHANGED
@@ -81,6 +81,8 @@ interface BookingAdventureCardLabels {
81
81
  includedHeading?: string;
82
82
  /** Heading "O que não está incluso" (usado pelo BookingConfirmation). */
83
83
  notIncludedHeading?: string;
84
+ /** Heading "Cancellation policy" (usado pelo BookingConfirmation). */
85
+ cancellationPolicyHeading?: string;
84
86
  /** Texto do pill de badge "child" (usado pelo BookingConfirmation). */
85
87
  childBadge?: string;
86
88
  /** Unidade adulto em slots (ex.: "adult(s)"). */
@@ -159,6 +161,8 @@ interface BookingAdventureCardProps {
159
161
  included?: string[];
160
162
  /** Lista de itens não inclusos (legado BookingConfirmation). */
161
163
  notIncluded?: string[];
164
+ /** Política de cancelamento (HTML) — JÁ SANITIZADA no backend; renderiza seção dedicada quando não-vazia. */
165
+ cancellationPolicy?: string;
162
166
  /** Line items de pricing por categoria. */
163
167
  lineItems: BookingAdventureCardLineItem[];
164
168
  /** Subtotal formatado, ex.: "R$ 1.500,00". Quando ausente, linha do subtotal some. */
@@ -182,7 +186,7 @@ interface BookingAdventureCardProps {
182
186
  /** className extra no container. */
183
187
  className?: string;
184
188
  }
185
- declare function BookingAdventureCard({ tag, name, startDate, endDate, travellerCount, slots, travellers, itinerary, description, image, imageAlt, location, destination, partner, included, notIncluded, lineItems, subtotal, rooms, roomLayout, labels, className, }: BookingAdventureCardProps): react_jsx_runtime.JSX.Element;
189
+ declare function BookingAdventureCard({ tag, name, startDate, endDate, travellerCount, slots, travellers, itinerary, description, image, imageAlt, location, destination, partner, included, notIncluded, cancellationPolicy, lineItems, subtotal, rooms, roomLayout, labels, className, }: BookingAdventureCardProps): react_jsx_runtime.JSX.Element;
186
190
 
187
191
  interface OfferSummaryLineItem {
188
192
  label: string;
@@ -249,7 +253,8 @@ interface OfferAdventureItem {
249
253
  description?: string;
250
254
  included?: string[];
251
255
  notIncluded?: string[];
252
- cancellationPolicy?: string[];
256
+ /** Cancellation policy as sanitized HTML (rendered via dangerouslySetInnerHTML). */
257
+ cancellationPolicy?: string;
253
258
  totalPrice: string;
254
259
  lineItems?: OfferSummaryLineItem[];
255
260
  /** Called when user clicks "Remove from proposal" */
@@ -792,7 +797,8 @@ interface BookingAdventure {
792
797
  itineraryLabel?: string;
793
798
  included?: string[];
794
799
  notIncluded?: string[];
795
- cancellationPolicy?: string[];
800
+ /** Cancellation policy as sanitized HTML (rendered via dangerouslySetInnerHTML). */
801
+ cancellationPolicy?: string;
796
802
  lineItems?: BookingSummaryLineItem[];
797
803
  subtotal?: string;
798
804
  suggestedTravellers?: SuggestedTraveller[];
@@ -1021,6 +1027,8 @@ interface BookingPaymentConfirmationEmailLabels {
1021
1027
  itineraryLabel?: string;
1022
1028
  includedLabel?: string;
1023
1029
  notIncludedLabel?: string;
1030
+ /** Heading da seção "Cancellation policy" no card. Default EN: "Cancellation policy". */
1031
+ cancellationPolicyLabel?: string;
1024
1032
  pricingLabel?: string;
1025
1033
  subtotalLabel?: string;
1026
1034
  totalLabel?: string;
@@ -1104,6 +1112,8 @@ interface ConfirmationAdventure {
1104
1112
  description?: string;
1105
1113
  included?: string[];
1106
1114
  notIncluded?: string[];
1115
+ /** Política de cancelamento já resolvida e SANITIZADA no backend (HTML). Renderiza seção dedicada no card. */
1116
+ cancellationPolicy?: string;
1107
1117
  lineItems?: ConfirmationLineItem[];
1108
1118
  subtotal?: string;
1109
1119
  travellers?: ConfirmationTraveller[];
package/dist/index.js CHANGED
@@ -1544,12 +1544,28 @@ function AdventureCard({
1544
1544
  item
1545
1545
  ] }, i)) })
1546
1546
  ] }),
1547
- adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
1547
+ adventure.cancellationPolicy && adventure.cancellationPolicy.trim() && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2.5 mt-1", children: [
1548
1548
  /* @__PURE__ */ jsx("h4", { className: "text-base font-bold text-foreground font-heading", children: (_r = adventure.cancellationPolicyLabel) != null ? _r : "Cancellation policy" }),
1549
- /* @__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: [
1550
- /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2.5" }),
1551
- item
1552
- ] }, i)) })
1549
+ /* @__PURE__ */ jsx(
1550
+ "div",
1551
+ {
1552
+ className: cn(
1553
+ "text-foreground",
1554
+ "[&_p]:text-base [&_p]:text-foreground/80 [&_p]:leading-snug [&_p]:mb-2",
1555
+ "[&_strong]:font-bold [&_strong]:text-foreground",
1556
+ "[&_em]:italic",
1557
+ "[&_a]:text-primary [&_a]:underline [&_a]:underline-offset-2",
1558
+ "[&_ul:not(.list-check):not(.list-cross)]:list-disc [&_ul:not(.list-check):not(.list-cross)]:pl-5 [&_ul:not(.list-check):not(.list-cross)]:space-y-1",
1559
+ "[&_ol]:list-decimal [&_ol]:pl-5 [&_ol]:space-y-1",
1560
+ "[&_li]:text-base [&_li]:text-muted-foreground [&_li]:leading-snug",
1561
+ "[&_.list-check]:list-none [&_.list-check]:pl-5 [&_.list-check]:space-y-1",
1562
+ "[&_.list-check_li]:relative [&_.list-check_li]:before:absolute [&_.list-check_li]:before:-left-5 [&_.list-check_li]:before:content-['\u2713'] [&_.list-check_li]:before:text-primary [&_.list-check_li]:before:font-bold",
1563
+ "[&_.list-cross]:list-none [&_.list-cross]:pl-5 [&_.list-cross]:space-y-1",
1564
+ "[&_.list-cross_li]:relative [&_.list-cross_li]:before:absolute [&_.list-cross_li]:before:-left-5 [&_.list-cross_li]:before:content-['\u2717'] [&_.list-cross_li]:before:text-destructive [&_.list-cross_li]:before:font-bold"
1565
+ ),
1566
+ dangerouslySetInnerHTML: { __html: adventure.cancellationPolicy }
1567
+ }
1568
+ )
1553
1569
  ] })
1554
1570
  ] })
1555
1571
  ] });
@@ -2845,19 +2861,24 @@ function AdventureSection({
2845
2861
  i
2846
2862
  )) })
2847
2863
  ] }),
2848
- adventure.cancellationPolicy && adventure.cancellationPolicy.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2864
+ adventure.cancellationPolicy && adventure.cancellationPolicy.trim() && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
2849
2865
  /* @__PURE__ */ jsx("h4", { className: "text-xs font-bold text-muted-foreground font-heading uppercase tracking-widest", children: (_k = (_j = labels == null ? void 0 : labels.adventureSections) == null ? void 0 : _j.cancellationPolicy) != null ? _k : "Cancellation policy" }),
2850
- /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1.5", children: adventure.cancellationPolicy.map((item, i) => /* @__PURE__ */ jsxs(
2851
- "li",
2866
+ /* @__PURE__ */ jsx(
2867
+ "div",
2852
2868
  {
2853
- className: "flex items-start gap-2 text-sm text-muted-foreground font-sans",
2854
- children: [
2855
- /* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-primary shrink-0 mt-2.5" }),
2856
- item
2857
- ]
2858
- },
2859
- i
2860
- )) })
2869
+ className: cn(
2870
+ "text-foreground",
2871
+ "[&_p]:text-sm [&_p]:text-foreground/80 [&_p]:leading-snug [&_p]:mb-2",
2872
+ "[&_strong]:font-bold [&_strong]:text-foreground",
2873
+ "[&_em]:italic",
2874
+ "[&_a]:text-primary [&_a]:underline [&_a]:underline-offset-2",
2875
+ "[&_ul]:list-disc [&_ul]:pl-5 [&_ul]:space-y-1",
2876
+ "[&_ol]:list-decimal [&_ol]:pl-5 [&_ol]:space-y-1",
2877
+ "[&_li]:text-sm [&_li]:text-muted-foreground [&_li]:leading-snug"
2878
+ ),
2879
+ dangerouslySetInnerHTML: { __html: adventure.cancellationPolicy }
2880
+ }
2881
+ )
2861
2882
  ] })
2862
2883
  ] }),
2863
2884
  adventure.rooms && adventure.rooms.length > 0 && /* @__PURE__ */ jsxs("div", { className: "border-t border-border px-5 lg:px-6 py-5 flex flex-col gap-3", children: [
@@ -4118,6 +4139,7 @@ var DEFAULT_LABELS = {
4118
4139
  lineItemEquals: "=",
4119
4140
  includedHeading: "O que est\xE1 incluso",
4120
4141
  notIncludedHeading: "O que n\xE3o est\xE1 incluso",
4142
+ cancellationPolicyHeading: "Cancellation policy",
4121
4143
  childBadge: "child",
4122
4144
  adultsUnit: "adult(s)",
4123
4145
  childrenUnit: "child(ren)",
@@ -4149,6 +4171,7 @@ function BookingAdventureCard({
4149
4171
  partner,
4150
4172
  included,
4151
4173
  notIncluded,
4174
+ cancellationPolicy,
4152
4175
  lineItems,
4153
4176
  subtotal,
4154
4177
  rooms,
@@ -4156,7 +4179,7 @@ function BookingAdventureCard({
4156
4179
  labels,
4157
4180
  className
4158
4181
  }) {
4159
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
4182
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A;
4160
4183
  const l = {
4161
4184
  travellersHeading: (_a = labels == null ? void 0 : labels.travellersHeading) != null ? _a : DEFAULT_LABELS.travellersHeading,
4162
4185
  detailsHeading: (_b = labels == null ? void 0 : labels.detailsHeading) != null ? _b : DEFAULT_LABELS.detailsHeading,
@@ -4167,18 +4190,19 @@ function BookingAdventureCard({
4167
4190
  lineItemEquals: (_g = labels == null ? void 0 : labels.lineItemEquals) != null ? _g : DEFAULT_LABELS.lineItemEquals,
4168
4191
  includedHeading: (_h = labels == null ? void 0 : labels.includedHeading) != null ? _h : DEFAULT_LABELS.includedHeading,
4169
4192
  notIncludedHeading: (_i = labels == null ? void 0 : labels.notIncludedHeading) != null ? _i : DEFAULT_LABELS.notIncludedHeading,
4170
- childBadge: (_j = labels == null ? void 0 : labels.childBadge) != null ? _j : DEFAULT_LABELS.childBadge,
4171
- adultsUnit: (_k = labels == null ? void 0 : labels.adultsUnit) != null ? _k : DEFAULT_LABELS.adultsUnit,
4172
- childrenUnit: (_l = labels == null ? void 0 : labels.childrenUnit) != null ? _l : DEFAULT_LABELS.childrenUnit,
4173
- accommodationsHeading: (_m = labels == null ? void 0 : labels.accommodationsHeading) != null ? _m : DEFAULT_LABELS.accommodationsHeading,
4174
- accommodationRoomHeading: (_n = labels == null ? void 0 : labels.accommodationRoomHeading) != null ? _n : DEFAULT_LABELS.accommodationRoomHeading,
4193
+ cancellationPolicyHeading: (_j = labels == null ? void 0 : labels.cancellationPolicyHeading) != null ? _j : DEFAULT_LABELS.cancellationPolicyHeading,
4194
+ childBadge: (_k = labels == null ? void 0 : labels.childBadge) != null ? _k : DEFAULT_LABELS.childBadge,
4195
+ adultsUnit: (_l = labels == null ? void 0 : labels.adultsUnit) != null ? _l : DEFAULT_LABELS.adultsUnit,
4196
+ childrenUnit: (_m = labels == null ? void 0 : labels.childrenUnit) != null ? _m : DEFAULT_LABELS.childrenUnit,
4197
+ accommodationsHeading: (_n = labels == null ? void 0 : labels.accommodationsHeading) != null ? _n : DEFAULT_LABELS.accommodationsHeading,
4198
+ accommodationRoomHeading: (_o = labels == null ? void 0 : labels.accommodationRoomHeading) != null ? _o : DEFAULT_LABELS.accommodationRoomHeading,
4175
4199
  bedArrangementLabels: {
4176
- DOUBLE: (_p = (_o = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _o.DOUBLE) != null ? _p : DEFAULT_LABELS.bedArrangementLabels.DOUBLE,
4177
- TWIN: (_r = (_q = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _q.TWIN) != null ? _r : DEFAULT_LABELS.bedArrangementLabels.TWIN,
4178
- SINGLE: (_t = (_s = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _s.SINGLE) != null ? _t : DEFAULT_LABELS.bedArrangementLabels.SINGLE,
4179
- TRIPLE: (_v = (_u = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _u.TRIPLE) != null ? _v : DEFAULT_LABELS.bedArrangementLabels.TRIPLE,
4180
- QUADRUPLE: (_x = (_w = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _w.QUADRUPLE) != null ? _x : DEFAULT_LABELS.bedArrangementLabels.QUADRUPLE,
4181
- QUINTUPLE: (_z = (_y = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _y.QUINTUPLE) != null ? _z : DEFAULT_LABELS.bedArrangementLabels.QUINTUPLE
4200
+ DOUBLE: (_q = (_p = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _p.DOUBLE) != null ? _q : DEFAULT_LABELS.bedArrangementLabels.DOUBLE,
4201
+ TWIN: (_s = (_r = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _r.TWIN) != null ? _s : DEFAULT_LABELS.bedArrangementLabels.TWIN,
4202
+ SINGLE: (_u = (_t = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _t.SINGLE) != null ? _u : DEFAULT_LABELS.bedArrangementLabels.SINGLE,
4203
+ TRIPLE: (_w = (_v = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _v.TRIPLE) != null ? _w : DEFAULT_LABELS.bedArrangementLabels.TRIPLE,
4204
+ QUADRUPLE: (_y = (_x = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _x.QUADRUPLE) != null ? _y : DEFAULT_LABELS.bedArrangementLabels.QUADRUPLE,
4205
+ QUINTUPLE: (_A = (_z = labels == null ? void 0 : labels.bedArrangementLabels) == null ? void 0 : _z.QUINTUPLE) != null ? _A : DEFAULT_LABELS.bedArrangementLabels.QUINTUPLE
4182
4206
  }
4183
4207
  };
4184
4208
  const hasTravellers = !!travellers && travellers.length > 0;
@@ -4186,6 +4210,7 @@ function BookingAdventureCard({
4186
4210
  const hasDescription = !!description && description.trim().length > 0;
4187
4211
  const hasIncluded = !!included && included.length > 0;
4188
4212
  const hasNotIncluded = !!notIncluded && notIncluded.length > 0;
4213
+ const hasCancellationPolicy = !!cancellationPolicy && cancellationPolicy.trim().length > 0;
4189
4214
  const hasLineItems = lineItems.length > 0;
4190
4215
  const hasRooms = !!rooms && rooms.length > 0;
4191
4216
  const dateRange = endDate ? `${startDate} \u2192 ${endDate}` : startDate;
@@ -4870,6 +4895,32 @@ function BookingAdventureCard({
4870
4895
  i
4871
4896
  ))
4872
4897
  ] }),
4898
+ hasCancellationPolicy && /* @__PURE__ */ jsxs("div", { style: { marginTop: "10px" }, children: [
4899
+ /* @__PURE__ */ jsx(
4900
+ "h4",
4901
+ {
4902
+ style: {
4903
+ fontSize: "14px",
4904
+ fontWeight: 700,
4905
+ color: emailTokens.foreground,
4906
+ margin: "0 0 8px 0"
4907
+ },
4908
+ children: l.cancellationPolicyHeading
4909
+ }
4910
+ ),
4911
+ /* @__PURE__ */ jsx(
4912
+ "div",
4913
+ {
4914
+ style: {
4915
+ fontSize: "14px",
4916
+ color: emailTokens.bodyText,
4917
+ lineHeight: "1.4",
4918
+ margin: 0
4919
+ },
4920
+ dangerouslySetInnerHTML: { __html: cancellationPolicy }
4921
+ }
4922
+ )
4923
+ ] }),
4873
4924
  hasLineItems && /* @__PURE__ */ jsxs("div", { style: { marginTop: "4px" }, children: [
4874
4925
  /* @__PURE__ */ jsx(
4875
4926
  "hr",
@@ -5262,6 +5313,7 @@ var DEFAULT_LABELS3 = {
5262
5313
  itineraryLabel: "Details",
5263
5314
  includedLabel: "O que est\xE1 incluso",
5264
5315
  notIncludedLabel: "O que n\xE3o est\xE1 incluso",
5316
+ cancellationPolicyLabel: "Cancellation policy",
5265
5317
  pricingLabel: "Pricing",
5266
5318
  subtotalLabel: "Subtotal",
5267
5319
  totalLabel: "Total",
@@ -5440,6 +5492,7 @@ function BookingPaymentConfirmationEmail({
5440
5492
  partner: adventure.partnerName,
5441
5493
  included: adventure.included,
5442
5494
  notIncluded: adventure.notIncluded,
5495
+ cancellationPolicy: adventure.cancellationPolicy,
5443
5496
  lineItems: lineItemsToPass,
5444
5497
  subtotal: adventure.subtotal,
5445
5498
  rooms: adventure.rooms,
@@ -5451,6 +5504,7 @@ function BookingPaymentConfirmationEmail({
5451
5504
  subtotalLabel: l.subtotalLabel,
5452
5505
  includedHeading: l.includedLabel,
5453
5506
  notIncludedHeading: l.notIncludedLabel,
5507
+ cancellationPolicyHeading: l.cancellationPolicyLabel,
5454
5508
  childBadge: l.childBadge,
5455
5509
  adultsUnit: l.adultsUnit,
5456
5510
  childrenUnit: l.childrenUnit,
@@ -10408,9 +10462,15 @@ function CancellationForm({
10408
10462
  ] })
10409
10463
  ] }),
10410
10464
  selected && /* @__PURE__ */ jsxs("div", { className: "mt-4 pl-7 space-y-4", children: [
10411
- adv.cancellationPolicy && /* @__PURE__ */ jsxs("div", { className: "rounded-md bg-muted/50 border border-border p-3", children: [
10465
+ adv.cancellationPolicy && adv.cancellationPolicy.trim() && /* @__PURE__ */ jsxs("div", { className: "rounded-md bg-muted/50 border border-border p-3", children: [
10412
10466
  /* @__PURE__ */ jsx("p", { className: "text-xs font-ui font-semibold uppercase tracking-wide text-muted-foreground mb-1", children: labels.policyHeading }),
10413
- /* @__PURE__ */ jsx("p", { className: "text-sm text-foreground whitespace-pre-line", children: adv.cancellationPolicy })
10467
+ /* @__PURE__ */ jsx(
10468
+ "div",
10469
+ {
10470
+ className: "text-sm text-foreground [&_ul]:list-disc [&_ul]:pl-5 [&_ol]:list-decimal [&_ol]:pl-5 [&_li]:mb-1 [&_p]:mb-2 [&_p:last-child]:mb-0 [&_a]:underline",
10471
+ dangerouslySetInnerHTML: { __html: adv.cancellationPolicy }
10472
+ }
10473
+ )
10414
10474
  ] }),
10415
10475
  adv.participants.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
10416
10476
  /* @__PURE__ */ jsx("p", { className: "text-xs font-ui font-semibold uppercase tracking-wide text-muted-foreground mb-2", children: labels.participantsHeading }),
@@ -11616,7 +11676,7 @@ function Picture(_a) {
11616
11676
  var _a2, _b2;
11617
11677
  const ref = React20.useRef(null);
11618
11678
  const [visible, setVisible] = React20.useState(eager);
11619
- const [loaded, setLoaded] = React20.useState(false);
11679
+ const [loaded, setLoaded] = React20.useState(eager);
11620
11680
  React20.useEffect(() => {
11621
11681
  if (eager || visible) return;
11622
11682
  const el = ref.current;
@@ -11636,7 +11696,10 @@ function Picture(_a) {
11636
11696
  io.observe(el);
11637
11697
  return () => io.disconnect();
11638
11698
  }, [eager, visible, rootMargin]);
11699
+ const prevSrcRef = React20.useRef(src);
11639
11700
  React20.useEffect(() => {
11701
+ if (prevSrcRef.current === src) return;
11702
+ prevSrcRef.current = src;
11640
11703
  setLoaded(false);
11641
11704
  }, [src]);
11642
11705
  const webp = webpVariantUrl(src);