@qite/tide-components 1.0.9 → 1.0.10

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.
Files changed (75) hide show
  1. package/build/build-cjs/index.js +290 -280
  2. package/build/build-cjs/src/search-results/types.d.ts +12 -0
  3. package/build/build-esm/index.js +290 -280
  4. package/build/build-esm/src/search-results/types.d.ts +12 -0
  5. package/package.json +2 -2
  6. package/styles/abstracts/_mixins.scss +74 -74
  7. package/styles/abstracts/_variables.scss +57 -57
  8. package/styles/base/_fonts.scss +2 -2
  9. package/styles/base/_normalize.scss +227 -227
  10. package/styles/base/_typography.scss +35 -35
  11. package/styles/booking-joker-variables.scss +596 -596
  12. package/styles/booking-product-variables.scss +330 -330
  13. package/styles/booking-product.scss +438 -438
  14. package/styles/booking-qsm-variables.scss +501 -501
  15. package/styles/booking-qsm.scss +52 -52
  16. package/styles/booking-search-results-variables.scss +734 -734
  17. package/styles/booking-search-results.scss +53 -53
  18. package/styles/booking-wizard-variables.scss +603 -603
  19. package/styles/booking-wizard.scss +61 -61
  20. package/styles/components/_accordion.scss +67 -67
  21. package/styles/components/_animations.scss +39 -39
  22. package/styles/components/_base.scss +107 -107
  23. package/styles/components/_booking.scss +906 -906
  24. package/styles/components/_breadcrumb.scss +92 -92
  25. package/styles/components/_button.scss +238 -238
  26. package/styles/components/_checkbox.scss +230 -230
  27. package/styles/components/_contact.scss +255 -255
  28. package/styles/components/_content.scss +336 -336
  29. package/styles/components/_cta.scss +238 -238
  30. package/styles/components/_date-list.scss +41 -41
  31. package/styles/components/_date-range-picker.scss +223 -223
  32. package/styles/components/_decrement-increment.scss +35 -35
  33. package/styles/components/_dropdown.scss +77 -77
  34. package/styles/components/_error.scss +50 -50
  35. package/styles/components/_faq.scss +30 -30
  36. package/styles/components/_flight-option.scss +1432 -1432
  37. package/styles/components/_flyin.scss +830 -830
  38. package/styles/components/_footer.scss +135 -135
  39. package/styles/components/_form.scss +1693 -1693
  40. package/styles/components/_gallery.scss +317 -317
  41. package/styles/components/_header.scss +113 -113
  42. package/styles/components/_image-with-text.scss +206 -206
  43. package/styles/components/_img-slider.scss +175 -175
  44. package/styles/components/_info-message.scss +75 -75
  45. package/styles/components/_input.scss +35 -35
  46. package/styles/components/_list.scss +185 -185
  47. package/styles/components/_loader.scss +152 -152
  48. package/styles/components/_login.scss +140 -140
  49. package/styles/components/_map-view.scss +1100 -1100
  50. package/styles/components/_mixins.scss +579 -579
  51. package/styles/components/_navbar.scss +765 -765
  52. package/styles/components/_passenger-picker.scss +306 -306
  53. package/styles/components/_phone-input.scss +8 -8
  54. package/styles/components/_placeholders.scss +165 -165
  55. package/styles/components/_pricing-summary.scss +163 -163
  56. package/styles/components/_qsm.scss +17 -17
  57. package/styles/components/_radiobutton.scss +170 -170
  58. package/styles/components/_search.scss +2197 -2197
  59. package/styles/components/_select-wrapper.scss +81 -81
  60. package/styles/components/_slider.scss +128 -128
  61. package/styles/components/_spinner.scss +29 -29
  62. package/styles/components/_step-indicators.scss +187 -187
  63. package/styles/components/_table.scss +81 -81
  64. package/styles/components/_tide-form.scss +578 -578
  65. package/styles/components/_tree.scss +648 -648
  66. package/styles/components/_typeahead.scss +275 -275
  67. package/styles/components/_variables.scss +89 -89
  68. package/styles/content-blocks-variables.scss +543 -543
  69. package/styles/content-blocks.scss +66 -66
  70. package/styles/font.scss +2 -2
  71. package/styles/qsm/_calendar.scss +274 -274
  72. package/styles/qsm/_qsm.scss +1097 -1097
  73. package/styles/search.scss +1200 -1200
  74. package/styles/tide-form-variables.scss +275 -275
  75. package/styles/tide-form.scss +56 -56
@@ -124,7 +124,7 @@ var PRODUCT$f = {
124
124
  PER_PERSON_PER_NIGHT: "لكل شخص / لكل ليلة",
125
125
  BOOK_NOW: "احجز الآن",
126
126
  TO_YOUR_OFFER: "إلى عرضك",
127
- NOT_AVAILABLE: "غير متاح",
127
+ NOT_AVAILABLE: "غير متاح — يرجى اختيار تاريخ آخر",
128
128
  NUMBER_OF_ROOMS: "عدد الغرف",
129
129
  AGE_BY_DEPARTURE_DATE: "عمر الأطفال عند تاريخ المغادرة",
130
130
  YEAR: "سنة/سنوات",
@@ -468,7 +468,7 @@ var SRP$f = {
468
468
  };
469
469
  var ITINERARY$f = {
470
470
  DAY: "اليوم",
471
- NO_ITEMS: "لا توجد عناصر لهذا اليوم."
471
+ NO_ITEMS: "لم يتم اختيار أنشطة لهذا اليوم."
472
472
  };
473
473
  var FORM$f = {
474
474
  LOADING: "جاري تحميل النموذج...",
@@ -571,7 +571,7 @@ var PRODUCT$e = {
571
571
  PER_PERSON_PER_NIGHT: "Per person / per nat",
572
572
  BOOK_NOW: "Book nu",
573
573
  TO_YOUR_OFFER: "Til dit tilbud",
574
- NOT_AVAILABLE: "Ikke tilgængelig",
574
+ NOT_AVAILABLE: "Ikke tilgængelig — vælg venligst en anden dato",
575
575
  NUMBER_OF_ROOMS: "Antal værelser",
576
576
  AGE_BY_DEPARTURE_DATE: "Børns alder på afrejsedato",
577
577
  YEAR: "år",
@@ -915,7 +915,7 @@ var SRP$e = {
915
915
  };
916
916
  var ITINERARY$e = {
917
917
  DAY: "Dag",
918
- NO_ITEMS: "Ingen elementer for denne dag."
918
+ NO_ITEMS: "Ingen aktiviteter valgt for denne dag."
919
919
  };
920
920
  var FORM$e = {
921
921
  LOADING: "Indlæser formular...",
@@ -1018,7 +1018,7 @@ var PRODUCT$d = {
1018
1018
  PER_PERSON_PER_NIGHT: "Pro Person / pro Nacht",
1019
1019
  BOOK_NOW: "Jetzt buchen",
1020
1020
  TO_YOUR_OFFER: "Zu Ihrem Angebot",
1021
- NOT_AVAILABLE: "Nicht verfügbar",
1021
+ NOT_AVAILABLE: "Nicht verfügbar — bitte wählen Sie ein anderes Datum",
1022
1022
  NUMBER_OF_ROOMS: "Anzahl der Zimmer",
1023
1023
  AGE_BY_DEPARTURE_DATE: "Alter der Kinder am Abreisedatum",
1024
1024
  YEAR: "Jahr(e)",
@@ -1362,7 +1362,7 @@ var SRP$d = {
1362
1362
  };
1363
1363
  var ITINERARY$d = {
1364
1364
  DAY: "Tag",
1365
- NO_ITEMS: "Keine Elemente für diesen Tag."
1365
+ NO_ITEMS: "Keine Aktivitäten für diesen Tag ausgewählt."
1366
1366
  };
1367
1367
  var FORM$d = {
1368
1368
  LOADING: "Formular wird geladen...",
@@ -1465,7 +1465,7 @@ var PRODUCT$c = {
1465
1465
  PER_PERSON_PER_NIGHT: "Per person / per night",
1466
1466
  BOOK_NOW: "Book now",
1467
1467
  TO_YOUR_OFFER: "To your quote",
1468
- NOT_AVAILABLE: "Not available",
1468
+ NOT_AVAILABLE: "Not available — please select a different date",
1469
1469
  NUMBER_OF_ROOMS: "Number of rooms",
1470
1470
  AGE_BY_DEPARTURE_DATE: "Age of children on departure date",
1471
1471
  YEAR: "Year(s)",
@@ -1813,7 +1813,7 @@ var SRP$c = {
1813
1813
  };
1814
1814
  var ITINERARY$c = {
1815
1815
  DAY: "Day",
1816
- NO_ITEMS: "No items for this day."
1816
+ NO_ITEMS: "No activities selected for this day."
1817
1817
  };
1818
1818
  var FORM$c = {
1819
1819
  LOADING: "Loading form...",
@@ -1916,7 +1916,7 @@ var PRODUCT$b = {
1916
1916
  PER_PERSON_PER_NIGHT: "Por persona / por noche",
1917
1917
  BOOK_NOW: "Reservar ahora",
1918
1918
  TO_YOUR_OFFER: "A su presupuesto",
1919
- NOT_AVAILABLE: "No disponible",
1919
+ NOT_AVAILABLE: "No disponible — seleccione otra fecha",
1920
1920
  NUMBER_OF_ROOMS: "Número de habitaciones",
1921
1921
  AGE_BY_DEPARTURE_DATE: "Edad de los niños en la fecha de salida",
1922
1922
  YEAR: "Año(s)",
@@ -2260,7 +2260,7 @@ var SRP$b = {
2260
2260
  };
2261
2261
  var ITINERARY$b = {
2262
2262
  DAY: "Día",
2263
- NO_ITEMS: "No hay elementos para este día."
2263
+ NO_ITEMS: "No hay actividades seleccionadas para este día."
2264
2264
  };
2265
2265
  var FORM$b = {
2266
2266
  LOADING: "Cargando formulario...",
@@ -2363,7 +2363,7 @@ var PRODUCT$a = {
2363
2363
  PER_PERSON_PER_NIGHT: "Par personne / par nuit",
2364
2364
  BOOK_NOW: "Réserver maintenant",
2365
2365
  TO_YOUR_OFFER: "Vers votre devis",
2366
- NOT_AVAILABLE: "Non disponible",
2366
+ NOT_AVAILABLE: "Non disponible — veuillez sélectionner une autre date",
2367
2367
  NUMBER_OF_ROOMS: "Nombre de chambres",
2368
2368
  AGE_BY_DEPARTURE_DATE: "Âge des enfants à la date de départ",
2369
2369
  YEAR: "An(s)",
@@ -2711,7 +2711,7 @@ var SRP$a = {
2711
2711
  };
2712
2712
  var ITINERARY$a = {
2713
2713
  DAY: "Jour",
2714
- NO_ITEMS: "Aucun élément pour ce jour."
2714
+ NO_ITEMS: "Aucune activité sélectionnée pour ce jour."
2715
2715
  };
2716
2716
  var FORM$a = {
2717
2717
  LOADING: "Chargement du formulaire...",
@@ -2814,7 +2814,7 @@ var PRODUCT$9 = {
2814
2814
  PER_PERSON_PER_NIGHT: "Par personne / par nuit",
2815
2815
  BOOK_NOW: "Réservez maintenant",
2816
2816
  TO_YOUR_OFFER: "Vers votre devis",
2817
- NOT_AVAILABLE: "Indisponible",
2817
+ NOT_AVAILABLE: "Indisponible — veuillez sélectionner une autre date",
2818
2818
  NUMBER_OF_ROOMS: "Nombre de chambres",
2819
2819
  AGE_BY_DEPARTURE_DATE: "Âge des enfants à la date de départ",
2820
2820
  YEAR: "An(s)",
@@ -3158,7 +3158,7 @@ var SRP$9 = {
3158
3158
  };
3159
3159
  var ITINERARY$9 = {
3160
3160
  DAY: "Jour",
3161
- NO_ITEMS: "Aucun élément pour ce jour."
3161
+ NO_ITEMS: "Aucune activité sélectionnée pour ce jour."
3162
3162
  };
3163
3163
  var FORM$9 = {
3164
3164
  LOADING: "Chargement du formulaire...",
@@ -3261,7 +3261,7 @@ var PRODUCT$8 = {
3261
3261
  PER_PERSON_PER_NIGHT: "Á mann / á nótt",
3262
3262
  BOOK_NOW: "Panta núna",
3263
3263
  TO_YOUR_OFFER: "Til tilboðsins þíns",
3264
- NOT_AVAILABLE: "Ekki í boði",
3264
+ NOT_AVAILABLE: "Ekki í boði — vinsamlegast veldu aðra dagsetningu",
3265
3265
  NUMBER_OF_ROOMS: "Fjöldi herbergja",
3266
3266
  AGE_BY_DEPARTURE_DATE: "Aldur barna á brottfarardegi",
3267
3267
  YEAR: "ár",
@@ -3605,7 +3605,7 @@ var SRP$8 = {
3605
3605
  };
3606
3606
  var ITINERARY$8 = {
3607
3607
  DAY: "Dagur",
3608
- NO_ITEMS: "Engar upplýsingar fyrir þennan dag."
3608
+ NO_ITEMS: "Engin afþreying valin fyrir þennan dag."
3609
3609
  };
3610
3610
  var FORM$8 = {
3611
3611
  LOADING: "Hleður eyðublað...",
@@ -3708,7 +3708,7 @@ var PRODUCT$7 = {
3708
3708
  PER_PERSON_PER_NIGHT: "A persona / a notte",
3709
3709
  BOOK_NOW: "Prenota ora",
3710
3710
  TO_YOUR_OFFER: "Vai al preventivo",
3711
- NOT_AVAILABLE: "Non disponibile",
3711
+ NOT_AVAILABLE: "Non disponibile — seleziona un'altra data",
3712
3712
  NUMBER_OF_ROOMS: "Numero di camere",
3713
3713
  AGE_BY_DEPARTURE_DATE: "Età dei bambini alla data di partenza",
3714
3714
  YEAR: "Anno/i",
@@ -4052,7 +4052,7 @@ var SRP$7 = {
4052
4052
  };
4053
4053
  var ITINERARY$7 = {
4054
4054
  DAY: "Giorno",
4055
- NO_ITEMS: "Nessun elemento per questo giorno."
4055
+ NO_ITEMS: "Nessuna attività selezionata per questo giorno."
4056
4056
  };
4057
4057
  var FORM$7 = {
4058
4058
  LOADING: "Caricamento modulo...",
@@ -4155,7 +4155,7 @@ var PRODUCT$6 = {
4155
4155
  PER_PERSON_PER_NIGHT: "Per persoon / per nacht",
4156
4156
  BOOK_NOW: "Boek nu",
4157
4157
  TO_YOUR_OFFER: "Naar uw offerte",
4158
- NOT_AVAILABLE: "Niet beschikbaar",
4158
+ NOT_AVAILABLE: "Niet beschikbaar — kies een andere datum",
4159
4159
  NUMBER_OF_ROOMS: "Aantal kamers",
4160
4160
  AGE_BY_DEPARTURE_DATE: "Leeftijd kinderen op vertrekdatum",
4161
4161
  YEAR: "Jaar",
@@ -4503,7 +4503,7 @@ var SRP$6 = {
4503
4503
  };
4504
4504
  var ITINERARY$6 = {
4505
4505
  DAY: "Dag",
4506
- NO_ITEMS: "Geen elementen voor deze dag."
4506
+ NO_ITEMS: "Geen activiteiten geselecteerd voor deze dag."
4507
4507
  };
4508
4508
  var FORM$6 = {
4509
4509
  LOADING: "Formulier laden...",
@@ -4606,7 +4606,7 @@ var PRODUCT$5 = {
4606
4606
  PER_PERSON_PER_NIGHT: "Per persoon / per nacht",
4607
4607
  BOOK_NOW: "Nu boeken",
4608
4608
  TO_YOUR_OFFER: "Naar uw offerte",
4609
- NOT_AVAILABLE: "Niet beschikbaar",
4609
+ NOT_AVAILABLE: "Niet beschikbaar — kies een andere datum",
4610
4610
  NUMBER_OF_ROOMS: "Aantal kamers",
4611
4611
  AGE_BY_DEPARTURE_DATE: "Leeftijd van kinderen op vertrekdatum",
4612
4612
  YEAR: "Jaar",
@@ -4950,7 +4950,7 @@ var SRP$5 = {
4950
4950
  };
4951
4951
  var ITINERARY$5 = {
4952
4952
  DAY: "Dag",
4953
- NO_ITEMS: "Geen elementen voor deze dag."
4953
+ NO_ITEMS: "Geen activiteiten geselecteerd voor deze dag."
4954
4954
  };
4955
4955
  var FORM$5 = {
4956
4956
  LOADING: "Formulier laden...",
@@ -5053,7 +5053,7 @@ var PRODUCT$4 = {
5053
5053
  PER_PERSON_PER_NIGHT: "Per person / per natt",
5054
5054
  BOOK_NOW: "Bestill nå",
5055
5055
  TO_YOUR_OFFER: "Til ditt tilbud",
5056
- NOT_AVAILABLE: "Ikke tilgjengelig",
5056
+ NOT_AVAILABLE: "Ikke tilgjengelig — velg en annen dato",
5057
5057
  NUMBER_OF_ROOMS: "Antall rom",
5058
5058
  AGE_BY_DEPARTURE_DATE: "Barnas alder på avreisedato",
5059
5059
  YEAR: "År",
@@ -5397,7 +5397,7 @@ var SRP$4 = {
5397
5397
  };
5398
5398
  var ITINERARY$4 = {
5399
5399
  DAY: "Dag",
5400
- NO_ITEMS: "Ingen elementer for denne dagen."
5400
+ NO_ITEMS: "Ingen aktiviteter valgt for denne dagen."
5401
5401
  };
5402
5402
  var FORM$4 = {
5403
5403
  LOADING: "Laster inn skjema...",
@@ -5500,7 +5500,7 @@ var PRODUCT$3 = {
5500
5500
  PER_PERSON_PER_NIGHT: "Za osobę / za noc",
5501
5501
  BOOK_NOW: "Zarezerwuj teraz",
5502
5502
  TO_YOUR_OFFER: "Do oferty",
5503
- NOT_AVAILABLE: "Niedostępne",
5503
+ NOT_AVAILABLE: "Niedostępne — wybierz inną datę",
5504
5504
  NUMBER_OF_ROOMS: "Liczba pokoi",
5505
5505
  AGE_BY_DEPARTURE_DATE: "Wiek dzieci w dniu wyjazdu",
5506
5506
  YEAR: "Rok(lata)",
@@ -5844,7 +5844,7 @@ var SRP$3 = {
5844
5844
  };
5845
5845
  var ITINERARY$3 = {
5846
5846
  DAY: "Dzień",
5847
- NO_ITEMS: "Brak elementów dla tego dnia."
5847
+ NO_ITEMS: "Nie wybrano atrakcji na ten dzień."
5848
5848
  };
5849
5849
  var FORM$3 = {
5850
5850
  LOADING: "Ładowanie formularza...",
@@ -5947,7 +5947,7 @@ var PRODUCT$2 = {
5947
5947
  PER_PERSON_PER_NIGHT: "Por pessoa / por noite",
5948
5948
  BOOK_NOW: "Reservar agora",
5949
5949
  TO_YOUR_OFFER: "Ir para o orçamento",
5950
- NOT_AVAILABLE: "Indisponível",
5950
+ NOT_AVAILABLE: "Indisponível — selecione outra data",
5951
5951
  NUMBER_OF_ROOMS: "Número de quartos",
5952
5952
  AGE_BY_DEPARTURE_DATE: "Idade das crianças à data de partida",
5953
5953
  YEAR: "Ano(s)",
@@ -6291,7 +6291,7 @@ var SRP$2 = {
6291
6291
  };
6292
6292
  var ITINERARY$2 = {
6293
6293
  DAY: "Dia",
6294
- NO_ITEMS: "Nenhum item para este dia."
6294
+ NO_ITEMS: "Nenhuma atividade selecionada para este dia."
6295
6295
  };
6296
6296
  var FORM$2 = {
6297
6297
  LOADING: "A carregar formulário...",
@@ -6394,7 +6394,7 @@ var PRODUCT$1 = {
6394
6394
  PER_PERSON_PER_NIGHT: "Per person / per natt",
6395
6395
  BOOK_NOW: "Boka nu",
6396
6396
  TO_YOUR_OFFER: "Till din offert",
6397
- NOT_AVAILABLE: "Ej tillgänglig",
6397
+ NOT_AVAILABLE: "Ej tillgänglig — välj ett annat datum",
6398
6398
  NUMBER_OF_ROOMS: "Antal rum",
6399
6399
  AGE_BY_DEPARTURE_DATE: "Barnens ålder vid avresedatum",
6400
6400
  YEAR: "År",
@@ -6738,7 +6738,7 @@ var SRP$1 = {
6738
6738
  };
6739
6739
  var ITINERARY$1 = {
6740
6740
  DAY: "Dag",
6741
- NO_ITEMS: "Inga element för denna dag."
6741
+ NO_ITEMS: "Inga aktiviteter valda för denna dag."
6742
6742
  };
6743
6743
  var FORM$1 = {
6744
6744
  LOADING: "Laddar formulär...",
@@ -6841,7 +6841,7 @@ var PRODUCT = {
6841
6841
  PER_PERSON_PER_NIGHT: "1名・1泊あたり",
6842
6842
  BOOK_NOW: "今すぐ予約",
6843
6843
  TO_YOUR_OFFER: "見積もりへ",
6844
- NOT_AVAILABLE: "利用不可",
6844
+ NOT_AVAILABLE: "利用不可 — 別の日付をお選びください",
6845
6845
  NUMBER_OF_ROOMS: "客室数",
6846
6846
  AGE_BY_DEPARTURE_DATE: "出発日時点での子供の年齢",
6847
6847
  YEAR: "歳",
@@ -7185,7 +7185,7 @@ var SRP = {
7185
7185
  };
7186
7186
  var ITINERARY = {
7187
7187
  DAY: "日",
7188
- NO_ITEMS: "この日のアイテムはありません。"
7188
+ NO_ITEMS: "この日に選択されたアクティビティはありません。"
7189
7189
  };
7190
7190
  var FORM = {
7191
7191
  LOADING: "フォームを読み込んでいます...",
@@ -21853,6 +21853,7 @@ const OptionRoom = ({ packageRoom, pax, optionPax, onRoomChange, includedService
21853
21853
 
21854
21854
  function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId = null, onPrinted }) {
21855
21855
  const settings = React.useContext(SettingsContext);
21856
+ const apiSettings = reactRedux.useSelector(selectApiSettings);
21856
21857
  if (!settings)
21857
21858
  throw new Error('useOfferPrinter must be used inside <BookingWizard>');
21858
21859
  const { language, officeId } = settings;
@@ -21881,9 +21882,9 @@ function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId =
21881
21882
  customerRequests: []
21882
21883
  }
21883
21884
  };
21884
- const cfg = buildTideClientConfig();
21885
+ const cfg = buildTideClientConfig(apiSettings);
21885
21886
  return build.book(cfg, request, undefined, language);
21886
- }, [agentId, bookingPackage, getPax, language, officeId, tagIds]);
21887
+ }, [agentId, apiSettings, bookingPackage, getPax, language, officeId, tagIds]);
21887
21888
  const languageData = [
21888
21889
  { code: 'nl-BE', tideId: 1 },
21889
21890
  { code: 'fr-BE', tideId: 2 },
@@ -21893,7 +21894,7 @@ function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId =
21893
21894
  return languageData.find((l) => l.code === code)?.tideId || 1;
21894
21895
  }
21895
21896
  const printOffer = React.useCallback(async (offer) => {
21896
- const cfg = buildTideClientConfig();
21897
+ const cfg = buildTideClientConfig(apiSettings);
21897
21898
  const req = {
21898
21899
  id: printActionId ?? 0,
21899
21900
  dossierNumber: offer.dossierNumber ?? offer.number,
@@ -21904,7 +21905,7 @@ function useOfferPrinter({ bookingPackage, getPax, tagIds = [], printActionId =
21904
21905
  const url = URL.createObjectURL(new Blob([buf], { type: 'application/pdf' }));
21905
21906
  onPrinted?.(url);
21906
21907
  window.open(url);
21907
- }, [language, onPrinted]);
21908
+ }, [apiSettings, language, onPrinted, printActionId]);
21908
21909
  const handlePrint = React.useCallback(async () => {
21909
21910
  try {
21910
21911
  setStage('creating');
@@ -28261,8 +28262,6 @@ const buildTrajectNodeRequest = ({ node, line }, context, productCode, destinati
28261
28262
  language: context.language,
28262
28263
  serviceType: node.serviceType,
28263
28264
  fromDate: toDateOnlyString(line.from),
28264
- // An excursion happens on a day rather than over a span. The traject gives its line an end a day
28265
- // out, the way a night is counted, which asks the search for a window it does not have.
28266
28265
  toDate: toDateOnlyString(node.serviceType === EXCURSION_SERVICE_TYPE ? line.from : line.to),
28267
28266
  destination: destination ?? buildDestination(line, node),
28268
28267
  productCode,
@@ -31182,7 +31181,7 @@ const Filters = ({ initialFilters, filters, isOpen, handleSetIsOpen, isLoading,
31182
31181
  const max = filter.max ?? 100;
31183
31182
  const selectedMin = filter.selectedMin ?? min;
31184
31183
  const selectedMax = filter.selectedMax ?? max;
31185
- return (React__default["default"].createElement(MultiRangeFilter, { min: min, max: max, selectedMin: selectedMin, selectedMax: selectedMax, valueFormatter: (value) => `${value}`, onChange: (newMin, newMax) => {
31184
+ return (React__default["default"].createElement(MultiRangeFilter, { min: min, max: max, selectedMin: selectedMin, selectedMax: selectedMax, valueFormatter: (value) => (filter.property === 'price' ? value.toFixed(2).replace('.', ',') : `${value}`), onChange: (newMin, newMax) => {
31186
31185
  handleSliderChange(filter, newMin, newMax);
31187
31186
  } }));
31188
31187
  })(),
@@ -31885,7 +31884,7 @@ const FlyIn = ({ srpType, isOpen, setIsOpen, className = '', onPanelRef, details
31885
31884
  dispatch(setBookPackagingEntry(true));
31886
31885
  }
31887
31886
  };
31888
- return (React__default["default"].createElement("div", { className: `flyin ${isOpen ? 'flyin--active' : ''} ${className} ${isPackageEditFlow || flyInType === 'acco-results' || flyInType === 'traject-day-activities' ? 'flyin--large' : ''} ${flyInType === 'excursion-results' || flyInType === 'excursion-details' ? 'flyin--medium' : ''}
31887
+ return (React__default["default"].createElement("div", { className: `flyin ${isOpen ? 'flyin--active' : ''} ${className} ${isPackageEditFlow || flyInType === 'acco-results' || flyInType === 'traject-day-activities' ? 'flyin--large' : ''} ${flyInType === 'excursion-results' || flyInType === 'excursion-details' ? 'flyin--medium' : ''}
31889
31888
  ${flyInType === 'flight-outward-results' || flyInType === 'flight-return-results' || flyInType === 'traject-flight-results' ? 'flyin--flight' : ''}` },
31890
31889
  React__default["default"].createElement("div", { className: `flyin__panel ${isOpen ? 'flyin__panel--active' : ''}`, ref: panelRef },
31891
31890
  React__default["default"].createElement("div", { className: "flyin__content" },
@@ -32674,7 +32673,7 @@ const FlightFilters = ({ isOpen, handleSetIsOpen, isLoading }) => {
32674
32673
  !lodash.isEmpty(priceRangeValues) &&
32675
32674
  (() => {
32676
32675
  return (React__default["default"].createElement("div", { className: "search__filter-rows" },
32677
- React__default["default"].createElement(MultiRangeFilter, { min: minPrice, max: maxPrice, selectedMin: lodash.first(priceRangeValues) ?? minPrice, selectedMax: lodash.last(priceRangeValues) ?? maxPrice, valueFormatter: (value) => `€${value}`, onChange: (newMin, newMax) => {
32676
+ React__default["default"].createElement(MultiRangeFilter, { min: minPrice, max: maxPrice, selectedMin: lodash.first(priceRangeValues) ?? minPrice, selectedMax: lodash.last(priceRangeValues) ?? maxPrice, valueFormatter: (value) => `€${value.toFixed(2).replace('.', ',')}`, onChange: (newMin, newMax) => {
32678
32677
  handlePriceSliderChange([newMin, newMax]);
32679
32678
  } })));
32680
32679
  })()))))));
@@ -33473,20 +33472,20 @@ const buildFlightHtml = (line) => {
33473
33472
  */
33474
33473
  const buildFallbackHtml = (item, line) => {
33475
33474
  const details = [line?.accommodationName, line?.regimeName].filter(Boolean).join(' — ');
33476
- return `
33477
- <div class="itinerary-item__fallback">
33478
- <h3 class="itinerary-item__fallback-title">${escapeHtml(item.title)}</h3>
33479
- ${line ? buildFlightHtml(line) : ''}
33480
- ${details ? `<p class="itinerary-item__fallback-details">${escapeHtml(details)}</p>` : ''}
33481
- </div>
33475
+ return `
33476
+ <div class="itinerary-item__fallback">
33477
+ <h3 class="itinerary-item__fallback-title">${escapeHtml(item.title)}</h3>
33478
+ ${line ? buildFlightHtml(line) : ''}
33479
+ ${details ? `<p class="itinerary-item__fallback-details">${escapeHtml(details)}</p>` : ''}
33480
+ </div>
33482
33481
  `;
33483
33482
  };
33484
33483
  const buildItineraryHtml = (itinerary, translations, lines) => {
33485
33484
  if (!itinerary) {
33486
- return `
33487
- <div class="itinerary-shell">
33488
- <div class="itinerary-empty">Geen reisroute beschikbaar.</div>
33489
- </div>
33485
+ return `
33486
+ <div class="itinerary-shell">
33487
+ <div class="itinerary-empty">Geen reisroute beschikbaar.</div>
33488
+ </div>
33490
33489
  `;
33491
33490
  }
33492
33491
  const allNodes = itinerary.nodes ?? [];
@@ -33500,70 +33499,70 @@ const buildItineraryHtml = (itinerary, translations, lines) => {
33500
33499
  const hasAccommodationInCurrentNode = uniqueItems.some(isAccommodationItem);
33501
33500
  const activeAccommodation = findAccommodationForDay(allNodes, startDay);
33502
33501
  const accommodationBanner = !hasAccommodationInCurrentNode && activeAccommodation
33503
- ? `
33504
- <div class="itinerary-node__accommodation-banner">
33505
- Accommodatie voor deze dag: <strong>${escapeHtml(getAccommodationName(activeAccommodation))}</strong>
33506
- </div>
33502
+ ? `
33503
+ <div class="itinerary-node__accommodation-banner">
33504
+ Accommodatie voor deze dag: <strong>${escapeHtml(getAccommodationName(activeAccommodation))}</strong>
33505
+ </div>
33507
33506
  `
33508
33507
  : '';
33509
33508
  const itemsHtml = hasItems
33510
33509
  ? uniqueItems
33511
- .map((item) => `
33512
- <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
33510
+ .map((item) => `
33511
+ <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
33513
33512
  ${hasVisibleContent(item.contents)
33514
33513
  ? item.contents
33515
- : buildFallbackHtml(item, lines.find((line) => line.guid === item.itemGuid))}
33516
- </article>
33514
+ : buildFallbackHtml(item, lines.find((line) => line.guid === item.itemGuid))}
33515
+ </article>
33517
33516
  `)
33518
33517
  .join('')
33519
33518
  : `<div class="itinerary-node__empty">${translations.ITINERARY.NO_ITEMS}</div>`;
33520
- return `
33521
- <section class="itinerary-node">
33522
- <header class="itinerary-node__header">
33523
-
33524
- <div class="itinerary-node__day">
33525
- <p class="itinerary-node__day-day">${day}</p>
33526
- <p class="itinerary-node__day-month">${month}</p>
33527
- </div>
33528
-
33529
- <div>
33530
- <h2 class="itinerary-node__title">${escapeHtml(node.title)}</h2>
33531
- </div>
33532
- </header>
33533
-
33534
- <div class="itinerary-node__content">
33535
- ${accommodationBanner}
33536
- ${itemsHtml}
33537
- </div>
33538
- </section>
33519
+ return `
33520
+ <section class="itinerary-node">
33521
+ <header class="itinerary-node__header">
33522
+
33523
+ <div class="itinerary-node__day">
33524
+ <p class="itinerary-node__day-day">${day}</p>
33525
+ <p class="itinerary-node__day-month">${month}</p>
33526
+ </div>
33527
+
33528
+ <div>
33529
+ <h2 class="itinerary-node__title">${escapeHtml(node.title)}</h2>
33530
+ </div>
33531
+ </header>
33532
+
33533
+ <div class="itinerary-node__content">
33534
+ ${accommodationBanner}
33535
+ ${itemsHtml}
33536
+ </div>
33537
+ </section>
33539
33538
  `;
33540
33539
  })
33541
33540
  .join('');
33542
33541
  const defaultItemsHtml = itinerary.defaultItems && itinerary.defaultItems.length > 0
33543
- ? `
33544
- <section class="itinerary-default-items">
33545
- <h2 class="itinerary-default-items__title">Algemene info</h2>
33542
+ ? `
33543
+ <section class="itinerary-default-items">
33544
+ <h2 class="itinerary-default-items__title">Algemene info</h2>
33546
33545
  ${getUniqueItems(itinerary.defaultItems)
33547
- .map((item) => `
33548
- <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
33546
+ .map((item) => `
33547
+ <article class="itinerary-item" data-template="${escapeHtml(item.templateName)}">
33549
33548
  ${hasVisibleContent(item.contents)
33550
33549
  ? item.contents
33551
- : buildFallbackHtml(item, lines.find((line) => line.guid === item.itemGuid))}
33552
- </article>
33550
+ : buildFallbackHtml(item, lines.find((line) => line.guid === item.itemGuid))}
33551
+ </article>
33553
33552
  `)
33554
- .join('')}
33555
- </section>
33553
+ .join('')}
33554
+ </section>
33556
33555
  `
33557
33556
  : '';
33558
- return `
33559
- <div class="itinerary-shell">
33560
- ${itinerary.title ? `<header class="itinerary-shell__header"><h1 class="itinerary-shell__title">${escapeHtml(itinerary.title)}</h1></header>` : ''}
33561
-
33562
- <div class="itinerary-shell__content">
33563
- ${nodesHtml}
33564
- ${defaultItemsHtml}
33565
- </div>
33566
- </div>
33557
+ return `
33558
+ <div class="itinerary-shell">
33559
+ ${itinerary.title ? `<header class="itinerary-shell__header"><h1 class="itinerary-shell__title">${escapeHtml(itinerary.title)}</h1></header>` : ''}
33560
+
33561
+ <div class="itinerary-shell__content">
33562
+ ${nodesHtml}
33563
+ ${defaultItemsHtml}
33564
+ </div>
33565
+ </div>
33567
33566
  `;
33568
33567
  };
33569
33568
  const FullItinerary = ({ isLoading }) => {
@@ -33585,170 +33584,170 @@ const FullItinerary = ({ isLoading }) => {
33585
33584
  }
33586
33585
  const shadowRoot = host.shadowRoot ?? host.attachShadow({ mode: 'open' });
33587
33586
  shadowRootRef.current = shadowRoot;
33588
- shadowRoot.innerHTML = `
33589
- <style>
33590
- :host {
33591
- all: initial;
33592
- display: block;
33593
- width: 100%;
33594
- }
33595
-
33596
- *,
33597
- *::before,
33598
- *::after {
33599
- box-sizing: border-box;
33600
- }
33601
-
33602
- .itinerary-shell {
33603
- width: 100%;
33604
- margin: 0 auto;
33605
- font-family: 'Outfit', sans-serif;
33606
- color: #222;
33607
- }
33608
-
33609
- .itinerary-shell__header {
33610
- margin-bottom: 24px;
33611
- }
33612
-
33613
- .itinerary-shell__title {
33614
- margin: 0;
33615
- font-size: 32px;
33616
- line-height: 1.2;
33617
- }
33618
-
33619
- .itinerary-shell__content {
33620
- display: grid;
33621
- gap: 24px;
33622
- }
33623
-
33624
- .itinerary-node {
33625
- border: 1px solid #e5e7eb;
33626
- border-radius: 16px;
33627
- overflow: hidden;
33628
- background: #fff;
33629
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
33630
- }
33631
-
33632
- .itinerary-node__header {
33633
- display: flex;
33634
- gap: 16px;
33635
- align-items: center;
33636
- border-bottom: 1px solid #eef0f2;
33637
- background: #fafafa;
33638
- }
33639
-
33640
- .itinerary-node__day {
33641
- flex: 50px 0 0;
33642
- display: flex;
33643
- flex-flow: column;
33644
- align-items: center;
33645
- justify-content: center;
33646
- background: #1f9470;
33647
- color: white;
33648
- border: 1.5px solid var(--tide-booking-color-secondary);
33649
- }
33650
-
33651
- .itinerary-node__day-month {
33652
- margin: 0px;
33653
- }
33654
-
33655
- .itinerary-node__day-day {
33656
- margin: 0px;
33657
- font-weight: var(--tide-booking-search-results-label-date-month-font-weight);
33658
- color: var(--tide-booking-search-results-label-date-month-color);
33659
- font-size: 24px;
33660
- }
33661
-
33662
- .itinerary-node__title {
33663
- margin: 0;
33664
- font-size: 22px;
33665
- line-height: 1.25;
33666
- }
33667
-
33668
- .itinerary-node__content {
33669
- display: grid;
33670
- gap: 20px;
33671
- padding: 20px;
33672
- }
33673
-
33674
- .itinerary-node__accommodation-banner {
33675
- padding: 12px 16px;
33676
- border: 1px solid #dbeafe;
33677
- border-radius: 12px;
33678
- background: #eff6ff;
33679
- color: #1e3a8a;
33680
- font-size: 14px;
33681
- line-height: 1.4;
33682
- }
33683
-
33684
- .itinerary-item {
33685
- display: block;
33686
- border-radius: 12px;
33687
- overflow: hidden;
33688
- background: #fff;
33689
- }
33690
-
33691
- /* An item whose template has no content view of its own still has to read as a service. */
33692
- .itinerary-item__fallback {
33693
- padding: 16px 20px;
33694
- border: 1px solid #e5e7eb;
33695
- border-radius: 12px;
33696
- }
33697
-
33698
- .itinerary-item__fallback-title {
33699
- margin: 0;
33700
- font-size: 16px;
33701
- font-weight: 600;
33702
- color: #111827;
33703
- }
33704
-
33705
- .itinerary-item__legs {
33706
- margin: 8px 0 0;
33707
- padding-left: 18px;
33708
- color: #374151;
33709
- }
33710
-
33711
- .itinerary-item__legs li + li {
33712
- margin-top: 4px;
33713
- }
33714
-
33715
- .itinerary-item__fallback-details {
33716
- margin: 8px 0 0;
33717
- color: #6b7280;
33718
- }
33719
-
33720
- .itinerary-node__empty,
33721
- .itinerary-empty {
33722
- padding: 20px;
33723
- border: 1px dashed #d1d5db;
33724
- border-radius: 12px;
33725
- color: #6b7280;
33726
- background: #fafafa;
33727
- }
33728
-
33729
- .itinerary-default-items {
33730
- border: 1px solid #e5e7eb;
33731
- border-radius: 16px;
33732
- padding: 20px;
33733
- background: #fff;
33734
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
33735
- }
33736
-
33737
- .itinerary-default-items__title {
33738
- margin: 0 0 16px;
33739
- font-size: 22px;
33740
- }
33741
-
33742
- @media (max-width: 768px) {
33743
- .itinerary-shell {
33744
- padding: 16px;
33745
- }
33746
- }
33747
-
33748
- ${itinerary?.styleSheetBody ?? ''}
33749
- </style>
33750
-
33751
- ${html}
33587
+ shadowRoot.innerHTML = `
33588
+ <style>
33589
+ :host {
33590
+ all: initial;
33591
+ display: block;
33592
+ width: 100%;
33593
+ }
33594
+
33595
+ *,
33596
+ *::before,
33597
+ *::after {
33598
+ box-sizing: border-box;
33599
+ }
33600
+
33601
+ .itinerary-shell {
33602
+ width: 100%;
33603
+ margin: 0 auto;
33604
+ font-family: 'Outfit', sans-serif;
33605
+ color: #222;
33606
+ }
33607
+
33608
+ .itinerary-shell__header {
33609
+ margin-bottom: 24px;
33610
+ }
33611
+
33612
+ .itinerary-shell__title {
33613
+ margin: 0;
33614
+ font-size: 32px;
33615
+ line-height: 1.2;
33616
+ }
33617
+
33618
+ .itinerary-shell__content {
33619
+ display: grid;
33620
+ gap: 24px;
33621
+ }
33622
+
33623
+ .itinerary-node {
33624
+ border: 1px solid #e5e7eb;
33625
+ border-radius: 16px;
33626
+ overflow: hidden;
33627
+ background: #fff;
33628
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
33629
+ }
33630
+
33631
+ .itinerary-node__header {
33632
+ display: flex;
33633
+ gap: 16px;
33634
+ align-items: center;
33635
+ border-bottom: 1px solid #eef0f2;
33636
+ background: #fafafa;
33637
+ }
33638
+
33639
+ .itinerary-node__day {
33640
+ flex: 50px 0 0;
33641
+ display: flex;
33642
+ flex-flow: column;
33643
+ align-items: center;
33644
+ justify-content: center;
33645
+ background: #1f9470;
33646
+ color: white;
33647
+ border: 1.5px solid var(--tide-booking-color-secondary);
33648
+ }
33649
+
33650
+ .itinerary-node__day-month {
33651
+ margin: 0px;
33652
+ }
33653
+
33654
+ .itinerary-node__day-day {
33655
+ margin: 0px;
33656
+ font-weight: var(--tide-booking-search-results-label-date-month-font-weight);
33657
+ color: var(--tide-booking-search-results-label-date-month-color);
33658
+ font-size: 24px;
33659
+ }
33660
+
33661
+ .itinerary-node__title {
33662
+ margin: 0;
33663
+ font-size: 22px;
33664
+ line-height: 1.25;
33665
+ }
33666
+
33667
+ .itinerary-node__content {
33668
+ display: grid;
33669
+ gap: 20px;
33670
+ padding: 20px;
33671
+ }
33672
+
33673
+ .itinerary-node__accommodation-banner {
33674
+ padding: 12px 16px;
33675
+ border: 1px solid #dbeafe;
33676
+ border-radius: 12px;
33677
+ background: #eff6ff;
33678
+ color: #1e3a8a;
33679
+ font-size: 14px;
33680
+ line-height: 1.4;
33681
+ }
33682
+
33683
+ .itinerary-item {
33684
+ display: block;
33685
+ border-radius: 12px;
33686
+ overflow: hidden;
33687
+ background: #fff;
33688
+ }
33689
+
33690
+ /* An item whose template has no content view of its own still has to read as a service. */
33691
+ .itinerary-item__fallback {
33692
+ padding: 16px 20px;
33693
+ border: 1px solid #e5e7eb;
33694
+ border-radius: 12px;
33695
+ }
33696
+
33697
+ .itinerary-item__fallback-title {
33698
+ margin: 0;
33699
+ font-size: 16px;
33700
+ font-weight: 600;
33701
+ color: #111827;
33702
+ }
33703
+
33704
+ .itinerary-item__legs {
33705
+ margin: 8px 0 0;
33706
+ padding-left: 18px;
33707
+ color: #374151;
33708
+ }
33709
+
33710
+ .itinerary-item__legs li + li {
33711
+ margin-top: 4px;
33712
+ }
33713
+
33714
+ .itinerary-item__fallback-details {
33715
+ margin: 8px 0 0;
33716
+ color: #6b7280;
33717
+ }
33718
+
33719
+ .itinerary-node__empty,
33720
+ .itinerary-empty {
33721
+ padding: 20px;
33722
+ border: 1px dashed #d1d5db;
33723
+ border-radius: 12px;
33724
+ color: #6b7280;
33725
+ background: #fafafa;
33726
+ }
33727
+
33728
+ .itinerary-default-items {
33729
+ border: 1px solid #e5e7eb;
33730
+ border-radius: 16px;
33731
+ padding: 20px;
33732
+ background: #fff;
33733
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.04);
33734
+ }
33735
+
33736
+ .itinerary-default-items__title {
33737
+ margin: 0 0 16px;
33738
+ font-size: 22px;
33739
+ }
33740
+
33741
+ @media (max-width: 768px) {
33742
+ .itinerary-shell {
33743
+ padding: 16px;
33744
+ }
33745
+ }
33746
+
33747
+ ${itinerary?.styleSheetBody ?? ''}
33748
+ </style>
33749
+
33750
+ ${html}
33752
33751
  `;
33753
33752
  }, [html, itinerary?.styleSheetBody, isLoading]);
33754
33753
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
@@ -34342,6 +34341,7 @@ const getNodeIcon = (node) => {
34342
34341
  const isRenderableNode = (node) => node.trajectNodeType === REGULAR_TRAJECT_NODE_TYPE &&
34343
34342
  (node.serviceType === ACCOMMODATION_SERVICE_TYPE || node.serviceType === EXCURSION_SERVICE_TYPE || node.serviceType === FLIGHT_SERVICE_TYPE);
34344
34343
  const MAX_DAY_ACTIVITIES = 6;
34344
+ const MAX_HOTEL_RESULTS = 6;
34345
34345
  const TrajectResults = ({ isLoading }) => {
34346
34346
  const context = React.useContext(SearchResultsConfigurationContext);
34347
34347
  const dispatch = reactRedux.useDispatch();
@@ -34351,6 +34351,8 @@ const TrajectResults = ({ isLoading }) => {
34351
34351
  const { trajectNodeAvailability, trajectFlightAvailability, trajectDaySuggestions, editablePackagingEntry } = reactRedux.useSelector((state) => state.searchResults);
34352
34352
  const trajectEntry = context?.trajectEntry;
34353
34353
  const hideShowMoreResults = !!context?.hideShowMoreResults;
34354
+ const loadDayActivitiesOnDemand = !!context?.loadDayActivitiesOnDemand;
34355
+ const showNonPreferredHotels = !!context?.showNonPreferredHotels;
34354
34356
  const nodesWithLines = React.useMemo(() => (trajectEntry ? getTrajectNodesWithLines(trajectEntry) : []), [trajectEntry]);
34355
34357
  const lineByNodeId = React.useMemo(() => new Map(nodesWithLines.map((x) => [x.node.nodeId, x])), [nodesWithLines]);
34356
34358
  const nodesByDay = React.useMemo(() => {
@@ -34388,13 +34390,14 @@ const TrajectResults = ({ isLoading }) => {
34388
34390
  /**
34389
34391
  * Each day's activities are one more search, and a traject has as many as it has days. They go
34390
34392
  * out together, but only once the trip itself has resolved — sharing the connections with the
34391
- * searches the trip cannot do without would only make those slower.
34393
+ * searches the trip cannot do without would only make those slower. A portal can turn the
34394
+ * automatic load off, and then each day waits for its own "show activities" click instead.
34392
34395
  */
34393
34396
  React.useEffect(() => {
34394
- if (!trajectEntry || !tripResolved)
34397
+ if (!trajectEntry || !tripResolved || loadDayActivitiesOnDemand)
34395
34398
  return;
34396
34399
  (trajectEntry.traject.days ?? []).filter((day) => stayByDay.has(day.order)).forEach((day) => loadDay(day));
34397
- }, [trajectEntry, tripResolved, stayByDay]);
34400
+ }, [trajectEntry, tripResolved, stayByDay, loadDayActivitiesOnDemand]);
34398
34401
  if (!context || !trajectEntry)
34399
34402
  return null;
34400
34403
  const handleSelect = (item, code) => {
@@ -34468,6 +34471,10 @@ const TrajectResults = ({ isLoading }) => {
34468
34471
  const selected = results.find((x) => x.code === availability?.selectedCode) ?? null;
34469
34472
  const configured = results.filter((x) => x.code !== selected?.code && !!findCandidateForResult(node, x));
34470
34473
  const others = results.filter((x) => x.code !== selected?.code && !findCandidateForResult(node, x));
34474
+ // A hotel row holds the hotels configured on the node; a portal can also let it fill up with
34475
+ // non-preferred hotels found in the area, the rest staying behind "show more".
34476
+ const fill = showNonPreferredHotels && node.serviceType === ACCOMMODATION_SERVICE_TYPE ? others.slice(0, Math.max(MAX_HOTEL_RESULTS - 1 - configured.length, 0)) : [];
34477
+ const remaining = others.length - fill.length;
34471
34478
  // No entry yet means the node's search has been queued but not dispatched — still loading.
34472
34479
  const status = availability?.status ?? 'loading';
34473
34480
  return (React__default["default"].createElement(React__default["default"].Fragment, { key: line.guid },
@@ -34487,12 +34494,12 @@ const TrajectResults = ({ isLoading }) => {
34487
34494
  node.preferredAccommodationName,
34488
34495
  " \u2014 ",
34489
34496
  translations.SRP.NO_RESULTS))),
34490
- React__default["default"].createElement("div", { className: "search__results__cards search__results__cards--scroll" }, [selected, ...configured].map((result) => (React__default["default"].createElement(TrajectNodeCard, { key: result.code, node: node, result: result, isSelected: result.code === selected.code, languageCode: context.languageCode, translations: translations, onSelect: () => handleSelect(item, result.code), onEditOptions: node.serviceType === ACCOMMODATION_SERVICE_TYPE ? () => handleEditOptions(item) : undefined, showNights: node.serviceType === ACCOMMODATION_SERVICE_TYPE })))),
34491
- others.length > 0 && !hideShowMoreResults && (React__default["default"].createElement("div", { className: "search__results__cards__actions" },
34497
+ React__default["default"].createElement("div", { className: "search__results__cards search__results__cards--scroll" }, [selected, ...configured, ...fill].map((result) => (React__default["default"].createElement(TrajectNodeCard, { key: result.code, node: node, result: result, isSelected: result.code === selected.code, languageCode: context.languageCode, translations: translations, onSelect: () => handleSelect(item, result.code), onEditOptions: node.serviceType === ACCOMMODATION_SERVICE_TYPE ? () => handleEditOptions(item) : undefined, showNights: node.serviceType === ACCOMMODATION_SERVICE_TYPE })))),
34498
+ remaining > 0 && !hideShowMoreResults && (React__default["default"].createElement("div", { className: "search__results__cards__actions" },
34492
34499
  React__default["default"].createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleShowMore(item) },
34493
34500
  translations.SRP.SHOW_MORE,
34494
34501
  " (",
34495
- others.length,
34502
+ remaining,
34496
34503
  ")")))))));
34497
34504
  };
34498
34505
  const handleSelectFlight = (item, flight) => {
@@ -34583,6 +34590,7 @@ const TrajectResults = ({ isLoading }) => {
34583
34590
  return null;
34584
34591
  const visible = cards.slice(0, MAX_DAY_ACTIVITIES);
34585
34592
  const hidden = cards.length - visible.length;
34593
+ const awaitsRequest = loadDayActivitiesOnDemand && !suggestions && canSearch && !nodesResolving && hidden === 0;
34586
34594
  return (React__default["default"].createElement(React__default["default"].Fragment, { key: `activities-${day.order}` },
34587
34595
  React__default["default"].createElement("div", { className: "search__results__label search__results__label--sub" },
34588
34596
  React__default["default"].createElement("div", { className: "search__results__label__text" },
@@ -34592,11 +34600,13 @@ const TrajectResults = ({ isLoading }) => {
34592
34600
  (nodesResolving || isSearching) && !cards.length && React__default["default"].createElement(Spinner, { label: translations.SRP.LOADING_ACTIVITIES }),
34593
34601
  !!cards.length && React__default["default"].createElement("div", { className: "search__results__cards search__results__cards--scroll" }, visible.map(renderActivityCard)),
34594
34602
  !nodesResolving && !isSearching && !cards.length && (!!items.length || !!suggestions) && (React__default["default"].createElement("div", { className: "no-results" }, translations.SRP.NO_RESULTS)),
34595
- React__default["default"].createElement("div", { className: "search__results__cards__actions" }, hidden > 0 && !hideShowMoreResults && (React__default["default"].createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleShowMoreActivities(day.order) },
34596
- translations.SRP.SHOW_MORE,
34597
- " (",
34598
- hidden,
34599
- ")")))));
34603
+ React__default["default"].createElement("div", { className: "search__results__cards__actions" },
34604
+ awaitsRequest && (React__default["default"].createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => loadDay(day) }, translations.SRP.SHOW_ACTIVITIES)),
34605
+ hidden > 0 && !hideShowMoreResults && (React__default["default"].createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleShowMoreActivities(day.order) },
34606
+ translations.SRP.SHOW_MORE,
34607
+ " (",
34608
+ hidden,
34609
+ ")")))));
34600
34610
  };
34601
34611
  /**
34602
34612
  * An activity the traject books is swapped for another, the way a hotel is; one the traveller
@@ -38961,20 +38971,20 @@ function ItineraryMapView({ destinations: propDestinations, adults = 2, dateFrom
38961
38971
  const isStartEnd = dest.isStart || dest.isEnd;
38962
38972
  let iconHtml;
38963
38973
  if (isStartEnd) {
38964
- iconHtml = `
38965
- <div class="map-view__marker map-view__marker--plane">
38966
- <svg viewBox="0 0 576 512" fill="currentColor" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
38967
- <path d="M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10.1-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.3-15.8-20.6l49-196.3L112 288 68.8 377.6c-3 6.1-9.2 10.4-16 10.4l-2.8 0c-9.2 0-16-8.8-13.3-17.6L80 256L36.7 141.6C34 132.8 40.8 124 50 124l2.8 0c6.8 0 13 4.3 16 10.4L112 224l102.9 0-49-196.3C163.5 17.3 171.2 7 181.8 7l56.2 0c11.5 0 22.1 6 27.8 16.1L365.7 192l116.6 0z"/>
38968
- </svg>
38974
+ iconHtml = `
38975
+ <div class="map-view__marker map-view__marker--plane">
38976
+ <svg viewBox="0 0 576 512" fill="currentColor" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
38977
+ <path d="M482.3 192c34.2 0 93.7 29 93.7 64c0 36-59.5 64-93.7 64l-116.6 0L265.2 495.9c-5.7 10.1-16.3 16.1-27.8 16.1l-56.2 0c-10.6 0-18.3-10.3-15.8-20.6l49-196.3L112 288 68.8 377.6c-3 6.1-9.2 10.4-16 10.4l-2.8 0c-9.2 0-16-8.8-13.3-17.6L80 256L36.7 141.6C34 132.8 40.8 124 50 124l2.8 0c6.8 0 13 4.3 16 10.4L112 224l102.9 0-49-196.3C163.5 17.3 171.2 7 181.8 7l56.2 0c11.5 0 22.1 6 27.8 16.1L365.7 192l116.6 0z"/>
38978
+ </svg>
38969
38979
  </div>`;
38970
38980
  }
38971
38981
  else {
38972
38982
  stopIndex++;
38973
38983
  const imgStyle = dest.imageUrl ? `style="background-image:url('${dest.imageUrl}')"` : '';
38974
- iconHtml = `
38975
- <div class="map-view__marker map-view__marker--stop" ${imgStyle}>
38976
- ${!dest.imageUrl ? `<span class="map-view__marker-number">${stopIndex}</span>` : ''}
38977
- <span class="map-view__marker-badge">${stopIndex}</span>
38984
+ iconHtml = `
38985
+ <div class="map-view__marker map-view__marker--stop" ${imgStyle}>
38986
+ ${!dest.imageUrl ? `<span class="map-view__marker-number">${stopIndex}</span>` : ''}
38987
+ <span class="map-view__marker-badge">${stopIndex}</span>
38978
38988
  </div>`;
38979
38989
  }
38980
38990
  const icon = L.divIcon({