@qite/tide-components 1.0.14-preview.1 → 1.0.14-preview.3

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.
@@ -480,6 +480,39 @@ var FORM$f = {
480
480
  YES: "نعم",
481
481
  NO: "لا"
482
482
  };
483
+ var AGENT_ENTRIES$f = {
484
+ TITLE: "الحجوزات",
485
+ MY_BOOKINGS: "حجوزاتي",
486
+ NUMBER: "الرقم",
487
+ DEPARTURE_DATE: "تاريخ المغادرة",
488
+ STATUS: "الحالة",
489
+ CUSTOM_STATUS: "حالة مخصصة",
490
+ RETURN_DATE: "تاريخ العودة",
491
+ PROFIT: "الربح",
492
+ NETTO_SELLING_PRICE: "صافي سعر البيع",
493
+ YOUR_SURCHARGE: "رسومك الإضافية",
494
+ CREATED: "تاريخ الإنشاء",
495
+ CONTACT: "جهة الاتصال",
496
+ MAIN_BOOKER: "الحاجز الرئيسي",
497
+ PRODUCT: "المنتج",
498
+ TRAVELERS: "المسافرون",
499
+ ACTIONS: "الإجراءات",
500
+ DETAILS: "التفاصيل",
501
+ HIDE_DETAILS: "إخفاء التفاصيل",
502
+ PRINTS: "المطبوعات",
503
+ ALL: "الكل",
504
+ X_ITEMS: "{0} عناصر",
505
+ PAGE_SIZE: "عناصر لكل صفحة",
506
+ PREVIOUS: "السابق",
507
+ NEXT: "التالي",
508
+ PAGE_X_OF_Y: "الصفحة {0} من {1}",
509
+ LOADING: "جارٍ التحميل...",
510
+ NO_ITEMS: "لم يتم العثور على حجوزات.",
511
+ ERROR: "حدث خطأ أثناء تحميل حجوزاتك.",
512
+ PRINT_ERROR: "فشلت الطباعة، يرجى المحاولة مرة أخرى.",
513
+ NOT_LOGGED_IN: "سجّل الدخول كوكيل لعرض حجوزاتك.",
514
+ SESSION_EXPIRED: "انتهت صلاحية جلستك، يرجى تسجيل الدخول مرة أخرى."
515
+ };
483
516
  var arJson = {
484
517
  STEPS: STEPS$f,
485
518
  INPUT: INPUT$f,
@@ -500,7 +533,8 @@ var arJson = {
500
533
  QSM: QSM$g,
501
534
  SRP: SRP$f,
502
535
  ITINERARY: ITINERARY$f,
503
- FORM: FORM$f
536
+ FORM: FORM$f,
537
+ AGENT_ENTRIES: AGENT_ENTRIES$f
504
538
  };
505
539
 
506
540
  var STEPS$e = {
@@ -953,6 +987,39 @@ var FORM$e = {
953
987
  YES: "Ja",
954
988
  NO: "Nej"
955
989
  };
990
+ var AGENT_ENTRIES$e = {
991
+ TITLE: "Bookinger",
992
+ MY_BOOKINGS: "Mine bookinger",
993
+ NUMBER: "Nummer",
994
+ DEPARTURE_DATE: "Afrejsedato",
995
+ STATUS: "Status",
996
+ CUSTOM_STATUS: "Tilpasset status",
997
+ RETURN_DATE: "Hjemrejsedato",
998
+ PROFIT: "Fortjeneste",
999
+ NETTO_SELLING_PRICE: "Netto salgspris",
1000
+ YOUR_SURCHARGE: "Dit tillæg",
1001
+ CREATED: "Oprettet",
1002
+ CONTACT: "Kontakt",
1003
+ MAIN_BOOKER: "Hovedbooker",
1004
+ PRODUCT: "Produkt",
1005
+ TRAVELERS: "Rejsende",
1006
+ ACTIONS: "Handlinger",
1007
+ DETAILS: "Detaljer",
1008
+ HIDE_DETAILS: "Skjul detaljer",
1009
+ PRINTS: "Udskrifter",
1010
+ ALL: "Alle",
1011
+ X_ITEMS: "{0} elementer",
1012
+ PAGE_SIZE: "Elementer pr. side",
1013
+ PREVIOUS: "Forrige",
1014
+ NEXT: "Næste",
1015
+ PAGE_X_OF_Y: "Side {0} af {1}",
1016
+ LOADING: "Indlæser...",
1017
+ NO_ITEMS: "Ingen bookinger fundet.",
1018
+ ERROR: "Der opstod en fejl under indlæsning af dine bookinger.",
1019
+ PRINT_ERROR: "Udskrivning mislykkedes, prøv igen.",
1020
+ NOT_LOGGED_IN: "Log ind som agent for at se dine bookinger.",
1021
+ SESSION_EXPIRED: "Din session er udløbet, log ind igen."
1022
+ };
956
1023
  var daJson = {
957
1024
  STEPS: STEPS$e,
958
1025
  INPUT: INPUT$e,
@@ -973,7 +1040,8 @@ var daJson = {
973
1040
  QSM: QSM$f,
974
1041
  SRP: SRP$e,
975
1042
  ITINERARY: ITINERARY$e,
976
- FORM: FORM$e
1043
+ FORM: FORM$e,
1044
+ AGENT_ENTRIES: AGENT_ENTRIES$e
977
1045
  };
978
1046
 
979
1047
  var STEPS$d = {
@@ -1426,6 +1494,39 @@ var FORM$d = {
1426
1494
  YES: "Ja",
1427
1495
  NO: "Nein"
1428
1496
  };
1497
+ var AGENT_ENTRIES$d = {
1498
+ TITLE: "Buchungen",
1499
+ MY_BOOKINGS: "Meine Buchungen",
1500
+ NUMBER: "Nummer",
1501
+ DEPARTURE_DATE: "Abreisedatum",
1502
+ STATUS: "Status",
1503
+ CUSTOM_STATUS: "Benutzerdefinierter Status",
1504
+ RETURN_DATE: "Rückreisedatum",
1505
+ PROFIT: "Gewinn",
1506
+ NETTO_SELLING_PRICE: "Netto-Verkaufspreis",
1507
+ YOUR_SURCHARGE: "Ihr Aufschlag",
1508
+ CREATED: "Erstellt",
1509
+ CONTACT: "Kontakt",
1510
+ MAIN_BOOKER: "Hauptbucher",
1511
+ PRODUCT: "Produkt",
1512
+ TRAVELERS: "Reisende",
1513
+ ACTIONS: "Aktionen",
1514
+ DETAILS: "Details",
1515
+ HIDE_DETAILS: "Details ausblenden",
1516
+ PRINTS: "Drucke",
1517
+ ALL: "Alle",
1518
+ X_ITEMS: "{0} Einträge",
1519
+ PAGE_SIZE: "Einträge pro Seite",
1520
+ PREVIOUS: "Zurück",
1521
+ NEXT: "Weiter",
1522
+ PAGE_X_OF_Y: "Seite {0} von {1}",
1523
+ LOADING: "Wird geladen...",
1524
+ NO_ITEMS: "Keine Buchungen gefunden.",
1525
+ ERROR: "Beim Laden Ihrer Buchungen ist ein Fehler aufgetreten.",
1526
+ PRINT_ERROR: "Drucken fehlgeschlagen, bitte versuchen Sie es erneut.",
1527
+ NOT_LOGGED_IN: "Melden Sie sich als Agent an, um Ihre Buchungen zu sehen.",
1528
+ SESSION_EXPIRED: "Ihre Sitzung ist abgelaufen, bitte melden Sie sich erneut an."
1529
+ };
1429
1530
  var deJson = {
1430
1531
  STEPS: STEPS$d,
1431
1532
  INPUT: INPUT$d,
@@ -1446,7 +1547,8 @@ var deJson = {
1446
1547
  QSM: QSM$e,
1447
1548
  SRP: SRP$d,
1448
1549
  ITINERARY: ITINERARY$d,
1449
- FORM: FORM$d
1550
+ FORM: FORM$d,
1551
+ AGENT_ENTRIES: AGENT_ENTRIES$d
1450
1552
  };
1451
1553
 
1452
1554
  var STEPS$c = {
@@ -1903,6 +2005,39 @@ var FORM$c = {
1903
2005
  YES: "Yes",
1904
2006
  NO: "No"
1905
2007
  };
2008
+ var AGENT_ENTRIES$c = {
2009
+ TITLE: "Bookings",
2010
+ MY_BOOKINGS: "My bookings",
2011
+ NUMBER: "Number",
2012
+ DEPARTURE_DATE: "Departure date",
2013
+ STATUS: "Status",
2014
+ CUSTOM_STATUS: "Custom status",
2015
+ RETURN_DATE: "Return date",
2016
+ PROFIT: "Profit",
2017
+ NETTO_SELLING_PRICE: "Netto selling price",
2018
+ YOUR_SURCHARGE: "Your surcharge",
2019
+ CREATED: "Created",
2020
+ CONTACT: "Contact",
2021
+ MAIN_BOOKER: "Main booker",
2022
+ PRODUCT: "Product",
2023
+ TRAVELERS: "Travellers",
2024
+ ACTIONS: "Actions",
2025
+ DETAILS: "Details",
2026
+ HIDE_DETAILS: "Hide details",
2027
+ PRINTS: "Prints",
2028
+ ALL: "All",
2029
+ X_ITEMS: "{0} items",
2030
+ PAGE_SIZE: "Items per page",
2031
+ PREVIOUS: "Previous",
2032
+ NEXT: "Next",
2033
+ PAGE_X_OF_Y: "Page {0} of {1}",
2034
+ LOADING: "Loading...",
2035
+ NO_ITEMS: "No bookings found.",
2036
+ ERROR: "Something went wrong while loading your bookings.",
2037
+ PRINT_ERROR: "Printing failed, please try again.",
2038
+ NOT_LOGGED_IN: "Log in as an agent to see your bookings.",
2039
+ SESSION_EXPIRED: "Your session has expired, please log in again."
2040
+ };
1906
2041
  var enJson = {
1907
2042
  STEPS: STEPS$c,
1908
2043
  INPUT: INPUT$c,
@@ -1923,7 +2058,8 @@ var enJson = {
1923
2058
  QSM: QSM$d,
1924
2059
  SRP: SRP$c,
1925
2060
  ITINERARY: ITINERARY$c,
1926
- FORM: FORM$c
2061
+ FORM: FORM$c,
2062
+ AGENT_ENTRIES: AGENT_ENTRIES$c
1927
2063
  };
1928
2064
 
1929
2065
  var STEPS$b = {
@@ -2376,6 +2512,39 @@ var FORM$b = {
2376
2512
  YES: "Sí",
2377
2513
  NO: "No"
2378
2514
  };
2515
+ var AGENT_ENTRIES$b = {
2516
+ TITLE: "Reservas",
2517
+ MY_BOOKINGS: "Mis reservas",
2518
+ NUMBER: "Número",
2519
+ DEPARTURE_DATE: "Fecha de salida",
2520
+ STATUS: "Estado",
2521
+ CUSTOM_STATUS: "Estado personalizado",
2522
+ RETURN_DATE: "Fecha de regreso",
2523
+ PROFIT: "Beneficio",
2524
+ NETTO_SELLING_PRICE: "Precio de venta neto",
2525
+ YOUR_SURCHARGE: "Su recargo",
2526
+ CREATED: "Creado",
2527
+ CONTACT: "Contacto",
2528
+ MAIN_BOOKER: "Titular de la reserva",
2529
+ PRODUCT: "Producto",
2530
+ TRAVELERS: "Viajeros",
2531
+ ACTIONS: "Acciones",
2532
+ DETAILS: "Detalles",
2533
+ HIDE_DETAILS: "Ocultar detalles",
2534
+ PRINTS: "Impresiones",
2535
+ ALL: "Todos",
2536
+ X_ITEMS: "{0} elementos",
2537
+ PAGE_SIZE: "Elementos por página",
2538
+ PREVIOUS: "Anterior",
2539
+ NEXT: "Siguiente",
2540
+ PAGE_X_OF_Y: "Página {0} de {1}",
2541
+ LOADING: "Cargando...",
2542
+ NO_ITEMS: "No se encontraron reservas.",
2543
+ ERROR: "Se produjo un error al cargar sus reservas.",
2544
+ PRINT_ERROR: "La impresión ha fallado, inténtelo de nuevo.",
2545
+ NOT_LOGGED_IN: "Inicie sesión como agente para ver sus reservas.",
2546
+ SESSION_EXPIRED: "Su sesión ha caducado, inicie sesión de nuevo."
2547
+ };
2379
2548
  var esJson = {
2380
2549
  STEPS: STEPS$b,
2381
2550
  INPUT: INPUT$b,
@@ -2396,7 +2565,8 @@ var esJson = {
2396
2565
  QSM: QSM$c,
2397
2566
  SRP: SRP$b,
2398
2567
  ITINERARY: ITINERARY$b,
2399
- FORM: FORM$b
2568
+ FORM: FORM$b,
2569
+ AGENT_ENTRIES: AGENT_ENTRIES$b
2400
2570
  };
2401
2571
 
2402
2572
  var STEPS$a = {
@@ -2853,6 +3023,39 @@ var FORM$a = {
2853
3023
  YES: "Oui",
2854
3024
  NO: "Non"
2855
3025
  };
3026
+ var AGENT_ENTRIES$a = {
3027
+ TITLE: "Réservations",
3028
+ MY_BOOKINGS: "Mes réservations",
3029
+ NUMBER: "Numéro",
3030
+ DEPARTURE_DATE: "Date de départ",
3031
+ STATUS: "Statut",
3032
+ CUSTOM_STATUS: "Statut personnalisé",
3033
+ RETURN_DATE: "Date de retour",
3034
+ PROFIT: "Bénéfice",
3035
+ NETTO_SELLING_PRICE: "Prix de vente net",
3036
+ YOUR_SURCHARGE: "Votre supplément",
3037
+ CREATED: "Créé le",
3038
+ CONTACT: "Contact",
3039
+ MAIN_BOOKER: "Réservant principal",
3040
+ PRODUCT: "Produit",
3041
+ TRAVELERS: "Voyageurs",
3042
+ ACTIONS: "Actions",
3043
+ DETAILS: "Détails",
3044
+ HIDE_DETAILS: "Masquer les détails",
3045
+ PRINTS: "Impressions",
3046
+ ALL: "Tous",
3047
+ X_ITEMS: "{0} éléments",
3048
+ PAGE_SIZE: "Éléments par page",
3049
+ PREVIOUS: "Précédent",
3050
+ NEXT: "Suivant",
3051
+ PAGE_X_OF_Y: "Page {0} sur {1}",
3052
+ LOADING: "Chargement...",
3053
+ NO_ITEMS: "Aucune réservation trouvée.",
3054
+ ERROR: "Une erreur est survenue lors du chargement de vos réservations.",
3055
+ PRINT_ERROR: "L'impression a échoué, veuillez réessayer.",
3056
+ NOT_LOGGED_IN: "Connectez-vous en tant qu'agent pour voir vos réservations.",
3057
+ SESSION_EXPIRED: "Votre session a expiré, veuillez vous reconnecter."
3058
+ };
2856
3059
  var frBeJson = {
2857
3060
  STEPS: STEPS$a,
2858
3061
  INPUT: INPUT$a,
@@ -2873,7 +3076,8 @@ var frBeJson = {
2873
3076
  QSM: QSM$b,
2874
3077
  SRP: SRP$a,
2875
3078
  ITINERARY: ITINERARY$a,
2876
- FORM: FORM$a
3079
+ FORM: FORM$a,
3080
+ AGENT_ENTRIES: AGENT_ENTRIES$a
2877
3081
  };
2878
3082
 
2879
3083
  var STEPS$9 = {
@@ -3326,6 +3530,39 @@ var FORM$9 = {
3326
3530
  YES: "Oui",
3327
3531
  NO: "Non"
3328
3532
  };
3533
+ var AGENT_ENTRIES$9 = {
3534
+ TITLE: "Réservations",
3535
+ MY_BOOKINGS: "Mes réservations",
3536
+ NUMBER: "Numéro",
3537
+ DEPARTURE_DATE: "Date de départ",
3538
+ STATUS: "Statut",
3539
+ CUSTOM_STATUS: "Statut personnalisé",
3540
+ RETURN_DATE: "Date de retour",
3541
+ PROFIT: "Bénéfice",
3542
+ NETTO_SELLING_PRICE: "Prix de vente net",
3543
+ YOUR_SURCHARGE: "Votre supplément",
3544
+ CREATED: "Créé le",
3545
+ CONTACT: "Contact",
3546
+ MAIN_BOOKER: "Réservant principal",
3547
+ PRODUCT: "Produit",
3548
+ TRAVELERS: "Voyageurs",
3549
+ ACTIONS: "Actions",
3550
+ DETAILS: "Détails",
3551
+ HIDE_DETAILS: "Masquer les détails",
3552
+ PRINTS: "Impressions",
3553
+ ALL: "Tous",
3554
+ X_ITEMS: "{0} éléments",
3555
+ PAGE_SIZE: "Éléments par page",
3556
+ PREVIOUS: "Précédent",
3557
+ NEXT: "Suivant",
3558
+ PAGE_X_OF_Y: "Page {0} sur {1}",
3559
+ LOADING: "Chargement...",
3560
+ NO_ITEMS: "Aucune réservation trouvée.",
3561
+ ERROR: "Une erreur est survenue lors du chargement de vos réservations.",
3562
+ PRINT_ERROR: "L'impression a échoué, veuillez réessayer.",
3563
+ NOT_LOGGED_IN: "Connectez-vous en tant qu'agent pour voir vos réservations.",
3564
+ SESSION_EXPIRED: "Votre session a expiré, veuillez vous reconnecter."
3565
+ };
3329
3566
  var frFrJson = {
3330
3567
  STEPS: STEPS$9,
3331
3568
  INPUT: INPUT$9,
@@ -3346,7 +3583,8 @@ var frFrJson = {
3346
3583
  QSM: QSM$a,
3347
3584
  SRP: SRP$9,
3348
3585
  ITINERARY: ITINERARY$9,
3349
- FORM: FORM$9
3586
+ FORM: FORM$9,
3587
+ AGENT_ENTRIES: AGENT_ENTRIES$9
3350
3588
  };
3351
3589
 
3352
3590
  var STEPS$8 = {
@@ -3799,6 +4037,39 @@ var FORM$8 = {
3799
4037
  YES: "Já",
3800
4038
  NO: "Nei"
3801
4039
  };
4040
+ var AGENT_ENTRIES$8 = {
4041
+ TITLE: "Bókanir",
4042
+ MY_BOOKINGS: "Mínar bókanir",
4043
+ NUMBER: "Númer",
4044
+ DEPARTURE_DATE: "Brottfarardagur",
4045
+ STATUS: "Staða",
4046
+ CUSTOM_STATUS: "Sérsniðin staða",
4047
+ RETURN_DATE: "Heimkomudagur",
4048
+ PROFIT: "Hagnaður",
4049
+ NETTO_SELLING_PRICE: "Nettó söluverð",
4050
+ YOUR_SURCHARGE: "Þitt álag",
4051
+ CREATED: "Stofnað",
4052
+ CONTACT: "Tengiliður",
4053
+ MAIN_BOOKER: "Aðalbókandi",
4054
+ PRODUCT: "Vara",
4055
+ TRAVELERS: "Ferðalangar",
4056
+ ACTIONS: "Aðgerðir",
4057
+ DETAILS: "Nánar",
4058
+ HIDE_DETAILS: "Fela nánar",
4059
+ PRINTS: "Útprentanir",
4060
+ ALL: "Allt",
4061
+ X_ITEMS: "{0} atriði",
4062
+ PAGE_SIZE: "Atriði á síðu",
4063
+ PREVIOUS: "Fyrri",
4064
+ NEXT: "Næsta",
4065
+ PAGE_X_OF_Y: "Síða {0} af {1}",
4066
+ LOADING: "Hleður...",
4067
+ NO_ITEMS: "Engar bókanir fundust.",
4068
+ ERROR: "Eitthvað fór úrskeiðis við að hlaða bókunum þínum.",
4069
+ PRINT_ERROR: "Prentun mistókst, reyndu aftur.",
4070
+ NOT_LOGGED_IN: "Skráðu þig inn sem umboðsaðili til að sjá bókanir þínar.",
4071
+ SESSION_EXPIRED: "Lotan þín er útrunnin, skráðu þig inn aftur."
4072
+ };
3802
4073
  var isJson = {
3803
4074
  STEPS: STEPS$8,
3804
4075
  INPUT: INPUT$8,
@@ -3819,7 +4090,8 @@ var isJson = {
3819
4090
  QSM: QSM$9,
3820
4091
  SRP: SRP$8,
3821
4092
  ITINERARY: ITINERARY$8,
3822
- FORM: FORM$8
4093
+ FORM: FORM$8,
4094
+ AGENT_ENTRIES: AGENT_ENTRIES$8
3823
4095
  };
3824
4096
 
3825
4097
  var STEPS$7 = {
@@ -4272,6 +4544,39 @@ var FORM$7 = {
4272
4544
  YES: "Sì",
4273
4545
  NO: "No"
4274
4546
  };
4547
+ var AGENT_ENTRIES$7 = {
4548
+ TITLE: "Prenotazioni",
4549
+ MY_BOOKINGS: "Le mie prenotazioni",
4550
+ NUMBER: "Numero",
4551
+ DEPARTURE_DATE: "Data di partenza",
4552
+ STATUS: "Stato",
4553
+ CUSTOM_STATUS: "Stato personalizzato",
4554
+ RETURN_DATE: "Data di ritorno",
4555
+ PROFIT: "Profitto",
4556
+ NETTO_SELLING_PRICE: "Prezzo di vendita netto",
4557
+ YOUR_SURCHARGE: "Il tuo supplemento",
4558
+ CREATED: "Creato",
4559
+ CONTACT: "Contatto",
4560
+ MAIN_BOOKER: "Prenotante principale",
4561
+ PRODUCT: "Prodotto",
4562
+ TRAVELERS: "Viaggiatori",
4563
+ ACTIONS: "Azioni",
4564
+ DETAILS: "Dettagli",
4565
+ HIDE_DETAILS: "Nascondi dettagli",
4566
+ PRINTS: "Stampe",
4567
+ ALL: "Tutti",
4568
+ X_ITEMS: "{0} elementi",
4569
+ PAGE_SIZE: "Elementi per pagina",
4570
+ PREVIOUS: "Precedente",
4571
+ NEXT: "Successivo",
4572
+ PAGE_X_OF_Y: "Pagina {0} di {1}",
4573
+ LOADING: "Caricamento...",
4574
+ NO_ITEMS: "Nessuna prenotazione trovata.",
4575
+ ERROR: "Si è verificato un errore durante il caricamento delle prenotazioni.",
4576
+ PRINT_ERROR: "Stampa non riuscita, riprova.",
4577
+ NOT_LOGGED_IN: "Accedi come agente per vedere le tue prenotazioni.",
4578
+ SESSION_EXPIRED: "La sessione è scaduta, accedi di nuovo."
4579
+ };
4275
4580
  var itJson = {
4276
4581
  STEPS: STEPS$7,
4277
4582
  INPUT: INPUT$7,
@@ -4292,7 +4597,8 @@ var itJson = {
4292
4597
  QSM: QSM$8,
4293
4598
  SRP: SRP$7,
4294
4599
  ITINERARY: ITINERARY$7,
4295
- FORM: FORM$7
4600
+ FORM: FORM$7,
4601
+ AGENT_ENTRIES: AGENT_ENTRIES$7
4296
4602
  };
4297
4603
 
4298
4604
  var STEPS$6 = {
@@ -4749,6 +5055,39 @@ var FORM$6 = {
4749
5055
  YES: "Ja",
4750
5056
  NO: "Nee"
4751
5057
  };
5058
+ var AGENT_ENTRIES$6 = {
5059
+ TITLE: "Boekingen",
5060
+ MY_BOOKINGS: "Mijn boekingen",
5061
+ NUMBER: "Nummer",
5062
+ DEPARTURE_DATE: "Vertrekdatum",
5063
+ STATUS: "Status",
5064
+ CUSTOM_STATUS: "Aangepaste status",
5065
+ RETURN_DATE: "Terugkeerdatum",
5066
+ PROFIT: "Winst",
5067
+ NETTO_SELLING_PRICE: "Netto verkoopprijs",
5068
+ YOUR_SURCHARGE: "Jouw toeslag",
5069
+ CREATED: "Aangemaakt",
5070
+ CONTACT: "Contact",
5071
+ MAIN_BOOKER: "Hoofdboeker",
5072
+ PRODUCT: "Product",
5073
+ TRAVELERS: "Reizigers",
5074
+ ACTIONS: "Acties",
5075
+ DETAILS: "Details",
5076
+ HIDE_DETAILS: "Details verbergen",
5077
+ PRINTS: "Afdrukken",
5078
+ ALL: "Alle",
5079
+ X_ITEMS: "{0} items",
5080
+ PAGE_SIZE: "Items per pagina",
5081
+ PREVIOUS: "Vorige",
5082
+ NEXT: "Volgende",
5083
+ PAGE_X_OF_Y: "Pagina {0} van {1}",
5084
+ LOADING: "Laden...",
5085
+ NO_ITEMS: "Geen boekingen gevonden.",
5086
+ ERROR: "Er ging iets mis bij het laden van je boekingen.",
5087
+ PRINT_ERROR: "Afdrukken mislukt, probeer het opnieuw.",
5088
+ NOT_LOGGED_IN: "Log in als agent om je boekingen te zien.",
5089
+ SESSION_EXPIRED: "Je sessie is verlopen, log opnieuw in."
5090
+ };
4752
5091
  var nlBeJson = {
4753
5092
  STEPS: STEPS$6,
4754
5093
  INPUT: INPUT$6,
@@ -4769,7 +5108,8 @@ var nlBeJson = {
4769
5108
  QSM: QSM$7,
4770
5109
  SRP: SRP$6,
4771
5110
  ITINERARY: ITINERARY$6,
4772
- FORM: FORM$6
5111
+ FORM: FORM$6,
5112
+ AGENT_ENTRIES: AGENT_ENTRIES$6
4773
5113
  };
4774
5114
 
4775
5115
  var STEPS$5 = {
@@ -5222,6 +5562,39 @@ var FORM$5 = {
5222
5562
  YES: "Ja",
5223
5563
  NO: "Nee"
5224
5564
  };
5565
+ var AGENT_ENTRIES$5 = {
5566
+ TITLE: "Boekingen",
5567
+ MY_BOOKINGS: "Mijn boekingen",
5568
+ NUMBER: "Nummer",
5569
+ DEPARTURE_DATE: "Vertrekdatum",
5570
+ STATUS: "Status",
5571
+ CUSTOM_STATUS: "Aangepaste status",
5572
+ RETURN_DATE: "Terugkeerdatum",
5573
+ PROFIT: "Winst",
5574
+ NETTO_SELLING_PRICE: "Netto verkoopprijs",
5575
+ YOUR_SURCHARGE: "Jouw toeslag",
5576
+ CREATED: "Aangemaakt",
5577
+ CONTACT: "Contact",
5578
+ MAIN_BOOKER: "Hoofdboeker",
5579
+ PRODUCT: "Product",
5580
+ TRAVELERS: "Reizigers",
5581
+ ACTIONS: "Acties",
5582
+ DETAILS: "Details",
5583
+ HIDE_DETAILS: "Details verbergen",
5584
+ PRINTS: "Afdrukken",
5585
+ ALL: "Alle",
5586
+ X_ITEMS: "{0} items",
5587
+ PAGE_SIZE: "Items per pagina",
5588
+ PREVIOUS: "Vorige",
5589
+ NEXT: "Volgende",
5590
+ PAGE_X_OF_Y: "Pagina {0} van {1}",
5591
+ LOADING: "Laden...",
5592
+ NO_ITEMS: "Geen boekingen gevonden.",
5593
+ ERROR: "Er ging iets mis bij het laden van je boekingen.",
5594
+ PRINT_ERROR: "Afdrukken mislukt, probeer het opnieuw.",
5595
+ NOT_LOGGED_IN: "Log in als agent om je boekingen te zien.",
5596
+ SESSION_EXPIRED: "Je sessie is verlopen, log opnieuw in."
5597
+ };
5225
5598
  var nlNlJson = {
5226
5599
  STEPS: STEPS$5,
5227
5600
  INPUT: INPUT$5,
@@ -5242,7 +5615,8 @@ var nlNlJson = {
5242
5615
  QSM: QSM$6,
5243
5616
  SRP: SRP$5,
5244
5617
  ITINERARY: ITINERARY$5,
5245
- FORM: FORM$5
5618
+ FORM: FORM$5,
5619
+ AGENT_ENTRIES: AGENT_ENTRIES$5
5246
5620
  };
5247
5621
 
5248
5622
  var STEPS$4 = {
@@ -5695,6 +6069,39 @@ var FORM$4 = {
5695
6069
  YES: "Ja",
5696
6070
  NO: "Nei"
5697
6071
  };
6072
+ var AGENT_ENTRIES$4 = {
6073
+ TITLE: "Bestillinger",
6074
+ MY_BOOKINGS: "Mine bestillinger",
6075
+ NUMBER: "Nummer",
6076
+ DEPARTURE_DATE: "Avreisedato",
6077
+ STATUS: "Status",
6078
+ CUSTOM_STATUS: "Egendefinert status",
6079
+ RETURN_DATE: "Returdato",
6080
+ PROFIT: "Fortjeneste",
6081
+ NETTO_SELLING_PRICE: "Netto salgspris",
6082
+ YOUR_SURCHARGE: "Ditt tillegg",
6083
+ CREATED: "Opprettet",
6084
+ CONTACT: "Kontakt",
6085
+ MAIN_BOOKER: "Hovedbestiller",
6086
+ PRODUCT: "Produkt",
6087
+ TRAVELERS: "Reisende",
6088
+ ACTIONS: "Handlinger",
6089
+ DETAILS: "Detaljer",
6090
+ HIDE_DETAILS: "Skjul detaljer",
6091
+ PRINTS: "Utskrifter",
6092
+ ALL: "Alle",
6093
+ X_ITEMS: "{0} elementer",
6094
+ PAGE_SIZE: "Elementer per side",
6095
+ PREVIOUS: "Forrige",
6096
+ NEXT: "Neste",
6097
+ PAGE_X_OF_Y: "Side {0} av {1}",
6098
+ LOADING: "Laster...",
6099
+ NO_ITEMS: "Ingen bestillinger funnet.",
6100
+ ERROR: "Noe gikk galt under lasting av bestillingene dine.",
6101
+ PRINT_ERROR: "Utskrift mislyktes, prøv igjen.",
6102
+ NOT_LOGGED_IN: "Logg inn som agent for å se bestillingene dine.",
6103
+ SESSION_EXPIRED: "Økten din er utløpt, logg inn på nytt."
6104
+ };
5698
6105
  var noJson = {
5699
6106
  STEPS: STEPS$4,
5700
6107
  INPUT: INPUT$4,
@@ -5715,7 +6122,8 @@ var noJson = {
5715
6122
  QSM: QSM$5,
5716
6123
  SRP: SRP$4,
5717
6124
  ITINERARY: ITINERARY$4,
5718
- FORM: FORM$4
6125
+ FORM: FORM$4,
6126
+ AGENT_ENTRIES: AGENT_ENTRIES$4
5719
6127
  };
5720
6128
 
5721
6129
  var STEPS$3 = {
@@ -6168,6 +6576,39 @@ var FORM$3 = {
6168
6576
  YES: "Tak",
6169
6577
  NO: "Nie"
6170
6578
  };
6579
+ var AGENT_ENTRIES$3 = {
6580
+ TITLE: "Rezerwacje",
6581
+ MY_BOOKINGS: "Moje rezerwacje",
6582
+ NUMBER: "Numer",
6583
+ DEPARTURE_DATE: "Data wyjazdu",
6584
+ STATUS: "Status",
6585
+ CUSTOM_STATUS: "Status niestandardowy",
6586
+ RETURN_DATE: "Data powrotu",
6587
+ PROFIT: "Zysk",
6588
+ NETTO_SELLING_PRICE: "Cena sprzedaży netto",
6589
+ YOUR_SURCHARGE: "Twoja dopłata",
6590
+ CREATED: "Utworzono",
6591
+ CONTACT: "Kontakt",
6592
+ MAIN_BOOKER: "Główny rezerwujący",
6593
+ PRODUCT: "Produkt",
6594
+ TRAVELERS: "Podróżni",
6595
+ ACTIONS: "Akcje",
6596
+ DETAILS: "Szczegóły",
6597
+ HIDE_DETAILS: "Ukryj szczegóły",
6598
+ PRINTS: "Wydruki",
6599
+ ALL: "Wszystkie",
6600
+ X_ITEMS: "{0} pozycji",
6601
+ PAGE_SIZE: "Pozycji na stronę",
6602
+ PREVIOUS: "Poprzednia",
6603
+ NEXT: "Następna",
6604
+ PAGE_X_OF_Y: "Strona {0} z {1}",
6605
+ LOADING: "Ładowanie...",
6606
+ NO_ITEMS: "Nie znaleziono rezerwacji.",
6607
+ ERROR: "Wystąpił błąd podczas ładowania rezerwacji.",
6608
+ PRINT_ERROR: "Drukowanie nie powiodło się, spróbuj ponownie.",
6609
+ NOT_LOGGED_IN: "Zaloguj się jako agent, aby zobaczyć swoje rezerwacje.",
6610
+ SESSION_EXPIRED: "Twoja sesja wygasła, zaloguj się ponownie."
6611
+ };
6171
6612
  var plJson = {
6172
6613
  STEPS: STEPS$3,
6173
6614
  INPUT: INPUT$3,
@@ -6188,7 +6629,8 @@ var plJson = {
6188
6629
  QSM: QSM$4,
6189
6630
  SRP: SRP$3,
6190
6631
  ITINERARY: ITINERARY$3,
6191
- FORM: FORM$3
6632
+ FORM: FORM$3,
6633
+ AGENT_ENTRIES: AGENT_ENTRIES$3
6192
6634
  };
6193
6635
 
6194
6636
  var STEPS$2 = {
@@ -6641,6 +7083,39 @@ var FORM$2 = {
6641
7083
  YES: "Sim",
6642
7084
  NO: "Não"
6643
7085
  };
7086
+ var AGENT_ENTRIES$2 = {
7087
+ TITLE: "Reservas",
7088
+ MY_BOOKINGS: "As minhas reservas",
7089
+ NUMBER: "Número",
7090
+ DEPARTURE_DATE: "Data de partida",
7091
+ STATUS: "Estado",
7092
+ CUSTOM_STATUS: "Estado personalizado",
7093
+ RETURN_DATE: "Data de regresso",
7094
+ PROFIT: "Lucro",
7095
+ NETTO_SELLING_PRICE: "Preço de venda líquido",
7096
+ YOUR_SURCHARGE: "A sua sobretaxa",
7097
+ CREATED: "Criado",
7098
+ CONTACT: "Contacto",
7099
+ MAIN_BOOKER: "Titular da reserva",
7100
+ PRODUCT: "Produto",
7101
+ TRAVELERS: "Viajantes",
7102
+ ACTIONS: "Ações",
7103
+ DETAILS: "Detalhes",
7104
+ HIDE_DETAILS: "Ocultar detalhes",
7105
+ PRINTS: "Impressões",
7106
+ ALL: "Todos",
7107
+ X_ITEMS: "{0} itens",
7108
+ PAGE_SIZE: "Itens por página",
7109
+ PREVIOUS: "Anterior",
7110
+ NEXT: "Seguinte",
7111
+ PAGE_X_OF_Y: "Página {0} de {1}",
7112
+ LOADING: "A carregar...",
7113
+ NO_ITEMS: "Nenhuma reserva encontrada.",
7114
+ ERROR: "Ocorreu um erro ao carregar as suas reservas.",
7115
+ PRINT_ERROR: "A impressão falhou, tente novamente.",
7116
+ NOT_LOGGED_IN: "Inicie sessão como agente para ver as suas reservas.",
7117
+ SESSION_EXPIRED: "A sua sessão expirou, inicie sessão novamente."
7118
+ };
6644
7119
  var ptJson = {
6645
7120
  STEPS: STEPS$2,
6646
7121
  INPUT: INPUT$2,
@@ -6661,7 +7136,8 @@ var ptJson = {
6661
7136
  QSM: QSM$3,
6662
7137
  SRP: SRP$2,
6663
7138
  ITINERARY: ITINERARY$2,
6664
- FORM: FORM$2
7139
+ FORM: FORM$2,
7140
+ AGENT_ENTRIES: AGENT_ENTRIES$2
6665
7141
  };
6666
7142
 
6667
7143
  var STEPS$1 = {
@@ -7114,6 +7590,39 @@ var FORM$1 = {
7114
7590
  YES: "Ja",
7115
7591
  NO: "Nej"
7116
7592
  };
7593
+ var AGENT_ENTRIES$1 = {
7594
+ TITLE: "Bokningar",
7595
+ MY_BOOKINGS: "Mina bokningar",
7596
+ NUMBER: "Nummer",
7597
+ DEPARTURE_DATE: "Avresedatum",
7598
+ STATUS: "Status",
7599
+ CUSTOM_STATUS: "Anpassad status",
7600
+ RETURN_DATE: "Returdatum",
7601
+ PROFIT: "Vinst",
7602
+ NETTO_SELLING_PRICE: "Nettoförsäljningspris",
7603
+ YOUR_SURCHARGE: "Ditt tillägg",
7604
+ CREATED: "Skapad",
7605
+ CONTACT: "Kontakt",
7606
+ MAIN_BOOKER: "Huvudbokare",
7607
+ PRODUCT: "Produkt",
7608
+ TRAVELERS: "Resenärer",
7609
+ ACTIONS: "Åtgärder",
7610
+ DETAILS: "Detaljer",
7611
+ HIDE_DETAILS: "Dölj detaljer",
7612
+ PRINTS: "Utskrifter",
7613
+ ALL: "Alla",
7614
+ X_ITEMS: "{0} objekt",
7615
+ PAGE_SIZE: "Objekt per sida",
7616
+ PREVIOUS: "Föregående",
7617
+ NEXT: "Nästa",
7618
+ PAGE_X_OF_Y: "Sida {0} av {1}",
7619
+ LOADING: "Laddar...",
7620
+ NO_ITEMS: "Inga bokningar hittades.",
7621
+ ERROR: "Något gick fel när dina bokningar laddades.",
7622
+ PRINT_ERROR: "Utskriften misslyckades, försök igen.",
7623
+ NOT_LOGGED_IN: "Logga in som agent för att se dina bokningar.",
7624
+ SESSION_EXPIRED: "Din session har gått ut, logga in igen."
7625
+ };
7117
7626
  var svJson = {
7118
7627
  STEPS: STEPS$1,
7119
7628
  INPUT: INPUT$1,
@@ -7134,7 +7643,8 @@ var svJson = {
7134
7643
  QSM: QSM$2,
7135
7644
  SRP: SRP$1,
7136
7645
  ITINERARY: ITINERARY$1,
7137
- FORM: FORM$1
7646
+ FORM: FORM$1,
7647
+ AGENT_ENTRIES: AGENT_ENTRIES$1
7138
7648
  };
7139
7649
 
7140
7650
  var STEPS = {
@@ -7587,6 +8097,39 @@ var FORM = {
7587
8097
  YES: "はい",
7588
8098
  NO: "いいえ"
7589
8099
  };
8100
+ var AGENT_ENTRIES = {
8101
+ TITLE: "予約",
8102
+ MY_BOOKINGS: "マイ予約",
8103
+ NUMBER: "番号",
8104
+ DEPARTURE_DATE: "出発日",
8105
+ STATUS: "ステータス",
8106
+ CUSTOM_STATUS: "カスタムステータス",
8107
+ RETURN_DATE: "帰着日",
8108
+ PROFIT: "利益",
8109
+ NETTO_SELLING_PRICE: "正味販売価格",
8110
+ YOUR_SURCHARGE: "手数料",
8111
+ CREATED: "作成日",
8112
+ CONTACT: "連絡先",
8113
+ MAIN_BOOKER: "代表予約者",
8114
+ PRODUCT: "商品",
8115
+ TRAVELERS: "旅行者",
8116
+ ACTIONS: "操作",
8117
+ DETAILS: "詳細",
8118
+ HIDE_DETAILS: "詳細を隠す",
8119
+ PRINTS: "印刷",
8120
+ ALL: "すべて",
8121
+ X_ITEMS: "{0} 件",
8122
+ PAGE_SIZE: "1ページあたりの件数",
8123
+ PREVIOUS: "前へ",
8124
+ NEXT: "次へ",
8125
+ PAGE_X_OF_Y: "{0} / {1} ページ",
8126
+ LOADING: "読み込み中...",
8127
+ NO_ITEMS: "予約が見つかりません。",
8128
+ ERROR: "予約の読み込み中にエラーが発生しました。",
8129
+ PRINT_ERROR: "印刷に失敗しました。もう一度お試しください。",
8130
+ NOT_LOGGED_IN: "予約を表示するにはエージェントとしてログインしてください。",
8131
+ SESSION_EXPIRED: "セッションの有効期限が切れました。再度ログインしてください。"
8132
+ };
7590
8133
  var jaJson = {
7591
8134
  STEPS: STEPS,
7592
8135
  INPUT: INPUT,
@@ -7607,7 +8150,8 @@ var jaJson = {
7607
8150
  QSM: QSM$1,
7608
8151
  SRP: SRP,
7609
8152
  ITINERARY: ITINERARY,
7610
- FORM: FORM
8153
+ FORM: FORM,
8154
+ AGENT_ENTRIES: AGENT_ENTRIES
7611
8155
  };
7612
8156
 
7613
8157
  var DepartureRange;
@@ -26526,7 +27070,7 @@ const LanguageSwitcher = ({ value = 'EN', languages = DEFAULT_LANGUAGES, onChang
26526
27070
  React__default.createElement("span", { className: "nav__subnav__languages__option__label" }, l.label)))))));
26527
27071
  };
26528
27072
 
26529
- const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, languages, onLanguageChange, onSearch, member, onLogin, onLogout }) => {
27073
+ const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, languages, onLanguageChange, onSearch, member, onLogin, onLogout, onMyBookings }) => {
26530
27074
  const [menuOpen, setMenuOpen] = useState(false);
26531
27075
  const [query, setQuery] = useState('');
26532
27076
  const [activeMobileGroup, setActiveMobileGroup] = useState();
@@ -26620,6 +27164,12 @@ const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, lan
26620
27164
  onLogout();
26621
27165
  }
26622
27166
  };
27167
+ const handleMyBookings = (event) => {
27168
+ event.preventDefault();
27169
+ if (onMyBookings) {
27170
+ onMyBookings();
27171
+ }
27172
+ };
26623
27173
  const handleLogin = (event) => {
26624
27174
  event.preventDefault();
26625
27175
  if (onLogin) {
@@ -26633,7 +27183,9 @@ const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, lan
26633
27183
  member && (React__default.createElement("span", { className: "nav__subnav__member" },
26634
27184
  translations.LOGIN.WELCOME_X,
26635
27185
  member.name)),
26636
- member ? (React__default.createElement(React__default.Fragment, null, onLogout && (React__default.createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogout }, translations.LOGIN.LOGOUT)))) : (React__default.createElement(React__default.Fragment, null, onLogin && (React__default.createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogin }, translations.LOGIN.LOGIN)))),
27186
+ member ? (React__default.createElement(React__default.Fragment, null,
27187
+ onMyBookings && (React__default.createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleMyBookings }, translations.AGENT_ENTRIES.MY_BOOKINGS)),
27188
+ onLogout && (React__default.createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogout }, translations.LOGIN.LOGOUT)))) : (React__default.createElement(React__default.Fragment, null, onLogin && (React__default.createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogin }, translations.LOGIN.LOGIN)))),
26637
27189
  React__default.createElement(LanguageSwitcher, { value: language.code, languages: languages, onChange: (lang) => {
26638
27190
  console.log('Selected language:', lang);
26639
27191
  onLanguageChange(lang);
@@ -29717,7 +30269,9 @@ const TrajectItinerary = ({ trajectEntry, packagingEntry, translations }) => {
29717
30269
  .map((node) => {
29718
30270
  const guids = node.lineGuids?.length ? node.lineGuids : [node.lineGuid];
29719
30271
  const lines = guids.map((guid) => linesByGuid.get(guid)).filter((x) => !!x);
29720
- return { node, lines };
30272
+ const groupKey = lines.length ? getLineGroupKey(lines[0]) : '';
30273
+ const active = groupKey ? getGroupLines(packagingEntry.lines ?? [], groupKey)[0] : undefined;
30274
+ return { node, lines: active ?? lines };
29721
30275
  });
29722
30276
  const claimed = new Set(nodes.flatMap((item) => item.lines.map((line) => line.guid)));
29723
30277
  const extras = (packagingEntry.lines ?? []).filter((line) => !claimed.has(line.guid)).filter(isMeaningfulItineraryLine);
@@ -35667,6 +36221,25 @@ const BookPackagingEntry = ({ activeSearchSeed, isLoading, isConfirmationPage })
35667
36221
  React__default.createElement(WLSidebar, { activeSearchSeed: activeSearchSeed, packagingAccoResult: selectedPackagingAccoResult }))));
35668
36222
  };
35669
36223
 
36224
+ // A horizontally scrolling row of cards whose selected cards sit first. Choosing a card moves it to the front of the row
36225
+ const TrajectCardRow = ({ selectionKey, children }) => {
36226
+ const ref = useRef(null);
36227
+ const previousKey = useRef(selectionKey);
36228
+ useEffect(() => {
36229
+ if (previousKey.current === selectionKey)
36230
+ return;
36231
+ previousKey.current = selectionKey;
36232
+ const row = ref.current;
36233
+ if (!row || row.scrollLeft === 0)
36234
+ return;
36235
+ if (typeof row.scrollTo === 'function')
36236
+ row.scrollTo({ left: 0, behavior: 'smooth' });
36237
+ else
36238
+ row.scrollLeft = 0;
36239
+ }, [selectionKey]);
36240
+ return (React__default.createElement("div", { ref: ref, className: "search__results__cards search__results__cards--scroll" }, children));
36241
+ };
36242
+
35670
36243
  const useTrajectDayActivities = () => {
35671
36244
  const context = useContext(SearchResultsConfigurationContext);
35672
36245
  const dispatch = useDispatch();
@@ -35868,7 +36441,7 @@ const TrajectResults = ({ isLoading }) => {
35868
36441
  node.preferredAccommodationName,
35869
36442
  " \u2014 ",
35870
36443
  translations.SRP.NO_RESULTS))),
35871
- React__default.createElement("div", { className: "search__results__cards search__results__cards--scroll" }, [selected, ...configured, ...fill].map((result) => (React__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, selectedLabel: bookedMode && matchesCode(result, node.code ?? '') ? translations.SHARED.BOOKED : undefined })))),
36444
+ React__default.createElement(TrajectCardRow, { selectionKey: selected.code }, [selected, ...configured, ...fill].map((result) => (React__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 })))),
35872
36445
  remaining > 0 && !hideShowMoreResults && (React__default.createElement("div", { className: "search__results__cards__actions" },
35873
36446
  React__default.createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleShowMore(item) },
35874
36447
  translations.SRP.SHOW_MORE,
@@ -35915,6 +36488,7 @@ const TrajectResults = ({ isLoading }) => {
35915
36488
  };
35916
36489
  /** The lines a suggested activity put on the entry, which is also how we know it was added. */
35917
36490
  const getAddedExcursionLines = (result) => (editablePackagingEntry?.lines ?? []).filter((line) => line.serviceType === EXCURSION_SERVICE_TYPE && line.productCode === result.code && isSameDay(new Date(line.from), new Date(result.fromDate)));
36491
+ const isActivitySelected = ({ result, item }) => item ? trajectNodeAvailability[item.line.guid]?.selectedCode === result.code : getAddedExcursionLines(result).length > 0;
35918
36492
  const handleToggleActivity = (result) => {
35919
36493
  const added = getAddedExcursionLines(result);
35920
36494
  if (added.length) {
@@ -35953,7 +36527,9 @@ const TrajectResults = ({ isLoading }) => {
35953
36527
  const renderDayActivities = (day) => {
35954
36528
  const items = getDayExcursionItems(day.order);
35955
36529
  const suggestions = trajectDaySuggestions[day.order];
35956
- const cards = buildDayActivityCards(items, trajectNodeAvailability, suggestions?.results ?? []);
36530
+ const allCards = buildDayActivityCards(items, trajectNodeAvailability, suggestions?.results ?? []);
36531
+ const selectedCards = allCards.filter(isActivitySelected);
36532
+ const cards = [...selectedCards, ...allCards.filter((card) => !isActivitySelected(card))];
35957
36533
  const nodesResolving = items.some((item) => (trajectNodeAvailability[item.line.guid]?.status ?? 'loading') === 'loading');
35958
36534
  const isSearching = suggestions?.status === 'loading';
35959
36535
  // A day is worth filling only if the party is staying somewhere that night. The day they fly
@@ -35972,7 +36548,7 @@ const TrajectResults = ({ isLoading }) => {
35972
36548
  React__default.createElement("h3", null,
35973
36549
  React__default.createElement("strong", null, translations.SRP.ACTIVITIES)))),
35974
36550
  (nodesResolving || isSearching) && !cards.length && React__default.createElement(Spinner, { label: translations.SRP.LOADING_ACTIVITIES }),
35975
- !!cards.length && React__default.createElement("div", { className: "search__results__cards search__results__cards--scroll" }, visible.map(renderActivityCard)),
36551
+ !!cards.length && (React__default.createElement(TrajectCardRow, { selectionKey: selectedCards.map((card) => card.result.code).join('|') }, visible.map(renderActivityCard))),
35976
36552
  !nodesResolving && !isSearching && !cards.length && (!!items.length || !!suggestions) && (React__default.createElement("div", { className: "no-results" }, translations.SRP.NO_RESULTS)),
35977
36553
  React__default.createElement("div", { className: "search__results__cards__actions" },
35978
36554
  awaitsRequest && (React__default.createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => loadDay(day) }, translations.SRP.SHOW_ACTIVITIES)),
@@ -35987,7 +36563,7 @@ const TrajectResults = ({ isLoading }) => {
35987
36563
  * found for themselves is added to the trip or taken back off it.
35988
36564
  */
35989
36565
  const renderActivityCard = ({ result, item }) => {
35990
- const isSelected = item ? trajectNodeAvailability[item.line.guid]?.selectedCode === result.code : getAddedExcursionLines(result).length > 0;
36566
+ const isSelected = isActivitySelected({ result, item });
35991
36567
  const isBookedCard = !!item && bookedMode && matchesCode(result, item.node.code ?? '');
35992
36568
  return (React__default.createElement(TrajectNodeCard, { key: `activity-${result.code}`, node: item?.node, result: result, isSelected: isSelected, languageCode: context.languageCode, translations: translations, onSelect: () => (item ? handleSelect(item, result.code) : handleToggleActivity(result)), selectLabel: item ? undefined : translations.SRP.ADD, selectedLabel: item ? (isBookedCard ? translations.SHARED.BOOKED : undefined) : translations.SRP.REMOVE }));
35993
36569
  };
@@ -40131,6 +40707,363 @@ const Login = ({ tideClientConfig, portalId, languageCode, imageSrc, logo, isMem
40131
40707
  isMemberConfirmation && (React__default.createElement(ConfirmComponent, { tideClientConfig: tideClientConfig, portalId: portalId, languageCode: languageCode, member: member, setMember: setMember, handleBackToHome: handleBackToHome, handleBackToLogin: handleBackToLogin }))))));
40132
40708
  };
40133
40709
 
40710
+ /** Agent endpoints need the member token, fall back to the one the Login component stored. */
40711
+ const withAgentToken = (config) => ({
40712
+ ...config,
40713
+ token: config.token ?? selectAgentToken()
40714
+ });
40715
+ /** False when the token is not a JWT or has expired. */
40716
+ const isAgentTokenValid = (token) => {
40717
+ if (!token)
40718
+ return false;
40719
+ try {
40720
+ const { exp } = jwtDecode(token);
40721
+ return !exp || exp * 1000 > Date.now();
40722
+ }
40723
+ catch {
40724
+ return false;
40725
+ }
40726
+ };
40727
+ // tide-client throws Error(statusText) without the status, and statusText is empty over HTTP/2,
40728
+ // so also treat any failure with an invalid/expired token as unauthorized.
40729
+ const isUnauthorizedError = (error, token) => (error instanceof Error && /unauthori[sz]ed|forbidden/i.test(error.message)) || !isAgentTokenValid(token);
40730
+ const fetchLookups = async (config, languageCode, signal) => {
40731
+ // A failing lookup should not block the list itself.
40732
+ const [entryStatuses, customEntryStatuses, printActions] = await Promise.allSettled([
40733
+ build.getEntryStatus(config, signal, languageCode),
40734
+ build.getCustomEntryStatus(config, signal, languageCode),
40735
+ build.getPrintActions(config, build.PrintActionGroup.Dossier, signal)
40736
+ ]);
40737
+ return {
40738
+ entryStatuses: entryStatuses.status === 'fulfilled' ? entryStatuses.value ?? [] : [],
40739
+ customEntryStatuses: customEntryStatuses.status === 'fulfilled' ? customEntryStatuses.value ?? [] : [],
40740
+ printActions: printActions.status === 'fulfilled' ? printActions.value ?? [] : []
40741
+ };
40742
+ };
40743
+ /** Converts the raw filter inputs to the OData column filters understood by tide-client's createParams. */
40744
+ const buildFilterItem = (columns, filterValues, sort, page, take) => {
40745
+ const filterColumns = {};
40746
+ columns.forEach((column) => {
40747
+ const raw = filterValues[column.id]?.trim();
40748
+ if (!raw)
40749
+ return;
40750
+ switch (column.kind) {
40751
+ case 'text':
40752
+ filterColumns[column.id] = { type: 'text', value: raw };
40753
+ break;
40754
+ case 'number': {
40755
+ const value = parseFloat(raw.replace(',', '.'));
40756
+ if (!isNaN(value))
40757
+ filterColumns[column.id] = { type: 'number', value };
40758
+ break;
40759
+ }
40760
+ case 'date': {
40761
+ // <input type="date"> value: yyyy-MM-dd, createParams expects a 1-based month.
40762
+ const [year, month, day] = raw.split('-').map((x) => parseInt(x, 10));
40763
+ if (year && month && day)
40764
+ filterColumns[column.id] = { type: 'date', value: { year, month, day } };
40765
+ break;
40766
+ }
40767
+ case 'status':
40768
+ case 'customStatus':
40769
+ filterColumns[column.id] = { type: 'enum', value: parseInt(raw, 10) };
40770
+ break;
40771
+ }
40772
+ });
40773
+ return { take, page, sort, columns: filterColumns };
40774
+ };
40775
+ const fetchEntries = (config, filter, signal) => build.getEntryList(config, filter, undefined, signal);
40776
+ /** Prints the entry and returns an object url to the resulting pdf. */
40777
+ const printEntry = async (config, printActionId, entryId) => {
40778
+ // Same request as the agent portal: the print action and the entry (version) id.
40779
+ const request = { id: printActionId, entryId };
40780
+ const response = await build.print(config, request);
40781
+ if (!response.ok)
40782
+ throw new Error(response.statusText);
40783
+ const buffer = await response.arrayBuffer();
40784
+ return URL.createObjectURL(new Blob([buffer], { type: 'application/pdf' }));
40785
+ };
40786
+
40787
+ const PAGE_SIZES = [10, 20, 50, 100];
40788
+ const FILTER_DEBOUNCE_MS = 400;
40789
+ const EyeIcon = () => (React__default.createElement("svg", { className: "agent-entries__icon", viewBox: "0 0 576 512", fill: "currentColor", "aria-hidden": "true" },
40790
+ React__default.createElement("path", { d: "M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4 142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1 3.3-7.9 3.3-16.7 0-24.6-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1-288 0zm144-64c0 35.3-28.7 64-64 64-7.1 0-13.9-1.2-20.3-3.3-5.5-1.8-11.9 1.6-11.7 7.4.3 6.9 1.3 13.8 3.2 20.7 13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1-5.8-.2-9.2 6.1-7.4 11.7 2.1 6.4 3.3 13.2 3.3 20.3z" })));
40791
+ const PrintIcon = () => (React__default.createElement("svg", { className: "agent-entries__icon", viewBox: "0 0 512 512", fill: "currentColor", "aria-hidden": "true" },
40792
+ React__default.createElement("path", { d: "M128 0C92.7 0 64 28.7 64 64v96h64V64h226.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zm256 352v96H128v-96h256zm64 32h32c17.7 0 32-14.3 32-32v-96c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32h32v64c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64v-64zm-16-136a24 24 0 1 1 0 48 24 24 0 1 1 0-48z" })));
40793
+ const SortIcon = ({ asc }) => (React__default.createElement("svg", { className: buildClassName(['agent-entries__sort-icon', !asc && 'agent-entries__sort-icon--desc']), viewBox: "0 0 320 512", fill: "currentColor", "aria-hidden": "true" },
40794
+ React__default.createElement("path", { d: "M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9S19 320 32 320h256c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z" })));
40795
+ const AgentEntries = ({ tideClientConfig, languageCode, title, pageSize, customTranslations, onLogin, onUnauthorized }) => {
40796
+ const translations = useMemo(() => getTranslations(languageCode ?? 'en-GB', customTranslations), [languageCode, customTranslations]);
40797
+ const t = translations.AGENT_ENTRIES;
40798
+ const config = useMemo(() => withAgentToken(tideClientConfig), [tideClientConfig.host, tideClientConfig.apiKey, tideClientConfig.token]);
40799
+ const isLoggedIn = !!config.token;
40800
+ const hasValidToken = isLoggedIn && isAgentTokenValid(config.token);
40801
+ const columns = useMemo(() => [
40802
+ { id: 'number', kind: 'text', label: t.NUMBER },
40803
+ { id: 'departureDate', kind: 'date', label: t.DEPARTURE_DATE },
40804
+ { id: 'status', kind: 'status', label: t.STATUS },
40805
+ { id: 'customEntryStatusId', kind: 'customStatus', label: t.CUSTOM_STATUS },
40806
+ { id: 'returnDate', kind: 'date', label: t.RETURN_DATE },
40807
+ { id: 'profit', kind: 'number', label: t.PROFIT },
40808
+ { id: 'totalPrice', kind: 'number', label: t.NETTO_SELLING_PRICE },
40809
+ { id: 'calculatedAgentSurchargeAmount', kind: 'number', label: t.YOUR_SURCHARGE },
40810
+ { id: 'createdDate', kind: 'date', label: t.CREATED },
40811
+ { id: 'contact', kind: 'text', label: t.CONTACT },
40812
+ { id: 'travelerAddress', kind: 'text', label: t.MAIN_BOOKER }
40813
+ ], [t]);
40814
+ const [lookups, setLookups] = useState({ entryStatuses: [], customEntryStatuses: [], printActions: [] });
40815
+ const [entries, setEntries] = useState([]);
40816
+ const [count, setCount] = useState();
40817
+ const [loadState, setLoadState] = useState('idle');
40818
+ const [filterInputs, setFilterInputs] = useState({});
40819
+ const [filterValues, setFilterValues] = useState({});
40820
+ const [sort, setSort] = useState({ name: 'number', asc: true });
40821
+ const [page, setPage] = useState(1);
40822
+ const [take, setTake] = useState(pageSize ?? 20);
40823
+ const [expandedId, setExpandedId] = useState();
40824
+ const [printingKey, setPrintingKey] = useState();
40825
+ const [printError, setPrintError] = useState(false);
40826
+ const handleError = (error) => {
40827
+ if (error instanceof DOMException && error.name === 'AbortError')
40828
+ return;
40829
+ if (isUnauthorizedError(error, config.token)) {
40830
+ setLoadState('unauthorized');
40831
+ onUnauthorized?.();
40832
+ }
40833
+ else {
40834
+ console.error(error);
40835
+ setLoadState('error');
40836
+ }
40837
+ };
40838
+ useEffect(() => {
40839
+ if (isLoggedIn && !hasValidToken)
40840
+ onUnauthorized?.();
40841
+ }, [isLoggedIn, hasValidToken]);
40842
+ // Lookups (statuses & print actions) only need to be fetched once.
40843
+ useEffect(() => {
40844
+ if (!hasValidToken)
40845
+ return;
40846
+ const controller = new AbortController();
40847
+ fetchLookups(config, languageCode, controller.signal)
40848
+ .then(setLookups)
40849
+ .catch(() => { });
40850
+ return () => controller.abort();
40851
+ }, [config, languageCode, hasValidToken]);
40852
+ // Debounce the typed filters, a selected dropdown/date is applied immediately.
40853
+ useEffect(() => {
40854
+ const handle = setTimeout(() => {
40855
+ if (isEqual$1(filterInputs, filterValues))
40856
+ return;
40857
+ setFilterValues(filterInputs);
40858
+ setPage(1);
40859
+ }, FILTER_DEBOUNCE_MS);
40860
+ return () => clearTimeout(handle);
40861
+ }, [filterInputs]);
40862
+ useEffect(() => {
40863
+ if (!hasValidToken)
40864
+ return;
40865
+ const controller = new AbortController();
40866
+ setLoadState('loading');
40867
+ fetchEntries(config, buildFilterItem(columns, filterValues, sort, page, take), controller.signal)
40868
+ .then((result) => {
40869
+ setEntries(result?.items ?? []);
40870
+ setCount(result?.count ?? undefined);
40871
+ setLoadState('loaded');
40872
+ })
40873
+ .catch(handleError);
40874
+ return () => controller.abort();
40875
+ }, [config, hasValidToken, columns, filterValues, sort, page, take]);
40876
+ const totalPages = count !== undefined ? Math.max(1, Math.ceil(count / take)) : undefined;
40877
+ const hasNextPage = totalPages !== undefined ? page < totalPages : entries.length === take;
40878
+ const handleSort = (columnId) => {
40879
+ setSort((current) => (current.name === columnId ? { name: columnId, asc: !current.asc } : { name: columnId, asc: true }));
40880
+ setPage(1);
40881
+ };
40882
+ const handleFilterChange = (columnId, value, immediate) => {
40883
+ const next = { ...filterInputs, [columnId]: value };
40884
+ setFilterInputs(next);
40885
+ if (immediate) {
40886
+ setFilterValues(next);
40887
+ setPage(1);
40888
+ }
40889
+ };
40890
+ const handlePrint = async (entry, printAction) => {
40891
+ // Open the tab synchronously, otherwise the popup blocker kicks in once the pdf arrives.
40892
+ const printWindow = window.open('', '_blank');
40893
+ setPrintingKey(`${entry.id}-${printAction.id}`);
40894
+ setPrintError(false);
40895
+ try {
40896
+ const url = await printEntry(config, printAction.id, entry.id);
40897
+ if (printWindow) {
40898
+ printWindow.location.href = url;
40899
+ }
40900
+ else {
40901
+ window.open(url, '_blank');
40902
+ }
40903
+ setTimeout(() => URL.revokeObjectURL(url), 60000);
40904
+ }
40905
+ catch (error) {
40906
+ printWindow?.close();
40907
+ if (isUnauthorizedError(error, config.token)) {
40908
+ handleError(error);
40909
+ }
40910
+ else {
40911
+ console.error(error);
40912
+ setPrintError(true);
40913
+ }
40914
+ }
40915
+ finally {
40916
+ setPrintingKey(undefined);
40917
+ }
40918
+ };
40919
+ const formatDate = (value) => {
40920
+ if (!value)
40921
+ return '';
40922
+ const date = new Date(value);
40923
+ if (isNaN(date.getTime()))
40924
+ return '';
40925
+ return new Intl.DateTimeFormat(languageCode, { day: '2-digit', month: '2-digit', year: 'numeric' }).format(date);
40926
+ };
40927
+ const formatNumber = (value) => {
40928
+ if (value === undefined || value === null)
40929
+ return '';
40930
+ return new Intl.NumberFormat(languageCode, { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(value);
40931
+ };
40932
+ const getEntryStatusLabel = (status) => lookups.entryStatuses.find((x) => x.key === status)?.value ?? '';
40933
+ const getCustomEntryStatusLabel = (id) => lookups.customEntryStatuses.find((x) => x.id === id)?.name ?? '';
40934
+ const getPrintActionsForEntry = (entry) => lookups.printActions.filter((x) => x.validEntryStatuses?.includes(entry.status));
40935
+ const renderCell = (entry, column) => {
40936
+ const value = entry[column.id];
40937
+ switch (column.kind) {
40938
+ case 'date':
40939
+ return formatDate(value);
40940
+ case 'number':
40941
+ return formatNumber(value);
40942
+ case 'status':
40943
+ return getEntryStatusLabel(value);
40944
+ case 'customStatus':
40945
+ return getCustomEntryStatusLabel(value);
40946
+ default:
40947
+ return value ?? '';
40948
+ }
40949
+ };
40950
+ const renderFilter = (column) => {
40951
+ const value = filterInputs[column.id] ?? '';
40952
+ const className = 'agent-entries__filter';
40953
+ switch (column.kind) {
40954
+ case 'date':
40955
+ return (React__default.createElement("input", { type: "date", className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value, true) }));
40956
+ case 'status':
40957
+ case 'customStatus': {
40958
+ const options = column.kind === 'status'
40959
+ ? lookups.entryStatuses.filter((x) => x.key !== undefined && x.key !== null).map((x) => ({ key: x.key, value: x.value }))
40960
+ : lookups.customEntryStatuses.map((x) => ({ key: x.id, value: x.name }));
40961
+ return (React__default.createElement("select", { className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value, true) },
40962
+ React__default.createElement("option", { value: "" }, t.ALL),
40963
+ options.map((option) => (React__default.createElement("option", { key: option.key, value: option.key }, option.value)))));
40964
+ }
40965
+ case 'number':
40966
+ return (React__default.createElement("input", { type: "number", className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value) }));
40967
+ default:
40968
+ return (React__default.createElement("input", { type: "text", className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value) }));
40969
+ }
40970
+ };
40971
+ const renderDetails = (entry) => {
40972
+ const printActions = getPrintActionsForEntry(entry);
40973
+ const travelers = entry.pax?.length ? entry.pax.map((p) => (p.isMainBooker ? `${p.name} (${t.MAIN_BOOKER.toLowerCase()})` : p.name)).join(', ') : '';
40974
+ const details = [
40975
+ { label: t.NUMBER, value: entry.number },
40976
+ { label: t.PRODUCT, value: entry.firstProductName },
40977
+ { label: t.STATUS, value: getEntryStatusLabel(entry.status) },
40978
+ { label: t.CUSTOM_STATUS, value: getCustomEntryStatusLabel(entry.customEntryStatusId) },
40979
+ { label: t.DEPARTURE_DATE, value: formatDate(entry.departureDate) },
40980
+ { label: t.RETURN_DATE, value: formatDate(entry.returnDate) },
40981
+ { label: t.CREATED, value: formatDate(entry.createdDate) },
40982
+ { label: t.CONTACT, value: entry.contact },
40983
+ { label: t.MAIN_BOOKER, value: entry.travelerAddress },
40984
+ { label: t.TRAVELERS, value: travelers || (entry.paxCount ? entry.paxCount : '') },
40985
+ { label: t.NETTO_SELLING_PRICE, value: formatNumber(entry.totalPrice) },
40986
+ { label: t.YOUR_SURCHARGE, value: formatNumber(entry.calculatedAgentSurchargeAmount) },
40987
+ { label: t.PROFIT, value: formatNumber(entry.profit) }
40988
+ ];
40989
+ return (React__default.createElement("div", { className: "agent-entries__details" },
40990
+ React__default.createElement("dl", { className: "agent-entries__details__list" }, details
40991
+ .filter((detail) => detail.value !== undefined && detail.value !== null && detail.value !== '')
40992
+ .map((detail) => (React__default.createElement("div", { className: "agent-entries__details__item", key: detail.label },
40993
+ React__default.createElement("dt", null, detail.label),
40994
+ React__default.createElement("dd", null, detail.value))))),
40995
+ printActions.length > 0 && (React__default.createElement("div", { className: "agent-entries__details__prints" },
40996
+ React__default.createElement("span", { className: "agent-entries__details__prints__title" }, t.PRINTS),
40997
+ React__default.createElement("div", { className: "agent-entries__details__prints__buttons" }, printActions.map((printAction) => (React__default.createElement("button", { type: "button", key: printAction.id, className: "agent-entries__print-button", disabled: printingKey === `${entry.id}-${printAction.id}`, onClick: () => handlePrint(entry, printAction) },
40998
+ React__default.createElement(PrintIcon, null),
40999
+ printAction.label))))))));
41000
+ };
41001
+ const renderLoginMessage = (message) => (React__default.createElement("div", { className: "agent-entries__message" },
41002
+ React__default.createElement("p", null, message),
41003
+ onLogin && (React__default.createElement("button", { type: "button", className: "cta cta--primary", onClick: onLogin }, translations.LOGIN.LOGIN))));
41004
+ if (!isLoggedIn) {
41005
+ return (React__default.createElement("div", { className: "agent-entries" },
41006
+ React__default.createElement("h2", { className: "agent-entries__title" }, title ?? t.TITLE),
41007
+ renderLoginMessage(t.NOT_LOGGED_IN)));
41008
+ }
41009
+ if (!hasValidToken || loadState === 'unauthorized') {
41010
+ return (React__default.createElement("div", { className: "agent-entries" },
41011
+ React__default.createElement("h2", { className: "agent-entries__title" }, title ?? t.TITLE),
41012
+ renderLoginMessage(t.SESSION_EXPIRED)));
41013
+ }
41014
+ const columnCount = columns.length + 1;
41015
+ return (React__default.createElement("div", { className: "agent-entries" },
41016
+ React__default.createElement("h2", { className: "agent-entries__title" }, title ?? t.TITLE),
41017
+ printError && (React__default.createElement("div", { className: "agent-entries__error", role: "alert" },
41018
+ t.PRINT_ERROR,
41019
+ React__default.createElement("button", { type: "button", className: "agent-entries__error__close", "aria-label": "close", onClick: () => setPrintError(false) }, "\u00D7"))),
41020
+ React__default.createElement("div", { className: buildClassName(['agent-entries__card', loadState === 'loading' && 'agent-entries__card--loading']) },
41021
+ React__default.createElement("div", { className: "agent-entries__table-wrapper" },
41022
+ React__default.createElement("table", { className: "agent-entries__table" },
41023
+ React__default.createElement("thead", null,
41024
+ React__default.createElement("tr", null,
41025
+ React__default.createElement("th", { className: "agent-entries__actions-header" },
41026
+ React__default.createElement("span", { className: "agent-entries__sr-only" }, t.ACTIONS)),
41027
+ columns.map((column) => (React__default.createElement("th", { key: column.id, "aria-sort": sort.name === column.id ? (sort.asc ? 'ascending' : 'descending') : undefined },
41028
+ React__default.createElement("button", { type: "button", className: "agent-entries__sort", onClick: () => handleSort(column.id) },
41029
+ column.label,
41030
+ sort.name === column.id && React__default.createElement(SortIcon, { asc: sort.asc })))))),
41031
+ React__default.createElement("tr", { className: "agent-entries__filter-row" },
41032
+ React__default.createElement("th", null),
41033
+ columns.map((column) => (React__default.createElement("th", { key: column.id }, renderFilter(column)))))),
41034
+ React__default.createElement("tbody", null,
41035
+ loadState === 'error' && (React__default.createElement("tr", null,
41036
+ React__default.createElement("td", { colSpan: columnCount, className: "agent-entries__empty" }, t.ERROR))),
41037
+ loadState !== 'error' && entries.length === 0 && (React__default.createElement("tr", null,
41038
+ React__default.createElement("td", { colSpan: columnCount, className: "agent-entries__empty" }, loadState === 'loading' ? t.LOADING : t.NO_ITEMS))),
41039
+ loadState !== 'error' &&
41040
+ entries.map((entry) => {
41041
+ const isExpanded = expandedId === entry.id;
41042
+ return (React__default.createElement(React__default.Fragment, { key: entry.id },
41043
+ React__default.createElement("tr", { className: buildClassName(['agent-entries__row', isExpanded && 'agent-entries__row--expanded']) },
41044
+ React__default.createElement("td", { className: "agent-entries__actions" },
41045
+ React__default.createElement("button", { type: "button", className: "agent-entries__action agent-entries__action--primary", title: isExpanded ? t.HIDE_DETAILS : t.DETAILS, "aria-label": isExpanded ? t.HIDE_DETAILS : t.DETAILS, "aria-expanded": isExpanded, onClick: () => setExpandedId(isExpanded ? undefined : entry.id) },
41046
+ React__default.createElement(EyeIcon, null)),
41047
+ getPrintActionsForEntry(entry).map((printAction) => (React__default.createElement("button", { type: "button", key: printAction.id, className: "agent-entries__action", title: printAction.label, "aria-label": printAction.label, disabled: printingKey === `${entry.id}-${printAction.id}`, onClick: () => handlePrint(entry, printAction) },
41048
+ React__default.createElement(PrintIcon, null))))),
41049
+ columns.map((column) => (React__default.createElement("td", { key: column.id, className: `agent-entries__cell agent-entries__cell--${column.kind}` }, renderCell(entry, column))))),
41050
+ isExpanded && (React__default.createElement("tr", { className: "agent-entries__details-row" },
41051
+ React__default.createElement("td", { colSpan: columnCount }, renderDetails(entry))))));
41052
+ })))),
41053
+ React__default.createElement("div", { className: "agent-entries__footer" },
41054
+ React__default.createElement("select", { className: "agent-entries__page-size", value: take, "aria-label": t.PAGE_SIZE, onChange: (e) => {
41055
+ setTake(parseInt(e.target.value, 10));
41056
+ setPage(1);
41057
+ } }, Array.from(new Set([...PAGE_SIZES, take]))
41058
+ .sort((a, b) => a - b)
41059
+ .map((size) => (React__default.createElement("option", { key: size, value: size }, size)))),
41060
+ count !== undefined && React__default.createElement("span", { className: "agent-entries__count" }, format$1(t.X_ITEMS, [count])),
41061
+ React__default.createElement("div", { className: "agent-entries__pager" },
41062
+ React__default.createElement("button", { type: "button", className: "agent-entries__pager__button", disabled: page <= 1, onClick: () => setPage(page - 1) }, t.PREVIOUS),
41063
+ React__default.createElement("span", { className: "agent-entries__pager__info" }, totalPages !== undefined ? format$1(t.PAGE_X_OF_Y, [page, totalPages]) : page),
41064
+ React__default.createElement("button", { type: "button", className: "agent-entries__pager__button", disabled: !hasNextPage, onClick: () => setPage(page + 1) }, t.NEXT))))));
41065
+ };
41066
+
40134
41067
  const ImageWithTextCard = ({ noCard, fullImage, reverse, imageSrc, imageAlt, title, section1Title, section1Text, section2Title, section2Text, buttonText, onButtonClick }) => {
40135
41068
  let cardClassName = 'image-with-text__card';
40136
41069
  if (noCard) {
@@ -44589,4 +45522,4 @@ var signalR = /*#__PURE__*/_mergeNamespaces({
44589
45522
  'default': signalR$1
44590
45523
  }, [signalR$1]);
44591
45524
 
44592
- export { BookingProduct, BookingWizard, Breadcrumbs, DepartureRange, FAQ, FeaturedTrips, Footer, Header, ImageCardGrid, ImageWithTextSection, ItineraryMapView, Login, Navbar, PhotoGallery, QSM, SearchResults, Slider, Spinner, TideForm };
45525
+ export { AgentEntries, BookingProduct, BookingWizard, Breadcrumbs, DepartureRange, FAQ, FeaturedTrips, Footer, Header, ImageCardGrid, ImageWithTextSection, ItineraryMapView, Login, Navbar, PhotoGallery, QSM, SearchResults, Slider, Spinner, TideForm };