@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/en.js CHANGED
@@ -25,6 +25,15 @@ export const bookingsUiEn = {
25
25
  title: "Bookings",
26
26
  description: "Manage bookings, confirmations, and travelers.",
27
27
  },
28
+ bookingCreatePage: {
29
+ title: "New booking",
30
+ description: "Create a booking, select the billed customer, add travelers, and schedule payment.",
31
+ },
32
+ bookingCombobox: {
33
+ placeholder: "Search bookings...",
34
+ empty: "No bookings found.",
35
+ loading: "Loading bookings...",
36
+ },
28
37
  bookingDetailPage: {
29
38
  notFound: "Booking not found",
30
39
  backToBookings: "Back to bookings",
@@ -38,6 +47,7 @@ export const bookingsUiEn = {
38
47
  noValue: "-",
39
48
  tbd: "TBD",
40
49
  summarySell: "Sell",
50
+ summaryPriceOverride: "Manual override",
41
51
  summaryCostMargin: "Cost / margin",
42
52
  summaryDates: "Dates",
43
53
  summaryTravelers: "Travelers",
@@ -114,14 +124,47 @@ export const bookingsUiEn = {
114
124
  values: {
115
125
  emailUnavailable: "-",
116
126
  phoneUnavailable: "-",
127
+ documentsUnavailable: "-",
128
+ fieldUnavailable: "-",
129
+ noAdditionalContext: "No additional traveler context",
117
130
  },
118
131
  columns: {
119
132
  name: "Name",
120
133
  email: "Email",
121
134
  phone: "Phone",
135
+ role: "Role",
136
+ dobAge: "DOB / age",
137
+ documents: "Documents",
138
+ },
139
+ roles: {
140
+ primary: "Primary",
141
+ lead: "Lead",
142
+ },
143
+ context: {
144
+ nationality: "Nationality",
145
+ passport: "Passport",
146
+ passportExpiry: "Passport expiry",
147
+ language: "Language",
148
+ dietary: "Dietary",
149
+ accessibility: "Accessibility",
150
+ specialRequests: "Special requests",
151
+ notes: "Notes",
152
+ documentLabel: "Document · {type}",
153
+ },
154
+ loading: {
155
+ decrypting: "Decrypting...",
122
156
  },
123
157
  actions: {
124
158
  deleteConfirm: "Delete this traveler?",
159
+ revealContactDetails: "Reveal contact details",
160
+ hideContactDetails: "Hide details",
161
+ revealTravelerContactDetails: "Reveal traveler contact details",
162
+ hideTravelerContactDetails: "Hide traveler contact details",
163
+ editTraveler: "Edit traveler",
164
+ deleteTraveler: "Delete traveler",
165
+ },
166
+ validation: {
167
+ revealFailed: "Reveal failed",
125
168
  },
126
169
  },
127
170
  bookingItemDialog: {
@@ -279,6 +322,7 @@ export const bookingsUiEn = {
279
322
  product: "Product",
280
323
  productSearchPlaceholder: "Search products...",
281
324
  productSelectPlaceholder: "Select a product...",
325
+ productEmpty: "No products found.",
282
326
  option: "Option",
283
327
  optionNone: "No specific option",
284
328
  },
@@ -286,10 +330,18 @@ export const bookingsUiEn = {
286
330
  personPickerSection: {
287
331
  labels: {
288
332
  person: "Person",
333
+ organization: "Organization",
334
+ billTo: "Bill to",
335
+ billToPerson: "Person",
336
+ billToOrganization: "Organization",
289
337
  createNewPerson: "Create new",
338
+ createNewOrganization: "Create new",
339
+ createPersonSheetTitle: "Create person",
340
+ createOrganizationSheetTitle: "Create organization",
290
341
  selectExistingPerson: "Select existing",
291
342
  personSearchPlaceholder: "Search people by name or email...",
292
343
  personSelectPlaceholder: "Select a person...",
344
+ personEmpty: "No people found.",
293
345
  firstName: "First name",
294
346
  firstNamePlaceholder: "John",
295
347
  lastName: "Last name",
@@ -298,8 +350,9 @@ export const bookingsUiEn = {
298
350
  emailPlaceholder: "john@example.com",
299
351
  phone: "Phone",
300
352
  phonePlaceholder: "+44 7911 123456",
301
- organization: "Organization (optional)",
302
353
  organizationSearchPlaceholder: "Search organizations...",
354
+ organizationSelectPlaceholder: "Select an organization...",
355
+ organizationEmpty: "No organizations found.",
303
356
  organizationNone: "No organization",
304
357
  },
305
358
  },
@@ -349,12 +402,16 @@ export const bookingsUiEn = {
349
402
  },
350
403
  sharedRoomSection: {
351
404
  labels: {
352
- toggle: "Link to a shared-room group",
353
- createMode: "Create new group",
354
- joinMode: "Join existing",
355
- selectPlaceholder: "Select a group...",
356
- noGroups: "No existing groups for this product",
357
- createHint: "A new group will be created with this booking as the primary member.",
405
+ toggle: "Room sharing",
406
+ createMode: "Create new shared room",
407
+ joinMode: "Join existing shared room",
408
+ selectPlaceholder: "Search shared rooms...",
409
+ noGroups: "No shared rooms found for this product.",
410
+ createHint: "A new shared room will be created with this booking as the primary member.",
411
+ createSheetTitle: "Create shared room",
412
+ groupLabel: "Shared room label",
413
+ groupLabelPlaceholder: "e.g. Smith + Jones, Room 204",
414
+ createAction: "Use shared room",
358
415
  },
359
416
  },
360
417
  priceBreakdownSection: {
@@ -365,6 +422,12 @@ export const bookingsUiEn = {
365
422
  groupRate: "group rate",
366
423
  empty: "Pick units above to see the breakdown.",
367
424
  noPricing: "No pricing catalog available for this product.",
425
+ confirmedTotal: "Confirmed total",
426
+ manualTotal: "Manual total",
427
+ useCatalogTotal: "Use catalog",
428
+ overrideReason: "Override reason",
429
+ overrideReasonPlaceholder: "Why is this total different?",
430
+ overrideReasonRequired: "Add a reason for the manual total.",
368
431
  },
369
432
  },
370
433
  bookingDocumentDialog: {
@@ -484,6 +547,201 @@ export const bookingsUiEn = {
484
547
  },
485
548
  actions: {
486
549
  deleteConfirm: "Delete this item?",
550
+ expandItem: "Expand item",
551
+ collapseItem: "Collapse item",
552
+ editItem: "Edit item",
553
+ deleteItem: "Delete item",
554
+ },
555
+ },
556
+ bookingJourney: {
557
+ steps: {
558
+ configure: "Configure",
559
+ billing: "Billing",
560
+ travelers: "Travelers",
561
+ accommodation: "Accommodation",
562
+ addons: "Add-ons",
563
+ payment: "Payment",
564
+ review: "Review",
565
+ billingAndContact: "Billing & contact",
566
+ reviewAndConfirm: "Review & confirm",
567
+ },
568
+ navigation: {
569
+ back: "Back",
570
+ next: "Next",
571
+ checking: "Checking...",
572
+ },
573
+ values: {
574
+ noValue: "—",
575
+ notSet: "Not set",
576
+ none: "None",
577
+ selectPlaceholder: "Select...",
578
+ },
579
+ validation: {
580
+ completeStepBeforeContinuing: "Complete this step before continuing.",
581
+ unableToContinue: "Unable to continue. Please try again.",
582
+ addAtLeastTravelers: "Add at least {count} traveler{plural} to continue.",
583
+ maxTravelersPerBooking: "Max {count} travelers per booking.",
584
+ ageOutOfRange: "Age {age} is outside the accepted range for this product.",
585
+ },
586
+ warnings: {
587
+ phoneMissing: "Phone number not set — useful for last-minute supplier contact.",
588
+ billingCountryMissing: "Billing country not set — taxes won't compute until it's filled in.",
589
+ vatMissing: "VAT id missing — required for B2B reverse-charge invoicing.",
590
+ travelerFieldRequired: "{traveler}: {field} is required.",
591
+ paymentIntentMissing: "Payment intent not set — booking will default to hold.",
592
+ noTravelers: "No travelers added — at least one is recommended for ops handoff.",
593
+ },
594
+ configure: {
595
+ travelers: "Travelers",
596
+ departureDate: "Departure date",
597
+ timeOptional: "Time (optional)",
598
+ checkIn: "Check-in",
599
+ checkOutWithNights: "Check-out ({minNights}-{maxNights} nights)",
600
+ cabinCategory: "Cabin category",
601
+ cabinNumber: "Cabin number",
602
+ airArrangements: "Air arrangements",
603
+ airOptions: {
604
+ cruise_line: {
605
+ label: "Cruise-line-arranged flights",
606
+ description: "The cruise line books your flights in a coordinated package. Operator follows up with the air desk.",
607
+ },
608
+ independent: {
609
+ label: "Independent flights",
610
+ description: "Book flights yourself or via a separate flight booking line.",
611
+ },
612
+ none: {
613
+ label: "No flights needed",
614
+ description: "Regional cruise / driving to the port.",
615
+ },
616
+ },
617
+ ageHintRange: "{min}-{max}y",
618
+ ageHintMinimum: "{min}y+",
619
+ ageHintMaximum: "up to {max}y",
620
+ },
621
+ billing: {
622
+ title: "Billing & lead contact",
623
+ buyerType: "Buyer type",
624
+ individual: "Individual (B2C)",
625
+ company: "Company (B2B)",
626
+ firstName: "First name",
627
+ lastName: "Last name",
628
+ email: "Email",
629
+ phone: "Phone",
630
+ addressLine1: "Address line 1",
631
+ addressLine2Optional: "Address line 2 (optional)",
632
+ city: "City",
633
+ postalCode: "Postal code",
634
+ country: "Country",
635
+ companyName: "Company name",
636
+ vatId: "VAT id",
637
+ },
638
+ travelers: {
639
+ title: "Travelers",
640
+ empty: "Pick traveler counts in the Configure step to start adding details.",
641
+ addTraveler: "Add traveler",
642
+ travelerNumber: "Traveler {number}",
643
+ ageLabel: "age {age}",
644
+ copyFromBilling: "Copy from billing",
645
+ remove: "Remove",
646
+ },
647
+ accommodation: {
648
+ title: "Accommodation",
649
+ empty: "No accommodation options for this product.",
650
+ extensionsAvailable: "{count} extension option{plural} available — UI lands in Phase F.",
651
+ ratePlan: "Rate plan",
652
+ cancellationPrefix: "Cancellation:",
653
+ includesPrefix: "Includes:",
654
+ },
655
+ addons: {
656
+ title: "Add-ons",
657
+ empty: "No add-ons available for this product.",
658
+ otherBucket: "Other",
659
+ },
660
+ payment: {
661
+ title: "Payment",
662
+ empty: "No payment methods are available for this booking.",
663
+ redirectedAfterConfirm: "You'll be redirected to our secure payment page after confirming the booking.",
664
+ inquiryNotice: "We'll send your details to the operator without locking inventory or taking payment. They'll get back to you with availability and a quote — typically within one business day.",
665
+ bankTransferInstructions: "Bank transfer instructions",
666
+ bankTransferDefaultNote: "After you submit, you'll receive an email with our bank details and a payment reference. Inventory is held pending payment.",
667
+ intentLabels: {
668
+ card: "Pay by card",
669
+ bank_transfer: "Bank transfer",
670
+ hold: "Hold for now",
671
+ ticket_on_credit: "Agency credit account",
672
+ inquiry: "Send as inquiry",
673
+ },
674
+ intentDescriptions: {
675
+ card: "Charged immediately. Inventory is reserved on confirmation.",
676
+ bank_transfer: "We'll send you bank details and a reference. Inventory is held while we wait for the transfer.",
677
+ hold: "Reserve inventory without paying. The operator follows up to collect payment.",
678
+ ticket_on_credit: "Charge against an agency's credit line. Operator surfaces only.",
679
+ inquiry: "No payment, no inventory hold. The operator gets back to you with availability and a quote.",
680
+ },
681
+ },
682
+ review: {
683
+ title: "Review & confirm",
684
+ leadContact: "Lead contact",
685
+ travelers: "Travelers",
686
+ customerNotes: "Notes",
687
+ customerNotesPlaceholder: "Anything we should know? (allergies, accessibility needs, special occasion...)",
688
+ internalNotes: "Internal notes (operator-only)",
689
+ confirmBooking: "Confirm booking",
690
+ confirming: "Confirming...",
691
+ },
692
+ contract: {
693
+ defaultTitle: "Booking contract",
694
+ description: "Please review the contract below. You can scroll through the document, then tick the boxes and click Accept to continue.",
695
+ errorPrefix: "Couldn't load the contract preview:",
696
+ iframeTitle: "{name} preview",
697
+ termsLabel: "I have read and agree to the terms of this contract. I understand that this booking is binding once accepted.",
698
+ marketingLabel: "I'd like to receive occasional travel offers and updates by email. (You can unsubscribe at any time.)",
699
+ cancel: "Cancel",
700
+ acceptAndContinue: "Accept and continue",
701
+ previewRequestFailed: "Preview request failed: {status}",
702
+ previewMissing: "Preview response missing rendered body or template metadata",
703
+ },
704
+ sidePanel: {
705
+ youAreBooking: "You're booking",
706
+ total: "Total",
707
+ guestSingular: "guest",
708
+ guestPlural: "guests",
709
+ filledOf: "{filled} of {total} filled",
710
+ roomSingular: "room",
711
+ roomPlural: "rooms",
712
+ addOnSingular: "add-on",
713
+ addOnPlural: "add-ons",
714
+ card: "Card",
715
+ hold: "Hold",
716
+ onCredit: "On credit",
717
+ confirmAndBook: "Confirm and book",
718
+ reviewDetails: "Review your details and confirm to book.",
719
+ noTravelersYet: "No travelers yet.",
720
+ notSelected: "Not selected.",
721
+ noAddonsSelected: "No add-ons selected.",
722
+ adults: "Adults",
723
+ children: "Children",
724
+ infants: "Infants",
725
+ departure: "Departure",
726
+ date: "Date",
727
+ checkIn: "Check-in",
728
+ checkOut: "Check-out",
729
+ cabin: "Cabin",
730
+ name: "Name",
731
+ email: "Email",
732
+ phone: "Phone",
733
+ buyer: "Buyer",
734
+ company: "Company",
735
+ individual: "Individual",
736
+ vat: "VAT",
737
+ address: "Address",
738
+ travelerNumber: "Traveler {number}",
739
+ dob: "DOB",
740
+ method: "Method",
741
+ schedule: "Schedule",
742
+ payByCard: "Pay by card",
743
+ ticketOnCredit: "Ticket on credit",
744
+ holdNoChargeYet: "Hold (no charge yet)",
487
745
  },
488
746
  },
489
747
  bookingPaymentScheduleList: {
@@ -700,7 +958,7 @@ export const bookingsUiEn = {
700
958
  },
701
959
  },
702
960
  bookingCreateDialog: {
703
- title: "Quick book",
961
+ title: "New booking",
704
962
  fields: {
705
963
  departure: "Departure",
706
964
  internalNotes: "Internal notes",
@@ -711,13 +969,14 @@ export const bookingsUiEn = {
711
969
  departure: "Select a departure...",
712
970
  departureNone: "No specific departure",
713
971
  departureEmpty: "No open departures for this product",
714
- internalNotes: "Quick context for this booking...",
972
+ internalNotes: "Context for this booking...",
715
973
  },
716
974
  validation: {
717
975
  selectProduct: "Select a product",
718
- selectPerson: "Select a person or switch to create mode",
976
+ selectPerson: "Select a person",
977
+ selectOrganization: "Select an organization",
719
978
  firstAndLastNameRequired: "First and last name are required",
720
- selectSharedRoomGroup: "Select a shared-room group to join",
979
+ selectSharedRoomGroup: "Select a shared room to join",
721
980
  confirmFailedPrefix: "Booking created but confirm failed: {message}",
722
981
  confirmFailed: "Booking created but confirm failed",
723
982
  createFailed: "Failed to create booking",
@@ -748,12 +1007,12 @@ export const bookingsUiEn = {
748
1007
  roomsNoUnits: "This departure has no per-unit availability configured.",
749
1008
  roomsRemaining: "left",
750
1009
  roomsUnlimited: "unlimited",
751
- sharedRoomToggle: "Link to a shared-room group",
752
- sharedRoomCreateMode: "Create new group",
753
- sharedRoomJoinMode: "Join existing",
754
- sharedRoomSelectPlaceholder: "Select a group...",
755
- sharedRoomNoGroups: "No existing groups for this product",
756
- sharedRoomCreateHint: "A new group will be created with this booking as the primary member.",
1010
+ sharedRoomToggle: "Room sharing",
1011
+ sharedRoomCreateMode: "Create new shared room",
1012
+ sharedRoomJoinMode: "Join existing shared room",
1013
+ sharedRoomSelectPlaceholder: "Search shared rooms...",
1014
+ sharedRoomNoGroups: "No shared rooms found for this product.",
1015
+ sharedRoomCreateHint: "A new shared room will be created with this booking as the primary member.",
757
1016
  sharedRoomGeneratedLabelPrefix: "Shared room",
758
1017
  voucherHeading: "Voucher (optional)",
759
1018
  voucherCodePlaceholder: "Enter voucher code...",
@@ -778,6 +1037,12 @@ export const bookingsUiEn = {
778
1037
  breakdownGroupRate: "group rate",
779
1038
  breakdownEmpty: "Pick units above to see the breakdown.",
780
1039
  breakdownNoPricing: "No pricing catalog available for this product.",
1040
+ breakdownConfirmedTotal: "Confirmed total",
1041
+ breakdownManualTotal: "Manual total",
1042
+ breakdownUseCatalogTotal: "Use catalog",
1043
+ breakdownOverrideReason: "Override reason",
1044
+ breakdownOverrideReasonPlaceholder: "Why is this total different?",
1045
+ breakdownOverrideReasonRequired: "Add a reason for the manual total.",
781
1046
  },
782
1047
  },
783
1048
  bookingList: {
@@ -799,6 +1064,22 @@ export const bookingsUiEn = {
799
1064
  productLabel: "Product",
800
1065
  product: "Search products...",
801
1066
  productEmpty: "No products found.",
1067
+ optionLabel: "Option",
1068
+ option: "Search options...",
1069
+ optionEmpty: "No options found.",
1070
+ optionNeedsProduct: "Select a product first.",
1071
+ categoryLabel: "Category",
1072
+ category: "Search categories...",
1073
+ categoryEmpty: "No categories found.",
1074
+ supplierLabel: "Supplier",
1075
+ supplier: "Search suppliers...",
1076
+ supplierEmpty: "No suppliers found.",
1077
+ personLabel: "Person",
1078
+ person: "Search people...",
1079
+ personEmpty: "No people found.",
1080
+ organizationLabel: "Organization",
1081
+ organization: "Search organizations...",
1082
+ organizationEmpty: "No organizations found.",
802
1083
  dateRangeLabel: "Start date",
803
1084
  dateRange: "Any date",
804
1085
  paxLabel: "Pax",
@@ -811,6 +1092,8 @@ export const bookingsUiEn = {
811
1092
  empty: "No bookings found.",
812
1093
  showingSummary: "Showing {count} of {total}",
813
1094
  pageSummary: "Page {page} / {pageCount}",
1095
+ previousPage: "Previous",
1096
+ nextPage: "Next",
814
1097
  },
815
1098
  bookingPaymentsSummary: {
816
1099
  title: "Payments",