@voyantjs/bookings-ui 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/components/booking-combobox.d.ts +13 -0
  2. package/dist/components/booking-combobox.d.ts.map +1 -0
  3. package/dist/components/booking-combobox.js +44 -0
  4. package/dist/components/booking-create-dialog.d.ts +9 -0
  5. package/dist/components/booking-create-dialog.d.ts.map +1 -1
  6. package/dist/components/booking-create-dialog.js +110 -90
  7. package/dist/components/booking-create-page.d.ts +11 -0
  8. package/dist/components/booking-create-page.d.ts.map +1 -0
  9. package/dist/components/booking-create-page.js +11 -0
  10. package/dist/components/booking-detail-page.d.ts.map +1 -1
  11. package/dist/components/booking-detail-page.js +4 -1
  12. package/dist/components/booking-item-list.d.ts.map +1 -1
  13. package/dist/components/booking-item-list.js +5 -3
  14. package/dist/components/booking-list-filters.d.ts +35 -0
  15. package/dist/components/booking-list-filters.d.ts.map +1 -0
  16. package/dist/components/booking-list-filters.js +148 -0
  17. package/dist/components/booking-list.d.ts.map +1 -1
  18. package/dist/components/booking-list.js +30 -46
  19. package/dist/components/person-picker-section.d.ts +15 -7
  20. package/dist/components/person-picker-section.d.ts.map +1 -1
  21. package/dist/components/person-picker-section.js +100 -21
  22. package/dist/components/price-breakdown-section.d.ts +16 -1
  23. package/dist/components/price-breakdown-section.d.ts.map +1 -1
  24. package/dist/components/price-breakdown-section.js +36 -5
  25. package/dist/components/product-picker-section.d.ts.map +1 -1
  26. package/dist/components/product-picker-section.js +38 -4
  27. package/dist/components/shared-room-section.d.ts +9 -8
  28. package/dist/components/shared-room-section.d.ts.map +1 -1
  29. package/dist/components/shared-room-section.js +67 -14
  30. package/dist/components/traveler-list.d.ts.map +1 -1
  31. package/dist/components/traveler-list.js +27 -16
  32. package/dist/i18n/en.d.ts +284 -1
  33. package/dist/i18n/en.d.ts.map +1 -1
  34. package/dist/i18n/en.js +300 -17
  35. package/dist/i18n/messages.d.ts +255 -1
  36. package/dist/i18n/messages.d.ts.map +1 -1
  37. package/dist/i18n/provider.d.ts +568 -2
  38. package/dist/i18n/provider.d.ts.map +1 -1
  39. package/dist/i18n/ro.d.ts +284 -1
  40. package/dist/i18n/ro.d.ts.map +1 -1
  41. package/dist/i18n/ro.js +301 -18
  42. package/dist/index.d.ts +3 -1
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +3 -1
  45. package/dist/journey/components/booking-journey.d.ts.map +1 -1
  46. package/dist/journey/components/booking-journey.js +22 -13
  47. package/dist/journey/components/contract-preview-dialog.d.ts.map +1 -1
  48. package/dist/journey/components/contract-preview-dialog.js +9 -4
  49. package/dist/journey/components/journey-steps.d.ts.map +1 -1
  50. package/dist/journey/components/journey-steps.js +94 -72
  51. package/dist/journey/components/side-panel.d.ts.map +1 -1
  52. package/dist/journey/components/side-panel.js +58 -35
  53. package/dist/journey/components/step-header.d.ts.map +1 -1
  54. package/dist/journey/components/step-header.js +3 -19
  55. package/package.json +24 -20
package/dist/i18n/ro.js CHANGED
@@ -25,6 +25,15 @@ export const bookingsUiRo = {
25
25
  title: "Rezervari",
26
26
  description: "Administreaza rezervarile, confirmarile si calatorii.",
27
27
  },
28
+ bookingCreatePage: {
29
+ title: "Rezervare noua",
30
+ description: "Creeaza o rezervare, alege platitorul, adauga pasageri si programeaza plata.",
31
+ },
32
+ bookingCombobox: {
33
+ placeholder: "Cauta rezervari...",
34
+ empty: "Nu s-au gasit rezervari.",
35
+ loading: "Se incarca rezervarile...",
36
+ },
28
37
  bookingDetailPage: {
29
38
  notFound: "Rezervarea nu a fost gasita",
30
39
  backToBookings: "Inapoi la rezervari",
@@ -38,6 +47,7 @@ export const bookingsUiRo = {
38
47
  noValue: "-",
39
48
  tbd: "De stabilit",
40
49
  summarySell: "Vanzare",
50
+ summaryPriceOverride: "Suprascriere manuala",
41
51
  summaryCostMargin: "Cost / marja",
42
52
  summaryDates: "Date",
43
53
  summaryTravelers: "Calatori",
@@ -114,14 +124,47 @@ export const bookingsUiRo = {
114
124
  values: {
115
125
  emailUnavailable: "-",
116
126
  phoneUnavailable: "-",
127
+ documentsUnavailable: "-",
128
+ fieldUnavailable: "-",
129
+ noAdditionalContext: "Nu exista context suplimentar pentru calator",
117
130
  },
118
131
  columns: {
119
132
  name: "Nume",
120
133
  email: "Email",
121
134
  phone: "Telefon",
135
+ role: "Rol",
136
+ dobAge: "Data nasterii / varsta",
137
+ documents: "Documente",
138
+ },
139
+ roles: {
140
+ primary: "Principal",
141
+ lead: "Responsabil",
142
+ },
143
+ context: {
144
+ nationality: "Nationalitate",
145
+ passport: "Pasaport",
146
+ passportExpiry: "Expira pasaport",
147
+ language: "Limba",
148
+ dietary: "Alimentatie",
149
+ accessibility: "Accesibilitate",
150
+ specialRequests: "Cerinte speciale",
151
+ notes: "Note",
152
+ documentLabel: "Document · {type}",
153
+ },
154
+ loading: {
155
+ decrypting: "Se decripteaza...",
122
156
  },
123
157
  actions: {
124
158
  deleteConfirm: "Stergi acest calator?",
159
+ revealContactDetails: "Arata detalii contact",
160
+ hideContactDetails: "Ascunde detalii",
161
+ revealTravelerContactDetails: "Arata detaliile de contact ale calatorului",
162
+ hideTravelerContactDetails: "Ascunde detaliile de contact ale calatorului",
163
+ editTraveler: "Editeaza calatorul",
164
+ deleteTraveler: "Sterge calatorul",
165
+ },
166
+ validation: {
167
+ revealFailed: "Afisarea a esuat",
125
168
  },
126
169
  },
127
170
  bookingItemDialog: {
@@ -279,6 +322,7 @@ export const bookingsUiRo = {
279
322
  product: "Produs",
280
323
  productSearchPlaceholder: "Cauta produse...",
281
324
  productSelectPlaceholder: "Selecteaza un produs...",
325
+ productEmpty: "Niciun produs gasit.",
282
326
  option: "Optiune",
283
327
  optionNone: "Fara optiune specifica",
284
328
  },
@@ -286,10 +330,18 @@ export const bookingsUiRo = {
286
330
  personPickerSection: {
287
331
  labels: {
288
332
  person: "Persoana",
333
+ organization: "Organizatie",
334
+ billTo: "Factureaza catre",
335
+ billToPerson: "Persoana",
336
+ billToOrganization: "Organizatie",
289
337
  createNewPerson: "Creeaza nou",
338
+ createNewOrganization: "Creeaza nou",
339
+ createPersonSheetTitle: "Creeaza persoana",
340
+ createOrganizationSheetTitle: "Creeaza organizatie",
290
341
  selectExistingPerson: "Selecteaza existent",
291
342
  personSearchPlaceholder: "Cauta persoane dupa nume sau email...",
292
343
  personSelectPlaceholder: "Selecteaza o persoana...",
344
+ personEmpty: "Nicio persoana gasita.",
293
345
  firstName: "Prenume",
294
346
  firstNamePlaceholder: "Ion",
295
347
  lastName: "Nume",
@@ -298,8 +350,9 @@ export const bookingsUiRo = {
298
350
  emailPlaceholder: "ion@example.com",
299
351
  phone: "Telefon",
300
352
  phonePlaceholder: "+40 721 123 456",
301
- organization: "Organizatie (optional)",
302
353
  organizationSearchPlaceholder: "Cauta organizatii...",
354
+ organizationSelectPlaceholder: "Selecteaza o organizatie...",
355
+ organizationEmpty: "Nicio organizatie gasita.",
303
356
  organizationNone: "Fara organizatie",
304
357
  },
305
358
  },
@@ -349,12 +402,16 @@ export const bookingsUiRo = {
349
402
  },
350
403
  sharedRoomSection: {
351
404
  labels: {
352
- toggle: "Leaga rezervarea la un grup de camera shared",
353
- createMode: "Creeaza grup nou",
354
- joinMode: "Alatura-te unuia existent",
355
- selectPlaceholder: "Selecteaza un grup...",
356
- noGroups: "Nu exista grupuri pentru acest produs",
357
- createHint: "Va fi creat un grup nou, iar aceasta rezervare va fi membrul principal.",
405
+ toggle: "Partaj",
406
+ createMode: "Creeaza partaj nou",
407
+ joinMode: "Alatura-te unui partaj",
408
+ selectPlaceholder: "Cauta partaje...",
409
+ noGroups: "Nu exista partaje pentru acest produs.",
410
+ createHint: "Va fi creat un partaj nou, iar aceasta rezervare va fi membrul principal.",
411
+ createSheetTitle: "Creeaza partaj",
412
+ groupLabel: "Eticheta partaj",
413
+ groupLabelPlaceholder: "ex. Popescu + Ionescu, Camera 204",
414
+ createAction: "Foloseste partaj",
358
415
  },
359
416
  },
360
417
  priceBreakdownSection: {
@@ -365,6 +422,12 @@ export const bookingsUiRo = {
365
422
  groupRate: "tarif de grup",
366
423
  empty: "Alege unitatile de mai sus pentru a vedea descompunerea.",
367
424
  noPricing: "Nu exista catalog de preturi pentru acest produs.",
425
+ confirmedTotal: "Total confirmat",
426
+ manualTotal: "Total manual",
427
+ useCatalogTotal: "Foloseste catalogul",
428
+ overrideReason: "Motiv suprascriere",
429
+ overrideReasonPlaceholder: "De ce este acest total diferit?",
430
+ overrideReasonRequired: "Adauga un motiv pentru totalul manual.",
368
431
  },
369
432
  },
370
433
  bookingDocumentDialog: {
@@ -484,6 +547,201 @@ export const bookingsUiRo = {
484
547
  },
485
548
  actions: {
486
549
  deleteConfirm: "Stergi acest articol?",
550
+ expandItem: "Extinde articolul",
551
+ collapseItem: "Restrange articolul",
552
+ editItem: "Editeaza articolul",
553
+ deleteItem: "Sterge articolul",
554
+ },
555
+ },
556
+ bookingJourney: {
557
+ steps: {
558
+ configure: "Configurare",
559
+ billing: "Facturare",
560
+ travelers: "Calatori",
561
+ accommodation: "Cazare",
562
+ addons: "Extra",
563
+ payment: "Plata",
564
+ review: "Revizuire",
565
+ billingAndContact: "Facturare si contact",
566
+ reviewAndConfirm: "Revizuire si confirmare",
567
+ },
568
+ navigation: {
569
+ back: "Inapoi",
570
+ next: "Urmatorul",
571
+ checking: "Se verifica...",
572
+ },
573
+ values: {
574
+ noValue: "—",
575
+ notSet: "Nesetat",
576
+ none: "Nimic",
577
+ selectPlaceholder: "Selecteaza...",
578
+ },
579
+ validation: {
580
+ completeStepBeforeContinuing: "Completeaza acest pas inainte de a continua.",
581
+ unableToContinue: "Nu se poate continua. Incearca din nou.",
582
+ addAtLeastTravelers: "Adauga cel putin {count} calator{plural} pentru a continua.",
583
+ maxTravelersPerBooking: "Maximum {count} calatori per rezervare.",
584
+ ageOutOfRange: "Varsta {age} este in afara intervalului acceptat pentru acest produs.",
585
+ },
586
+ warnings: {
587
+ phoneMissing: "Numarul de telefon lipseste - util pentru contact furnizor in ultimul moment.",
588
+ billingCountryMissing: "Tara de facturare lipseste - taxele nu se calculeaza pana la completare.",
589
+ vatMissing: "Codul TVA lipseste - obligatoriu pentru facturarea B2B cu taxare inversa.",
590
+ travelerFieldRequired: "{traveler}: {field} este obligatoriu.",
591
+ paymentIntentMissing: "Intentia de plata lipseste - rezervarea va ramane implicit in asteptare.",
592
+ noTravelers: "Nu exista calatori adaugati - este recomandat cel putin unul pentru operare.",
593
+ },
594
+ configure: {
595
+ travelers: "Calatori",
596
+ departureDate: "Data plecare",
597
+ timeOptional: "Ora (optional)",
598
+ checkIn: "Check-in",
599
+ checkOutWithNights: "Check-out ({minNights}-{maxNights} nopti)",
600
+ cabinCategory: "Categorie cabina",
601
+ cabinNumber: "Numar cabina",
602
+ airArrangements: "Aranjamente zbor",
603
+ airOptions: {
604
+ cruise_line: {
605
+ label: "Zboruri aranjate de linia de croaziera",
606
+ description: "Linia de croaziera rezerva zborurile intr-un pachet coordonat. Operatorul revine prin biroul de zboruri.",
607
+ },
608
+ independent: {
609
+ label: "Zboruri independente",
610
+ description: "Rezerva zborurile singur sau printr-o linie separata de rezervare.",
611
+ },
612
+ none: {
613
+ label: "Nu sunt necesare zboruri",
614
+ description: "Croaziera regionala / deplasare pana in port.",
615
+ },
616
+ },
617
+ ageHintRange: "{min}-{max} ani",
618
+ ageHintMinimum: "{min}+ ani",
619
+ ageHintMaximum: "pana la {max} ani",
620
+ },
621
+ billing: {
622
+ title: "Facturare si contact principal",
623
+ buyerType: "Tip cumparator",
624
+ individual: "Persoana fizica (B2C)",
625
+ company: "Companie (B2B)",
626
+ firstName: "Prenume",
627
+ lastName: "Nume",
628
+ email: "Email",
629
+ phone: "Telefon",
630
+ addressLine1: "Adresa linia 1",
631
+ addressLine2Optional: "Adresa linia 2 (optional)",
632
+ city: "Oras",
633
+ postalCode: "Cod postal",
634
+ country: "Tara",
635
+ companyName: "Nume companie",
636
+ vatId: "Cod TVA",
637
+ },
638
+ travelers: {
639
+ title: "Calatori",
640
+ empty: "Alege numarul de calatori in pasul Configurare pentru a adauga detalii.",
641
+ addTraveler: "Adauga calator",
642
+ travelerNumber: "Calator {number}",
643
+ ageLabel: "varsta {age}",
644
+ copyFromBilling: "Copiaza din facturare",
645
+ remove: "Elimina",
646
+ },
647
+ accommodation: {
648
+ title: "Cazare",
649
+ empty: "Nu exista optiuni de cazare pentru acest produs.",
650
+ extensionsAvailable: "{count} optiune{plural} de extensie disponibila - UI in faza F.",
651
+ ratePlan: "Plan tarifar",
652
+ cancellationPrefix: "Anulare:",
653
+ includesPrefix: "Include:",
654
+ },
655
+ addons: {
656
+ title: "Extra",
657
+ empty: "Nu exista extra disponibile pentru acest produs.",
658
+ otherBucket: "Altele",
659
+ },
660
+ payment: {
661
+ title: "Plata",
662
+ empty: "Nu exista metode de plata disponibile pentru aceasta rezervare.",
663
+ redirectedAfterConfirm: "Vei fi redirectionat catre pagina noastra securizata de plata dupa confirmarea rezervarii.",
664
+ inquiryNotice: "Vom trimite detaliile tale catre operator fara a bloca inventar sau a incasa plata. Operatorul va reveni cu disponibilitate si oferta - de obicei intr-o zi lucratoare.",
665
+ bankTransferInstructions: "Instructiuni transfer bancar",
666
+ bankTransferDefaultNote: "Dupa trimitere, vei primi un email cu detaliile bancare si o referinta de plata. Inventarul este pastrat in asteptarea platii.",
667
+ intentLabels: {
668
+ card: "Plateste cu cardul",
669
+ bank_transfer: "Transfer bancar",
670
+ hold: "Pastreaza pentru moment",
671
+ ticket_on_credit: "Cont de credit agentie",
672
+ inquiry: "Trimite ca solicitare",
673
+ },
674
+ intentDescriptions: {
675
+ card: "Se incaseaza imediat. Inventarul este rezervat la confirmare.",
676
+ bank_transfer: "Iti trimitem detaliile bancare si o referinta. Inventarul este pastrat pana la transfer.",
677
+ hold: "Rezerva inventarul fara plata. Operatorul revine pentru incasare.",
678
+ ticket_on_credit: "Incaseaza din linia de credit a agentiei. Disponibil doar operatorilor.",
679
+ inquiry: "Fara plata si fara blocare de inventar. Operatorul revine cu disponibilitate si oferta.",
680
+ },
681
+ },
682
+ review: {
683
+ title: "Revizuire si confirmare",
684
+ leadContact: "Contact principal",
685
+ travelers: "Calatori",
686
+ customerNotes: "Note",
687
+ customerNotesPlaceholder: "Ce ar trebui sa stim? (alergii, accesibilitate, ocazie speciala...)",
688
+ internalNotes: "Note interne (doar operator)",
689
+ confirmBooking: "Confirma rezervarea",
690
+ confirming: "Se confirma...",
691
+ },
692
+ contract: {
693
+ defaultTitle: "Contract rezervare",
694
+ description: "Revizuieste contractul de mai jos. Poti derula documentul, apoi bifeaza casetele si apasa Accepta pentru a continua.",
695
+ errorPrefix: "Previzualizarea contractului nu a putut fi incarcata:",
696
+ iframeTitle: "Previzualizare {name}",
697
+ termsLabel: "Am citit si accept termenii acestui contract. Inteleg ca rezervarea devine obligatorie dupa acceptare.",
698
+ marketingLabel: "Doresc sa primesc ocazional oferte si noutati de calatorie prin email. (Ma pot dezabona oricand.)",
699
+ cancel: "Anuleaza",
700
+ acceptAndContinue: "Accepta si continua",
701
+ previewRequestFailed: "Cererea de previzualizare a esuat: {status}",
702
+ previewMissing: "Raspunsul de previzualizare nu contine corpul randat sau metadatele sablonului",
703
+ },
704
+ sidePanel: {
705
+ youAreBooking: "Rezervi",
706
+ total: "Total",
707
+ guestSingular: "oaspete",
708
+ guestPlural: "oaspeti",
709
+ filledOf: "{filled} din {total} completati",
710
+ roomSingular: "camera",
711
+ roomPlural: "camere",
712
+ addOnSingular: "extra",
713
+ addOnPlural: "extra",
714
+ card: "Card",
715
+ hold: "In asteptare",
716
+ onCredit: "Pe credit",
717
+ confirmAndBook: "Confirma si rezerva",
718
+ reviewDetails: "Revizuieste detaliile si confirma rezervarea.",
719
+ noTravelersYet: "Nu exista calatori inca.",
720
+ notSelected: "Neselectat.",
721
+ noAddonsSelected: "Nu exista extra selectate.",
722
+ adults: "Adulti",
723
+ children: "Copii",
724
+ infants: "Infanti",
725
+ departure: "Plecare",
726
+ date: "Data",
727
+ checkIn: "Check-in",
728
+ checkOut: "Check-out",
729
+ cabin: "Cabina",
730
+ name: "Nume",
731
+ email: "Email",
732
+ phone: "Telefon",
733
+ buyer: "Cumparator",
734
+ company: "Companie",
735
+ individual: "Persoana fizica",
736
+ vat: "TVA",
737
+ address: "Adresa",
738
+ travelerNumber: "Calator {number}",
739
+ dob: "Data nasterii",
740
+ method: "Metoda",
741
+ schedule: "Scadentar",
742
+ payByCard: "Plateste cu cardul",
743
+ ticketOnCredit: "Bilet pe credit",
744
+ holdNoChargeYet: "In asteptare (fara incasare)",
487
745
  },
488
746
  },
489
747
  bookingPaymentScheduleList: {
@@ -700,7 +958,7 @@ export const bookingsUiRo = {
700
958
  },
701
959
  },
702
960
  bookingCreateDialog: {
703
- title: "Rezervare rapida",
961
+ title: "Rezervare noua",
704
962
  fields: {
705
963
  departure: "Plecare",
706
964
  internalNotes: "Note interne",
@@ -711,13 +969,14 @@ export const bookingsUiRo = {
711
969
  departure: "Selecteaza o plecare...",
712
970
  departureNone: "Fara plecare specifica",
713
971
  departureEmpty: "Nu exista plecari deschise pentru acest produs",
714
- internalNotes: "Context rapid pentru aceasta rezervare...",
972
+ internalNotes: "Context pentru aceasta rezervare...",
715
973
  },
716
974
  validation: {
717
975
  selectProduct: "Selecteaza un produs",
718
- selectPerson: "Selecteaza o persoana sau treci in modul creare",
976
+ selectPerson: "Selecteaza o persoana",
977
+ selectOrganization: "Selecteaza o organizatie",
719
978
  firstAndLastNameRequired: "Prenumele si numele sunt obligatorii",
720
- selectSharedRoomGroup: "Selecteaza un grup de camera shared la care sa te alaturi",
979
+ selectSharedRoomGroup: "Selecteaza un partaj la care sa te alaturi",
721
980
  confirmFailedPrefix: "Rezervarea a fost creata, dar confirmarea a esuat: {message}",
722
981
  confirmFailed: "Rezervarea a fost creata, dar confirmarea a esuat",
723
982
  createFailed: "Crearea rezervarii a esuat",
@@ -748,13 +1007,13 @@ export const bookingsUiRo = {
748
1007
  roomsNoUnits: "Aceasta plecare nu are disponibilitate configurata pe unitati.",
749
1008
  roomsRemaining: "ramase",
750
1009
  roomsUnlimited: "nelimitat",
751
- sharedRoomToggle: "Leaga rezervarea la un grup de camera shared",
752
- sharedRoomCreateMode: "Creeaza grup nou",
753
- sharedRoomJoinMode: "Alatura-te unuia existent",
754
- sharedRoomSelectPlaceholder: "Selecteaza un grup...",
755
- sharedRoomNoGroups: "Nu exista grupuri pentru acest produs",
756
- sharedRoomCreateHint: "Va fi creat un grup nou, iar aceasta rezervare va fi membrul principal.",
757
- sharedRoomGeneratedLabelPrefix: "Camera shared",
1010
+ sharedRoomToggle: "Partaj",
1011
+ sharedRoomCreateMode: "Creeaza partaj nou",
1012
+ sharedRoomJoinMode: "Alatura-te unui partaj",
1013
+ sharedRoomSelectPlaceholder: "Cauta partaje...",
1014
+ sharedRoomNoGroups: "Nu exista partaje pentru acest produs.",
1015
+ sharedRoomCreateHint: "Va fi creat un partaj nou, iar aceasta rezervare va fi membrul principal.",
1016
+ sharedRoomGeneratedLabelPrefix: "Partaj",
758
1017
  voucherHeading: "Voucher (optional)",
759
1018
  voucherCodePlaceholder: "Introdu codul voucherului...",
760
1019
  voucherApply: "Aplica",
@@ -778,6 +1037,12 @@ export const bookingsUiRo = {
778
1037
  breakdownGroupRate: "tarif de grup",
779
1038
  breakdownEmpty: "Alege unitatile de mai sus pentru a vedea descompunerea.",
780
1039
  breakdownNoPricing: "Nu exista catalog de preturi pentru acest produs.",
1040
+ breakdownConfirmedTotal: "Total confirmat",
1041
+ breakdownManualTotal: "Total manual",
1042
+ breakdownUseCatalogTotal: "Foloseste catalogul",
1043
+ breakdownOverrideReason: "Motiv suprascriere",
1044
+ breakdownOverrideReasonPlaceholder: "De ce este acest total diferit?",
1045
+ breakdownOverrideReasonRequired: "Adauga un motiv pentru totalul manual.",
781
1046
  },
782
1047
  },
783
1048
  bookingList: {
@@ -799,6 +1064,22 @@ export const bookingsUiRo = {
799
1064
  productLabel: "Produs",
800
1065
  product: "Cauta produse...",
801
1066
  productEmpty: "Niciun produs gasit.",
1067
+ optionLabel: "Optiune",
1068
+ option: "Cauta optiuni...",
1069
+ optionEmpty: "Nicio optiune gasita.",
1070
+ optionNeedsProduct: "Alege mai intai un produs.",
1071
+ categoryLabel: "Categorie",
1072
+ category: "Cauta categorii...",
1073
+ categoryEmpty: "Nicio categorie gasita.",
1074
+ supplierLabel: "Furnizor",
1075
+ supplier: "Cauta furnizori...",
1076
+ supplierEmpty: "Niciun furnizor gasit.",
1077
+ personLabel: "Persoana",
1078
+ person: "Cauta persoane...",
1079
+ personEmpty: "Nicio persoana gasita.",
1080
+ organizationLabel: "Organizatie",
1081
+ organization: "Cauta organizatii...",
1082
+ organizationEmpty: "Nicio organizatie gasita.",
802
1083
  dateRangeLabel: "Data start",
803
1084
  dateRange: "Orice data",
804
1085
  paxLabel: "Pax",
@@ -811,6 +1092,8 @@ export const bookingsUiRo = {
811
1092
  empty: "Nu au fost gasite rezervari.",
812
1093
  showingSummary: "Afisezi {count} din {total}",
813
1094
  pageSummary: "Pagina {page} / {pageCount}",
1095
+ previousPage: "Anterior",
1096
+ nextPage: "Urmator",
814
1097
  },
815
1098
  bookingPaymentsSummary: {
816
1099
  title: "Plati",
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { BookingActivityTimeline, type BookingActivityTimelineProps, } from "./components/booking-activity-timeline.js";
2
2
  export { BookingCancellationDialog, type BookingCancellationDialogProps, } from "./components/booking-cancellation-dialog.js";
3
- export { BookingCreateDialog, type BookingCreateDialogProps, } from "./components/booking-create-dialog.js";
3
+ export { BookingCombobox, type BookingComboboxProps, } from "./components/booking-combobox.js";
4
+ export { BookingCreateDialog, type BookingCreateDialogProps, BookingCreateForm, type BookingCreateFormProps, } from "./components/booking-create-dialog.js";
5
+ export { BookingCreatePage, type BookingCreatePageProps, } from "./components/booking-create-page.js";
4
6
  export { BookingBillingContextCard, BookingDetailPage, type BookingDetailPageProps, type BookingDetailPageSlots, } from "./components/booking-detail-page.js";
5
7
  export { BookingDialog, type BookingDialogProps } from "./components/booking-dialog.js";
6
8
  export { BookingDocumentDialog, type BookingDocumentDialogProps, } from "./components/booking-document-dialog.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  export { BookingActivityTimeline, } from "./components/booking-activity-timeline.js";
2
2
  export { BookingCancellationDialog, } from "./components/booking-cancellation-dialog.js";
3
- export { BookingCreateDialog, } from "./components/booking-create-dialog.js";
3
+ export { BookingCombobox, } from "./components/booking-combobox.js";
4
+ export { BookingCreateDialog, BookingCreateForm, } from "./components/booking-create-dialog.js";
5
+ export { BookingCreatePage, } from "./components/booking-create-page.js";
4
6
  export { BookingBillingContextCard, BookingDetailPage, } from "./components/booking-detail-page.js";
5
7
  export { BookingDialog } from "./components/booking-dialog.js";
6
8
  export { BookingDocumentDialog, } from "./components/booking-document-dialog.js";
@@ -1 +1 @@
1
- {"version":3,"file":"booking-journey.d.ts","sourceRoot":"","sources":["../../../src/journey/components/booking-journey.tsx"],"names":[],"mappings":"AAqCA,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,aAAa,CAAA;AAepB,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAya7E"}
1
+ {"version":3,"file":"booking-journey.d.ts","sourceRoot":"","sources":["../../../src/journey/components/booking-journey.tsx"],"names":[],"mappings":"AAqCA,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,aAAa,CAAA;AAcpB,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,CAAC,YAAY,CAgb7E"}
@@ -19,6 +19,7 @@ import { DEFAULT_PAX_BANDS, defaultBookingFields, defaultDraftShapeFlags, defaul
19
19
  import { useBookingCommit, useBookingDraft, useBookingDraftShape, useBookingHold, useBookingQuote, } from "@voyantjs/catalog-react/booking-engine";
20
20
  import { Button } from "@voyantjs/ui/components/button";
21
21
  import { useEffect, useMemo, useRef, useState } from "react";
22
+ import { formatMessage, useBookingsUiMessagesOrDefault } from "../../i18n/index.js";
22
23
  import { emptyDraft, totalPax } from "../lib/draft-state.js";
23
24
  import { JOURNEY_STEP_ORDER, } from "../types.js";
24
25
  import { ContractPreviewDialog } from "./contract-preview-dialog.js";
@@ -26,6 +27,7 @@ import { AccommodationStep, AddonsStep, BillingStep, ConfigureStep, PaymentStep,
26
27
  import { PriceSidePanel } from "./side-panel.js";
27
28
  import { StepHeader } from "./step-header.js";
28
29
  export function BookingJourney(props) {
30
+ const messages = useBookingsUiMessagesOrDefault();
29
31
  const surface = props.surface ?? "admin";
30
32
  const [draft, setDraft] = useState(() => {
31
33
  const base = emptyDraft({
@@ -153,7 +155,7 @@ export function BookingJourney(props) {
153
155
  }
154
156
  }, [holdSignature, currentStep]);
155
157
  const canAdvance = canAdvanceFromStep(currentStep, draft, shape, quote.data?.available !== false);
156
- const warnings = warningsForStep(currentStep, draft, shape);
158
+ const warnings = warningsForStep(currentStep, draft, shape, messages);
157
159
  const [isAdvanceGuardPending, setIsAdvanceGuardPending] = useState(false);
158
160
  const [advanceGuardError, setAdvanceGuardError] = useState(null);
159
161
  const idx = steps.indexOf(currentStep);
@@ -181,19 +183,21 @@ export function BookingJourney(props) {
181
183
  setDraft(guardResult.draft);
182
184
  }
183
185
  if (guardResult === false) {
184
- setAdvanceGuardError("Complete this step before continuing.");
186
+ setAdvanceGuardError(messages.bookingJourney.validation.completeStepBeforeContinuing);
185
187
  return;
186
188
  }
187
189
  if (guardResult &&
188
190
  typeof guardResult === "object" &&
189
191
  "allow" in guardResult &&
190
192
  guardResult.allow === false) {
191
- setAdvanceGuardError(guardResult.message ?? "Complete this step before continuing.");
193
+ setAdvanceGuardError(guardResult.message ?? messages.bookingJourney.validation.completeStepBeforeContinuing);
192
194
  return;
193
195
  }
194
196
  }
195
197
  catch (error) {
196
- setAdvanceGuardError(error instanceof Error ? error.message : "Unable to continue. Please try again.");
198
+ setAdvanceGuardError(error instanceof Error
199
+ ? error.message
200
+ : messages.bookingJourney.validation.unableToContinue);
197
201
  return;
198
202
  }
199
203
  finally {
@@ -283,7 +287,9 @@ export function BookingJourney(props) {
283
287
  goBack();
284
288
  else
285
289
  props.onCancelled?.();
286
- }, children: "Back" }), next ? (_jsx(Button, { type: "button", onClick: () => void advance(), disabled: !canAdvance || isAdvanceGuardPending, className: "ml-auto", children: isAdvanceGuardPending ? "Checking..." : "Next" })) : null] }), advanceGuardError ? (_jsx("p", { className: "text-destructive text-sm", role: "alert", "aria-live": "polite", children: advanceGuardError })) : null, commit.error ? (_jsx("p", { className: "text-destructive text-sm", children: commit.error instanceof Error ? commit.error.message : String(commit.error) })) : null] }), _jsx("aside", { className: "md:sticky md:top-4 md:col-span-3", children: _jsx(PriceSidePanel, { pricing: quote.data?.pricing ?? null, isQuoting: quote.isQuoting, invalidReason: quote.data?.invalidReason, entitySummary: props.entitySummary, currentStep: currentStep, steps: steps, shape: shape, draft: draft, className: props.sidePanelClassName }) })] }), contractConfig ? (_jsx(ContractPreviewDialog, { open: contractDialogOpen, onOpenChange: setContractDialogOpen, previewUrl: contractConfig.previewUrl, acceptLanguage: contractConfig.acceptLanguage, variables: contractVariables, marketingLabel: contractConfig.marketingLabel, termsLabel: contractConfig.termsLabel, onAccept: onContractAccept })) : null] }));
290
+ }, children: messages.bookingJourney.navigation.back }), next ? (_jsx(Button, { type: "button", onClick: () => void advance(), disabled: !canAdvance || isAdvanceGuardPending, className: "ml-auto", children: isAdvanceGuardPending
291
+ ? messages.bookingJourney.navigation.checking
292
+ : messages.bookingJourney.navigation.next })) : null] }), advanceGuardError ? (_jsx("p", { className: "text-destructive text-sm", role: "alert", "aria-live": "polite", children: advanceGuardError })) : null, commit.error ? (_jsx("p", { className: "text-destructive text-sm", children: commit.error instanceof Error ? commit.error.message : String(commit.error) })) : null] }), _jsx("aside", { className: "md:sticky md:top-4 md:col-span-3", children: _jsx(PriceSidePanel, { pricing: quote.data?.pricing ?? null, isQuoting: quote.isQuoting, invalidReason: quote.data?.invalidReason, entitySummary: props.entitySummary, currentStep: currentStep, steps: steps, shape: shape, draft: draft, className: props.sidePanelClassName }) })] }), contractConfig ? (_jsx(ContractPreviewDialog, { open: contractDialogOpen, onOpenChange: setContractDialogOpen, previewUrl: contractConfig.previewUrl, acceptLanguage: contractConfig.acceptLanguage, variables: contractVariables, marketingLabel: contractConfig.marketingLabel, termsLabel: contractConfig.termsLabel, onAccept: onContractAccept })) : null] }));
287
293
  }
288
294
  function isStepVisible(step, shape) {
289
295
  switch (step) {
@@ -336,19 +342,19 @@ function canAdvanceFromStep(step, draft, shape, available) {
336
342
  * that are physically required to commit (e.g. traveler names);
337
343
  * everything else is a warning here.
338
344
  */
339
- function warningsForStep(step, draft, shape) {
345
+ function warningsForStep(step, draft, shape, messages) {
340
346
  const warnings = [];
341
347
  switch (step) {
342
348
  case "billing": {
343
349
  const c = draft.billing.contact;
344
350
  if (c.phone == null || c.phone.length === 0) {
345
- warnings.push("Phone number not set — useful for last-minute supplier contact.");
351
+ warnings.push(messages.bookingJourney.warnings.phoneMissing);
346
352
  }
347
353
  if (!draft.billing.address.country) {
348
- warnings.push("Billing country not set — taxes won't compute until it's filled in.");
354
+ warnings.push(messages.bookingJourney.warnings.billingCountryMissing);
349
355
  }
350
356
  if (draft.billing.buyerType === "B2B" && !draft.billing.company?.vatId) {
351
- warnings.push("VAT id missing — required for B2B reverse-charge invoicing.");
357
+ warnings.push(messages.bookingJourney.warnings.vatMissing);
352
358
  }
353
359
  break;
354
360
  }
@@ -363,8 +369,11 @@ function warningsForStep(step, draft, shape) {
363
369
  // the document map.
364
370
  const value = key === "email" ? t.email : docs[key];
365
371
  if (value == null || value === "") {
366
- const traveler = `${t.firstName || "Traveler"} ${t.lastName || ""}`.trim();
367
- warnings.push(`${traveler}: ${labelForFieldKey(key, shape)} is required.`);
372
+ const traveler = `${t.firstName || messages.bookingJourney.steps.travelers} ${t.lastName || ""}`.trim();
373
+ warnings.push(formatMessage(messages.bookingJourney.warnings.travelerFieldRequired, {
374
+ traveler,
375
+ field: labelForFieldKey(key, shape),
376
+ }));
368
377
  }
369
378
  }
370
379
  }
@@ -372,10 +381,10 @@ function warningsForStep(step, draft, shape) {
372
381
  }
373
382
  case "review": {
374
383
  if (!draft.payment.intent) {
375
- warnings.push("Payment intent not set — booking will default to hold.");
384
+ warnings.push(messages.bookingJourney.warnings.paymentIntentMissing);
376
385
  }
377
386
  if (draft.travelers.length === 0) {
378
- warnings.push("No travelers added — at least one is recommended for ops handoff.");
387
+ warnings.push(messages.bookingJourney.warnings.noTravelers);
379
388
  }
380
389
  break;
381
390
  }
@@ -1 +1 @@
1
- {"version":3,"file":"contract-preview-dialog.d.ts","sourceRoot":"","sources":["../../../src/journey/components/contract-preview-dialog.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAClD;4CACwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,IAAI,CAAA;IACnB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB;yDACqD;IACrD,YAAY,EAAE,MAAM,CAAA;CACrB;AAgBD,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,QAAQ,EACR,cAAc,EACd,UAAU,GACX,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CA6JjD"}
1
+ {"version":3,"file":"contract-preview-dialog.d.ts","sourceRoot":"","sources":["../../../src/journey/components/contract-preview-dialog.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,CAAA;IAClD;4CACwC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,IAAI,CAAA;IACnB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB;yDACqD;IACrD,YAAY,EAAE,MAAM,CAAA;CACrB;AAgBD,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,QAAQ,EACR,cAAc,EACd,UAAU,GACX,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CA2JjD"}