@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.
@@ -509,6 +509,39 @@ var FORM$f = {
509
509
  YES: "نعم",
510
510
  NO: "لا"
511
511
  };
512
+ var AGENT_ENTRIES$f = {
513
+ TITLE: "الحجوزات",
514
+ MY_BOOKINGS: "حجوزاتي",
515
+ NUMBER: "الرقم",
516
+ DEPARTURE_DATE: "تاريخ المغادرة",
517
+ STATUS: "الحالة",
518
+ CUSTOM_STATUS: "حالة مخصصة",
519
+ RETURN_DATE: "تاريخ العودة",
520
+ PROFIT: "الربح",
521
+ NETTO_SELLING_PRICE: "صافي سعر البيع",
522
+ YOUR_SURCHARGE: "رسومك الإضافية",
523
+ CREATED: "تاريخ الإنشاء",
524
+ CONTACT: "جهة الاتصال",
525
+ MAIN_BOOKER: "الحاجز الرئيسي",
526
+ PRODUCT: "المنتج",
527
+ TRAVELERS: "المسافرون",
528
+ ACTIONS: "الإجراءات",
529
+ DETAILS: "التفاصيل",
530
+ HIDE_DETAILS: "إخفاء التفاصيل",
531
+ PRINTS: "المطبوعات",
532
+ ALL: "الكل",
533
+ X_ITEMS: "{0} عناصر",
534
+ PAGE_SIZE: "عناصر لكل صفحة",
535
+ PREVIOUS: "السابق",
536
+ NEXT: "التالي",
537
+ PAGE_X_OF_Y: "الصفحة {0} من {1}",
538
+ LOADING: "جارٍ التحميل...",
539
+ NO_ITEMS: "لم يتم العثور على حجوزات.",
540
+ ERROR: "حدث خطأ أثناء تحميل حجوزاتك.",
541
+ PRINT_ERROR: "فشلت الطباعة، يرجى المحاولة مرة أخرى.",
542
+ NOT_LOGGED_IN: "سجّل الدخول كوكيل لعرض حجوزاتك.",
543
+ SESSION_EXPIRED: "انتهت صلاحية جلستك، يرجى تسجيل الدخول مرة أخرى."
544
+ };
512
545
  var arJson = {
513
546
  STEPS: STEPS$f,
514
547
  INPUT: INPUT$f,
@@ -529,7 +562,8 @@ var arJson = {
529
562
  QSM: QSM$g,
530
563
  SRP: SRP$f,
531
564
  ITINERARY: ITINERARY$f,
532
- FORM: FORM$f
565
+ FORM: FORM$f,
566
+ AGENT_ENTRIES: AGENT_ENTRIES$f
533
567
  };
534
568
 
535
569
  var STEPS$e = {
@@ -982,6 +1016,39 @@ var FORM$e = {
982
1016
  YES: "Ja",
983
1017
  NO: "Nej"
984
1018
  };
1019
+ var AGENT_ENTRIES$e = {
1020
+ TITLE: "Bookinger",
1021
+ MY_BOOKINGS: "Mine bookinger",
1022
+ NUMBER: "Nummer",
1023
+ DEPARTURE_DATE: "Afrejsedato",
1024
+ STATUS: "Status",
1025
+ CUSTOM_STATUS: "Tilpasset status",
1026
+ RETURN_DATE: "Hjemrejsedato",
1027
+ PROFIT: "Fortjeneste",
1028
+ NETTO_SELLING_PRICE: "Netto salgspris",
1029
+ YOUR_SURCHARGE: "Dit tillæg",
1030
+ CREATED: "Oprettet",
1031
+ CONTACT: "Kontakt",
1032
+ MAIN_BOOKER: "Hovedbooker",
1033
+ PRODUCT: "Produkt",
1034
+ TRAVELERS: "Rejsende",
1035
+ ACTIONS: "Handlinger",
1036
+ DETAILS: "Detaljer",
1037
+ HIDE_DETAILS: "Skjul detaljer",
1038
+ PRINTS: "Udskrifter",
1039
+ ALL: "Alle",
1040
+ X_ITEMS: "{0} elementer",
1041
+ PAGE_SIZE: "Elementer pr. side",
1042
+ PREVIOUS: "Forrige",
1043
+ NEXT: "Næste",
1044
+ PAGE_X_OF_Y: "Side {0} af {1}",
1045
+ LOADING: "Indlæser...",
1046
+ NO_ITEMS: "Ingen bookinger fundet.",
1047
+ ERROR: "Der opstod en fejl under indlæsning af dine bookinger.",
1048
+ PRINT_ERROR: "Udskrivning mislykkedes, prøv igen.",
1049
+ NOT_LOGGED_IN: "Log ind som agent for at se dine bookinger.",
1050
+ SESSION_EXPIRED: "Din session er udløbet, log ind igen."
1051
+ };
985
1052
  var daJson = {
986
1053
  STEPS: STEPS$e,
987
1054
  INPUT: INPUT$e,
@@ -1002,7 +1069,8 @@ var daJson = {
1002
1069
  QSM: QSM$f,
1003
1070
  SRP: SRP$e,
1004
1071
  ITINERARY: ITINERARY$e,
1005
- FORM: FORM$e
1072
+ FORM: FORM$e,
1073
+ AGENT_ENTRIES: AGENT_ENTRIES$e
1006
1074
  };
1007
1075
 
1008
1076
  var STEPS$d = {
@@ -1455,6 +1523,39 @@ var FORM$d = {
1455
1523
  YES: "Ja",
1456
1524
  NO: "Nein"
1457
1525
  };
1526
+ var AGENT_ENTRIES$d = {
1527
+ TITLE: "Buchungen",
1528
+ MY_BOOKINGS: "Meine Buchungen",
1529
+ NUMBER: "Nummer",
1530
+ DEPARTURE_DATE: "Abreisedatum",
1531
+ STATUS: "Status",
1532
+ CUSTOM_STATUS: "Benutzerdefinierter Status",
1533
+ RETURN_DATE: "Rückreisedatum",
1534
+ PROFIT: "Gewinn",
1535
+ NETTO_SELLING_PRICE: "Netto-Verkaufspreis",
1536
+ YOUR_SURCHARGE: "Ihr Aufschlag",
1537
+ CREATED: "Erstellt",
1538
+ CONTACT: "Kontakt",
1539
+ MAIN_BOOKER: "Hauptbucher",
1540
+ PRODUCT: "Produkt",
1541
+ TRAVELERS: "Reisende",
1542
+ ACTIONS: "Aktionen",
1543
+ DETAILS: "Details",
1544
+ HIDE_DETAILS: "Details ausblenden",
1545
+ PRINTS: "Drucke",
1546
+ ALL: "Alle",
1547
+ X_ITEMS: "{0} Einträge",
1548
+ PAGE_SIZE: "Einträge pro Seite",
1549
+ PREVIOUS: "Zurück",
1550
+ NEXT: "Weiter",
1551
+ PAGE_X_OF_Y: "Seite {0} von {1}",
1552
+ LOADING: "Wird geladen...",
1553
+ NO_ITEMS: "Keine Buchungen gefunden.",
1554
+ ERROR: "Beim Laden Ihrer Buchungen ist ein Fehler aufgetreten.",
1555
+ PRINT_ERROR: "Drucken fehlgeschlagen, bitte versuchen Sie es erneut.",
1556
+ NOT_LOGGED_IN: "Melden Sie sich als Agent an, um Ihre Buchungen zu sehen.",
1557
+ SESSION_EXPIRED: "Ihre Sitzung ist abgelaufen, bitte melden Sie sich erneut an."
1558
+ };
1458
1559
  var deJson = {
1459
1560
  STEPS: STEPS$d,
1460
1561
  INPUT: INPUT$d,
@@ -1475,7 +1576,8 @@ var deJson = {
1475
1576
  QSM: QSM$e,
1476
1577
  SRP: SRP$d,
1477
1578
  ITINERARY: ITINERARY$d,
1478
- FORM: FORM$d
1579
+ FORM: FORM$d,
1580
+ AGENT_ENTRIES: AGENT_ENTRIES$d
1479
1581
  };
1480
1582
 
1481
1583
  var STEPS$c = {
@@ -1932,6 +2034,39 @@ var FORM$c = {
1932
2034
  YES: "Yes",
1933
2035
  NO: "No"
1934
2036
  };
2037
+ var AGENT_ENTRIES$c = {
2038
+ TITLE: "Bookings",
2039
+ MY_BOOKINGS: "My bookings",
2040
+ NUMBER: "Number",
2041
+ DEPARTURE_DATE: "Departure date",
2042
+ STATUS: "Status",
2043
+ CUSTOM_STATUS: "Custom status",
2044
+ RETURN_DATE: "Return date",
2045
+ PROFIT: "Profit",
2046
+ NETTO_SELLING_PRICE: "Netto selling price",
2047
+ YOUR_SURCHARGE: "Your surcharge",
2048
+ CREATED: "Created",
2049
+ CONTACT: "Contact",
2050
+ MAIN_BOOKER: "Main booker",
2051
+ PRODUCT: "Product",
2052
+ TRAVELERS: "Travellers",
2053
+ ACTIONS: "Actions",
2054
+ DETAILS: "Details",
2055
+ HIDE_DETAILS: "Hide details",
2056
+ PRINTS: "Prints",
2057
+ ALL: "All",
2058
+ X_ITEMS: "{0} items",
2059
+ PAGE_SIZE: "Items per page",
2060
+ PREVIOUS: "Previous",
2061
+ NEXT: "Next",
2062
+ PAGE_X_OF_Y: "Page {0} of {1}",
2063
+ LOADING: "Loading...",
2064
+ NO_ITEMS: "No bookings found.",
2065
+ ERROR: "Something went wrong while loading your bookings.",
2066
+ PRINT_ERROR: "Printing failed, please try again.",
2067
+ NOT_LOGGED_IN: "Log in as an agent to see your bookings.",
2068
+ SESSION_EXPIRED: "Your session has expired, please log in again."
2069
+ };
1935
2070
  var enJson = {
1936
2071
  STEPS: STEPS$c,
1937
2072
  INPUT: INPUT$c,
@@ -1952,7 +2087,8 @@ var enJson = {
1952
2087
  QSM: QSM$d,
1953
2088
  SRP: SRP$c,
1954
2089
  ITINERARY: ITINERARY$c,
1955
- FORM: FORM$c
2090
+ FORM: FORM$c,
2091
+ AGENT_ENTRIES: AGENT_ENTRIES$c
1956
2092
  };
1957
2093
 
1958
2094
  var STEPS$b = {
@@ -2405,6 +2541,39 @@ var FORM$b = {
2405
2541
  YES: "Sí",
2406
2542
  NO: "No"
2407
2543
  };
2544
+ var AGENT_ENTRIES$b = {
2545
+ TITLE: "Reservas",
2546
+ MY_BOOKINGS: "Mis reservas",
2547
+ NUMBER: "Número",
2548
+ DEPARTURE_DATE: "Fecha de salida",
2549
+ STATUS: "Estado",
2550
+ CUSTOM_STATUS: "Estado personalizado",
2551
+ RETURN_DATE: "Fecha de regreso",
2552
+ PROFIT: "Beneficio",
2553
+ NETTO_SELLING_PRICE: "Precio de venta neto",
2554
+ YOUR_SURCHARGE: "Su recargo",
2555
+ CREATED: "Creado",
2556
+ CONTACT: "Contacto",
2557
+ MAIN_BOOKER: "Titular de la reserva",
2558
+ PRODUCT: "Producto",
2559
+ TRAVELERS: "Viajeros",
2560
+ ACTIONS: "Acciones",
2561
+ DETAILS: "Detalles",
2562
+ HIDE_DETAILS: "Ocultar detalles",
2563
+ PRINTS: "Impresiones",
2564
+ ALL: "Todos",
2565
+ X_ITEMS: "{0} elementos",
2566
+ PAGE_SIZE: "Elementos por página",
2567
+ PREVIOUS: "Anterior",
2568
+ NEXT: "Siguiente",
2569
+ PAGE_X_OF_Y: "Página {0} de {1}",
2570
+ LOADING: "Cargando...",
2571
+ NO_ITEMS: "No se encontraron reservas.",
2572
+ ERROR: "Se produjo un error al cargar sus reservas.",
2573
+ PRINT_ERROR: "La impresión ha fallado, inténtelo de nuevo.",
2574
+ NOT_LOGGED_IN: "Inicie sesión como agente para ver sus reservas.",
2575
+ SESSION_EXPIRED: "Su sesión ha caducado, inicie sesión de nuevo."
2576
+ };
2408
2577
  var esJson = {
2409
2578
  STEPS: STEPS$b,
2410
2579
  INPUT: INPUT$b,
@@ -2425,7 +2594,8 @@ var esJson = {
2425
2594
  QSM: QSM$c,
2426
2595
  SRP: SRP$b,
2427
2596
  ITINERARY: ITINERARY$b,
2428
- FORM: FORM$b
2597
+ FORM: FORM$b,
2598
+ AGENT_ENTRIES: AGENT_ENTRIES$b
2429
2599
  };
2430
2600
 
2431
2601
  var STEPS$a = {
@@ -2882,6 +3052,39 @@ var FORM$a = {
2882
3052
  YES: "Oui",
2883
3053
  NO: "Non"
2884
3054
  };
3055
+ var AGENT_ENTRIES$a = {
3056
+ TITLE: "Réservations",
3057
+ MY_BOOKINGS: "Mes réservations",
3058
+ NUMBER: "Numéro",
3059
+ DEPARTURE_DATE: "Date de départ",
3060
+ STATUS: "Statut",
3061
+ CUSTOM_STATUS: "Statut personnalisé",
3062
+ RETURN_DATE: "Date de retour",
3063
+ PROFIT: "Bénéfice",
3064
+ NETTO_SELLING_PRICE: "Prix de vente net",
3065
+ YOUR_SURCHARGE: "Votre supplément",
3066
+ CREATED: "Créé le",
3067
+ CONTACT: "Contact",
3068
+ MAIN_BOOKER: "Réservant principal",
3069
+ PRODUCT: "Produit",
3070
+ TRAVELERS: "Voyageurs",
3071
+ ACTIONS: "Actions",
3072
+ DETAILS: "Détails",
3073
+ HIDE_DETAILS: "Masquer les détails",
3074
+ PRINTS: "Impressions",
3075
+ ALL: "Tous",
3076
+ X_ITEMS: "{0} éléments",
3077
+ PAGE_SIZE: "Éléments par page",
3078
+ PREVIOUS: "Précédent",
3079
+ NEXT: "Suivant",
3080
+ PAGE_X_OF_Y: "Page {0} sur {1}",
3081
+ LOADING: "Chargement...",
3082
+ NO_ITEMS: "Aucune réservation trouvée.",
3083
+ ERROR: "Une erreur est survenue lors du chargement de vos réservations.",
3084
+ PRINT_ERROR: "L'impression a échoué, veuillez réessayer.",
3085
+ NOT_LOGGED_IN: "Connectez-vous en tant qu'agent pour voir vos réservations.",
3086
+ SESSION_EXPIRED: "Votre session a expiré, veuillez vous reconnecter."
3087
+ };
2885
3088
  var frBeJson = {
2886
3089
  STEPS: STEPS$a,
2887
3090
  INPUT: INPUT$a,
@@ -2902,7 +3105,8 @@ var frBeJson = {
2902
3105
  QSM: QSM$b,
2903
3106
  SRP: SRP$a,
2904
3107
  ITINERARY: ITINERARY$a,
2905
- FORM: FORM$a
3108
+ FORM: FORM$a,
3109
+ AGENT_ENTRIES: AGENT_ENTRIES$a
2906
3110
  };
2907
3111
 
2908
3112
  var STEPS$9 = {
@@ -3355,6 +3559,39 @@ var FORM$9 = {
3355
3559
  YES: "Oui",
3356
3560
  NO: "Non"
3357
3561
  };
3562
+ var AGENT_ENTRIES$9 = {
3563
+ TITLE: "Réservations",
3564
+ MY_BOOKINGS: "Mes réservations",
3565
+ NUMBER: "Numéro",
3566
+ DEPARTURE_DATE: "Date de départ",
3567
+ STATUS: "Statut",
3568
+ CUSTOM_STATUS: "Statut personnalisé",
3569
+ RETURN_DATE: "Date de retour",
3570
+ PROFIT: "Bénéfice",
3571
+ NETTO_SELLING_PRICE: "Prix de vente net",
3572
+ YOUR_SURCHARGE: "Votre supplément",
3573
+ CREATED: "Créé le",
3574
+ CONTACT: "Contact",
3575
+ MAIN_BOOKER: "Réservant principal",
3576
+ PRODUCT: "Produit",
3577
+ TRAVELERS: "Voyageurs",
3578
+ ACTIONS: "Actions",
3579
+ DETAILS: "Détails",
3580
+ HIDE_DETAILS: "Masquer les détails",
3581
+ PRINTS: "Impressions",
3582
+ ALL: "Tous",
3583
+ X_ITEMS: "{0} éléments",
3584
+ PAGE_SIZE: "Éléments par page",
3585
+ PREVIOUS: "Précédent",
3586
+ NEXT: "Suivant",
3587
+ PAGE_X_OF_Y: "Page {0} sur {1}",
3588
+ LOADING: "Chargement...",
3589
+ NO_ITEMS: "Aucune réservation trouvée.",
3590
+ ERROR: "Une erreur est survenue lors du chargement de vos réservations.",
3591
+ PRINT_ERROR: "L'impression a échoué, veuillez réessayer.",
3592
+ NOT_LOGGED_IN: "Connectez-vous en tant qu'agent pour voir vos réservations.",
3593
+ SESSION_EXPIRED: "Votre session a expiré, veuillez vous reconnecter."
3594
+ };
3358
3595
  var frFrJson = {
3359
3596
  STEPS: STEPS$9,
3360
3597
  INPUT: INPUT$9,
@@ -3375,7 +3612,8 @@ var frFrJson = {
3375
3612
  QSM: QSM$a,
3376
3613
  SRP: SRP$9,
3377
3614
  ITINERARY: ITINERARY$9,
3378
- FORM: FORM$9
3615
+ FORM: FORM$9,
3616
+ AGENT_ENTRIES: AGENT_ENTRIES$9
3379
3617
  };
3380
3618
 
3381
3619
  var STEPS$8 = {
@@ -3828,6 +4066,39 @@ var FORM$8 = {
3828
4066
  YES: "Já",
3829
4067
  NO: "Nei"
3830
4068
  };
4069
+ var AGENT_ENTRIES$8 = {
4070
+ TITLE: "Bókanir",
4071
+ MY_BOOKINGS: "Mínar bókanir",
4072
+ NUMBER: "Númer",
4073
+ DEPARTURE_DATE: "Brottfarardagur",
4074
+ STATUS: "Staða",
4075
+ CUSTOM_STATUS: "Sérsniðin staða",
4076
+ RETURN_DATE: "Heimkomudagur",
4077
+ PROFIT: "Hagnaður",
4078
+ NETTO_SELLING_PRICE: "Nettó söluverð",
4079
+ YOUR_SURCHARGE: "Þitt álag",
4080
+ CREATED: "Stofnað",
4081
+ CONTACT: "Tengiliður",
4082
+ MAIN_BOOKER: "Aðalbókandi",
4083
+ PRODUCT: "Vara",
4084
+ TRAVELERS: "Ferðalangar",
4085
+ ACTIONS: "Aðgerðir",
4086
+ DETAILS: "Nánar",
4087
+ HIDE_DETAILS: "Fela nánar",
4088
+ PRINTS: "Útprentanir",
4089
+ ALL: "Allt",
4090
+ X_ITEMS: "{0} atriði",
4091
+ PAGE_SIZE: "Atriði á síðu",
4092
+ PREVIOUS: "Fyrri",
4093
+ NEXT: "Næsta",
4094
+ PAGE_X_OF_Y: "Síða {0} af {1}",
4095
+ LOADING: "Hleður...",
4096
+ NO_ITEMS: "Engar bókanir fundust.",
4097
+ ERROR: "Eitthvað fór úrskeiðis við að hlaða bókunum þínum.",
4098
+ PRINT_ERROR: "Prentun mistókst, reyndu aftur.",
4099
+ NOT_LOGGED_IN: "Skráðu þig inn sem umboðsaðili til að sjá bókanir þínar.",
4100
+ SESSION_EXPIRED: "Lotan þín er útrunnin, skráðu þig inn aftur."
4101
+ };
3831
4102
  var isJson = {
3832
4103
  STEPS: STEPS$8,
3833
4104
  INPUT: INPUT$8,
@@ -3848,7 +4119,8 @@ var isJson = {
3848
4119
  QSM: QSM$9,
3849
4120
  SRP: SRP$8,
3850
4121
  ITINERARY: ITINERARY$8,
3851
- FORM: FORM$8
4122
+ FORM: FORM$8,
4123
+ AGENT_ENTRIES: AGENT_ENTRIES$8
3852
4124
  };
3853
4125
 
3854
4126
  var STEPS$7 = {
@@ -4301,6 +4573,39 @@ var FORM$7 = {
4301
4573
  YES: "Sì",
4302
4574
  NO: "No"
4303
4575
  };
4576
+ var AGENT_ENTRIES$7 = {
4577
+ TITLE: "Prenotazioni",
4578
+ MY_BOOKINGS: "Le mie prenotazioni",
4579
+ NUMBER: "Numero",
4580
+ DEPARTURE_DATE: "Data di partenza",
4581
+ STATUS: "Stato",
4582
+ CUSTOM_STATUS: "Stato personalizzato",
4583
+ RETURN_DATE: "Data di ritorno",
4584
+ PROFIT: "Profitto",
4585
+ NETTO_SELLING_PRICE: "Prezzo di vendita netto",
4586
+ YOUR_SURCHARGE: "Il tuo supplemento",
4587
+ CREATED: "Creato",
4588
+ CONTACT: "Contatto",
4589
+ MAIN_BOOKER: "Prenotante principale",
4590
+ PRODUCT: "Prodotto",
4591
+ TRAVELERS: "Viaggiatori",
4592
+ ACTIONS: "Azioni",
4593
+ DETAILS: "Dettagli",
4594
+ HIDE_DETAILS: "Nascondi dettagli",
4595
+ PRINTS: "Stampe",
4596
+ ALL: "Tutti",
4597
+ X_ITEMS: "{0} elementi",
4598
+ PAGE_SIZE: "Elementi per pagina",
4599
+ PREVIOUS: "Precedente",
4600
+ NEXT: "Successivo",
4601
+ PAGE_X_OF_Y: "Pagina {0} di {1}",
4602
+ LOADING: "Caricamento...",
4603
+ NO_ITEMS: "Nessuna prenotazione trovata.",
4604
+ ERROR: "Si è verificato un errore durante il caricamento delle prenotazioni.",
4605
+ PRINT_ERROR: "Stampa non riuscita, riprova.",
4606
+ NOT_LOGGED_IN: "Accedi come agente per vedere le tue prenotazioni.",
4607
+ SESSION_EXPIRED: "La sessione è scaduta, accedi di nuovo."
4608
+ };
4304
4609
  var itJson = {
4305
4610
  STEPS: STEPS$7,
4306
4611
  INPUT: INPUT$7,
@@ -4321,7 +4626,8 @@ var itJson = {
4321
4626
  QSM: QSM$8,
4322
4627
  SRP: SRP$7,
4323
4628
  ITINERARY: ITINERARY$7,
4324
- FORM: FORM$7
4629
+ FORM: FORM$7,
4630
+ AGENT_ENTRIES: AGENT_ENTRIES$7
4325
4631
  };
4326
4632
 
4327
4633
  var STEPS$6 = {
@@ -4778,6 +5084,39 @@ var FORM$6 = {
4778
5084
  YES: "Ja",
4779
5085
  NO: "Nee"
4780
5086
  };
5087
+ var AGENT_ENTRIES$6 = {
5088
+ TITLE: "Boekingen",
5089
+ MY_BOOKINGS: "Mijn boekingen",
5090
+ NUMBER: "Nummer",
5091
+ DEPARTURE_DATE: "Vertrekdatum",
5092
+ STATUS: "Status",
5093
+ CUSTOM_STATUS: "Aangepaste status",
5094
+ RETURN_DATE: "Terugkeerdatum",
5095
+ PROFIT: "Winst",
5096
+ NETTO_SELLING_PRICE: "Netto verkoopprijs",
5097
+ YOUR_SURCHARGE: "Jouw toeslag",
5098
+ CREATED: "Aangemaakt",
5099
+ CONTACT: "Contact",
5100
+ MAIN_BOOKER: "Hoofdboeker",
5101
+ PRODUCT: "Product",
5102
+ TRAVELERS: "Reizigers",
5103
+ ACTIONS: "Acties",
5104
+ DETAILS: "Details",
5105
+ HIDE_DETAILS: "Details verbergen",
5106
+ PRINTS: "Afdrukken",
5107
+ ALL: "Alle",
5108
+ X_ITEMS: "{0} items",
5109
+ PAGE_SIZE: "Items per pagina",
5110
+ PREVIOUS: "Vorige",
5111
+ NEXT: "Volgende",
5112
+ PAGE_X_OF_Y: "Pagina {0} van {1}",
5113
+ LOADING: "Laden...",
5114
+ NO_ITEMS: "Geen boekingen gevonden.",
5115
+ ERROR: "Er ging iets mis bij het laden van je boekingen.",
5116
+ PRINT_ERROR: "Afdrukken mislukt, probeer het opnieuw.",
5117
+ NOT_LOGGED_IN: "Log in als agent om je boekingen te zien.",
5118
+ SESSION_EXPIRED: "Je sessie is verlopen, log opnieuw in."
5119
+ };
4781
5120
  var nlBeJson = {
4782
5121
  STEPS: STEPS$6,
4783
5122
  INPUT: INPUT$6,
@@ -4798,7 +5137,8 @@ var nlBeJson = {
4798
5137
  QSM: QSM$7,
4799
5138
  SRP: SRP$6,
4800
5139
  ITINERARY: ITINERARY$6,
4801
- FORM: FORM$6
5140
+ FORM: FORM$6,
5141
+ AGENT_ENTRIES: AGENT_ENTRIES$6
4802
5142
  };
4803
5143
 
4804
5144
  var STEPS$5 = {
@@ -5251,6 +5591,39 @@ var FORM$5 = {
5251
5591
  YES: "Ja",
5252
5592
  NO: "Nee"
5253
5593
  };
5594
+ var AGENT_ENTRIES$5 = {
5595
+ TITLE: "Boekingen",
5596
+ MY_BOOKINGS: "Mijn boekingen",
5597
+ NUMBER: "Nummer",
5598
+ DEPARTURE_DATE: "Vertrekdatum",
5599
+ STATUS: "Status",
5600
+ CUSTOM_STATUS: "Aangepaste status",
5601
+ RETURN_DATE: "Terugkeerdatum",
5602
+ PROFIT: "Winst",
5603
+ NETTO_SELLING_PRICE: "Netto verkoopprijs",
5604
+ YOUR_SURCHARGE: "Jouw toeslag",
5605
+ CREATED: "Aangemaakt",
5606
+ CONTACT: "Contact",
5607
+ MAIN_BOOKER: "Hoofdboeker",
5608
+ PRODUCT: "Product",
5609
+ TRAVELERS: "Reizigers",
5610
+ ACTIONS: "Acties",
5611
+ DETAILS: "Details",
5612
+ HIDE_DETAILS: "Details verbergen",
5613
+ PRINTS: "Afdrukken",
5614
+ ALL: "Alle",
5615
+ X_ITEMS: "{0} items",
5616
+ PAGE_SIZE: "Items per pagina",
5617
+ PREVIOUS: "Vorige",
5618
+ NEXT: "Volgende",
5619
+ PAGE_X_OF_Y: "Pagina {0} van {1}",
5620
+ LOADING: "Laden...",
5621
+ NO_ITEMS: "Geen boekingen gevonden.",
5622
+ ERROR: "Er ging iets mis bij het laden van je boekingen.",
5623
+ PRINT_ERROR: "Afdrukken mislukt, probeer het opnieuw.",
5624
+ NOT_LOGGED_IN: "Log in als agent om je boekingen te zien.",
5625
+ SESSION_EXPIRED: "Je sessie is verlopen, log opnieuw in."
5626
+ };
5254
5627
  var nlNlJson = {
5255
5628
  STEPS: STEPS$5,
5256
5629
  INPUT: INPUT$5,
@@ -5271,7 +5644,8 @@ var nlNlJson = {
5271
5644
  QSM: QSM$6,
5272
5645
  SRP: SRP$5,
5273
5646
  ITINERARY: ITINERARY$5,
5274
- FORM: FORM$5
5647
+ FORM: FORM$5,
5648
+ AGENT_ENTRIES: AGENT_ENTRIES$5
5275
5649
  };
5276
5650
 
5277
5651
  var STEPS$4 = {
@@ -5724,6 +6098,39 @@ var FORM$4 = {
5724
6098
  YES: "Ja",
5725
6099
  NO: "Nei"
5726
6100
  };
6101
+ var AGENT_ENTRIES$4 = {
6102
+ TITLE: "Bestillinger",
6103
+ MY_BOOKINGS: "Mine bestillinger",
6104
+ NUMBER: "Nummer",
6105
+ DEPARTURE_DATE: "Avreisedato",
6106
+ STATUS: "Status",
6107
+ CUSTOM_STATUS: "Egendefinert status",
6108
+ RETURN_DATE: "Returdato",
6109
+ PROFIT: "Fortjeneste",
6110
+ NETTO_SELLING_PRICE: "Netto salgspris",
6111
+ YOUR_SURCHARGE: "Ditt tillegg",
6112
+ CREATED: "Opprettet",
6113
+ CONTACT: "Kontakt",
6114
+ MAIN_BOOKER: "Hovedbestiller",
6115
+ PRODUCT: "Produkt",
6116
+ TRAVELERS: "Reisende",
6117
+ ACTIONS: "Handlinger",
6118
+ DETAILS: "Detaljer",
6119
+ HIDE_DETAILS: "Skjul detaljer",
6120
+ PRINTS: "Utskrifter",
6121
+ ALL: "Alle",
6122
+ X_ITEMS: "{0} elementer",
6123
+ PAGE_SIZE: "Elementer per side",
6124
+ PREVIOUS: "Forrige",
6125
+ NEXT: "Neste",
6126
+ PAGE_X_OF_Y: "Side {0} av {1}",
6127
+ LOADING: "Laster...",
6128
+ NO_ITEMS: "Ingen bestillinger funnet.",
6129
+ ERROR: "Noe gikk galt under lasting av bestillingene dine.",
6130
+ PRINT_ERROR: "Utskrift mislyktes, prøv igjen.",
6131
+ NOT_LOGGED_IN: "Logg inn som agent for å se bestillingene dine.",
6132
+ SESSION_EXPIRED: "Økten din er utløpt, logg inn på nytt."
6133
+ };
5727
6134
  var noJson = {
5728
6135
  STEPS: STEPS$4,
5729
6136
  INPUT: INPUT$4,
@@ -5744,7 +6151,8 @@ var noJson = {
5744
6151
  QSM: QSM$5,
5745
6152
  SRP: SRP$4,
5746
6153
  ITINERARY: ITINERARY$4,
5747
- FORM: FORM$4
6154
+ FORM: FORM$4,
6155
+ AGENT_ENTRIES: AGENT_ENTRIES$4
5748
6156
  };
5749
6157
 
5750
6158
  var STEPS$3 = {
@@ -6197,6 +6605,39 @@ var FORM$3 = {
6197
6605
  YES: "Tak",
6198
6606
  NO: "Nie"
6199
6607
  };
6608
+ var AGENT_ENTRIES$3 = {
6609
+ TITLE: "Rezerwacje",
6610
+ MY_BOOKINGS: "Moje rezerwacje",
6611
+ NUMBER: "Numer",
6612
+ DEPARTURE_DATE: "Data wyjazdu",
6613
+ STATUS: "Status",
6614
+ CUSTOM_STATUS: "Status niestandardowy",
6615
+ RETURN_DATE: "Data powrotu",
6616
+ PROFIT: "Zysk",
6617
+ NETTO_SELLING_PRICE: "Cena sprzedaży netto",
6618
+ YOUR_SURCHARGE: "Twoja dopłata",
6619
+ CREATED: "Utworzono",
6620
+ CONTACT: "Kontakt",
6621
+ MAIN_BOOKER: "Główny rezerwujący",
6622
+ PRODUCT: "Produkt",
6623
+ TRAVELERS: "Podróżni",
6624
+ ACTIONS: "Akcje",
6625
+ DETAILS: "Szczegóły",
6626
+ HIDE_DETAILS: "Ukryj szczegóły",
6627
+ PRINTS: "Wydruki",
6628
+ ALL: "Wszystkie",
6629
+ X_ITEMS: "{0} pozycji",
6630
+ PAGE_SIZE: "Pozycji na stronę",
6631
+ PREVIOUS: "Poprzednia",
6632
+ NEXT: "Następna",
6633
+ PAGE_X_OF_Y: "Strona {0} z {1}",
6634
+ LOADING: "Ładowanie...",
6635
+ NO_ITEMS: "Nie znaleziono rezerwacji.",
6636
+ ERROR: "Wystąpił błąd podczas ładowania rezerwacji.",
6637
+ PRINT_ERROR: "Drukowanie nie powiodło się, spróbuj ponownie.",
6638
+ NOT_LOGGED_IN: "Zaloguj się jako agent, aby zobaczyć swoje rezerwacje.",
6639
+ SESSION_EXPIRED: "Twoja sesja wygasła, zaloguj się ponownie."
6640
+ };
6200
6641
  var plJson = {
6201
6642
  STEPS: STEPS$3,
6202
6643
  INPUT: INPUT$3,
@@ -6217,7 +6658,8 @@ var plJson = {
6217
6658
  QSM: QSM$4,
6218
6659
  SRP: SRP$3,
6219
6660
  ITINERARY: ITINERARY$3,
6220
- FORM: FORM$3
6661
+ FORM: FORM$3,
6662
+ AGENT_ENTRIES: AGENT_ENTRIES$3
6221
6663
  };
6222
6664
 
6223
6665
  var STEPS$2 = {
@@ -6670,6 +7112,39 @@ var FORM$2 = {
6670
7112
  YES: "Sim",
6671
7113
  NO: "Não"
6672
7114
  };
7115
+ var AGENT_ENTRIES$2 = {
7116
+ TITLE: "Reservas",
7117
+ MY_BOOKINGS: "As minhas reservas",
7118
+ NUMBER: "Número",
7119
+ DEPARTURE_DATE: "Data de partida",
7120
+ STATUS: "Estado",
7121
+ CUSTOM_STATUS: "Estado personalizado",
7122
+ RETURN_DATE: "Data de regresso",
7123
+ PROFIT: "Lucro",
7124
+ NETTO_SELLING_PRICE: "Preço de venda líquido",
7125
+ YOUR_SURCHARGE: "A sua sobretaxa",
7126
+ CREATED: "Criado",
7127
+ CONTACT: "Contacto",
7128
+ MAIN_BOOKER: "Titular da reserva",
7129
+ PRODUCT: "Produto",
7130
+ TRAVELERS: "Viajantes",
7131
+ ACTIONS: "Ações",
7132
+ DETAILS: "Detalhes",
7133
+ HIDE_DETAILS: "Ocultar detalhes",
7134
+ PRINTS: "Impressões",
7135
+ ALL: "Todos",
7136
+ X_ITEMS: "{0} itens",
7137
+ PAGE_SIZE: "Itens por página",
7138
+ PREVIOUS: "Anterior",
7139
+ NEXT: "Seguinte",
7140
+ PAGE_X_OF_Y: "Página {0} de {1}",
7141
+ LOADING: "A carregar...",
7142
+ NO_ITEMS: "Nenhuma reserva encontrada.",
7143
+ ERROR: "Ocorreu um erro ao carregar as suas reservas.",
7144
+ PRINT_ERROR: "A impressão falhou, tente novamente.",
7145
+ NOT_LOGGED_IN: "Inicie sessão como agente para ver as suas reservas.",
7146
+ SESSION_EXPIRED: "A sua sessão expirou, inicie sessão novamente."
7147
+ };
6673
7148
  var ptJson = {
6674
7149
  STEPS: STEPS$2,
6675
7150
  INPUT: INPUT$2,
@@ -6690,7 +7165,8 @@ var ptJson = {
6690
7165
  QSM: QSM$3,
6691
7166
  SRP: SRP$2,
6692
7167
  ITINERARY: ITINERARY$2,
6693
- FORM: FORM$2
7168
+ FORM: FORM$2,
7169
+ AGENT_ENTRIES: AGENT_ENTRIES$2
6694
7170
  };
6695
7171
 
6696
7172
  var STEPS$1 = {
@@ -7143,6 +7619,39 @@ var FORM$1 = {
7143
7619
  YES: "Ja",
7144
7620
  NO: "Nej"
7145
7621
  };
7622
+ var AGENT_ENTRIES$1 = {
7623
+ TITLE: "Bokningar",
7624
+ MY_BOOKINGS: "Mina bokningar",
7625
+ NUMBER: "Nummer",
7626
+ DEPARTURE_DATE: "Avresedatum",
7627
+ STATUS: "Status",
7628
+ CUSTOM_STATUS: "Anpassad status",
7629
+ RETURN_DATE: "Returdatum",
7630
+ PROFIT: "Vinst",
7631
+ NETTO_SELLING_PRICE: "Nettoförsäljningspris",
7632
+ YOUR_SURCHARGE: "Ditt tillägg",
7633
+ CREATED: "Skapad",
7634
+ CONTACT: "Kontakt",
7635
+ MAIN_BOOKER: "Huvudbokare",
7636
+ PRODUCT: "Produkt",
7637
+ TRAVELERS: "Resenärer",
7638
+ ACTIONS: "Åtgärder",
7639
+ DETAILS: "Detaljer",
7640
+ HIDE_DETAILS: "Dölj detaljer",
7641
+ PRINTS: "Utskrifter",
7642
+ ALL: "Alla",
7643
+ X_ITEMS: "{0} objekt",
7644
+ PAGE_SIZE: "Objekt per sida",
7645
+ PREVIOUS: "Föregående",
7646
+ NEXT: "Nästa",
7647
+ PAGE_X_OF_Y: "Sida {0} av {1}",
7648
+ LOADING: "Laddar...",
7649
+ NO_ITEMS: "Inga bokningar hittades.",
7650
+ ERROR: "Något gick fel när dina bokningar laddades.",
7651
+ PRINT_ERROR: "Utskriften misslyckades, försök igen.",
7652
+ NOT_LOGGED_IN: "Logga in som agent för att se dina bokningar.",
7653
+ SESSION_EXPIRED: "Din session har gått ut, logga in igen."
7654
+ };
7146
7655
  var svJson = {
7147
7656
  STEPS: STEPS$1,
7148
7657
  INPUT: INPUT$1,
@@ -7163,7 +7672,8 @@ var svJson = {
7163
7672
  QSM: QSM$2,
7164
7673
  SRP: SRP$1,
7165
7674
  ITINERARY: ITINERARY$1,
7166
- FORM: FORM$1
7675
+ FORM: FORM$1,
7676
+ AGENT_ENTRIES: AGENT_ENTRIES$1
7167
7677
  };
7168
7678
 
7169
7679
  var STEPS = {
@@ -7616,6 +8126,39 @@ var FORM = {
7616
8126
  YES: "はい",
7617
8127
  NO: "いいえ"
7618
8128
  };
8129
+ var AGENT_ENTRIES = {
8130
+ TITLE: "予約",
8131
+ MY_BOOKINGS: "マイ予約",
8132
+ NUMBER: "番号",
8133
+ DEPARTURE_DATE: "出発日",
8134
+ STATUS: "ステータス",
8135
+ CUSTOM_STATUS: "カスタムステータス",
8136
+ RETURN_DATE: "帰着日",
8137
+ PROFIT: "利益",
8138
+ NETTO_SELLING_PRICE: "正味販売価格",
8139
+ YOUR_SURCHARGE: "手数料",
8140
+ CREATED: "作成日",
8141
+ CONTACT: "連絡先",
8142
+ MAIN_BOOKER: "代表予約者",
8143
+ PRODUCT: "商品",
8144
+ TRAVELERS: "旅行者",
8145
+ ACTIONS: "操作",
8146
+ DETAILS: "詳細",
8147
+ HIDE_DETAILS: "詳細を隠す",
8148
+ PRINTS: "印刷",
8149
+ ALL: "すべて",
8150
+ X_ITEMS: "{0} 件",
8151
+ PAGE_SIZE: "1ページあたりの件数",
8152
+ PREVIOUS: "前へ",
8153
+ NEXT: "次へ",
8154
+ PAGE_X_OF_Y: "{0} / {1} ページ",
8155
+ LOADING: "読み込み中...",
8156
+ NO_ITEMS: "予約が見つかりません。",
8157
+ ERROR: "予約の読み込み中にエラーが発生しました。",
8158
+ PRINT_ERROR: "印刷に失敗しました。もう一度お試しください。",
8159
+ NOT_LOGGED_IN: "予約を表示するにはエージェントとしてログインしてください。",
8160
+ SESSION_EXPIRED: "セッションの有効期限が切れました。再度ログインしてください。"
8161
+ };
7619
8162
  var jaJson = {
7620
8163
  STEPS: STEPS,
7621
8164
  INPUT: INPUT,
@@ -7636,7 +8179,8 @@ var jaJson = {
7636
8179
  QSM: QSM$1,
7637
8180
  SRP: SRP,
7638
8181
  ITINERARY: ITINERARY,
7639
- FORM: FORM
8182
+ FORM: FORM,
8183
+ AGENT_ENTRIES: AGENT_ENTRIES
7640
8184
  };
7641
8185
 
7642
8186
  exports.DepartureRange = void 0;
@@ -26555,7 +27099,7 @@ const LanguageSwitcher = ({ value = 'EN', languages = DEFAULT_LANGUAGES, onChang
26555
27099
  React__default["default"].createElement("span", { className: "nav__subnav__languages__option__label" }, l.label)))))));
26556
27100
  };
26557
27101
 
26558
- const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, languages, onLanguageChange, onSearch, member, onLogin, onLogout }) => {
27102
+ const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, languages, onLanguageChange, onSearch, member, onLogin, onLogout, onMyBookings }) => {
26559
27103
  const [menuOpen, setMenuOpen] = React.useState(false);
26560
27104
  const [query, setQuery] = React.useState('');
26561
27105
  const [activeMobileGroup, setActiveMobileGroup] = React.useState();
@@ -26649,6 +27193,12 @@ const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, lan
26649
27193
  onLogout();
26650
27194
  }
26651
27195
  };
27196
+ const handleMyBookings = (event) => {
27197
+ event.preventDefault();
27198
+ if (onMyBookings) {
27199
+ onMyBookings();
27200
+ }
27201
+ };
26652
27202
  const handleLogin = (event) => {
26653
27203
  event.preventDefault();
26654
27204
  if (onLogin) {
@@ -26662,7 +27212,9 @@ const Navbar = ({ currentPath, logo, onLogoClick, topLinks, items, language, lan
26662
27212
  member && (React__default["default"].createElement("span", { className: "nav__subnav__member" },
26663
27213
  translations.LOGIN.WELCOME_X,
26664
27214
  member.name)),
26665
- member ? (React__default["default"].createElement(React__default["default"].Fragment, null, onLogout && (React__default["default"].createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogout }, translations.LOGIN.LOGOUT)))) : (React__default["default"].createElement(React__default["default"].Fragment, null, onLogin && (React__default["default"].createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogin }, translations.LOGIN.LOGIN)))),
27215
+ member ? (React__default["default"].createElement(React__default["default"].Fragment, null,
27216
+ onMyBookings && (React__default["default"].createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleMyBookings }, translations.AGENT_ENTRIES.MY_BOOKINGS)),
27217
+ onLogout && (React__default["default"].createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogout }, translations.LOGIN.LOGOUT)))) : (React__default["default"].createElement(React__default["default"].Fragment, null, onLogin && (React__default["default"].createElement("a", { href: "#", className: "nav__subnav__link", onClick: handleLogin }, translations.LOGIN.LOGIN)))),
26666
27218
  React__default["default"].createElement(LanguageSwitcher, { value: language.code, languages: languages, onChange: (lang) => {
26667
27219
  console.log('Selected language:', lang);
26668
27220
  onLanguageChange(lang);
@@ -29746,7 +30298,9 @@ const TrajectItinerary = ({ trajectEntry, packagingEntry, translations }) => {
29746
30298
  .map((node) => {
29747
30299
  const guids = node.lineGuids?.length ? node.lineGuids : [node.lineGuid];
29748
30300
  const lines = guids.map((guid) => linesByGuid.get(guid)).filter((x) => !!x);
29749
- return { node, lines };
30301
+ const groupKey = lines.length ? getLineGroupKey(lines[0]) : '';
30302
+ const active = groupKey ? getGroupLines(packagingEntry.lines ?? [], groupKey)[0] : undefined;
30303
+ return { node, lines: active ?? lines };
29750
30304
  });
29751
30305
  const claimed = new Set(nodes.flatMap((item) => item.lines.map((line) => line.guid)));
29752
30306
  const extras = (packagingEntry.lines ?? []).filter((line) => !claimed.has(line.guid)).filter(isMeaningfulItineraryLine);
@@ -35696,6 +36250,25 @@ const BookPackagingEntry = ({ activeSearchSeed, isLoading, isConfirmationPage })
35696
36250
  React__default["default"].createElement(WLSidebar, { activeSearchSeed: activeSearchSeed, packagingAccoResult: selectedPackagingAccoResult }))));
35697
36251
  };
35698
36252
 
36253
+ // A horizontally scrolling row of cards whose selected cards sit first. Choosing a card moves it to the front of the row
36254
+ const TrajectCardRow = ({ selectionKey, children }) => {
36255
+ const ref = React.useRef(null);
36256
+ const previousKey = React.useRef(selectionKey);
36257
+ React.useEffect(() => {
36258
+ if (previousKey.current === selectionKey)
36259
+ return;
36260
+ previousKey.current = selectionKey;
36261
+ const row = ref.current;
36262
+ if (!row || row.scrollLeft === 0)
36263
+ return;
36264
+ if (typeof row.scrollTo === 'function')
36265
+ row.scrollTo({ left: 0, behavior: 'smooth' });
36266
+ else
36267
+ row.scrollLeft = 0;
36268
+ }, [selectionKey]);
36269
+ return (React__default["default"].createElement("div", { ref: ref, className: "search__results__cards search__results__cards--scroll" }, children));
36270
+ };
36271
+
35699
36272
  const useTrajectDayActivities = () => {
35700
36273
  const context = React.useContext(SearchResultsConfigurationContext);
35701
36274
  const dispatch = reactRedux.useDispatch();
@@ -35897,7 +36470,7 @@ const TrajectResults = ({ isLoading }) => {
35897
36470
  node.preferredAccommodationName,
35898
36471
  " \u2014 ",
35899
36472
  translations.SRP.NO_RESULTS))),
35900
- 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, selectedLabel: bookedMode && matchesCode(result, node.code ?? '') ? translations.SHARED.BOOKED : undefined })))),
36473
+ React__default["default"].createElement(TrajectCardRow, { selectionKey: selected.code }, [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 })))),
35901
36474
  remaining > 0 && !hideShowMoreResults && (React__default["default"].createElement("div", { className: "search__results__cards__actions" },
35902
36475
  React__default["default"].createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => handleShowMore(item) },
35903
36476
  translations.SRP.SHOW_MORE,
@@ -35944,6 +36517,7 @@ const TrajectResults = ({ isLoading }) => {
35944
36517
  };
35945
36518
  /** The lines a suggested activity put on the entry, which is also how we know it was added. */
35946
36519
  const getAddedExcursionLines = (result) => (editablePackagingEntry?.lines ?? []).filter((line) => line.serviceType === EXCURSION_SERVICE_TYPE && line.productCode === result.code && dateFns.isSameDay(new Date(line.from), new Date(result.fromDate)));
36520
+ const isActivitySelected = ({ result, item }) => item ? trajectNodeAvailability[item.line.guid]?.selectedCode === result.code : getAddedExcursionLines(result).length > 0;
35947
36521
  const handleToggleActivity = (result) => {
35948
36522
  const added = getAddedExcursionLines(result);
35949
36523
  if (added.length) {
@@ -35982,7 +36556,9 @@ const TrajectResults = ({ isLoading }) => {
35982
36556
  const renderDayActivities = (day) => {
35983
36557
  const items = getDayExcursionItems(day.order);
35984
36558
  const suggestions = trajectDaySuggestions[day.order];
35985
- const cards = buildDayActivityCards(items, trajectNodeAvailability, suggestions?.results ?? []);
36559
+ const allCards = buildDayActivityCards(items, trajectNodeAvailability, suggestions?.results ?? []);
36560
+ const selectedCards = allCards.filter(isActivitySelected);
36561
+ const cards = [...selectedCards, ...allCards.filter((card) => !isActivitySelected(card))];
35986
36562
  const nodesResolving = items.some((item) => (trajectNodeAvailability[item.line.guid]?.status ?? 'loading') === 'loading');
35987
36563
  const isSearching = suggestions?.status === 'loading';
35988
36564
  // A day is worth filling only if the party is staying somewhere that night. The day they fly
@@ -36001,7 +36577,7 @@ const TrajectResults = ({ isLoading }) => {
36001
36577
  React__default["default"].createElement("h3", null,
36002
36578
  React__default["default"].createElement("strong", null, translations.SRP.ACTIVITIES)))),
36003
36579
  (nodesResolving || isSearching) && !cards.length && React__default["default"].createElement(Spinner, { label: translations.SRP.LOADING_ACTIVITIES }),
36004
- !!cards.length && React__default["default"].createElement("div", { className: "search__results__cards search__results__cards--scroll" }, visible.map(renderActivityCard)),
36580
+ !!cards.length && (React__default["default"].createElement(TrajectCardRow, { selectionKey: selectedCards.map((card) => card.result.code).join('|') }, visible.map(renderActivityCard))),
36005
36581
  !nodesResolving && !isSearching && !cards.length && (!!items.length || !!suggestions) && (React__default["default"].createElement("div", { className: "no-results" }, translations.SRP.NO_RESULTS)),
36006
36582
  React__default["default"].createElement("div", { className: "search__results__cards__actions" },
36007
36583
  awaitsRequest && (React__default["default"].createElement("button", { type: "button", className: "cta cta--secondary", onClick: () => loadDay(day) }, translations.SRP.SHOW_ACTIVITIES)),
@@ -36016,7 +36592,7 @@ const TrajectResults = ({ isLoading }) => {
36016
36592
  * found for themselves is added to the trip or taken back off it.
36017
36593
  */
36018
36594
  const renderActivityCard = ({ result, item }) => {
36019
- const isSelected = item ? trajectNodeAvailability[item.line.guid]?.selectedCode === result.code : getAddedExcursionLines(result).length > 0;
36595
+ const isSelected = isActivitySelected({ result, item });
36020
36596
  const isBookedCard = !!item && bookedMode && matchesCode(result, item.node.code ?? '');
36021
36597
  return (React__default["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 }));
36022
36598
  };
@@ -40160,6 +40736,363 @@ const Login = ({ tideClientConfig, portalId, languageCode, imageSrc, logo, isMem
40160
40736
  isMemberConfirmation && (React__default["default"].createElement(ConfirmComponent, { tideClientConfig: tideClientConfig, portalId: portalId, languageCode: languageCode, member: member, setMember: setMember, handleBackToHome: handleBackToHome, handleBackToLogin: handleBackToLogin }))))));
40161
40737
  };
40162
40738
 
40739
+ /** Agent endpoints need the member token, fall back to the one the Login component stored. */
40740
+ const withAgentToken = (config) => ({
40741
+ ...config,
40742
+ token: config.token ?? selectAgentToken()
40743
+ });
40744
+ /** False when the token is not a JWT or has expired. */
40745
+ const isAgentTokenValid = (token) => {
40746
+ if (!token)
40747
+ return false;
40748
+ try {
40749
+ const { exp } = jwtDecode(token);
40750
+ return !exp || exp * 1000 > Date.now();
40751
+ }
40752
+ catch {
40753
+ return false;
40754
+ }
40755
+ };
40756
+ // tide-client throws Error(statusText) without the status, and statusText is empty over HTTP/2,
40757
+ // so also treat any failure with an invalid/expired token as unauthorized.
40758
+ const isUnauthorizedError = (error, token) => (error instanceof Error && /unauthori[sz]ed|forbidden/i.test(error.message)) || !isAgentTokenValid(token);
40759
+ const fetchLookups = async (config, languageCode, signal) => {
40760
+ // A failing lookup should not block the list itself.
40761
+ const [entryStatuses, customEntryStatuses, printActions] = await Promise.allSettled([
40762
+ build.getEntryStatus(config, signal, languageCode),
40763
+ build.getCustomEntryStatus(config, signal, languageCode),
40764
+ build.getPrintActions(config, build.PrintActionGroup.Dossier, signal)
40765
+ ]);
40766
+ return {
40767
+ entryStatuses: entryStatuses.status === 'fulfilled' ? entryStatuses.value ?? [] : [],
40768
+ customEntryStatuses: customEntryStatuses.status === 'fulfilled' ? customEntryStatuses.value ?? [] : [],
40769
+ printActions: printActions.status === 'fulfilled' ? printActions.value ?? [] : []
40770
+ };
40771
+ };
40772
+ /** Converts the raw filter inputs to the OData column filters understood by tide-client's createParams. */
40773
+ const buildFilterItem = (columns, filterValues, sort, page, take) => {
40774
+ const filterColumns = {};
40775
+ columns.forEach((column) => {
40776
+ const raw = filterValues[column.id]?.trim();
40777
+ if (!raw)
40778
+ return;
40779
+ switch (column.kind) {
40780
+ case 'text':
40781
+ filterColumns[column.id] = { type: 'text', value: raw };
40782
+ break;
40783
+ case 'number': {
40784
+ const value = parseFloat(raw.replace(',', '.'));
40785
+ if (!isNaN(value))
40786
+ filterColumns[column.id] = { type: 'number', value };
40787
+ break;
40788
+ }
40789
+ case 'date': {
40790
+ // <input type="date"> value: yyyy-MM-dd, createParams expects a 1-based month.
40791
+ const [year, month, day] = raw.split('-').map((x) => parseInt(x, 10));
40792
+ if (year && month && day)
40793
+ filterColumns[column.id] = { type: 'date', value: { year, month, day } };
40794
+ break;
40795
+ }
40796
+ case 'status':
40797
+ case 'customStatus':
40798
+ filterColumns[column.id] = { type: 'enum', value: parseInt(raw, 10) };
40799
+ break;
40800
+ }
40801
+ });
40802
+ return { take, page, sort, columns: filterColumns };
40803
+ };
40804
+ const fetchEntries = (config, filter, signal) => build.getEntryList(config, filter, undefined, signal);
40805
+ /** Prints the entry and returns an object url to the resulting pdf. */
40806
+ const printEntry = async (config, printActionId, entryId) => {
40807
+ // Same request as the agent portal: the print action and the entry (version) id.
40808
+ const request = { id: printActionId, entryId };
40809
+ const response = await build.print(config, request);
40810
+ if (!response.ok)
40811
+ throw new Error(response.statusText);
40812
+ const buffer = await response.arrayBuffer();
40813
+ return URL.createObjectURL(new Blob([buffer], { type: 'application/pdf' }));
40814
+ };
40815
+
40816
+ const PAGE_SIZES = [10, 20, 50, 100];
40817
+ const FILTER_DEBOUNCE_MS = 400;
40818
+ const EyeIcon = () => (React__default["default"].createElement("svg", { className: "agent-entries__icon", viewBox: "0 0 576 512", fill: "currentColor", "aria-hidden": "true" },
40819
+ React__default["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" })));
40820
+ const PrintIcon = () => (React__default["default"].createElement("svg", { className: "agent-entries__icon", viewBox: "0 0 512 512", fill: "currentColor", "aria-hidden": "true" },
40821
+ React__default["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" })));
40822
+ const SortIcon = ({ asc }) => (React__default["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" },
40823
+ React__default["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" })));
40824
+ const AgentEntries = ({ tideClientConfig, languageCode, title, pageSize, customTranslations, onLogin, onUnauthorized }) => {
40825
+ const translations = React.useMemo(() => getTranslations(languageCode ?? 'en-GB', customTranslations), [languageCode, customTranslations]);
40826
+ const t = translations.AGENT_ENTRIES;
40827
+ const config = React.useMemo(() => withAgentToken(tideClientConfig), [tideClientConfig.host, tideClientConfig.apiKey, tideClientConfig.token]);
40828
+ const isLoggedIn = !!config.token;
40829
+ const hasValidToken = isLoggedIn && isAgentTokenValid(config.token);
40830
+ const columns = React.useMemo(() => [
40831
+ { id: 'number', kind: 'text', label: t.NUMBER },
40832
+ { id: 'departureDate', kind: 'date', label: t.DEPARTURE_DATE },
40833
+ { id: 'status', kind: 'status', label: t.STATUS },
40834
+ { id: 'customEntryStatusId', kind: 'customStatus', label: t.CUSTOM_STATUS },
40835
+ { id: 'returnDate', kind: 'date', label: t.RETURN_DATE },
40836
+ { id: 'profit', kind: 'number', label: t.PROFIT },
40837
+ { id: 'totalPrice', kind: 'number', label: t.NETTO_SELLING_PRICE },
40838
+ { id: 'calculatedAgentSurchargeAmount', kind: 'number', label: t.YOUR_SURCHARGE },
40839
+ { id: 'createdDate', kind: 'date', label: t.CREATED },
40840
+ { id: 'contact', kind: 'text', label: t.CONTACT },
40841
+ { id: 'travelerAddress', kind: 'text', label: t.MAIN_BOOKER }
40842
+ ], [t]);
40843
+ const [lookups, setLookups] = React.useState({ entryStatuses: [], customEntryStatuses: [], printActions: [] });
40844
+ const [entries, setEntries] = React.useState([]);
40845
+ const [count, setCount] = React.useState();
40846
+ const [loadState, setLoadState] = React.useState('idle');
40847
+ const [filterInputs, setFilterInputs] = React.useState({});
40848
+ const [filterValues, setFilterValues] = React.useState({});
40849
+ const [sort, setSort] = React.useState({ name: 'number', asc: true });
40850
+ const [page, setPage] = React.useState(1);
40851
+ const [take, setTake] = React.useState(pageSize ?? 20);
40852
+ const [expandedId, setExpandedId] = React.useState();
40853
+ const [printingKey, setPrintingKey] = React.useState();
40854
+ const [printError, setPrintError] = React.useState(false);
40855
+ const handleError = (error) => {
40856
+ if (error instanceof DOMException && error.name === 'AbortError')
40857
+ return;
40858
+ if (isUnauthorizedError(error, config.token)) {
40859
+ setLoadState('unauthorized');
40860
+ onUnauthorized?.();
40861
+ }
40862
+ else {
40863
+ console.error(error);
40864
+ setLoadState('error');
40865
+ }
40866
+ };
40867
+ React.useEffect(() => {
40868
+ if (isLoggedIn && !hasValidToken)
40869
+ onUnauthorized?.();
40870
+ }, [isLoggedIn, hasValidToken]);
40871
+ // Lookups (statuses & print actions) only need to be fetched once.
40872
+ React.useEffect(() => {
40873
+ if (!hasValidToken)
40874
+ return;
40875
+ const controller = new AbortController();
40876
+ fetchLookups(config, languageCode, controller.signal)
40877
+ .then(setLookups)
40878
+ .catch(() => { });
40879
+ return () => controller.abort();
40880
+ }, [config, languageCode, hasValidToken]);
40881
+ // Debounce the typed filters, a selected dropdown/date is applied immediately.
40882
+ React.useEffect(() => {
40883
+ const handle = setTimeout(() => {
40884
+ if (lodash.isEqual(filterInputs, filterValues))
40885
+ return;
40886
+ setFilterValues(filterInputs);
40887
+ setPage(1);
40888
+ }, FILTER_DEBOUNCE_MS);
40889
+ return () => clearTimeout(handle);
40890
+ }, [filterInputs]);
40891
+ React.useEffect(() => {
40892
+ if (!hasValidToken)
40893
+ return;
40894
+ const controller = new AbortController();
40895
+ setLoadState('loading');
40896
+ fetchEntries(config, buildFilterItem(columns, filterValues, sort, page, take), controller.signal)
40897
+ .then((result) => {
40898
+ setEntries(result?.items ?? []);
40899
+ setCount(result?.count ?? undefined);
40900
+ setLoadState('loaded');
40901
+ })
40902
+ .catch(handleError);
40903
+ return () => controller.abort();
40904
+ }, [config, hasValidToken, columns, filterValues, sort, page, take]);
40905
+ const totalPages = count !== undefined ? Math.max(1, Math.ceil(count / take)) : undefined;
40906
+ const hasNextPage = totalPages !== undefined ? page < totalPages : entries.length === take;
40907
+ const handleSort = (columnId) => {
40908
+ setSort((current) => (current.name === columnId ? { name: columnId, asc: !current.asc } : { name: columnId, asc: true }));
40909
+ setPage(1);
40910
+ };
40911
+ const handleFilterChange = (columnId, value, immediate) => {
40912
+ const next = { ...filterInputs, [columnId]: value };
40913
+ setFilterInputs(next);
40914
+ if (immediate) {
40915
+ setFilterValues(next);
40916
+ setPage(1);
40917
+ }
40918
+ };
40919
+ const handlePrint = async (entry, printAction) => {
40920
+ // Open the tab synchronously, otherwise the popup blocker kicks in once the pdf arrives.
40921
+ const printWindow = window.open('', '_blank');
40922
+ setPrintingKey(`${entry.id}-${printAction.id}`);
40923
+ setPrintError(false);
40924
+ try {
40925
+ const url = await printEntry(config, printAction.id, entry.id);
40926
+ if (printWindow) {
40927
+ printWindow.location.href = url;
40928
+ }
40929
+ else {
40930
+ window.open(url, '_blank');
40931
+ }
40932
+ setTimeout(() => URL.revokeObjectURL(url), 60000);
40933
+ }
40934
+ catch (error) {
40935
+ printWindow?.close();
40936
+ if (isUnauthorizedError(error, config.token)) {
40937
+ handleError(error);
40938
+ }
40939
+ else {
40940
+ console.error(error);
40941
+ setPrintError(true);
40942
+ }
40943
+ }
40944
+ finally {
40945
+ setPrintingKey(undefined);
40946
+ }
40947
+ };
40948
+ const formatDate = (value) => {
40949
+ if (!value)
40950
+ return '';
40951
+ const date = new Date(value);
40952
+ if (isNaN(date.getTime()))
40953
+ return '';
40954
+ return new Intl.DateTimeFormat(languageCode, { day: '2-digit', month: '2-digit', year: 'numeric' }).format(date);
40955
+ };
40956
+ const formatNumber = (value) => {
40957
+ if (value === undefined || value === null)
40958
+ return '';
40959
+ return new Intl.NumberFormat(languageCode, { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(value);
40960
+ };
40961
+ const getEntryStatusLabel = (status) => lookups.entryStatuses.find((x) => x.key === status)?.value ?? '';
40962
+ const getCustomEntryStatusLabel = (id) => lookups.customEntryStatuses.find((x) => x.id === id)?.name ?? '';
40963
+ const getPrintActionsForEntry = (entry) => lookups.printActions.filter((x) => x.validEntryStatuses?.includes(entry.status));
40964
+ const renderCell = (entry, column) => {
40965
+ const value = entry[column.id];
40966
+ switch (column.kind) {
40967
+ case 'date':
40968
+ return formatDate(value);
40969
+ case 'number':
40970
+ return formatNumber(value);
40971
+ case 'status':
40972
+ return getEntryStatusLabel(value);
40973
+ case 'customStatus':
40974
+ return getCustomEntryStatusLabel(value);
40975
+ default:
40976
+ return value ?? '';
40977
+ }
40978
+ };
40979
+ const renderFilter = (column) => {
40980
+ const value = filterInputs[column.id] ?? '';
40981
+ const className = 'agent-entries__filter';
40982
+ switch (column.kind) {
40983
+ case 'date':
40984
+ return (React__default["default"].createElement("input", { type: "date", className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value, true) }));
40985
+ case 'status':
40986
+ case 'customStatus': {
40987
+ const options = column.kind === 'status'
40988
+ ? lookups.entryStatuses.filter((x) => x.key !== undefined && x.key !== null).map((x) => ({ key: x.key, value: x.value }))
40989
+ : lookups.customEntryStatuses.map((x) => ({ key: x.id, value: x.name }));
40990
+ return (React__default["default"].createElement("select", { className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value, true) },
40991
+ React__default["default"].createElement("option", { value: "" }, t.ALL),
40992
+ options.map((option) => (React__default["default"].createElement("option", { key: option.key, value: option.key }, option.value)))));
40993
+ }
40994
+ case 'number':
40995
+ return (React__default["default"].createElement("input", { type: "number", className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value) }));
40996
+ default:
40997
+ return (React__default["default"].createElement("input", { type: "text", className: className, value: value, "aria-label": column.label, onChange: (e) => handleFilterChange(column.id, e.target.value) }));
40998
+ }
40999
+ };
41000
+ const renderDetails = (entry) => {
41001
+ const printActions = getPrintActionsForEntry(entry);
41002
+ const travelers = entry.pax?.length ? entry.pax.map((p) => (p.isMainBooker ? `${p.name} (${t.MAIN_BOOKER.toLowerCase()})` : p.name)).join(', ') : '';
41003
+ const details = [
41004
+ { label: t.NUMBER, value: entry.number },
41005
+ { label: t.PRODUCT, value: entry.firstProductName },
41006
+ { label: t.STATUS, value: getEntryStatusLabel(entry.status) },
41007
+ { label: t.CUSTOM_STATUS, value: getCustomEntryStatusLabel(entry.customEntryStatusId) },
41008
+ { label: t.DEPARTURE_DATE, value: formatDate(entry.departureDate) },
41009
+ { label: t.RETURN_DATE, value: formatDate(entry.returnDate) },
41010
+ { label: t.CREATED, value: formatDate(entry.createdDate) },
41011
+ { label: t.CONTACT, value: entry.contact },
41012
+ { label: t.MAIN_BOOKER, value: entry.travelerAddress },
41013
+ { label: t.TRAVELERS, value: travelers || (entry.paxCount ? entry.paxCount : '') },
41014
+ { label: t.NETTO_SELLING_PRICE, value: formatNumber(entry.totalPrice) },
41015
+ { label: t.YOUR_SURCHARGE, value: formatNumber(entry.calculatedAgentSurchargeAmount) },
41016
+ { label: t.PROFIT, value: formatNumber(entry.profit) }
41017
+ ];
41018
+ return (React__default["default"].createElement("div", { className: "agent-entries__details" },
41019
+ React__default["default"].createElement("dl", { className: "agent-entries__details__list" }, details
41020
+ .filter((detail) => detail.value !== undefined && detail.value !== null && detail.value !== '')
41021
+ .map((detail) => (React__default["default"].createElement("div", { className: "agent-entries__details__item", key: detail.label },
41022
+ React__default["default"].createElement("dt", null, detail.label),
41023
+ React__default["default"].createElement("dd", null, detail.value))))),
41024
+ printActions.length > 0 && (React__default["default"].createElement("div", { className: "agent-entries__details__prints" },
41025
+ React__default["default"].createElement("span", { className: "agent-entries__details__prints__title" }, t.PRINTS),
41026
+ React__default["default"].createElement("div", { className: "agent-entries__details__prints__buttons" }, printActions.map((printAction) => (React__default["default"].createElement("button", { type: "button", key: printAction.id, className: "agent-entries__print-button", disabled: printingKey === `${entry.id}-${printAction.id}`, onClick: () => handlePrint(entry, printAction) },
41027
+ React__default["default"].createElement(PrintIcon, null),
41028
+ printAction.label))))))));
41029
+ };
41030
+ const renderLoginMessage = (message) => (React__default["default"].createElement("div", { className: "agent-entries__message" },
41031
+ React__default["default"].createElement("p", null, message),
41032
+ onLogin && (React__default["default"].createElement("button", { type: "button", className: "cta cta--primary", onClick: onLogin }, translations.LOGIN.LOGIN))));
41033
+ if (!isLoggedIn) {
41034
+ return (React__default["default"].createElement("div", { className: "agent-entries" },
41035
+ React__default["default"].createElement("h2", { className: "agent-entries__title" }, title ?? t.TITLE),
41036
+ renderLoginMessage(t.NOT_LOGGED_IN)));
41037
+ }
41038
+ if (!hasValidToken || loadState === 'unauthorized') {
41039
+ return (React__default["default"].createElement("div", { className: "agent-entries" },
41040
+ React__default["default"].createElement("h2", { className: "agent-entries__title" }, title ?? t.TITLE),
41041
+ renderLoginMessage(t.SESSION_EXPIRED)));
41042
+ }
41043
+ const columnCount = columns.length + 1;
41044
+ return (React__default["default"].createElement("div", { className: "agent-entries" },
41045
+ React__default["default"].createElement("h2", { className: "agent-entries__title" }, title ?? t.TITLE),
41046
+ printError && (React__default["default"].createElement("div", { className: "agent-entries__error", role: "alert" },
41047
+ t.PRINT_ERROR,
41048
+ React__default["default"].createElement("button", { type: "button", className: "agent-entries__error__close", "aria-label": "close", onClick: () => setPrintError(false) }, "\u00D7"))),
41049
+ React__default["default"].createElement("div", { className: buildClassName(['agent-entries__card', loadState === 'loading' && 'agent-entries__card--loading']) },
41050
+ React__default["default"].createElement("div", { className: "agent-entries__table-wrapper" },
41051
+ React__default["default"].createElement("table", { className: "agent-entries__table" },
41052
+ React__default["default"].createElement("thead", null,
41053
+ React__default["default"].createElement("tr", null,
41054
+ React__default["default"].createElement("th", { className: "agent-entries__actions-header" },
41055
+ React__default["default"].createElement("span", { className: "agent-entries__sr-only" }, t.ACTIONS)),
41056
+ columns.map((column) => (React__default["default"].createElement("th", { key: column.id, "aria-sort": sort.name === column.id ? (sort.asc ? 'ascending' : 'descending') : undefined },
41057
+ React__default["default"].createElement("button", { type: "button", className: "agent-entries__sort", onClick: () => handleSort(column.id) },
41058
+ column.label,
41059
+ sort.name === column.id && React__default["default"].createElement(SortIcon, { asc: sort.asc })))))),
41060
+ React__default["default"].createElement("tr", { className: "agent-entries__filter-row" },
41061
+ React__default["default"].createElement("th", null),
41062
+ columns.map((column) => (React__default["default"].createElement("th", { key: column.id }, renderFilter(column)))))),
41063
+ React__default["default"].createElement("tbody", null,
41064
+ loadState === 'error' && (React__default["default"].createElement("tr", null,
41065
+ React__default["default"].createElement("td", { colSpan: columnCount, className: "agent-entries__empty" }, t.ERROR))),
41066
+ loadState !== 'error' && entries.length === 0 && (React__default["default"].createElement("tr", null,
41067
+ React__default["default"].createElement("td", { colSpan: columnCount, className: "agent-entries__empty" }, loadState === 'loading' ? t.LOADING : t.NO_ITEMS))),
41068
+ loadState !== 'error' &&
41069
+ entries.map((entry) => {
41070
+ const isExpanded = expandedId === entry.id;
41071
+ return (React__default["default"].createElement(React__default["default"].Fragment, { key: entry.id },
41072
+ React__default["default"].createElement("tr", { className: buildClassName(['agent-entries__row', isExpanded && 'agent-entries__row--expanded']) },
41073
+ React__default["default"].createElement("td", { className: "agent-entries__actions" },
41074
+ React__default["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) },
41075
+ React__default["default"].createElement(EyeIcon, null)),
41076
+ getPrintActionsForEntry(entry).map((printAction) => (React__default["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) },
41077
+ React__default["default"].createElement(PrintIcon, null))))),
41078
+ columns.map((column) => (React__default["default"].createElement("td", { key: column.id, className: `agent-entries__cell agent-entries__cell--${column.kind}` }, renderCell(entry, column))))),
41079
+ isExpanded && (React__default["default"].createElement("tr", { className: "agent-entries__details-row" },
41080
+ React__default["default"].createElement("td", { colSpan: columnCount }, renderDetails(entry))))));
41081
+ })))),
41082
+ React__default["default"].createElement("div", { className: "agent-entries__footer" },
41083
+ React__default["default"].createElement("select", { className: "agent-entries__page-size", value: take, "aria-label": t.PAGE_SIZE, onChange: (e) => {
41084
+ setTake(parseInt(e.target.value, 10));
41085
+ setPage(1);
41086
+ } }, Array.from(new Set([...PAGE_SIZES, take]))
41087
+ .sort((a, b) => a - b)
41088
+ .map((size) => (React__default["default"].createElement("option", { key: size, value: size }, size)))),
41089
+ count !== undefined && React__default["default"].createElement("span", { className: "agent-entries__count" }, format$1(t.X_ITEMS, [count])),
41090
+ React__default["default"].createElement("div", { className: "agent-entries__pager" },
41091
+ React__default["default"].createElement("button", { type: "button", className: "agent-entries__pager__button", disabled: page <= 1, onClick: () => setPage(page - 1) }, t.PREVIOUS),
41092
+ React__default["default"].createElement("span", { className: "agent-entries__pager__info" }, totalPages !== undefined ? format$1(t.PAGE_X_OF_Y, [page, totalPages]) : page),
41093
+ React__default["default"].createElement("button", { type: "button", className: "agent-entries__pager__button", disabled: !hasNextPage, onClick: () => setPage(page + 1) }, t.NEXT))))));
41094
+ };
41095
+
40163
41096
  const ImageWithTextCard = ({ noCard, fullImage, reverse, imageSrc, imageAlt, title, section1Title, section1Text, section2Title, section2Text, buttonText, onButtonClick }) => {
40164
41097
  let cardClassName = 'image-with-text__card';
40165
41098
  if (noCard) {
@@ -44618,6 +45551,7 @@ var signalR = /*#__PURE__*/_mergeNamespaces({
44618
45551
  'default': signalR$1
44619
45552
  }, [signalR$1]);
44620
45553
 
45554
+ exports.AgentEntries = AgentEntries;
44621
45555
  exports.BookingProduct = BookingProduct;
44622
45556
  exports.BookingWizard = BookingWizard;
44623
45557
  exports.Breadcrumbs = Breadcrumbs;