@voyant-travel/bookings-react 0.119.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.
Files changed (602) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +87 -0
  3. package/dist/admin/booking-contract-dialog.d.ts +22 -0
  4. package/dist/admin/booking-contract-dialog.d.ts.map +1 -0
  5. package/dist/admin/booking-contract-dialog.js +161 -0
  6. package/dist/admin/booking-detail-host.d.ts +103 -0
  7. package/dist/admin/booking-detail-host.d.ts.map +1 -0
  8. package/dist/admin/booking-detail-host.js +127 -0
  9. package/dist/admin/booking-detail-skeleton.d.ts +7 -0
  10. package/dist/admin/booking-detail-skeleton.d.ts.map +1 -0
  11. package/dist/admin/booking-detail-skeleton.js +24 -0
  12. package/dist/admin/booking-documents-table.d.ts +13 -0
  13. package/dist/admin/booking-documents-table.d.ts.map +1 -0
  14. package/dist/admin/booking-documents-table.js +259 -0
  15. package/dist/admin/booking-invoice-sheet.d.ts +18 -0
  16. package/dist/admin/booking-invoice-sheet.d.ts.map +1 -0
  17. package/dist/admin/booking-invoice-sheet.js +101 -0
  18. package/dist/admin/booking-journey-host.d.ts +24 -0
  19. package/dist/admin/booking-journey-host.d.ts.map +1 -0
  20. package/dist/admin/booking-journey-host.js +278 -0
  21. package/dist/admin/bookings-host.d.ts +26 -0
  22. package/dist/admin/bookings-host.d.ts.map +1 -0
  23. package/dist/admin/bookings-host.js +18 -0
  24. package/dist/admin/bookings-list-skeleton.d.ts +10 -0
  25. package/dist/admin/bookings-list-skeleton.d.ts.map +1 -0
  26. package/dist/admin/bookings-list-skeleton.js +25 -0
  27. package/dist/admin/index.d.ts +273 -0
  28. package/dist/admin/index.d.ts.map +1 -0
  29. package/dist/admin/index.js +331 -0
  30. package/dist/admin/journey-billing-duplicate-warning.d.ts +3 -0
  31. package/dist/admin/journey-billing-duplicate-warning.d.ts.map +1 -0
  32. package/dist/admin/journey-billing-duplicate-warning.js +26 -0
  33. package/dist/admin/journey-departure-picker.d.ts +7 -0
  34. package/dist/admin/journey-departure-picker.d.ts.map +1 -0
  35. package/dist/admin/journey-departure-picker.js +100 -0
  36. package/dist/admin/journey-units-picker.d.ts +11 -0
  37. package/dist/admin/journey-units-picker.d.ts.map +1 -0
  38. package/dist/admin/journey-units-picker.js +60 -0
  39. package/dist/admin/journey-voucher-picker.d.ts +3 -0
  40. package/dist/admin/journey-voucher-picker.d.ts.map +1 -0
  41. package/dist/admin/journey-voucher-picker.js +71 -0
  42. package/dist/admin/pages/booking-compose-page.d.ts +9 -0
  43. package/dist/admin/pages/booking-compose-page.d.ts.map +1 -0
  44. package/dist/admin/pages/booking-compose-page.js +17 -0
  45. package/dist/admin/pages/booking-detail-page.d.ts +11 -0
  46. package/dist/admin/pages/booking-detail-page.d.ts.map +1 -0
  47. package/dist/admin/pages/booking-detail-page.js +14 -0
  48. package/dist/admin/pages/booking-journey-page.d.ts +12 -0
  49. package/dist/admin/pages/booking-journey-page.d.ts.map +1 -0
  50. package/dist/admin/pages/booking-journey-page.js +26 -0
  51. package/dist/admin/pages/booking-new-page.d.ts +15 -0
  52. package/dist/admin/pages/booking-new-page.d.ts.map +1 -0
  53. package/dist/admin/pages/booking-new-page.js +50 -0
  54. package/dist/admin/pages/bookings-index-page.d.ts +20 -0
  55. package/dist/admin/pages/bookings-index-page.d.ts.map +1 -0
  56. package/dist/admin/pages/bookings-index-page.js +18 -0
  57. package/dist/admin/person-bookings-widget.d.ts +13 -0
  58. package/dist/admin/person-bookings-widget.d.ts.map +1 -0
  59. package/dist/admin/person-bookings-widget.js +48 -0
  60. package/dist/admin/slots.d.ts +31 -0
  61. package/dist/admin/slots.d.ts.map +1 -0
  62. package/dist/admin/slots.js +30 -0
  63. package/dist/admin/use-booking-action-ledger-events.d.ts +15 -0
  64. package/dist/admin/use-booking-action-ledger-events.d.ts.map +1 -0
  65. package/dist/admin/use-booking-action-ledger-events.js +66 -0
  66. package/dist/client.d.ts +14 -0
  67. package/dist/client.d.ts.map +1 -0
  68. package/dist/client.js +59 -0
  69. package/dist/components/booking-activity-timeline.d.ts +32 -0
  70. package/dist/components/booking-activity-timeline.d.ts.map +1 -0
  71. package/dist/components/booking-activity-timeline.js +147 -0
  72. package/dist/components/booking-billing-dialog.d.ts +16 -0
  73. package/dist/components/booking-billing-dialog.d.ts.map +1 -0
  74. package/dist/components/booking-billing-dialog.js +315 -0
  75. package/dist/components/booking-cancellation-dialog.d.ts +18 -0
  76. package/dist/components/booking-cancellation-dialog.d.ts.map +1 -0
  77. package/dist/components/booking-cancellation-dialog.js +79 -0
  78. package/dist/components/booking-combobox.d.ts +13 -0
  79. package/dist/components/booking-combobox.d.ts.map +1 -0
  80. package/dist/components/booking-combobox.js +44 -0
  81. package/dist/components/booking-create-form-utils.d.ts +56 -0
  82. package/dist/components/booking-create-form-utils.d.ts.map +1 -0
  83. package/dist/components/booking-create-form-utils.js +216 -0
  84. package/dist/components/booking-create-page.d.ts +14 -0
  85. package/dist/components/booking-create-page.d.ts.map +1 -0
  86. package/dist/components/booking-create-page.js +11 -0
  87. package/dist/components/booking-create-preview-card.d.ts +26 -0
  88. package/dist/components/booking-create-preview-card.d.ts.map +1 -0
  89. package/dist/components/booking-create-preview-card.js +107 -0
  90. package/dist/components/booking-create-product-extras-picker.d.ts +18 -0
  91. package/dist/components/booking-create-product-extras-picker.d.ts.map +1 -0
  92. package/dist/components/booking-create-product-extras-picker.js +82 -0
  93. package/dist/components/booking-create-sheet.d.ts +34 -0
  94. package/dist/components/booking-create-sheet.d.ts.map +1 -0
  95. package/dist/components/booking-create-sheet.js +811 -0
  96. package/dist/components/booking-create-utils.d.ts +66 -0
  97. package/dist/components/booking-create-utils.d.ts.map +1 -0
  98. package/dist/components/booking-create-utils.js +185 -0
  99. package/dist/components/booking-detail-page.d.ts +126 -0
  100. package/dist/components/booking-detail-page.d.ts.map +1 -0
  101. package/dist/components/booking-detail-page.js +264 -0
  102. package/dist/components/booking-dialog.d.ts +28 -0
  103. package/dist/components/booking-dialog.d.ts.map +1 -0
  104. package/dist/components/booking-dialog.js +130 -0
  105. package/dist/components/booking-document-dialog.d.ts +8 -0
  106. package/dist/components/booking-document-dialog.d.ts.map +1 -0
  107. package/dist/components/booking-document-dialog.js +83 -0
  108. package/dist/components/booking-document-list.d.ts +5 -0
  109. package/dist/components/booking-document-list.d.ts.map +1 -0
  110. package/dist/components/booking-document-list.js +43 -0
  111. package/dist/components/booking-group-link-dialog.d.ts +10 -0
  112. package/dist/components/booking-group-link-dialog.d.ts.map +1 -0
  113. package/dist/components/booking-group-link-dialog.js +79 -0
  114. package/dist/components/booking-group-section.d.ts +27 -0
  115. package/dist/components/booking-group-section.d.ts.map +1 -0
  116. package/dist/components/booking-group-section.js +51 -0
  117. package/dist/components/booking-guarantee-dialog.d.ts +10 -0
  118. package/dist/components/booking-guarantee-dialog.d.ts.map +1 -0
  119. package/dist/components/booking-guarantee-dialog.js +123 -0
  120. package/dist/components/booking-guarantee-list.d.ts +5 -0
  121. package/dist/components/booking-guarantee-list.d.ts.map +1 -0
  122. package/dist/components/booking-guarantee-list.js +86 -0
  123. package/dist/components/booking-item-dialog.d.ts +10 -0
  124. package/dist/components/booking-item-dialog.d.ts.map +1 -0
  125. package/dist/components/booking-item-dialog.js +155 -0
  126. package/dist/components/booking-item-list.d.ts +12 -0
  127. package/dist/components/booking-item-list.d.ts.map +1 -0
  128. package/dist/components/booking-item-list.js +191 -0
  129. package/dist/components/booking-item-travelers.d.ts +6 -0
  130. package/dist/components/booking-item-travelers.d.ts.map +1 -0
  131. package/dist/components/booking-item-travelers.js +57 -0
  132. package/dist/components/booking-list-filters.d.ts +43 -0
  133. package/dist/components/booking-list-filters.d.ts.map +1 -0
  134. package/dist/components/booking-list-filters.js +192 -0
  135. package/dist/components/booking-list.d.ts +50 -0
  136. package/dist/components/booking-list.d.ts.map +1 -0
  137. package/dist/components/booking-list.js +352 -0
  138. package/dist/components/booking-note-dialog.d.ts +16 -0
  139. package/dist/components/booking-note-dialog.d.ts.map +1 -0
  140. package/dist/components/booking-note-dialog.js +41 -0
  141. package/dist/components/booking-notes.d.ts +5 -0
  142. package/dist/components/booking-notes.d.ts.map +1 -0
  143. package/dist/components/booking-notes.js +45 -0
  144. package/dist/components/booking-payment-reconciliation-banner.d.ts +5 -0
  145. package/dist/components/booking-payment-reconciliation-banner.d.ts.map +1 -0
  146. package/dist/components/booking-payment-reconciliation-banner.js +91 -0
  147. package/dist/components/booking-payment-schedule-dialog.d.ts +10 -0
  148. package/dist/components/booking-payment-schedule-dialog.d.ts.map +1 -0
  149. package/dist/components/booking-payment-schedule-dialog.js +117 -0
  150. package/dist/components/booking-payment-schedule-list.d.ts +10 -0
  151. package/dist/components/booking-payment-schedule-list.d.ts.map +1 -0
  152. package/dist/components/booking-payment-schedule-list.js +217 -0
  153. package/dist/components/booking-payments-summary.d.ts +83 -0
  154. package/dist/components/booking-payments-summary.d.ts.map +1 -0
  155. package/dist/components/booking-payments-summary.js +176 -0
  156. package/dist/components/booking-quick-view-sheet.d.ts +14 -0
  157. package/dist/components/booking-quick-view-sheet.d.ts.map +1 -0
  158. package/dist/components/booking-quick-view-sheet.js +283 -0
  159. package/dist/components/bookings-page.d.ts +19 -0
  160. package/dist/components/bookings-page.d.ts.map +1 -0
  161. package/dist/components/bookings-page.js +9 -0
  162. package/dist/components/file-dropzone.d.ts +25 -0
  163. package/dist/components/file-dropzone.d.ts.map +1 -0
  164. package/dist/components/file-dropzone.js +102 -0
  165. package/dist/components/icon-action-button.d.ts +18 -0
  166. package/dist/components/icon-action-button.d.ts.map +1 -0
  167. package/dist/components/icon-action-button.js +13 -0
  168. package/dist/components/option-units-stepper-section.d.ts +111 -0
  169. package/dist/components/option-units-stepper-section.d.ts.map +1 -0
  170. package/dist/components/option-units-stepper-section.js +276 -0
  171. package/dist/components/payment-schedule-section.d.ts +91 -0
  172. package/dist/components/payment-schedule-section.d.ts.map +1 -0
  173. package/dist/components/payment-schedule-section.js +206 -0
  174. package/dist/components/person-picker-section.d.ts +71 -0
  175. package/dist/components/person-picker-section.d.ts.map +1 -0
  176. package/dist/components/person-picker-section.js +160 -0
  177. package/dist/components/price-breakdown-section.d.ts +83 -0
  178. package/dist/components/price-breakdown-section.d.ts.map +1 -0
  179. package/dist/components/price-breakdown-section.js +278 -0
  180. package/dist/components/product-picker-section.d.ts +29 -0
  181. package/dist/components/product-picker-section.d.ts.map +1 -0
  182. package/dist/components/product-picker-section.js +74 -0
  183. package/dist/components/shared-room-section.d.ts +40 -0
  184. package/dist/components/shared-room-section.d.ts.map +1 -0
  185. package/dist/components/shared-room-section.js +99 -0
  186. package/dist/components/status-badge.d.ts +24 -0
  187. package/dist/components/status-badge.d.ts.map +1 -0
  188. package/dist/components/status-badge.js +65 -0
  189. package/dist/components/status-change-dialog.d.ts +10 -0
  190. package/dist/components/status-change-dialog.d.ts.map +1 -0
  191. package/dist/components/status-change-dialog.js +57 -0
  192. package/dist/components/supplier-status-dialog.d.ts +10 -0
  193. package/dist/components/supplier-status-dialog.d.ts.map +1 -0
  194. package/dist/components/supplier-status-dialog.js +98 -0
  195. package/dist/components/supplier-status-list.d.ts +5 -0
  196. package/dist/components/supplier-status-list.d.ts.map +1 -0
  197. package/dist/components/supplier-status-list.js +115 -0
  198. package/dist/components/traveler-category-buttons.d.ts +26 -0
  199. package/dist/components/traveler-category-buttons.d.ts.map +1 -0
  200. package/dist/components/traveler-category-buttons.js +35 -0
  201. package/dist/components/traveler-dialog.d.ts +10 -0
  202. package/dist/components/traveler-dialog.d.ts.map +1 -0
  203. package/dist/components/traveler-dialog.js +256 -0
  204. package/dist/components/traveler-list.d.ts +6 -0
  205. package/dist/components/traveler-list.d.ts.map +1 -0
  206. package/dist/components/traveler-list.js +295 -0
  207. package/dist/components/travelers-section-controls.d.ts +52 -0
  208. package/dist/components/travelers-section-controls.d.ts.map +1 -0
  209. package/dist/components/travelers-section-controls.js +206 -0
  210. package/dist/components/travelers-section.d.ts +159 -0
  211. package/dist/components/travelers-section.d.ts.map +1 -0
  212. package/dist/components/travelers-section.js +355 -0
  213. package/dist/components/voucher-picker-section.d.ts +50 -0
  214. package/dist/components/voucher-picker-section.d.ts.map +1 -0
  215. package/dist/components/voucher-picker-section.js +79 -0
  216. package/dist/extras/client.d.ts +14 -0
  217. package/dist/extras/client.d.ts.map +1 -0
  218. package/dist/extras/client.js +58 -0
  219. package/dist/extras/components/extra-catalog-card.d.ts +13 -0
  220. package/dist/extras/components/extra-catalog-card.d.ts.map +1 -0
  221. package/dist/extras/components/extra-catalog-card.js +52 -0
  222. package/dist/extras/components/product-combobox.d.ts +9 -0
  223. package/dist/extras/components/product-combobox.d.ts.map +1 -0
  224. package/dist/extras/components/product-combobox.js +46 -0
  225. package/dist/extras/components/slot-extras-manifest-panel.d.ts +6 -0
  226. package/dist/extras/components/slot-extras-manifest-panel.d.ts.map +1 -0
  227. package/dist/extras/components/slot-extras-manifest-panel.js +108 -0
  228. package/dist/extras/hooks/index.d.ts +5 -0
  229. package/dist/extras/hooks/index.d.ts.map +1 -0
  230. package/dist/extras/hooks/index.js +4 -0
  231. package/dist/extras/hooks/use-product-extra.d.ts +24 -0
  232. package/dist/extras/hooks/use-product-extra.d.ts.map +1 -0
  233. package/dist/extras/hooks/use-product-extra.js +12 -0
  234. package/dist/extras/hooks/use-product-extras.d.ts +30 -0
  235. package/dist/extras/hooks/use-product-extras.d.ts.map +1 -0
  236. package/dist/extras/hooks/use-product-extras.js +12 -0
  237. package/dist/extras/hooks/use-slot-extra-manifest-mutation.d.ts +48 -0
  238. package/dist/extras/hooks/use-slot-extra-manifest-mutation.d.ts.map +1 -0
  239. package/dist/extras/hooks/use-slot-extra-manifest-mutation.js +26 -0
  240. package/dist/extras/hooks/use-slot-extra-manifest.d.ts +68 -0
  241. package/dist/extras/hooks/use-slot-extra-manifest.d.ts.map +1 -0
  242. package/dist/extras/hooks/use-slot-extra-manifest.js +11 -0
  243. package/dist/extras/i18n/en.d.ts +52 -0
  244. package/dist/extras/i18n/en.d.ts.map +1 -0
  245. package/dist/extras/i18n/en.js +51 -0
  246. package/dist/extras/i18n/index.d.ts +5 -0
  247. package/dist/extras/i18n/index.d.ts.map +1 -0
  248. package/dist/extras/i18n/index.js +3 -0
  249. package/dist/extras/i18n/messages.d.ts +37 -0
  250. package/dist/extras/i18n/messages.d.ts.map +1 -0
  251. package/dist/extras/i18n/messages.js +1 -0
  252. package/dist/extras/i18n/provider.d.ts +126 -0
  253. package/dist/extras/i18n/provider.d.ts.map +1 -0
  254. package/dist/extras/i18n/provider.js +44 -0
  255. package/dist/extras/i18n/ro.d.ts +52 -0
  256. package/dist/extras/i18n/ro.d.ts.map +1 -0
  257. package/dist/extras/i18n/ro.js +51 -0
  258. package/dist/extras/index.d.ts +7 -0
  259. package/dist/extras/index.d.ts.map +1 -0
  260. package/dist/extras/index.js +6 -0
  261. package/dist/extras/provider.d.ts +2 -0
  262. package/dist/extras/provider.d.ts.map +1 -0
  263. package/dist/extras/provider.js +1 -0
  264. package/dist/extras/query-keys.d.ts +16 -0
  265. package/dist/extras/query-keys.d.ts.map +1 -0
  266. package/dist/extras/query-keys.js +8 -0
  267. package/dist/extras/query-options.d.ts +455 -0
  268. package/dist/extras/query-options.d.ts.map +1 -0
  269. package/dist/extras/query-options.js +44 -0
  270. package/dist/extras/schemas.d.ts +416 -0
  271. package/dist/extras/schemas.d.ts.map +1 -0
  272. package/dist/extras/schemas.js +89 -0
  273. package/dist/extras/ui.d.ts +4 -0
  274. package/dist/extras/ui.d.ts.map +1 -0
  275. package/dist/extras/ui.js +3 -0
  276. package/dist/extras.d.ts +10 -0
  277. package/dist/extras.d.ts.map +1 -0
  278. package/dist/extras.js +9 -0
  279. package/dist/hooks/index.d.ts +36 -0
  280. package/dist/hooks/index.d.ts.map +1 -0
  281. package/dist/hooks/index.js +35 -0
  282. package/dist/hooks/use-booking-action-ledger.d.ts +63 -0
  283. package/dist/hooks/use-booking-action-ledger.d.ts.map +1 -0
  284. package/dist/hooks/use-booking-action-ledger.js +34 -0
  285. package/dist/hooks/use-booking-activity.d.ts +17 -0
  286. package/dist/hooks/use-booking-activity.d.ts.map +1 -0
  287. package/dist/hooks/use-booking-activity.js +12 -0
  288. package/dist/hooks/use-booking-cancel-mutation.d.ts +69 -0
  289. package/dist/hooks/use-booking-cancel-mutation.d.ts.map +1 -0
  290. package/dist/hooks/use-booking-cancel-mutation.js +24 -0
  291. package/dist/hooks/use-booking-contract-generation.d.ts +31 -0
  292. package/dist/hooks/use-booking-contract-generation.d.ts.map +1 -0
  293. package/dist/hooks/use-booking-contract-generation.js +36 -0
  294. package/dist/hooks/use-booking-convert-mutation.d.ts +81 -0
  295. package/dist/hooks/use-booking-convert-mutation.d.ts.map +1 -0
  296. package/dist/hooks/use-booking-convert-mutation.js +24 -0
  297. package/dist/hooks/use-booking-create-mutation.d.ts +337 -0
  298. package/dist/hooks/use-booking-create-mutation.d.ts.map +1 -0
  299. package/dist/hooks/use-booking-create-mutation.js +43 -0
  300. package/dist/hooks/use-booking-documents.d.ts +41 -0
  301. package/dist/hooks/use-booking-documents.d.ts.map +1 -0
  302. package/dist/hooks/use-booking-documents.js +46 -0
  303. package/dist/hooks/use-booking-dual-create-mutation.d.ts +338 -0
  304. package/dist/hooks/use-booking-dual-create-mutation.d.ts.map +1 -0
  305. package/dist/hooks/use-booking-dual-create-mutation.js +45 -0
  306. package/dist/hooks/use-booking-group-for-booking.d.ts +24 -0
  307. package/dist/hooks/use-booking-group-for-booking.d.ts.map +1 -0
  308. package/dist/hooks/use-booking-group-for-booking.js +12 -0
  309. package/dist/hooks/use-booking-group-member-mutation.d.ts +27 -0
  310. package/dist/hooks/use-booking-group-member-mutation.d.ts.map +1 -0
  311. package/dist/hooks/use-booking-group-member-mutation.js +38 -0
  312. package/dist/hooks/use-booking-group-mutation.d.ts +40 -0
  313. package/dist/hooks/use-booking-group-mutation.d.ts.map +1 -0
  314. package/dist/hooks/use-booking-group-mutation.js +32 -0
  315. package/dist/hooks/use-booking-group.d.ts +85 -0
  316. package/dist/hooks/use-booking-group.d.ts.map +1 -0
  317. package/dist/hooks/use-booking-group.js +12 -0
  318. package/dist/hooks/use-booking-groups.d.ts +21 -0
  319. package/dist/hooks/use-booking-groups.d.ts.map +1 -0
  320. package/dist/hooks/use-booking-groups.js +12 -0
  321. package/dist/hooks/use-booking-item-mutation.d.ts +101 -0
  322. package/dist/hooks/use-booking-item-mutation.d.ts.map +1 -0
  323. package/dist/hooks/use-booking-item-mutation.js +42 -0
  324. package/dist/hooks/use-booking-item-travelers.d.ts +32 -0
  325. package/dist/hooks/use-booking-item-travelers.d.ts.map +1 -0
  326. package/dist/hooks/use-booking-item-travelers.js +48 -0
  327. package/dist/hooks/use-booking-items.d.ts +36 -0
  328. package/dist/hooks/use-booking-items.d.ts.map +1 -0
  329. package/dist/hooks/use-booking-items.js +12 -0
  330. package/dist/hooks/use-booking-mutation.d.ts +158 -0
  331. package/dist/hooks/use-booking-mutation.d.ts.map +1 -0
  332. package/dist/hooks/use-booking-mutation.js +39 -0
  333. package/dist/hooks/use-booking-note-mutation.d.ts +39 -0
  334. package/dist/hooks/use-booking-note-mutation.d.ts.map +1 -0
  335. package/dist/hooks/use-booking-note-mutation.js +44 -0
  336. package/dist/hooks/use-booking-notes.d.ts +15 -0
  337. package/dist/hooks/use-booking-notes.d.ts.map +1 -0
  338. package/dist/hooks/use-booking-notes.js +12 -0
  339. package/dist/hooks/use-booking-primary-product.d.ts +28 -0
  340. package/dist/hooks/use-booking-primary-product.d.ts.map +1 -0
  341. package/dist/hooks/use-booking-primary-product.js +20 -0
  342. package/dist/hooks/use-booking-status-mutation.d.ts +156 -0
  343. package/dist/hooks/use-booking-status-mutation.d.ts.map +1 -0
  344. package/dist/hooks/use-booking-status-mutation.js +54 -0
  345. package/dist/hooks/use-booking-tax-preview.d.ts +29 -0
  346. package/dist/hooks/use-booking-tax-preview.d.ts.map +1 -0
  347. package/dist/hooks/use-booking-tax-preview.js +21 -0
  348. package/dist/hooks/use-booking.d.ts +67 -0
  349. package/dist/hooks/use-booking.d.ts.map +1 -0
  350. package/dist/hooks/use-booking.js +12 -0
  351. package/dist/hooks/use-bookings.d.ts +71 -0
  352. package/dist/hooks/use-bookings.d.ts.map +1 -0
  353. package/dist/hooks/use-bookings.js +12 -0
  354. package/dist/hooks/use-pricing-preview.d.ts +61 -0
  355. package/dist/hooks/use-pricing-preview.d.ts.map +1 -0
  356. package/dist/hooks/use-pricing-preview.js +18 -0
  357. package/dist/hooks/use-public-booking-session-flow-mutation.d.ts +148 -0
  358. package/dist/hooks/use-public-booking-session-flow-mutation.d.ts.map +1 -0
  359. package/dist/hooks/use-public-booking-session-flow-mutation.js +35 -0
  360. package/dist/hooks/use-public-booking-session-state.d.ts +16 -0
  361. package/dist/hooks/use-public-booking-session-state.d.ts.map +1 -0
  362. package/dist/hooks/use-public-booking-session-state.js +12 -0
  363. package/dist/hooks/use-public-booking-session.d.ts +101 -0
  364. package/dist/hooks/use-public-booking-session.d.ts.map +1 -0
  365. package/dist/hooks/use-public-booking-session.js +12 -0
  366. package/dist/hooks/use-reveal-traveler.d.ts +54 -0
  367. package/dist/hooks/use-reveal-traveler.d.ts.map +1 -0
  368. package/dist/hooks/use-reveal-traveler.js +18 -0
  369. package/dist/hooks/use-sharing-groups.d.ts +41 -0
  370. package/dist/hooks/use-sharing-groups.d.ts.map +1 -0
  371. package/dist/hooks/use-sharing-groups.js +20 -0
  372. package/dist/hooks/use-supplier-status-mutation.d.ts +46 -0
  373. package/dist/hooks/use-supplier-status-mutation.d.ts.map +1 -0
  374. package/dist/hooks/use-supplier-status-mutation.js +39 -0
  375. package/dist/hooks/use-supplier-statuses.d.ts +20 -0
  376. package/dist/hooks/use-supplier-statuses.d.ts.map +1 -0
  377. package/dist/hooks/use-supplier-statuses.js +12 -0
  378. package/dist/hooks/use-traveler-mutation.d.ts +55 -0
  379. package/dist/hooks/use-traveler-mutation.d.ts.map +1 -0
  380. package/dist/hooks/use-traveler-mutation.js +42 -0
  381. package/dist/hooks/use-traveler-with-travel-details-mutation.d.ts +120 -0
  382. package/dist/hooks/use-traveler-with-travel-details-mutation.d.ts.map +1 -0
  383. package/dist/hooks/use-traveler-with-travel-details-mutation.js +43 -0
  384. package/dist/hooks/use-travelers.d.ts +23 -0
  385. package/dist/hooks/use-travelers.d.ts.map +1 -0
  386. package/dist/hooks/use-travelers.js +12 -0
  387. package/dist/i18n/en-base.d.ts +295 -0
  388. package/dist/i18n/en-base.d.ts.map +1 -0
  389. package/dist/i18n/en-base.js +294 -0
  390. package/dist/i18n/en-create-list.d.ts +327 -0
  391. package/dist/i18n/en-create-list.d.ts.map +1 -0
  392. package/dist/i18n/en-create-list.js +326 -0
  393. package/dist/i18n/en-journey.d.ts +229 -0
  394. package/dist/i18n/en-journey.d.ts.map +1 -0
  395. package/dist/i18n/en-journey.js +228 -0
  396. package/dist/i18n/en-operations.d.ts +382 -0
  397. package/dist/i18n/en-operations.d.ts.map +1 -0
  398. package/dist/i18n/en-operations.js +381 -0
  399. package/dist/i18n/en-sections.d.ts +360 -0
  400. package/dist/i18n/en-sections.d.ts.map +1 -0
  401. package/dist/i18n/en-sections.js +359 -0
  402. package/dist/i18n/en.d.ts +1581 -0
  403. package/dist/i18n/en.d.ts.map +1 -0
  404. package/dist/i18n/en.js +12 -0
  405. package/dist/i18n/index.d.ts +5 -0
  406. package/dist/i18n/index.d.ts.map +1 -0
  407. package/dist/i18n/index.js +3 -0
  408. package/dist/i18n/messages-base.d.ts +251 -0
  409. package/dist/i18n/messages-base.d.ts.map +1 -0
  410. package/dist/i18n/messages-base.js +1 -0
  411. package/dist/i18n/messages-create-list.d.ts +310 -0
  412. package/dist/i18n/messages-create-list.d.ts.map +1 -0
  413. package/dist/i18n/messages-create-list.js +1 -0
  414. package/dist/i18n/messages-journey.d.ts +198 -0
  415. package/dist/i18n/messages-journey.d.ts.map +1 -0
  416. package/dist/i18n/messages-journey.js +1 -0
  417. package/dist/i18n/messages-operations.d.ts +362 -0
  418. package/dist/i18n/messages-operations.d.ts.map +1 -0
  419. package/dist/i18n/messages-operations.js +1 -0
  420. package/dist/i18n/messages-sections.d.ts +312 -0
  421. package/dist/i18n/messages-sections.d.ts.map +1 -0
  422. package/dist/i18n/messages-sections.js +1 -0
  423. package/dist/i18n/messages.d.ts +7 -0
  424. package/dist/i18n/messages.d.ts.map +1 -0
  425. package/dist/i18n/messages.js +1 -0
  426. package/dist/i18n/provider.d.ts +3185 -0
  427. package/dist/i18n/provider.d.ts.map +1 -0
  428. package/dist/i18n/provider.js +45 -0
  429. package/dist/i18n/ro-base.d.ts +295 -0
  430. package/dist/i18n/ro-base.d.ts.map +1 -0
  431. package/dist/i18n/ro-base.js +294 -0
  432. package/dist/i18n/ro-create-list.d.ts +327 -0
  433. package/dist/i18n/ro-create-list.d.ts.map +1 -0
  434. package/dist/i18n/ro-create-list.js +326 -0
  435. package/dist/i18n/ro-journey.d.ts +229 -0
  436. package/dist/i18n/ro-journey.d.ts.map +1 -0
  437. package/dist/i18n/ro-journey.js +228 -0
  438. package/dist/i18n/ro-operations.d.ts +382 -0
  439. package/dist/i18n/ro-operations.d.ts.map +1 -0
  440. package/dist/i18n/ro-operations.js +381 -0
  441. package/dist/i18n/ro-sections.d.ts +360 -0
  442. package/dist/i18n/ro-sections.d.ts.map +1 -0
  443. package/dist/i18n/ro-sections.js +359 -0
  444. package/dist/i18n/ro.d.ts +1581 -0
  445. package/dist/i18n/ro.d.ts.map +1 -0
  446. package/dist/i18n/ro.js +12 -0
  447. package/dist/index.d.ts +9 -0
  448. package/dist/index.d.ts.map +1 -0
  449. package/dist/index.js +8 -0
  450. package/dist/journey/components/booking-journey-rules.d.ts +48 -0
  451. package/dist/journey/components/booking-journey-rules.d.ts.map +1 -0
  452. package/dist/journey/components/booking-journey-rules.js +235 -0
  453. package/dist/journey/components/booking-journey.d.ts +3 -0
  454. package/dist/journey/components/booking-journey.d.ts.map +1 -0
  455. package/dist/journey/components/booking-journey.js +368 -0
  456. package/dist/journey/components/configure-step-skeleton.d.ts +8 -0
  457. package/dist/journey/components/configure-step-skeleton.d.ts.map +1 -0
  458. package/dist/journey/components/configure-step-skeleton.js +11 -0
  459. package/dist/journey/components/contract-preview-dialog.d.ts +47 -0
  460. package/dist/journey/components/contract-preview-dialog.d.ts.map +1 -0
  461. package/dist/journey/components/contract-preview-dialog.js +124 -0
  462. package/dist/journey/components/journey-steps/accommodation-step.d.ts +3 -0
  463. package/dist/journey/components/journey-steps/accommodation-step.d.ts.map +1 -0
  464. package/dist/journey/components/journey-steps/accommodation-step.js +71 -0
  465. package/dist/journey/components/journey-steps/addons-step.d.ts +3 -0
  466. package/dist/journey/components/journey-steps/addons-step.d.ts.map +1 -0
  467. package/dist/journey/components/journey-steps/addons-step.js +40 -0
  468. package/dist/journey/components/journey-steps/billing-step.d.ts +8 -0
  469. package/dist/journey/components/journey-steps/billing-step.d.ts.map +1 -0
  470. package/dist/journey/components/journey-steps/billing-step.js +78 -0
  471. package/dist/journey/components/journey-steps/configure-steps.d.ts +28 -0
  472. package/dist/journey/components/journey-steps/configure-steps.d.ts.map +1 -0
  473. package/dist/journey/components/journey-steps/configure-steps.js +232 -0
  474. package/dist/journey/components/journey-steps/documents-step.d.ts +11 -0
  475. package/dist/journey/components/journey-steps/documents-step.d.ts.map +1 -0
  476. package/dist/journey/components/journey-steps/documents-step.js +36 -0
  477. package/dist/journey/components/journey-steps/payment-step.d.ts +29 -0
  478. package/dist/journey/components/journey-steps/payment-step.d.ts.map +1 -0
  479. package/dist/journey/components/journey-steps/payment-step.js +225 -0
  480. package/dist/journey/components/journey-steps/review-step.d.ts +27 -0
  481. package/dist/journey/components/journey-steps/review-step.d.ts.map +1 -0
  482. package/dist/journey/components/journey-steps/review-step.js +18 -0
  483. package/dist/journey/components/journey-steps/shared.d.ts +75 -0
  484. package/dist/journey/components/journey-steps/shared.d.ts.map +1 -0
  485. package/dist/journey/components/journey-steps/shared.js +108 -0
  486. package/dist/journey/components/journey-steps/travelers-step.d.ts +7 -0
  487. package/dist/journey/components/journey-steps/travelers-step.d.ts.map +1 -0
  488. package/dist/journey/components/journey-steps/travelers-step.js +201 -0
  489. package/dist/journey/components/journey-steps.d.ts +21 -0
  490. package/dist/journey/components/journey-steps.d.ts.map +1 -0
  491. package/dist/journey/components/journey-steps.js +20 -0
  492. package/dist/journey/components/side-panel.d.ts +17 -0
  493. package/dist/journey/components/side-panel.d.ts.map +1 -0
  494. package/dist/journey/components/side-panel.js +245 -0
  495. package/dist/journey/components/stacked-journey.d.ts +30 -0
  496. package/dist/journey/components/stacked-journey.d.ts.map +1 -0
  497. package/dist/journey/components/stacked-journey.js +50 -0
  498. package/dist/journey/components/step-header.d.ts +7 -0
  499. package/dist/journey/components/step-header.d.ts.map +1 -0
  500. package/dist/journey/components/step-header.js +12 -0
  501. package/dist/journey/index.d.ts +18 -0
  502. package/dist/journey/index.d.ts.map +1 -0
  503. package/dist/journey/index.js +17 -0
  504. package/dist/journey/lib/draft-state.d.ts +35 -0
  505. package/dist/journey/lib/draft-state.d.ts.map +1 -0
  506. package/dist/journey/lib/draft-state.js +57 -0
  507. package/dist/journey/lib/pax-band-dependencies.d.ts +27 -0
  508. package/dist/journey/lib/pax-band-dependencies.d.ts.map +1 -0
  509. package/dist/journey/lib/pax-band-dependencies.js +50 -0
  510. package/dist/journey/lib/payment-schedule.d.ts +19 -0
  511. package/dist/journey/lib/payment-schedule.d.ts.map +1 -0
  512. package/dist/journey/lib/payment-schedule.js +90 -0
  513. package/dist/journey/types.d.ts +403 -0
  514. package/dist/journey/types.d.ts.map +1 -0
  515. package/dist/journey/types.js +19 -0
  516. package/dist/provider.d.ts +2 -0
  517. package/dist/provider.d.ts.map +1 -0
  518. package/dist/provider.js +1 -0
  519. package/dist/query-keys.d.ts +74 -0
  520. package/dist/query-keys.d.ts.map +1 -0
  521. package/dist/query-keys.js +26 -0
  522. package/dist/query-options.d.ts +2534 -0
  523. package/dist/query-options.d.ts.map +1 -0
  524. package/dist/query-options.js +233 -0
  525. package/dist/requirements/client.d.ts +14 -0
  526. package/dist/requirements/client.d.ts.map +1 -0
  527. package/dist/requirements/client.js +59 -0
  528. package/dist/requirements/components/booking-requirements-contact-tab.d.ts +8 -0
  529. package/dist/requirements/components/booking-requirements-contact-tab.d.ts.map +1 -0
  530. package/dist/requirements/components/booking-requirements-contact-tab.js +8 -0
  531. package/dist/requirements/components/booking-requirements-questions-tab.d.ts +14 -0
  532. package/dist/requirements/components/booking-requirements-questions-tab.d.ts.map +1 -0
  533. package/dist/requirements/components/booking-requirements-questions-tab.js +17 -0
  534. package/dist/requirements/constants.d.ts +114 -0
  535. package/dist/requirements/constants.d.ts.map +1 -0
  536. package/dist/requirements/constants.js +45 -0
  537. package/dist/requirements/hooks/index.d.ts +6 -0
  538. package/dist/requirements/hooks/index.d.ts.map +1 -0
  539. package/dist/requirements/hooks/index.js +6 -0
  540. package/dist/requirements/hooks/use-booking-questions.d.ts +24 -0
  541. package/dist/requirements/hooks/use-booking-questions.d.ts.map +1 -0
  542. package/dist/requirements/hooks/use-booking-questions.js +9 -0
  543. package/dist/requirements/hooks/use-contact-requirements.d.ts +22 -0
  544. package/dist/requirements/hooks/use-contact-requirements.d.ts.map +1 -0
  545. package/dist/requirements/hooks/use-contact-requirements.js +9 -0
  546. package/dist/requirements/hooks/use-products.d.ts +16 -0
  547. package/dist/requirements/hooks/use-products.d.ts.map +1 -0
  548. package/dist/requirements/hooks/use-products.js +9 -0
  549. package/dist/requirements/hooks/use-question-options.d.ts +19 -0
  550. package/dist/requirements/hooks/use-question-options.d.ts.map +1 -0
  551. package/dist/requirements/hooks/use-question-options.js +9 -0
  552. package/dist/requirements/hooks/use-transport-requirements.d.ts +30 -0
  553. package/dist/requirements/hooks/use-transport-requirements.d.ts.map +1 -0
  554. package/dist/requirements/hooks/use-transport-requirements.js +9 -0
  555. package/dist/requirements/i18n/en.d.ts +94 -0
  556. package/dist/requirements/i18n/en.d.ts.map +1 -0
  557. package/dist/requirements/i18n/en.js +93 -0
  558. package/dist/requirements/i18n/index.d.ts +5 -0
  559. package/dist/requirements/i18n/index.d.ts.map +1 -0
  560. package/dist/requirements/i18n/index.js +3 -0
  561. package/dist/requirements/i18n/messages.d.ts +59 -0
  562. package/dist/requirements/i18n/messages.d.ts.map +1 -0
  563. package/dist/requirements/i18n/messages.js +1 -0
  564. package/dist/requirements/i18n/provider.d.ts +210 -0
  565. package/dist/requirements/i18n/provider.d.ts.map +1 -0
  566. package/dist/requirements/i18n/provider.js +44 -0
  567. package/dist/requirements/i18n/ro.d.ts +94 -0
  568. package/dist/requirements/i18n/ro.d.ts.map +1 -0
  569. package/dist/requirements/i18n/ro.js +93 -0
  570. package/dist/requirements/index.d.ts +9 -0
  571. package/dist/requirements/index.d.ts.map +1 -0
  572. package/dist/requirements/index.js +8 -0
  573. package/dist/requirements/provider.d.ts +2 -0
  574. package/dist/requirements/provider.d.ts.map +1 -0
  575. package/dist/requirements/provider.js +1 -0
  576. package/dist/requirements/query-keys.d.ts +33 -0
  577. package/dist/requirements/query-keys.d.ts.map +1 -0
  578. package/dist/requirements/query-keys.js +13 -0
  579. package/dist/requirements/query-options.d.ts +371 -0
  580. package/dist/requirements/query-options.d.ts.map +1 -0
  581. package/dist/requirements/query-options.js +80 -0
  582. package/dist/requirements/schemas.d.ts +320 -0
  583. package/dist/requirements/schemas.d.ts.map +1 -0
  584. package/dist/requirements/schemas.js +121 -0
  585. package/dist/requirements/ui.d.ts +4 -0
  586. package/dist/requirements/ui.d.ts.map +1 -0
  587. package/dist/requirements/ui.js +3 -0
  588. package/dist/requirements/utils.d.ts +2 -0
  589. package/dist/requirements/utils.d.ts.map +1 -0
  590. package/dist/requirements/utils.js +4 -0
  591. package/dist/schemas.d.ts +2070 -0
  592. package/dist/schemas.d.ts.map +1 -0
  593. package/dist/schemas.js +507 -0
  594. package/dist/status-presentation.d.ts +34 -0
  595. package/dist/status-presentation.d.ts.map +1 -0
  596. package/dist/status-presentation.js +38 -0
  597. package/dist/ui.d.ts +43 -0
  598. package/dist/ui.d.ts.map +1 -0
  599. package/dist/ui.js +42 -0
  600. package/package.json +256 -0
  601. package/src/requirements/styles.css +1 -0
  602. package/src/styles.css +13 -0
@@ -0,0 +1,71 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Separator } from "@voyant-travel/ui/components";
4
+ import { Button } from "@voyant-travel/ui/components/button";
5
+ import { Card, CardContent, CardHeader, CardTitle } from "@voyant-travel/ui/components/card";
6
+ import { Label } from "@voyant-travel/ui/components/label";
7
+ import { formatMessage, useBookingsUiMessagesOrDefault } from "../../../i18n/index.js";
8
+ import { setAccommodation } from "../../lib/draft-state.js";
9
+ // ─────────────────────────────────────────────────────────────────
10
+ // Accommodation
11
+ // ─────────────────────────────────────────────────────────────────
12
+ export function AccommodationStep({ draft, setDraft, shape }) {
13
+ const messages = useBookingsUiMessagesOrDefault();
14
+ const subSteps = shape.accommodation?.subSteps ?? [];
15
+ const rooms = shape.accommodation?.roomOptions ?? [];
16
+ const accommodation = draft.accommodation ?? {
17
+ rooms: [],
18
+ travelerAssignments: {},
19
+ };
20
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.bookingJourney.accommodation.title }) }), _jsx(Separator, {}), _jsx(CardContent, { className: "space-y-4", children: rooms.length === 0 && subSteps.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: messages.bookingJourney.accommodation.empty })) : (_jsxs("div", { className: "space-y-3", children: [rooms.map((room) => {
21
+ const current = accommodation.rooms.find((r) => r.optionUnitId === room.id);
22
+ const ratePlans = room.ratePlans ?? [];
23
+ return (_jsxs("div", { className: "space-y-3 rounded-md border p-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("div", { className: "font-medium", children: room.name }), room.description ? (_jsx("div", { className: "text-muted-foreground text-xs", children: room.description })) : null] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", type: "button", onClick: () => {
24
+ const list = accommodation.rooms.filter((r) => r.optionUnitId !== room.id);
25
+ const qty = (current?.quantity ?? 0) - 1;
26
+ if (qty > 0) {
27
+ list.push({
28
+ optionUnitId: room.id,
29
+ quantity: qty,
30
+ ratePlanId: current?.ratePlanId,
31
+ });
32
+ }
33
+ setDraft(setAccommodation(draft, {
34
+ ...accommodation,
35
+ rooms: list,
36
+ }));
37
+ }, children: "\u2212" }), _jsx("span", { className: "min-w-6 text-center", children: current?.quantity ?? 0 }), _jsx(Button, { variant: "outline", size: "sm", type: "button", onClick: () => {
38
+ const list = accommodation.rooms.filter((r) => r.optionUnitId !== room.id);
39
+ const qty = (current?.quantity ?? 0) + 1;
40
+ // Auto-select the only rate plan when there's
41
+ // exactly one — saves a click on the common case.
42
+ const ratePlanId = current?.ratePlanId ??
43
+ (ratePlans.length === 1 ? ratePlans[0]?.id : undefined);
44
+ list.push({
45
+ optionUnitId: room.id,
46
+ quantity: qty,
47
+ ratePlanId,
48
+ });
49
+ setDraft(setAccommodation(draft, {
50
+ ...accommodation,
51
+ rooms: list,
52
+ }));
53
+ }, children: "+" })] })] }), current && current.quantity > 0 && ratePlans.length > 0 ? (_jsx(RatePlanPicker, { roomId: room.id, ratePlans: ratePlans, selected: current.ratePlanId, onSelect: (planId) => {
54
+ const list = accommodation.rooms.map((r) => r.optionUnitId === room.id ? { ...r, ratePlanId: planId } : r);
55
+ setDraft(setAccommodation(draft, {
56
+ ...accommodation,
57
+ rooms: list,
58
+ }));
59
+ } })) : null] }, room.id));
60
+ }), subSteps.map((sub) => sub.kind === "extensions" ? (_jsx("div", { className: "rounded-md border p-3 text-muted-foreground text-sm", children: formatMessage(messages.bookingJourney.accommodation.extensionsAvailable, {
61
+ count: sub.options.length,
62
+ plural: sub.options.length === 1 ? "" : "s",
63
+ }) }, "extensions")) : null)] })) })] }));
64
+ }
65
+ function RatePlanPicker({ roomId, ratePlans, selected, onSelect, }) {
66
+ const messages = useBookingsUiMessagesOrDefault();
67
+ return (_jsxs("div", { className: "space-y-2 border-t pt-3", children: [_jsx(Label, { htmlFor: `bj-rate-plan-${roomId}`, children: messages.bookingJourney.accommodation.ratePlan }), _jsx("div", { className: "space-y-2", children: ratePlans.map((plan) => {
68
+ const isSelected = plan.id === selected;
69
+ return (_jsxs("button", { type: "button", onClick: () => onSelect(plan.id), className: `w-full rounded-md border p-2 text-left text-sm ${isSelected ? "border-primary ring-2 ring-primary" : ""}`, children: [_jsx("div", { className: "font-medium", children: plan.name }), plan.description ? (_jsx("div", { className: "text-muted-foreground text-xs", children: plan.description })) : null, plan.cancellationPolicy ? (_jsxs("div", { className: "text-muted-foreground text-xs", children: [messages.bookingJourney.accommodation.cancellationPrefix, " ", plan.cancellationPolicy] })) : null, plan.inclusions && plan.inclusions.length > 0 ? (_jsxs("div", { className: "text-muted-foreground text-xs", children: [messages.bookingJourney.accommodation.includesPrefix, " ", plan.inclusions.join(", ")] })) : null] }, plan.id));
70
+ }) })] }));
71
+ }
@@ -0,0 +1,3 @@
1
+ import { type StepCommonProps } from "./shared.js";
2
+ export declare function AddonsStep({ draft, setDraft, shape }: StepCommonProps): React.ReactElement;
3
+ //# sourceMappingURL=addons-step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addons-step.d.ts","sourceRoot":"","sources":["../../../../src/journey/components/journey-steps/addons-step.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAY,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAM5D,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAmD1F"}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Separator } from "@voyant-travel/ui/components";
4
+ import { Button } from "@voyant-travel/ui/components/button";
5
+ import { Card, CardContent, CardHeader, CardTitle } from "@voyant-travel/ui/components/card";
6
+ import { useBookingsUiMessagesOrDefault } from "../../../i18n/index.js";
7
+ import { setAddons } from "../../lib/draft-state.js";
8
+ import { bucketBy } from "./shared.js";
9
+ // ─────────────────────────────────────────────────────────────────
10
+ // Add-ons
11
+ // ─────────────────────────────────────────────────────────────────
12
+ export function AddonsStep({ draft, setDraft, shape }) {
13
+ const messages = useBookingsUiMessagesOrDefault();
14
+ const flat = shape.addons?.catalog ?? [];
15
+ const groups = shape.addons?.groups ?? [];
16
+ const all = [...flat, ...groups.flatMap((g) => g.items)];
17
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.bookingJourney.addons.title }) }), _jsx(Separator, {}), _jsxs(CardContent, { className: "space-y-4", children: [all.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: messages.bookingJourney.addons.empty })) : null, groups.map((group) => {
18
+ // Group by port/day when the descriptor asks — cruise
19
+ // excursions arrive grouped by port name.
20
+ const buckets = group.groupBy === "port" || group.groupBy === "day"
21
+ ? bucketBy(group.items, (i) => i.groupKey ?? messages.bookingJourney.addons.otherBucket)
22
+ : new Map([["", group.items]]);
23
+ return (_jsxs("div", { className: "space-y-3", children: [_jsx("div", { className: "font-medium text-sm", children: group.label }), [...buckets.entries()].map(([bucket, items]) => (_jsxs("div", { className: "space-y-2", children: [bucket ? (_jsx("div", { className: "text-muted-foreground text-xs uppercase", children: bucket })) : null, items.map((item) => (_jsx(AddonRow, { draft: draft, setDraft: setDraft, item: item }, item.id)))] }, bucket || "all")))] }, group.label));
24
+ }), flat.length > 0 && groups.length === 0 ? (_jsx("div", { className: "space-y-2", children: flat.map((item) => (_jsx(AddonRow, { draft: draft, setDraft: setDraft, item: item }, item.id))) })) : null] })] }));
25
+ }
26
+ function AddonRow({ draft, setDraft, item, }) {
27
+ const current = draft.addons.find((a) => a.extraId === item.id);
28
+ return (_jsxs("div", { className: "flex items-center justify-between rounded-md border p-3", children: [_jsxs("div", { children: [_jsx("div", { className: "font-medium", children: item.name }), item.description ? (_jsx("div", { className: "text-muted-foreground text-xs", children: item.description })) : null] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", type: "button", onClick: () => {
29
+ const list = draft.addons.filter((a) => a.extraId !== item.id);
30
+ const qty = (current?.quantity ?? 0) - 1;
31
+ if (qty > 0)
32
+ list.push({ extraId: item.id, quantity: qty });
33
+ setDraft(setAddons(draft, list));
34
+ }, children: "\u2212" }), _jsx("span", { className: "min-w-6 text-center", children: current?.quantity ?? 0 }), _jsx(Button, { variant: "outline", size: "sm", type: "button", onClick: () => {
35
+ const list = draft.addons.filter((a) => a.extraId !== item.id);
36
+ const qty = (current?.quantity ?? 0) + 1;
37
+ list.push({ extraId: item.id, quantity: qty });
38
+ setDraft(setAddons(draft, list));
39
+ }, children: "+" })] })] }));
40
+ }
@@ -0,0 +1,8 @@
1
+ import type { LeadContactPickerProps } from "../../types.js";
2
+ import { type StepCommonProps } from "./shared.js";
3
+ export declare function BillingStep({ draft, setDraft, renderLeadContactPicker, renderExtras, warnings, }: StepCommonProps & {
4
+ renderLeadContactPicker?: (props: LeadContactPickerProps) => React.ReactNode;
5
+ renderExtras?: () => React.ReactNode;
6
+ warnings?: ReadonlyArray<string>;
7
+ }): React.ReactElement;
8
+ //# sourceMappingURL=billing-step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-step.d.ts","sourceRoot":"","sources":["../../../../src/journey/components/journey-steps/billing-step.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAMtF,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,uBAAuB,EACvB,YAAY,EACZ,QAAQ,GACT,EAAE,eAAe,GAAG;IACnB,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,KAAK,CAAC,SAAS,CAAA;IAC5E,YAAY,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IACpC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACjC,GAAG,KAAK,CAAC,YAAY,CAyOrB"}
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Separator } from "@voyant-travel/ui/components";
4
+ import { Card, CardContent, CardHeader, CardTitle } from "@voyant-travel/ui/components/card";
5
+ import { CountryCombobox } from "@voyant-travel/ui/components/country-combobox";
6
+ import { Label } from "@voyant-travel/ui/components/label";
7
+ import { RadioGroup, RadioGroupItem } from "@voyant-travel/ui/components/radio-group";
8
+ import { useBookingsUiMessagesOrDefault } from "../../../i18n/index.js";
9
+ import { patchBilling } from "../../lib/draft-state.js";
10
+ import { Field, JourneyWarnings, PhoneField } from "./shared.js";
11
+ // ─────────────────────────────────────────────────────────────────
12
+ // Billing
13
+ // ─────────────────────────────────────────────────────────────────
14
+ export function BillingStep({ draft, setDraft, renderLeadContactPicker, renderExtras, warnings, }) {
15
+ const messages = useBookingsUiMessagesOrDefault();
16
+ const billing = draft.billing;
17
+ // Merge each partial from the picker (person record, org record, address
18
+ // lookup) into the billing draft without clobbering the other slices.
19
+ const apply = (next) => {
20
+ const patch = {};
21
+ if (next.firstName !== undefined ||
22
+ next.lastName !== undefined ||
23
+ next.email !== undefined ||
24
+ next.phone !== undefined ||
25
+ next.personId !== undefined) {
26
+ patch.contact = {
27
+ ...billing.contact,
28
+ ...(next.firstName !== undefined ? { firstName: next.firstName } : {}),
29
+ ...(next.lastName !== undefined ? { lastName: next.lastName } : {}),
30
+ ...(next.email !== undefined ? { email: next.email } : {}),
31
+ ...(next.phone !== undefined ? { phone: next.phone } : {}),
32
+ ...(next.personId !== undefined ? { personId: next.personId } : {}),
33
+ };
34
+ }
35
+ if (next.organizationId !== undefined) {
36
+ patch.organizationId = next.organizationId;
37
+ }
38
+ if (next.companyName !== undefined || next.taxId !== undefined) {
39
+ patch.company = {
40
+ name: next.companyName ?? billing.company?.name ?? "",
41
+ vatId: next.taxId ?? billing.company?.vatId,
42
+ };
43
+ }
44
+ if (next.address) {
45
+ patch.address = { ...billing.address, ...next.address };
46
+ }
47
+ setDraft(patchBilling(draft, patch));
48
+ };
49
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.bookingJourney.billing.title }) }), _jsx(Separator, {}), _jsxs(CardContent, { className: "space-y-6", children: [_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: messages.bookingJourney.billing.buyerType }), _jsxs(RadioGroup, { value: billing.buyerType, onValueChange: (v) => setDraft(patchBilling(draft, { buyerType: v })), className: "flex gap-4", children: [_jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(RadioGroupItem, { value: "B2C" }), " ", messages.bookingJourney.billing.individual] }), _jsxs("label", { className: "flex items-center gap-2 text-sm", children: [_jsx(RadioGroupItem, { value: "B2B" }), " ", messages.bookingJourney.billing.company] })] })] }), renderLeadContactPicker ? (_jsx("div", { children: renderLeadContactPicker({ apply, buyerType: billing.buyerType }) })) : null, renderLeadContactPicker ? null : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [_jsx(Field, { id: "bj-billing-firstName", label: messages.bookingJourney.billing.firstName, value: billing.contact.firstName, onChange: (v) => setDraft(patchBilling(draft, {
50
+ contact: { ...billing.contact, firstName: v },
51
+ })) }), _jsx(Field, { id: "bj-billing-lastName", label: messages.bookingJourney.billing.lastName, value: billing.contact.lastName, onChange: (v) => setDraft(patchBilling(draft, {
52
+ contact: { ...billing.contact, lastName: v },
53
+ })) }), _jsx(Field, { id: "bj-billing-email", label: messages.bookingJourney.billing.email, type: "email", value: billing.contact.email, onChange: (v) => setDraft(patchBilling(draft, {
54
+ contact: { ...billing.contact, email: v },
55
+ })) }), _jsx(PhoneField, { id: "bj-billing-phone", label: messages.bookingJourney.billing.phone, value: billing.contact.phone ?? "", onChange: (v) => setDraft(patchBilling(draft, {
56
+ contact: { ...billing.contact, phone: v },
57
+ })) })] }), _jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [_jsx(Field, { id: "bj-billing-line1", label: messages.bookingJourney.billing.addressLine1, value: billing.address.line1 ?? "", onChange: (v) => setDraft(patchBilling(draft, {
58
+ address: { ...billing.address, line1: v },
59
+ })) }), _jsx(Field, { id: "bj-billing-line2", label: messages.bookingJourney.billing.addressLine2Optional, value: billing.address.line2 ?? "", onChange: (v) => setDraft(patchBilling(draft, {
60
+ address: { ...billing.address, line2: v },
61
+ })) }), _jsx(Field, { id: "bj-billing-city", label: messages.bookingJourney.billing.city, value: billing.address.city ?? "", onChange: (v) => setDraft(patchBilling(draft, {
62
+ address: { ...billing.address, city: v },
63
+ })) }), _jsx(Field, { id: "bj-billing-postal", label: messages.bookingJourney.billing.postalCode, value: billing.address.postal ?? "", onChange: (v) => setDraft(patchBilling(draft, {
64
+ address: { ...billing.address, postal: v },
65
+ })) }), _jsxs("div", { className: "space-y-1 sm:col-span-2", children: [_jsx(Label, { htmlFor: "bj-billing-country", children: messages.bookingJourney.billing.country }), _jsx(CountryCombobox, { value: billing.address.country ?? null, onChange: (code) => setDraft(patchBilling(draft, {
66
+ address: { ...billing.address, country: code ?? "" },
67
+ })) })] })] }), billing.buyerType === "B2B" ? (_jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [_jsx(Field, { id: "bj-billing-companyName", label: messages.bookingJourney.billing.companyName, value: billing.company?.name ?? "", onChange: (v) => setDraft(patchBilling(draft, {
68
+ company: {
69
+ ...(billing.company ?? { name: "" }),
70
+ name: v,
71
+ },
72
+ })) }), _jsx(Field, { id: "bj-billing-vatId", label: messages.bookingJourney.billing.vatId, value: billing.company?.vatId ?? "", onChange: (v) => setDraft(patchBilling(draft, {
73
+ company: {
74
+ ...(billing.company ?? { name: "" }),
75
+ vatId: v,
76
+ },
77
+ })) })] })) : null] })), renderExtras ? _jsx("div", { children: renderExtras() }) : null, _jsx(JourneyWarnings, { warnings: warnings })] })] }));
78
+ }
@@ -0,0 +1,28 @@
1
+ import type { BookingDraftShape } from "@voyant-travel/catalog-contracts/booking-engine/draft-shape";
2
+ import { type Draft } from "../../lib/draft-state.js";
3
+ import { type RenderDeparturePicker, type RenderUnitsPicker, type StepCommonProps } from "./shared.js";
4
+ export declare function DepartureStep({ draft, setDraft, shape, productId, renderDeparturePicker, }: StepCommonProps & {
5
+ /** Owned product id — passed to the injected departure picker. */
6
+ productId?: string;
7
+ renderDeparturePicker?: RenderDeparturePicker;
8
+ }): React.ReactElement;
9
+ export declare function OptionsStep({ draft, setDraft, shape, productId, renderUnitsPicker, }: StepCommonProps & {
10
+ /** Owned product id — passed to the injected units picker. */
11
+ productId?: string;
12
+ renderUnitsPicker?: RenderUnitsPicker;
13
+ }): React.ReactElement;
14
+ export declare function PaxBands({ draft, setDraft, shape }: StepCommonProps): React.ReactElement;
15
+ export declare function PaxValidation({ draft, shape, }: {
16
+ draft: Draft;
17
+ shape: BookingDraftShape;
18
+ }): React.ReactNode;
19
+ /**
20
+ * Surfaces broken cross-band occupancy rules (e.g. "Child under 6
21
+ * requires an Adult") as hard validation errors under the pax steppers.
22
+ * These also block step advancement via `canAdvanceFromStep`.
23
+ */
24
+ export declare function PaxDependencyWarnings({ draft, shape, }: {
25
+ draft: Draft;
26
+ shape: BookingDraftShape;
27
+ }): React.ReactNode;
28
+ //# sourceMappingURL=configure-steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure-steps.d.ts","sourceRoot":"","sources":["../../../../src/journey/components/journey-steps/configure-steps.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6DAA6D,CAAA;AASpG,OAAO,EAAE,KAAK,KAAK,EAA2C,MAAM,0BAA0B,CAAA;AAK9F,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAA;AAMpB,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,qBAAqB,GACtB,EAAE,eAAe,GAAG;IACnB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,qBAAqB,CAAC,EAAE,qBAAqB,CAAA;CAC9C,GAAG,KAAK,CAAC,YAAY,CA0CrB;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,SAAS,EACT,iBAAiB,GAClB,EAAE,eAAe,GAAG;IACnB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC,GAAG,KAAK,CAAC,YAAY,CAiErB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAsDxF;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,GACN,EAAE;IACD,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,iBAAiB,CAAA;CACzB,GAAG,KAAK,CAAC,SAAS,CAwBlB;AAgCD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,KAAK,GACN,EAAE;IACD,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,iBAAiB,CAAA;CACzB,GAAG,KAAK,CAAC,SAAS,CAoBlB"}
@@ -0,0 +1,232 @@
1
+ // agent-quality: file-size exception -- owner: bookings-react; existing UI surface stays co-located until a dedicated split preserves behavior and tests.
2
+ "use client";
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import { Separator } from "@voyant-travel/ui/components";
5
+ import { Button } from "@voyant-travel/ui/components/button";
6
+ import { Card, CardContent, CardHeader, CardTitle } from "@voyant-travel/ui/components/card";
7
+ import { Input } from "@voyant-travel/ui/components/input";
8
+ import { Label } from "@voyant-travel/ui/components/label";
9
+ import { RadioGroup, RadioGroupItem } from "@voyant-travel/ui/components/radio-group";
10
+ import { Minus, Plus } from "lucide-react";
11
+ import { formatMessage, useBookingsUiMessagesOrDefault } from "../../../i18n/index.js";
12
+ import { patchConfigure, patchPaxCount, totalPax } from "../../lib/draft-state.js";
13
+ import { evaluatePaxBandDependencies, } from "../../lib/pax-band-dependencies.js";
14
+ import { ageHint, DateField, } from "./shared.js";
15
+ // ─────────────────────────────────────────────────────────────────
16
+ // Configure
17
+ // ─────────────────────────────────────────────────────────────────
18
+ export function DepartureStep({ draft, setDraft, shape, productId, renderDeparturePicker, }) {
19
+ const messages = useBookingsUiMessagesOrDefault();
20
+ const subSteps = shape.configureSubSteps ?? [];
21
+ // With no descriptor sub-steps, still offer a departure (storefront
22
+ // free-date fallback).
23
+ const showsDeparture = subSteps.length === 0 || subSteps.some((s) => s.kind === "departure");
24
+ const departureNode = showsDeparture ? (renderDeparturePicker && productId ? (renderDeparturePicker({
25
+ productId,
26
+ optionId: draft.configure.variantId ?? null,
27
+ slotId: draft.configure.departureSlotId ?? null,
28
+ departureDate: draft.configure.departureDate ?? null,
29
+ departureTime: draft.configure.departureTime ?? null,
30
+ onChange: (next) => setDraft(patchConfigure(draft, {
31
+ ...(next.slotId !== undefined ? { departureSlotId: next.slotId ?? undefined } : {}),
32
+ ...(next.departureDate !== undefined
33
+ ? { departureDate: next.departureDate ?? undefined }
34
+ : {}),
35
+ ...(next.departureTime !== undefined
36
+ ? { departureTime: next.departureTime ?? undefined }
37
+ : {}),
38
+ })),
39
+ })) : (_jsx(DepartureBasic, { draft: draft, setDraft: setDraft }))) : null;
40
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.bookingJourney.steps.departure }) }), _jsx(Separator, {}), _jsx(CardContent, { className: "space-y-6", children: departureNode })] }));
41
+ }
42
+ export function OptionsStep({ draft, setDraft, shape, productId, renderUnitsPicker, }) {
43
+ const messages = useBookingsUiMessagesOrDefault();
44
+ const subSteps = shape.configureSubSteps ?? [];
45
+ const optionList = subSteps.flatMap((s) => (s.kind === "product-option" ? s.options : []));
46
+ const multipleOptions = optionList.length > 1;
47
+ const showsUnits = subSteps.some((s) => s.kind === "option-units");
48
+ const otherSteps = subSteps.filter((s) => s.kind !== "departure" &&
49
+ s.kind !== "product-option" &&
50
+ s.kind !== "option-units" &&
51
+ s.kind !== "occupancy");
52
+ const unitsNode = showsUnits && renderUnitsPicker && productId
53
+ ? renderUnitsPicker({
54
+ productId,
55
+ optionId: draft.configure.variantId ?? null,
56
+ slotId: draft.configure.departureSlotId ?? null,
57
+ selections: draft.configure.optionSelections ?? [],
58
+ onChange: (selections) => setDraft(patchConfigure(draft, { optionSelections: selections })),
59
+ })
60
+ : null;
61
+ const optionNode = optionList.length > 0 ? (_jsx(ProductOptionFields, { draft: draft, setDraft: setDraft, options: optionList,
62
+ // With a real choice between options, nest the rooms under the
63
+ // SELECTED option so switching reveals that option's inventory in
64
+ // place. With a single/no option there's nothing to switch, so the
65
+ // rooms render directly below instead.
66
+ renderSelectedUnits: multipleOptions && unitsNode ? () => unitsNode : undefined })) : null;
67
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.bookingJourney.steps.options }) }), _jsx(Separator, {}), _jsxs(CardContent, { className: "space-y-6", children: [optionNode || unitsNode ? (_jsxs("div", { className: "space-y-3", children: [optionNode, unitsNode && !multipleOptions ? unitsNode : null] })) : null, otherSteps.length > 0 ? (_jsx("div", { className: "space-y-4", children: otherSteps.map((sub) => renderOtherConfigureSubStep(sub, draft, setDraft)) })) : null] })] }));
68
+ }
69
+ export function PaxBands({ draft, setDraft, shape }) {
70
+ const messages = useBookingsUiMessagesOrDefault();
71
+ return (_jsxs("div", { className: "flex flex-col gap-2 rounded-md border p-3", children: [_jsx(Label, { children: messages.bookingJourney.travelers.partySize }), _jsx("div", { className: "flex flex-col gap-2", children: shape.paxBands.map((band) => {
72
+ const value = draft.configure.pax?.[band.code] ?? 0;
73
+ return (_jsxs("div", { className: "flex items-center gap-3 rounded-md border px-3 py-2", children: [_jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "text-sm font-medium", children: band.label }), band.minAge != null || band.maxAge != null ? (_jsx("div", { className: "text-muted-foreground text-xs", children: ageHint(band.minAge, band.maxAge, messages) })) : null] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "ghost", size: "sm", type: "button", className: "h-7 w-7 p-0", disabled: value <= band.minCount, onClick: () => setDraft(patchPaxCount(draft, band.code, value - 1)), "aria-label": formatMessage(messages.bookingJourney.travelers.decrease, {
74
+ label: band.label,
75
+ }), children: _jsx(Minus, { className: "h-3.5 w-3.5" }) }), _jsx("span", { className: "min-w-[1.5rem] text-center text-sm tabular-nums", children: value }), _jsx(Button, { variant: "ghost", size: "sm", type: "button", className: "h-7 w-7 p-0", disabled: value >= band.maxCount, onClick: () => setDraft(patchPaxCount(draft, band.code, value + 1)), "aria-label": formatMessage(messages.bookingJourney.travelers.increase, {
76
+ label: band.label,
77
+ }), children: _jsx(Plus, { className: "h-3.5 w-3.5" }) })] })] }, band.code));
78
+ }) }), _jsx(PaxValidation, { draft: draft, shape: shape })] }));
79
+ }
80
+ export function PaxValidation({ draft, shape, }) {
81
+ const messages = useBookingsUiMessagesOrDefault();
82
+ const total = totalPax(draft);
83
+ const { min, max } = shape.paxBandsAllowedTotal;
84
+ if (total < min) {
85
+ return (_jsx("p", { className: "text-sm text-amber-600", children: formatMessage(messages.bookingJourney.validation.addAtLeastTravelers, {
86
+ count: min,
87
+ plural: min === 1 ? "" : "s",
88
+ }) }));
89
+ }
90
+ if (total > max) {
91
+ return (_jsx("p", { className: "text-sm text-destructive", children: formatMessage(messages.bookingJourney.validation.maxTravelersPerBooking, {
92
+ count: max,
93
+ }) }));
94
+ }
95
+ return null;
96
+ }
97
+ /** Formats one occupancy-rule violation into a localized message. */
98
+ function formatPaxDependencyViolation(violation, messages) {
99
+ switch (violation.type) {
100
+ case "requires":
101
+ return formatMessage(messages.dependencyRequires, {
102
+ dependent: violation.dependentLabel,
103
+ master: violation.masterLabel,
104
+ });
105
+ case "excludes":
106
+ return formatMessage(messages.dependencyExcludes, {
107
+ dependent: violation.dependentLabel,
108
+ master: violation.masterLabel,
109
+ });
110
+ case "limits_per_master":
111
+ return formatMessage(messages.dependencyLimitPerMaster, {
112
+ limit: violation.limit ?? 0,
113
+ dependent: violation.dependentLabel,
114
+ master: violation.masterLabel,
115
+ });
116
+ case "limits_sum":
117
+ return formatMessage(messages.dependencyLimitSum, {
118
+ limit: violation.limit ?? 0,
119
+ dependent: violation.dependentLabel,
120
+ });
121
+ }
122
+ }
123
+ /**
124
+ * Surfaces broken cross-band occupancy rules (e.g. "Child under 6
125
+ * requires an Adult") as hard validation errors under the pax steppers.
126
+ * These also block step advancement via `canAdvanceFromStep`.
127
+ */
128
+ export function PaxDependencyWarnings({ draft, shape, }) {
129
+ const messages = useBookingsUiMessagesOrDefault();
130
+ const violations = evaluatePaxBandDependencies(draft.configure.pax, shape.paxBandDependencies, shape.paxBands);
131
+ if (violations.length === 0)
132
+ return null;
133
+ return (_jsx("div", { className: "space-y-1", children: violations.map((violation) => (_jsx("p", { className: "text-destructive text-sm", children: formatPaxDependencyViolation(violation, messages.bookingJourney.validation) }, `${violation.type}-${violation.dependentCode}-${violation.masterCode}`))) }));
134
+ }
135
+ /**
136
+ * Renders the vertical-specific Configure sub-steps that aren't part of the
137
+ * fixed products layout (departure / option / rooms / occupancy are handled
138
+ * explicitly in `ConfigureStep`). Cruise cabins, date ranges, and air
139
+ * arrangement land here, in descriptor order.
140
+ */
141
+ function renderOtherConfigureSubStep(sub, draft, setDraft) {
142
+ if (sub.kind === "date-range") {
143
+ return (_jsx(DateRangeFields, { draft: draft, setDraft: setDraft, minNights: sub.minNights, maxNights: sub.maxNights }, "date-range"));
144
+ }
145
+ if (sub.kind === "cabin-category") {
146
+ return (_jsx(CabinCategoryFields, { draft: draft, setDraft: setDraft, categories: sub.categories }, "cabin-category"));
147
+ }
148
+ if (sub.kind === "cabin-number") {
149
+ return (_jsx(CabinNumberFields, { draft: draft, setDraft: setDraft, perCategory: sub.perCategory }, "cabin-number"));
150
+ }
151
+ if (sub.kind === "air-arrangement") {
152
+ return _jsx(AirArrangementFields, { draft: draft, setDraft: setDraft }, "air-arrangement");
153
+ }
154
+ return null;
155
+ }
156
+ function ProductOptionFields({ draft, setDraft, options, renderSelectedUnits, }) {
157
+ const messages = useBookingsUiMessagesOrDefault();
158
+ const selectedId = draft.configure.variantId;
159
+ if (options.length === 0)
160
+ return null;
161
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: messages.bookingJourney.configure.option }), _jsx(RadioGroup, { value: selectedId ?? "",
162
+ // Switching options must clear the previous option's room/unit picks —
163
+ // otherwise stale `optionSelections` from option A still drive the
164
+ // quote/commit (price, item lines, rooms gate) under option B.
165
+ onValueChange: (v) => setDraft(patchConfigure(draft, v === selectedId ? { variantId: v } : { variantId: v, optionSelections: [] })), className: "grid grid-cols-1 gap-2", children: options.map((option) => {
166
+ const selected = option.id === selectedId;
167
+ return (_jsxs("div", { className: "space-y-2", children: [_jsxs("label", { className: "flex cursor-pointer items-start gap-3 rounded-md border p-3 text-sm transition-colors " +
168
+ (selected ? "border-primary bg-primary/5" : "border-input hover:bg-muted/50"), children: [_jsx(RadioGroupItem, { value: option.id, className: "mt-0.5" }), _jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "font-medium", children: [option.name, option.code ? (_jsx("span", { className: "ml-2 text-muted-foreground text-xs uppercase", children: option.code })) : null] }), option.description ? (_jsx("div", { className: "mt-1 text-muted-foreground text-xs", children: option.description })) : null] })] }), selected && renderSelectedUnits ? (_jsx("div", { className: "ml-7 space-y-2 border-muted border-l-2 pl-4", children: renderSelectedUnits() })) : null] }, option.id));
169
+ }) })] }));
170
+ }
171
+ function DepartureBasic({ draft, setDraft, }) {
172
+ const messages = useBookingsUiMessagesOrDefault();
173
+ return (_jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [_jsx(DateField, { id: "bj-departure-date", label: messages.bookingJourney.configure.departureDate, value: draft.configure.departureDate ?? "", onChange: (v) => setDraft(patchConfigure(draft, { departureDate: v })), range: "future" }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "bj-departure-time", children: messages.bookingJourney.configure.timeOptional }), _jsx(Input, { id: "bj-departure-time", type: "time", value: draft.configure.departureTime ?? "", onChange: (e) => setDraft(patchConfigure(draft, { departureTime: e.target.value })) })] })] }));
174
+ }
175
+ function DateRangeFields({ draft, setDraft, minNights, maxNights, }) {
176
+ const messages = useBookingsUiMessagesOrDefault();
177
+ const range = draft.configure.dateRange;
178
+ return (_jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [_jsx(DateField, { id: "bj-checkin", label: messages.bookingJourney.configure.checkIn, value: range?.checkIn ?? "", onChange: (v) => setDraft(patchConfigure(draft, {
179
+ dateRange: { checkIn: v, checkOut: range?.checkOut ?? "" },
180
+ })), range: "future" }), _jsx(DateField, { id: "bj-checkout", label: formatMessage(messages.bookingJourney.configure.checkOutWithNights, {
181
+ minNights,
182
+ maxNights,
183
+ }), value: range?.checkOut ?? "", onChange: (v) => setDraft(patchConfigure(draft, {
184
+ dateRange: { checkIn: range?.checkIn ?? "", checkOut: v },
185
+ })), range: "future" })] }));
186
+ }
187
+ function CabinCategoryFields({ draft, setDraft, categories, }) {
188
+ const messages = useBookingsUiMessagesOrDefault();
189
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: messages.bookingJourney.configure.cabinCategory }), _jsx("div", { className: "grid grid-cols-1 gap-2 sm:grid-cols-2", children: categories.map((cat) => {
190
+ const selected = draft.configure.cabinCategoryId === cat.id;
191
+ return (_jsxs("button", { type: "button", className: `rounded-md border p-3 text-left ${selected ? "border-primary ring-2 ring-primary" : ""}`, onClick: () => setDraft(patchConfigure(draft, {
192
+ cabinCategoryId: cat.id,
193
+ cabinNumberId: undefined,
194
+ })), children: [_jsx("div", { className: "font-medium", children: cat.name }), cat.description ? (_jsx("div", { className: "text-muted-foreground text-xs", children: cat.description })) : null] }, cat.id));
195
+ }) })] }));
196
+ }
197
+ function AirArrangementFields({ draft, setDraft, }) {
198
+ const messages = useBookingsUiMessagesOrDefault();
199
+ const current = draft.configure.airArrangement;
200
+ const options = [
201
+ {
202
+ value: "cruise_line",
203
+ label: messages.bookingJourney.configure.airOptions.cruise_line.label,
204
+ description: messages.bookingJourney.configure.airOptions.cruise_line.description,
205
+ },
206
+ {
207
+ value: "independent",
208
+ label: messages.bookingJourney.configure.airOptions.independent.label,
209
+ description: messages.bookingJourney.configure.airOptions.independent.description,
210
+ },
211
+ {
212
+ value: "none",
213
+ label: messages.bookingJourney.configure.airOptions.none.label,
214
+ description: messages.bookingJourney.configure.airOptions.none.description,
215
+ },
216
+ ];
217
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: messages.bookingJourney.configure.airArrangements }), _jsx("div", { className: "grid grid-cols-1 gap-2 sm:grid-cols-3", children: options.map((opt) => {
218
+ const selected = current === opt.value;
219
+ return (_jsxs("button", { type: "button", className: `rounded-md border p-3 text-left text-sm ${selected ? "border-primary ring-2 ring-primary" : ""}`, onClick: () => setDraft(patchConfigure(draft, { airArrangement: opt.value })), children: [_jsx("div", { className: "font-medium", children: opt.label }), _jsx("div", { className: "text-muted-foreground text-xs", children: opt.description })] }, opt.value));
220
+ }) })] }));
221
+ }
222
+ function CabinNumberFields({ draft, setDraft, perCategory, }) {
223
+ const messages = useBookingsUiMessagesOrDefault();
224
+ const catId = draft.configure.cabinCategoryId;
225
+ if (!catId)
226
+ return null;
227
+ const cabins = perCategory[catId] ?? [];
228
+ return (_jsxs("div", { className: "space-y-2", children: [_jsx(Label, { children: messages.bookingJourney.configure.cabinNumber }), _jsx("div", { className: "grid grid-cols-2 gap-2 sm:grid-cols-4", children: cabins.map((cabin) => {
229
+ const selected = draft.configure.cabinNumberId === cabin.id;
230
+ return (_jsx("button", { type: "button", className: `rounded-md border p-2 text-sm ${selected ? "border-primary ring-2 ring-primary" : ""}`, onClick: () => setDraft(patchConfigure(draft, { cabinNumberId: cabin.id })), children: cabin.label }, cabin.id));
231
+ }) })] }));
232
+ }
@@ -0,0 +1,11 @@
1
+ import type { Draft } from "../../lib/draft-state.js";
2
+ /**
3
+ * Operator-only finalization that isn't about payment: an internal note and the
4
+ * document-generation settings (proforma vs invoice+contract, notify). Split
5
+ * out of the Payment block since these don't affect the amount due.
6
+ */
7
+ export declare function DocumentsStep({ draft, setDraft, }: {
8
+ draft: Draft;
9
+ setDraft: (next: Draft) => void;
10
+ }): React.ReactElement;
11
+ //# sourceMappingURL=documents-step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents-step.d.ts","sourceRoot":"","sources":["../../../../src/journey/components/journey-steps/documents-step.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAErD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAA;CAChC,GAAG,KAAK,CAAC,YAAY,CA6GrB"}
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Card, CardContent, CardHeader, CardTitle } from "@voyant-travel/ui/components/card";
4
+ import { Checkbox } from "@voyant-travel/ui/components/checkbox";
5
+ import { Label } from "@voyant-travel/ui/components/label";
6
+ import { Separator } from "@voyant-travel/ui/components/separator";
7
+ import { Textarea } from "@voyant-travel/ui/components/textarea";
8
+ import { useBookingsUiMessagesOrDefault } from "../../../i18n/index.js";
9
+ /**
10
+ * Operator-only finalization that isn't about payment: an internal note and the
11
+ * document-generation settings (proforma vs invoice+contract, notify). Split
12
+ * out of the Payment block since these don't affect the amount due.
13
+ */
14
+ export function DocumentsStep({ draft, setDraft, }) {
15
+ const messages = useBookingsUiMessagesOrDefault();
16
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.bookingJourney.steps.documents }) }), _jsx(Separator, {}), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "flex items-start gap-2 text-sm", children: [_jsx(Checkbox, { id: "bj-save-as-draft", checked: draft.saveAsDraft === true, onCheckedChange: (v) => setDraft({ ...draft, saveAsDraft: v === true }), className: "mt-0.5" }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Label, { htmlFor: "bj-save-as-draft", className: "cursor-pointer", children: messages.bookingJourney.documents.saveAsDraft }), _jsx("p", { className: "text-muted-foreground text-xs", children: messages.bookingJourney.documents.saveAsDraftHint })] })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "bj-internal-notes", children: messages.bookingJourney.review.internalNotes }), _jsx(Textarea, { id: "bj-internal-notes", value: draft.internalNotes ?? "", onChange: (e) => setDraft({ ...draft, internalNotes: e.target.value }) })] }), _jsxs("div", { className: "flex flex-col gap-3 rounded-md border p-3", children: [_jsx(Label, { children: messages.bookingCreateDialog.labels.documentGenerationHeading }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { id: "bj-doc-proforma", checked: draft.documentGeneration?.invoiceType === "proforma", onCheckedChange: (v) => setDraft({
17
+ ...draft,
18
+ documentGeneration: v === true
19
+ ? {
20
+ contractDocument: false,
21
+ invoiceDocument: true,
22
+ invoiceType: "proforma",
23
+ }
24
+ : undefined,
25
+ }) }), _jsx(Label, { htmlFor: "bj-doc-proforma", className: "cursor-pointer", children: messages.bookingCreateDialog.labels.generateProforma })] }), _jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx(Checkbox, { id: "bj-doc-invoice-contract", checked: draft.documentGeneration?.contractDocument === true &&
26
+ draft.documentGeneration?.invoiceType !== "proforma", onCheckedChange: (v) => setDraft({
27
+ ...draft,
28
+ documentGeneration: v === true
29
+ ? {
30
+ contractDocument: true,
31
+ invoiceDocument: true,
32
+ invoiceType: "invoice",
33
+ }
34
+ : undefined,
35
+ }) }), _jsx(Label, { htmlFor: "bj-doc-invoice-contract", className: "cursor-pointer", children: messages.bookingCreateDialog.labels.generateInvoiceAndContract })] }), _jsxs("div", { className: "flex items-start gap-2 border-t pt-2 text-sm", children: [_jsx(Checkbox, { id: "bj-notify-traveler", checked: draft.suppressNotifications !== true, onCheckedChange: (v) => setDraft({ ...draft, suppressNotifications: v !== true }) }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx(Label, { htmlFor: "bj-notify-traveler", className: "cursor-pointer", children: messages.bookingCreateDialog.fields.notifyTraveler }), _jsx("p", { className: "text-muted-foreground text-xs", children: messages.bookingCreateDialog.fields.notifyTravelerHint })] })] })] })] })] })] }));
36
+ }
@@ -0,0 +1,29 @@
1
+ import { type Draft } from "../../lib/draft-state.js";
2
+ import type { PaymentProviderCapabilities, PaymentProviderStepRenderProps, VoucherPickerProps } from "../../types.js";
3
+ import type { StepCommonProps } from "./shared.js";
4
+ export declare function PaymentStep({ draft, setDraft, shape, capabilities, renderProviderStep, surface, pricing, }: StepCommonProps & {
5
+ capabilities: PaymentProviderCapabilities;
6
+ renderProviderStep?: (props: PaymentProviderStepRenderProps) => React.ReactNode;
7
+ surface?: "admin" | "public";
8
+ /** Live quote total + currency — drives the payment-schedule editor defaults. */
9
+ pricing?: {
10
+ total: number;
11
+ currency: string;
12
+ } | null;
13
+ }): React.ReactElement;
14
+ /**
15
+ * Operator-only PAYMENT-RELATED finalize controls — manual price override and
16
+ * voucher redemption (both change the amount due, so they live in the Payment
17
+ * block). Non-payment finalization (internal notes, document generation) lives
18
+ * in the separate Documents step.
19
+ */
20
+ export declare function FinalizeControls({ draft, setDraft, pricing, renderVoucherPicker, }: {
21
+ draft: Draft;
22
+ setDraft: (next: Draft) => void;
23
+ pricing?: {
24
+ total: number;
25
+ currency: string;
26
+ } | null;
27
+ renderVoucherPicker?: (props: VoucherPickerProps) => React.ReactNode;
28
+ }): React.ReactElement;
29
+ //# sourceMappingURL=payment-step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-step.d.ts","sourceRoot":"","sources":["../../../../src/journey/components/journey-steps/payment-step.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,KAAK,EAAc,MAAM,0BAA0B,CAAA;AAKjE,OAAO,KAAK,EACV,2BAA2B,EAC3B,8BAA8B,EAC9B,kBAAkB,EACnB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAMlD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,YAAY,EACZ,kBAAkB,EAClB,OAAO,EACP,OAAO,GACR,EAAE,eAAe,GAAG;IACnB,YAAY,EAAE,2BAA2B,CAAA;IACzC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,KAAK,CAAC,SAAS,CAAA;IAC/E,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC5B,iFAAiF;IACjF,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACrD,GAAG,KAAK,CAAC,YAAY,CAqIrB;AAiSD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,EACR,OAAO,EACP,mBAAmB,GACpB,EAAE;IACD,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAA;IAC/B,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACpD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,KAAK,CAAC,SAAS,CAAA;CACrE,GAAG,KAAK,CAAC,YAAY,CAerB"}