@voyant-travel/finance-react 0.119.5

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 (517) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +75 -0
  3. package/dist/admin/booking-invoices-widget.d.ts +19 -0
  4. package/dist/admin/booking-invoices-widget.d.ts.map +1 -0
  5. package/dist/admin/booking-invoices-widget.js +204 -0
  6. package/dist/admin/booking-payment-policy-widget.d.ts +21 -0
  7. package/dist/admin/booking-payment-policy-widget.d.ts.map +1 -0
  8. package/dist/admin/booking-payment-policy-widget.js +128 -0
  9. package/dist/admin/booking-pending-payment-sessions-widget.d.ts +24 -0
  10. package/dist/admin/booking-pending-payment-sessions-widget.d.ts.map +1 -0
  11. package/dist/admin/booking-pending-payment-sessions-widget.js +139 -0
  12. package/dist/admin/credit-note-dialog.d.ts +9 -0
  13. package/dist/admin/credit-note-dialog.d.ts.map +1 -0
  14. package/dist/admin/credit-note-dialog.js +70 -0
  15. package/dist/admin/finance-shared.d.ts +7 -0
  16. package/dist/admin/finance-shared.d.ts.map +1 -0
  17. package/dist/admin/finance-shared.js +30 -0
  18. package/dist/admin/index.d.ts +99 -0
  19. package/dist/admin/index.d.ts.map +1 -0
  20. package/dist/admin/index.js +286 -0
  21. package/dist/admin/invoice-detail-host.d.ts +19 -0
  22. package/dist/admin/invoice-detail-host.d.ts.map +1 -0
  23. package/dist/admin/invoice-detail-host.js +147 -0
  24. package/dist/admin/invoice-detail-sections.d.ts +31 -0
  25. package/dist/admin/invoice-detail-sections.d.ts.map +1 -0
  26. package/dist/admin/invoice-detail-sections.js +109 -0
  27. package/dist/admin/invoice-detail-skeleton.d.ts +11 -0
  28. package/dist/admin/invoice-detail-skeleton.d.ts.map +1 -0
  29. package/dist/admin/invoice-detail-skeleton.js +33 -0
  30. package/dist/admin/line-item-dialog.d.ts +10 -0
  31. package/dist/admin/line-item-dialog.d.ts.map +1 -0
  32. package/dist/admin/line-item-dialog.js +91 -0
  33. package/dist/admin/pages/invoice-detail.d.ts +8 -0
  34. package/dist/admin/pages/invoice-detail.d.ts.map +1 -0
  35. package/dist/admin/pages/invoice-detail.js +11 -0
  36. package/dist/admin/pages/invoices-index.d.ts +8 -0
  37. package/dist/admin/pages/invoices-index.d.ts.map +1 -0
  38. package/dist/admin/pages/invoices-index.js +14 -0
  39. package/dist/admin/pages/payment-detail.d.ts +8 -0
  40. package/dist/admin/pages/payment-detail.d.ts.map +1 -0
  41. package/dist/admin/pages/payment-detail.js +11 -0
  42. package/dist/admin/pages/payments-index.d.ts +9 -0
  43. package/dist/admin/pages/payments-index.d.ts.map +1 -0
  44. package/dist/admin/pages/payments-index.js +21 -0
  45. package/dist/admin/pages/profitability.d.ts +10 -0
  46. package/dist/admin/pages/profitability.d.ts.map +1 -0
  47. package/dist/admin/pages/profitability.js +32 -0
  48. package/dist/admin/pages/supplier-invoice-detail.d.ts +20 -0
  49. package/dist/admin/pages/supplier-invoice-detail.d.ts.map +1 -0
  50. package/dist/admin/pages/supplier-invoice-detail.js +102 -0
  51. package/dist/admin/pages/supplier-invoices-index.d.ts +9 -0
  52. package/dist/admin/pages/supplier-invoices-index.d.ts.map +1 -0
  53. package/dist/admin/pages/supplier-invoices-index.js +16 -0
  54. package/dist/admin/payment-detail-host.d.ts +12 -0
  55. package/dist/admin/payment-detail-host.d.ts.map +1 -0
  56. package/dist/admin/payment-detail-host.js +108 -0
  57. package/dist/admin/payment-detail-skeleton.d.ts +8 -0
  58. package/dist/admin/payment-detail-skeleton.d.ts.map +1 -0
  59. package/dist/admin/payment-detail-skeleton.js +15 -0
  60. package/dist/admin/payment-dialog.d.ts +9 -0
  61. package/dist/admin/payment-dialog.d.ts.map +1 -0
  62. package/dist/admin/payment-dialog.js +99 -0
  63. package/dist/admin/record-payment-dialog.d.ts +16 -0
  64. package/dist/admin/record-payment-dialog.d.ts.map +1 -0
  65. package/dist/admin/record-payment-dialog.js +219 -0
  66. package/dist/admin/supplier-payment-policy-widget.d.ts +18 -0
  67. package/dist/admin/supplier-payment-policy-widget.d.ts.map +1 -0
  68. package/dist/admin/supplier-payment-policy-widget.js +31 -0
  69. package/dist/admin/use-supplier-picker.d.ts +19 -0
  70. package/dist/admin/use-supplier-picker.d.ts.map +1 -0
  71. package/dist/admin/use-supplier-picker.js +30 -0
  72. package/dist/checkout-components/collect-payment-dialog.d.ts +45 -0
  73. package/dist/checkout-components/collect-payment-dialog.d.ts.map +1 -0
  74. package/dist/checkout-components/collect-payment-dialog.js +121 -0
  75. package/dist/checkout-components/payment-link-landing-page.d.ts +76 -0
  76. package/dist/checkout-components/payment-link-landing-page.d.ts.map +1 -0
  77. package/dist/checkout-components/payment-link-landing-page.js +173 -0
  78. package/dist/checkout-components/payment-step.d.ts +42 -0
  79. package/dist/checkout-components/payment-step.d.ts.map +1 -0
  80. package/dist/checkout-components/payment-step.js +113 -0
  81. package/dist/checkout-hooks/index.d.ts +5 -0
  82. package/dist/checkout-hooks/index.d.ts.map +1 -0
  83. package/dist/checkout-hooks/index.js +4 -0
  84. package/dist/checkout-hooks/use-checkout-payment-link-config.d.ts +20 -0
  85. package/dist/checkout-hooks/use-checkout-payment-link-config.d.ts.map +1 -0
  86. package/dist/checkout-hooks/use-checkout-payment-link-config.js +26 -0
  87. package/dist/checkout-hooks/use-collect-payment.d.ts +227 -0
  88. package/dist/checkout-hooks/use-collect-payment.d.ts.map +1 -0
  89. package/dist/checkout-hooks/use-collect-payment.js +80 -0
  90. package/dist/checkout-hooks/use-initiate-checkout-collection.d.ts +308 -0
  91. package/dist/checkout-hooks/use-initiate-checkout-collection.d.ts.map +1 -0
  92. package/dist/checkout-hooks/use-initiate-checkout-collection.js +35 -0
  93. package/dist/checkout-hooks/use-preview-checkout-collection.d.ts +65 -0
  94. package/dist/checkout-hooks/use-preview-checkout-collection.d.ts.map +1 -0
  95. package/dist/checkout-hooks/use-preview-checkout-collection.js +27 -0
  96. package/dist/checkout-i18n/en.d.ts +3 -0
  97. package/dist/checkout-i18n/en.d.ts.map +1 -0
  98. package/dist/checkout-i18n/en.js +127 -0
  99. package/dist/checkout-i18n/index.d.ts +5 -0
  100. package/dist/checkout-i18n/index.d.ts.map +1 -0
  101. package/dist/checkout-i18n/index.js +3 -0
  102. package/dist/checkout-i18n/messages.d.ts +121 -0
  103. package/dist/checkout-i18n/messages.d.ts.map +1 -0
  104. package/dist/checkout-i18n/messages.js +1 -0
  105. package/dist/checkout-i18n/provider.d.ts +26 -0
  106. package/dist/checkout-i18n/provider.d.ts.map +1 -0
  107. package/dist/checkout-i18n/provider.js +41 -0
  108. package/dist/checkout-i18n/ro.d.ts +3 -0
  109. package/dist/checkout-i18n/ro.d.ts.map +1 -0
  110. package/dist/checkout-i18n/ro.js +127 -0
  111. package/dist/checkout-types.d.ts +53 -0
  112. package/dist/checkout-types.d.ts.map +1 -0
  113. package/dist/checkout-types.js +1 -0
  114. package/dist/checkout-ui.d.ts +7 -0
  115. package/dist/checkout-ui.d.ts.map +1 -0
  116. package/dist/checkout-ui.js +4 -0
  117. package/dist/checkout.d.ts +5 -0
  118. package/dist/checkout.d.ts.map +1 -0
  119. package/dist/checkout.js +3 -0
  120. package/dist/client.d.ts +16 -0
  121. package/dist/client.d.ts.map +1 -0
  122. package/dist/client.js +79 -0
  123. package/dist/components/accountant-portal/body.d.ts +8 -0
  124. package/dist/components/accountant-portal/body.d.ts.map +1 -0
  125. package/dist/components/accountant-portal/body.js +114 -0
  126. package/dist/components/accountant-portal/widgets.d.ts +13 -0
  127. package/dist/components/accountant-portal/widgets.d.ts.map +1 -0
  128. package/dist/components/accountant-portal/widgets.js +27 -0
  129. package/dist/components/accountant-portal.d.ts +10 -0
  130. package/dist/components/accountant-portal.d.ts.map +1 -0
  131. package/dist/components/accountant-portal.js +22 -0
  132. package/dist/components/accountant-share-dialog.d.ts +6 -0
  133. package/dist/components/accountant-share-dialog.d.ts.map +1 -0
  134. package/dist/components/accountant-share-dialog.js +53 -0
  135. package/dist/components/async-combobox.d.ts +33 -0
  136. package/dist/components/async-combobox.d.ts.map +1 -0
  137. package/dist/components/async-combobox.js +100 -0
  138. package/dist/components/booking-invoice-dialog.d.ts +63 -0
  139. package/dist/components/booking-invoice-dialog.d.ts.map +1 -0
  140. package/dist/components/booking-invoice-dialog.js +383 -0
  141. package/dist/components/cost-categories-page.d.ts +5 -0
  142. package/dist/components/cost-categories-page.d.ts.map +1 -0
  143. package/dist/components/cost-categories-page.js +30 -0
  144. package/dist/components/invoice-action-ledger-card.d.ts +15 -0
  145. package/dist/components/invoice-action-ledger-card.d.ts.map +1 -0
  146. package/dist/components/invoice-action-ledger-card.js +76 -0
  147. package/dist/components/invoice-bulk-actions.d.ts +10 -0
  148. package/dist/components/invoice-bulk-actions.d.ts.map +1 -0
  149. package/dist/components/invoice-bulk-actions.js +19 -0
  150. package/dist/components/invoice-detail-page/cards.d.ts +44 -0
  151. package/dist/components/invoice-detail-page/cards.d.ts.map +1 -0
  152. package/dist/components/invoice-detail-page/cards.js +43 -0
  153. package/dist/components/invoice-detail-page/header.d.ts +15 -0
  154. package/dist/components/invoice-detail-page/header.d.ts.map +1 -0
  155. package/dist/components/invoice-detail-page/header.js +30 -0
  156. package/dist/components/invoice-detail-page/notes-dialogs.d.ts +28 -0
  157. package/dist/components/invoice-detail-page/notes-dialogs.d.ts.map +1 -0
  158. package/dist/components/invoice-detail-page/notes-dialogs.js +104 -0
  159. package/dist/components/invoice-detail-page/primitives.d.ts +47 -0
  160. package/dist/components/invoice-detail-page/primitives.d.ts.map +1 -0
  161. package/dist/components/invoice-detail-page/primitives.js +76 -0
  162. package/dist/components/invoice-detail-page-with-action-ledger.d.ts +7 -0
  163. package/dist/components/invoice-detail-page-with-action-ledger.d.ts.map +1 -0
  164. package/dist/components/invoice-detail-page-with-action-ledger.js +11 -0
  165. package/dist/components/invoice-detail-page.d.ts +46 -0
  166. package/dist/components/invoice-detail-page.d.ts.map +1 -0
  167. package/dist/components/invoice-detail-page.js +134 -0
  168. package/dist/components/invoice-dialog.d.ts +9 -0
  169. package/dist/components/invoice-dialog.d.ts.map +1 -0
  170. package/dist/components/invoice-dialog.js +145 -0
  171. package/dist/components/invoice-number-series-dialog.d.ts +9 -0
  172. package/dist/components/invoice-number-series-dialog.d.ts.map +1 -0
  173. package/dist/components/invoice-number-series-dialog.js +134 -0
  174. package/dist/components/invoice-number-series-format.d.ts +3 -0
  175. package/dist/components/invoice-number-series-format.d.ts.map +1 -0
  176. package/dist/components/invoice-number-series-format.js +4 -0
  177. package/dist/components/invoice-number-series-page.d.ts +5 -0
  178. package/dist/components/invoice-number-series-page.d.ts.map +1 -0
  179. package/dist/components/invoice-number-series-page.js +55 -0
  180. package/dist/components/invoice-table-parts.d.ts +25 -0
  181. package/dist/components/invoice-table-parts.d.ts.map +1 -0
  182. package/dist/components/invoice-table-parts.js +32 -0
  183. package/dist/components/invoices-page-skeleton.d.ts +5 -0
  184. package/dist/components/invoices-page-skeleton.d.ts.map +1 -0
  185. package/dist/components/invoices-page-skeleton.js +13 -0
  186. package/dist/components/invoices-page.d.ts +6 -0
  187. package/dist/components/invoices-page.d.ts.map +1 -0
  188. package/dist/components/invoices-page.js +145 -0
  189. package/dist/components/payment-detail-page.d.ts +47 -0
  190. package/dist/components/payment-detail-page.d.ts.map +1 -0
  191. package/dist/components/payment-detail-page.js +90 -0
  192. package/dist/components/payment-policy-form.d.ts +49 -0
  193. package/dist/components/payment-policy-form.d.ts.map +1 -0
  194. package/dist/components/payment-policy-form.js +82 -0
  195. package/dist/components/payments-page/controls.d.ts +23 -0
  196. package/dist/components/payments-page/controls.d.ts.map +1 -0
  197. package/dist/components/payments-page/controls.js +20 -0
  198. package/dist/components/payments-page-skeleton.d.ts +5 -0
  199. package/dist/components/payments-page-skeleton.d.ts.map +1 -0
  200. package/dist/components/payments-page-skeleton.js +13 -0
  201. package/dist/components/payments-page.d.ts +20 -0
  202. package/dist/components/payments-page.d.ts.map +1 -0
  203. package/dist/components/payments-page.js +143 -0
  204. package/dist/components/profitability-page/sections.d.ts +24 -0
  205. package/dist/components/profitability-page/sections.d.ts.map +1 -0
  206. package/dist/components/profitability-page/sections.js +43 -0
  207. package/dist/components/profitability-page.d.ts +13 -0
  208. package/dist/components/profitability-page.d.ts.map +1 -0
  209. package/dist/components/profitability-page.js +175 -0
  210. package/dist/components/record-booking-payment-dialog/shared.d.ts +54 -0
  211. package/dist/components/record-booking-payment-dialog/shared.d.ts.map +1 -0
  212. package/dist/components/record-booking-payment-dialog/shared.js +47 -0
  213. package/dist/components/record-booking-payment-dialog.d.ts +4 -0
  214. package/dist/components/record-booking-payment-dialog.d.ts.map +1 -0
  215. package/dist/components/record-booking-payment-dialog.js +256 -0
  216. package/dist/components/supplier-invoice-detail-page/dialogs.d.ts +34 -0
  217. package/dist/components/supplier-invoice-detail-page/dialogs.d.ts.map +1 -0
  218. package/dist/components/supplier-invoice-detail-page/dialogs.js +119 -0
  219. package/dist/components/supplier-invoice-detail-page/shared.d.ts +64 -0
  220. package/dist/components/supplier-invoice-detail-page/shared.d.ts.map +1 -0
  221. package/dist/components/supplier-invoice-detail-page/shared.js +70 -0
  222. package/dist/components/supplier-invoice-detail-page.d.ts +4 -0
  223. package/dist/components/supplier-invoice-detail-page.d.ts.map +1 -0
  224. package/dist/components/supplier-invoice-detail-page.js +101 -0
  225. package/dist/components/supplier-invoice-form-dialog.d.ts +45 -0
  226. package/dist/components/supplier-invoice-form-dialog.d.ts.map +1 -0
  227. package/dist/components/supplier-invoice-form-dialog.js +102 -0
  228. package/dist/components/supplier-invoices-page.d.ts +14 -0
  229. package/dist/components/supplier-invoices-page.d.ts.map +1 -0
  230. package/dist/components/supplier-invoices-page.js +69 -0
  231. package/dist/components/supplier-payment-dialog.d.ts +7 -0
  232. package/dist/components/supplier-payment-dialog.d.ts.map +1 -0
  233. package/dist/components/supplier-payment-dialog.js +103 -0
  234. package/dist/components/taxes-page/policy-profile-sheet.d.ts +8 -0
  235. package/dist/components/taxes-page/policy-profile-sheet.d.ts.map +1 -0
  236. package/dist/components/taxes-page/policy-profile-sheet.js +52 -0
  237. package/dist/components/taxes-page/policy-rule-sheet.d.ts +10 -0
  238. package/dist/components/taxes-page/policy-rule-sheet.d.ts.map +1 -0
  239. package/dist/components/taxes-page/policy-rule-sheet.js +137 -0
  240. package/dist/components/taxes-page/shared.d.ts +128 -0
  241. package/dist/components/taxes-page/shared.d.ts.map +1 -0
  242. package/dist/components/taxes-page/shared.js +288 -0
  243. package/dist/components/taxes-page/sheets.d.ts +4 -0
  244. package/dist/components/taxes-page/sheets.d.ts.map +1 -0
  245. package/dist/components/taxes-page/sheets.js +3 -0
  246. package/dist/components/taxes-page/tax-sheet.d.ts +9 -0
  247. package/dist/components/taxes-page/tax-sheet.d.ts.map +1 -0
  248. package/dist/components/taxes-page/tax-sheet.js +108 -0
  249. package/dist/components/taxes-page.d.ts +4 -0
  250. package/dist/components/taxes-page.d.ts.map +1 -0
  251. package/dist/components/taxes-page.js +165 -0
  252. package/dist/hooks/index.d.ts +53 -0
  253. package/dist/hooks/index.d.ts.map +1 -0
  254. package/dist/hooks/index.js +52 -0
  255. package/dist/hooks/use-accountant-share-mutation.d.ts +20 -0
  256. package/dist/hooks/use-accountant-share-mutation.d.ts.map +1 -0
  257. package/dist/hooks/use-accountant-share-mutation.js +27 -0
  258. package/dist/hooks/use-accountant-shares.d.ts +13 -0
  259. package/dist/hooks/use-accountant-shares.d.ts.map +1 -0
  260. package/dist/hooks/use-accountant-shares.js +8 -0
  261. package/dist/hooks/use-admin-booking-payments.d.ts +30 -0
  262. package/dist/hooks/use-admin-booking-payments.d.ts.map +1 -0
  263. package/dist/hooks/use-admin-booking-payments.js +18 -0
  264. package/dist/hooks/use-all-payments.d.ts +35 -0
  265. package/dist/hooks/use-all-payments.d.ts.map +1 -0
  266. package/dist/hooks/use-all-payments.js +12 -0
  267. package/dist/hooks/use-booking-guarantees.d.ts +82 -0
  268. package/dist/hooks/use-booking-guarantees.d.ts.map +1 -0
  269. package/dist/hooks/use-booking-guarantees.js +46 -0
  270. package/dist/hooks/use-booking-payment-schedule-regenerate-mutation.d.ts +44 -0
  271. package/dist/hooks/use-booking-payment-schedule-regenerate-mutation.d.ts.map +1 -0
  272. package/dist/hooks/use-booking-payment-schedule-regenerate-mutation.js +27 -0
  273. package/dist/hooks/use-booking-payment-schedules.d.ts +63 -0
  274. package/dist/hooks/use-booking-payment-schedules.d.ts.map +1 -0
  275. package/dist/hooks/use-booking-payment-schedules.js +47 -0
  276. package/dist/hooks/use-cost-categories.d.ts +14 -0
  277. package/dist/hooks/use-cost-categories.d.ts.map +1 -0
  278. package/dist/hooks/use-cost-categories.js +9 -0
  279. package/dist/hooks/use-cost-category-mutation.d.ts +31 -0
  280. package/dist/hooks/use-cost-category-mutation.d.ts.map +1 -0
  281. package/dist/hooks/use-cost-category-mutation.js +27 -0
  282. package/dist/hooks/use-departure-profitability.d.ts +56 -0
  283. package/dist/hooks/use-departure-profitability.d.ts.map +1 -0
  284. package/dist/hooks/use-departure-profitability.js +12 -0
  285. package/dist/hooks/use-finance-action-ledger.d.ts +94 -0
  286. package/dist/hooks/use-finance-action-ledger.d.ts.map +1 -0
  287. package/dist/hooks/use-finance-action-ledger.js +20 -0
  288. package/dist/hooks/use-invoice-attachment-mutation.d.ts +43 -0
  289. package/dist/hooks/use-invoice-attachment-mutation.d.ts.map +1 -0
  290. package/dist/hooks/use-invoice-attachment-mutation.js +39 -0
  291. package/dist/hooks/use-invoice-attachments.d.ts +18 -0
  292. package/dist/hooks/use-invoice-attachments.d.ts.map +1 -0
  293. package/dist/hooks/use-invoice-attachments.js +12 -0
  294. package/dist/hooks/use-invoice-bulk-status-mutation.d.ts +51 -0
  295. package/dist/hooks/use-invoice-bulk-status-mutation.d.ts.map +1 -0
  296. package/dist/hooks/use-invoice-bulk-status-mutation.js +66 -0
  297. package/dist/hooks/use-invoice-credit-note-mutation.d.ts +38 -0
  298. package/dist/hooks/use-invoice-credit-note-mutation.d.ts.map +1 -0
  299. package/dist/hooks/use-invoice-credit-note-mutation.js +35 -0
  300. package/dist/hooks/use-invoice-credit-notes.d.ts +17 -0
  301. package/dist/hooks/use-invoice-credit-notes.d.ts.map +1 -0
  302. package/dist/hooks/use-invoice-credit-notes.js +12 -0
  303. package/dist/hooks/use-invoice-fx-rate.d.ts +19 -0
  304. package/dist/hooks/use-invoice-fx-rate.d.ts.map +1 -0
  305. package/dist/hooks/use-invoice-fx-rate.js +13 -0
  306. package/dist/hooks/use-invoice-line-item-mutation.d.ts +40 -0
  307. package/dist/hooks/use-invoice-line-item-mutation.d.ts.map +1 -0
  308. package/dist/hooks/use-invoice-line-item-mutation.js +42 -0
  309. package/dist/hooks/use-invoice-line-items.d.ts +17 -0
  310. package/dist/hooks/use-invoice-line-items.d.ts.map +1 -0
  311. package/dist/hooks/use-invoice-line-items.js +12 -0
  312. package/dist/hooks/use-invoice-mutation.d.ts +225 -0
  313. package/dist/hooks/use-invoice-mutation.d.ts.map +1 -0
  314. package/dist/hooks/use-invoice-mutation.js +121 -0
  315. package/dist/hooks/use-invoice-note-mutation.d.ts +11 -0
  316. package/dist/hooks/use-invoice-note-mutation.d.ts.map +1 -0
  317. package/dist/hooks/use-invoice-note-mutation.js +23 -0
  318. package/dist/hooks/use-invoice-notes.d.ts +13 -0
  319. package/dist/hooks/use-invoice-notes.d.ts.map +1 -0
  320. package/dist/hooks/use-invoice-notes.js +12 -0
  321. package/dist/hooks/use-invoice-number-series-mutation.d.ts +62 -0
  322. package/dist/hooks/use-invoice-number-series-mutation.d.ts.map +1 -0
  323. package/dist/hooks/use-invoice-number-series-mutation.js +39 -0
  324. package/dist/hooks/use-invoice-number-series.d.ts +28 -0
  325. package/dist/hooks/use-invoice-number-series.d.ts.map +1 -0
  326. package/dist/hooks/use-invoice-number-series.js +12 -0
  327. package/dist/hooks/use-invoice-payment-mutation.d.ts +29 -0
  328. package/dist/hooks/use-invoice-payment-mutation.d.ts.map +1 -0
  329. package/dist/hooks/use-invoice-payment-mutation.js +35 -0
  330. package/dist/hooks/use-invoice-payments.d.ts +21 -0
  331. package/dist/hooks/use-invoice-payments.d.ts.map +1 -0
  332. package/dist/hooks/use-invoice-payments.js +12 -0
  333. package/dist/hooks/use-invoice.d.ts +32 -0
  334. package/dist/hooks/use-invoice.d.ts.map +1 -0
  335. package/dist/hooks/use-invoice.js +12 -0
  336. package/dist/hooks/use-invoices.d.ts +36 -0
  337. package/dist/hooks/use-invoices.d.ts.map +1 -0
  338. package/dist/hooks/use-invoices.js +12 -0
  339. package/dist/hooks/use-payment-mutation.d.ts +57 -0
  340. package/dist/hooks/use-payment-mutation.d.ts.map +1 -0
  341. package/dist/hooks/use-payment-mutation.js +59 -0
  342. package/dist/hooks/use-payment-session-mutation.d.ts +205 -0
  343. package/dist/hooks/use-payment-session-mutation.d.ts.map +1 -0
  344. package/dist/hooks/use-payment-session-mutation.js +38 -0
  345. package/dist/hooks/use-payment-sessions.d.ts +97 -0
  346. package/dist/hooks/use-payment-sessions.d.ts.map +1 -0
  347. package/dist/hooks/use-payment-sessions.js +17 -0
  348. package/dist/hooks/use-payment.d.ts +31 -0
  349. package/dist/hooks/use-payment.d.ts.map +1 -0
  350. package/dist/hooks/use-payment.js +12 -0
  351. package/dist/hooks/use-product-profitability.d.ts +52 -0
  352. package/dist/hooks/use-product-profitability.d.ts.map +1 -0
  353. package/dist/hooks/use-product-profitability.js +12 -0
  354. package/dist/hooks/use-public-booking-documents.d.ts +29 -0
  355. package/dist/hooks/use-public-booking-documents.d.ts.map +1 -0
  356. package/dist/hooks/use-public-booking-documents.js +12 -0
  357. package/dist/hooks/use-public-booking-payment-options.d.ts +47 -0
  358. package/dist/hooks/use-public-booking-payment-options.d.ts.map +1 -0
  359. package/dist/hooks/use-public-booking-payment-options.js +12 -0
  360. package/dist/hooks/use-public-booking-payments.d.ts +24 -0
  361. package/dist/hooks/use-public-booking-payments.d.ts.map +1 -0
  362. package/dist/hooks/use-public-booking-payments.js +12 -0
  363. package/dist/hooks/use-public-finance-document-by-reference.d.ts +27 -0
  364. package/dist/hooks/use-public-finance-document-by-reference.d.ts.map +1 -0
  365. package/dist/hooks/use-public-finance-document-by-reference.js +12 -0
  366. package/dist/hooks/use-public-payment-session-mutation.d.ts +82 -0
  367. package/dist/hooks/use-public-payment-session-mutation.d.ts.map +1 -0
  368. package/dist/hooks/use-public-payment-session-mutation.js +33 -0
  369. package/dist/hooks/use-public-payment-session.d.ts +73 -0
  370. package/dist/hooks/use-public-payment-session.d.ts.map +1 -0
  371. package/dist/hooks/use-public-payment-session.js +12 -0
  372. package/dist/hooks/use-public-voucher-validation-mutation.d.ts +23 -0
  373. package/dist/hooks/use-public-voucher-validation-mutation.d.ts.map +1 -0
  374. package/dist/hooks/use-public-voucher-validation-mutation.js +17 -0
  375. package/dist/hooks/use-supplier-invoice-attachments.d.ts +17 -0
  376. package/dist/hooks/use-supplier-invoice-attachments.d.ts.map +1 -0
  377. package/dist/hooks/use-supplier-invoice-attachments.js +12 -0
  378. package/dist/hooks/use-supplier-invoice-mutation.d.ts +353 -0
  379. package/dist/hooks/use-supplier-invoice-mutation.d.ts.map +1 -0
  380. package/dist/hooks/use-supplier-invoice-mutation.js +81 -0
  381. package/dist/hooks/use-supplier-invoice-payments.d.ts +26 -0
  382. package/dist/hooks/use-supplier-invoice-payments.d.ts.map +1 -0
  383. package/dist/hooks/use-supplier-invoice-payments.js +12 -0
  384. package/dist/hooks/use-supplier-invoice.d.ts +65 -0
  385. package/dist/hooks/use-supplier-invoice.d.ts.map +1 -0
  386. package/dist/hooks/use-supplier-invoice.js +12 -0
  387. package/dist/hooks/use-supplier-invoices.d.ts +36 -0
  388. package/dist/hooks/use-supplier-invoices.d.ts.map +1 -0
  389. package/dist/hooks/use-supplier-invoices.js +12 -0
  390. package/dist/hooks/use-supplier-payment-mutation.d.ts +55 -0
  391. package/dist/hooks/use-supplier-payment-mutation.d.ts.map +1 -0
  392. package/dist/hooks/use-supplier-payment-mutation.js +35 -0
  393. package/dist/hooks/use-supplier-payments.d.ts +27 -0
  394. package/dist/hooks/use-supplier-payments.d.ts.map +1 -0
  395. package/dist/hooks/use-supplier-payments.js +12 -0
  396. package/dist/hooks/use-traveler-profitability.d.ts +24 -0
  397. package/dist/hooks/use-traveler-profitability.d.ts.map +1 -0
  398. package/dist/hooks/use-traveler-profitability.js +11 -0
  399. package/dist/hooks/use-voucher-mutation.d.ts +105 -0
  400. package/dist/hooks/use-voucher-mutation.d.ts.map +1 -0
  401. package/dist/hooks/use-voucher-mutation.js +50 -0
  402. package/dist/hooks/use-voucher.d.ts +38 -0
  403. package/dist/hooks/use-voucher.d.ts.map +1 -0
  404. package/dist/hooks/use-voucher.js +17 -0
  405. package/dist/hooks/use-vouchers.d.ts +34 -0
  406. package/dist/hooks/use-vouchers.d.ts.map +1 -0
  407. package/dist/hooks/use-vouchers.js +18 -0
  408. package/dist/i18n/en/invoices.d.ts +278 -0
  409. package/dist/i18n/en/invoices.d.ts.map +1 -0
  410. package/dist/i18n/en/invoices.js +277 -0
  411. package/dist/i18n/en/numberingAndPayments.d.ts +387 -0
  412. package/dist/i18n/en/numberingAndPayments.d.ts.map +1 -0
  413. package/dist/i18n/en/numberingAndPayments.js +386 -0
  414. package/dist/i18n/en/profitability.d.ts +147 -0
  415. package/dist/i18n/en/profitability.d.ts.map +1 -0
  416. package/dist/i18n/en/profitability.js +146 -0
  417. package/dist/i18n/en/suppliers.d.ts +187 -0
  418. package/dist/i18n/en/suppliers.d.ts.map +1 -0
  419. package/dist/i18n/en/suppliers.js +186 -0
  420. package/dist/i18n/en.d.ts +998 -0
  421. package/dist/i18n/en.d.ts.map +1 -0
  422. package/dist/i18n/en.js +22 -0
  423. package/dist/i18n/index.d.ts +5 -0
  424. package/dist/i18n/index.d.ts.map +1 -0
  425. package/dist/i18n/index.js +3 -0
  426. package/dist/i18n/messages/core.d.ts +18 -0
  427. package/dist/i18n/messages/core.d.ts.map +1 -0
  428. package/dist/i18n/messages/core.js +30 -0
  429. package/dist/i18n/messages/invoices.d.ts +252 -0
  430. package/dist/i18n/messages/invoices.d.ts.map +1 -0
  431. package/dist/i18n/messages/invoices.js +1 -0
  432. package/dist/i18n/messages/numberingAndPayments.d.ts +277 -0
  433. package/dist/i18n/messages/numberingAndPayments.d.ts.map +1 -0
  434. package/dist/i18n/messages/numberingAndPayments.js +1 -0
  435. package/dist/i18n/messages/profitability.d.ts +151 -0
  436. package/dist/i18n/messages/profitability.d.ts.map +1 -0
  437. package/dist/i18n/messages/profitability.js +1 -0
  438. package/dist/i18n/messages/suppliers.d.ts +167 -0
  439. package/dist/i18n/messages/suppliers.d.ts.map +1 -0
  440. package/dist/i18n/messages/suppliers.js +1 -0
  441. package/dist/i18n/messages.d.ts +29 -0
  442. package/dist/i18n/messages.d.ts.map +1 -0
  443. package/dist/i18n/messages.js +1 -0
  444. package/dist/i18n/provider.d.ts +2018 -0
  445. package/dist/i18n/provider.d.ts.map +1 -0
  446. package/dist/i18n/provider.js +44 -0
  447. package/dist/i18n/ro/invoices.d.ts +278 -0
  448. package/dist/i18n/ro/invoices.d.ts.map +1 -0
  449. package/dist/i18n/ro/invoices.js +277 -0
  450. package/dist/i18n/ro/numberingAndPayments.d.ts +387 -0
  451. package/dist/i18n/ro/numberingAndPayments.d.ts.map +1 -0
  452. package/dist/i18n/ro/numberingAndPayments.js +386 -0
  453. package/dist/i18n/ro/profitability.d.ts +147 -0
  454. package/dist/i18n/ro/profitability.d.ts.map +1 -0
  455. package/dist/i18n/ro/profitability.js +146 -0
  456. package/dist/i18n/ro/suppliers.d.ts +187 -0
  457. package/dist/i18n/ro/suppliers.d.ts.map +1 -0
  458. package/dist/i18n/ro/suppliers.js +186 -0
  459. package/dist/i18n/ro.d.ts +998 -0
  460. package/dist/i18n/ro.d.ts.map +1 -0
  461. package/dist/i18n/ro.js +22 -0
  462. package/dist/index.d.ts +11 -0
  463. package/dist/index.d.ts.map +1 -0
  464. package/dist/index.js +9 -0
  465. package/dist/operations.d.ts +484 -0
  466. package/dist/operations.d.ts.map +1 -0
  467. package/dist/operations.js +52 -0
  468. package/dist/provider.d.ts +2 -0
  469. package/dist/provider.d.ts.map +1 -0
  470. package/dist/provider.js +1 -0
  471. package/dist/query-keys.d.ts +195 -0
  472. package/dist/query-keys.d.ts.map +1 -0
  473. package/dist/query-keys.js +49 -0
  474. package/dist/query-options/public-reporting.d.ts +2129 -0
  475. package/dist/query-options/public-reporting.d.ts.map +1 -0
  476. package/dist/query-options/public-reporting.js +193 -0
  477. package/dist/query-options-action-ledger.d.ts +382 -0
  478. package/dist/query-options-action-ledger.d.ts.map +1 -0
  479. package/dist/query-options-action-ledger.js +36 -0
  480. package/dist/query-options.d.ts +2057 -0
  481. package/dist/query-options.d.ts.map +1 -0
  482. package/dist/query-options.js +328 -0
  483. package/dist/schemas/accountant.d.ts +168 -0
  484. package/dist/schemas/accountant.d.ts.map +1 -0
  485. package/dist/schemas/accountant.js +53 -0
  486. package/dist/schemas/action-ledger.d.ts +206 -0
  487. package/dist/schemas/action-ledger.d.ts.map +1 -0
  488. package/dist/schemas/action-ledger.js +83 -0
  489. package/dist/schemas/common.d.ts +17 -0
  490. package/dist/schemas/common.d.ts.map +1 -0
  491. package/dist/schemas/common.js +10 -0
  492. package/dist/schemas/invoice.d.ts +1451 -0
  493. package/dist/schemas/invoice.d.ts.map +1 -0
  494. package/dist/schemas/invoice.js +438 -0
  495. package/dist/schemas/profitability.d.ts +333 -0
  496. package/dist/schemas/profitability.d.ts.map +1 -0
  497. package/dist/schemas/profitability.js +84 -0
  498. package/dist/schemas/public.d.ts +481 -0
  499. package/dist/schemas/public.d.ts.map +1 -0
  500. package/dist/schemas/public.js +9 -0
  501. package/dist/schemas/responses.d.ts +632 -0
  502. package/dist/schemas/responses.d.ts.map +1 -0
  503. package/dist/schemas/responses.js +27 -0
  504. package/dist/schemas/supplier.d.ts +226 -0
  505. package/dist/schemas/supplier.d.ts.map +1 -0
  506. package/dist/schemas/supplier.js +103 -0
  507. package/dist/schemas/vouchers.d.ts +283 -0
  508. package/dist/schemas/vouchers.d.ts.map +1 -0
  509. package/dist/schemas/vouchers.js +49 -0
  510. package/dist/schemas.d.ts +10 -0
  511. package/dist/schemas.d.ts.map +1 -0
  512. package/dist/schemas.js +9 -0
  513. package/dist/ui.d.ts +27 -0
  514. package/dist/ui.d.ts.map +1 -0
  515. package/dist/ui.js +26 -0
  516. package/package.json +181 -0
  517. package/src/styles.css +12 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Layout-matched placeholder for InvoiceDetailHost.
3
+ * - Back + invoice number + status pill + edit/delete
4
+ * - InvoiceInfoCards: 3-column summary row (Overview / Totals / Booking)
5
+ * - Line items card (full width)
6
+ * - Payments card (full width)
7
+ * - Credit notes card (full width)
8
+ * - Notes card (composer + list)
9
+ */
10
+ export declare function InvoiceDetailSkeleton(): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=invoice-detail-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-detail-skeleton.d.ts","sourceRoot":"","sources":["../../src/admin/invoice-detail-skeleton.tsx"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,4CAkBpC"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card, CardContent, CardHeader } from "@voyant-travel/ui/components/card";
3
+ import { Skeleton } from "@voyant-travel/ui/components/skeleton";
4
+ /**
5
+ * Layout-matched placeholder for InvoiceDetailHost.
6
+ * - Back + invoice number + status pill + edit/delete
7
+ * - InvoiceInfoCards: 3-column summary row (Overview / Totals / Booking)
8
+ * - Line items card (full width)
9
+ * - Payments card (full width)
10
+ * - Credit notes card (full width)
11
+ * - Notes card (composer + list)
12
+ */
13
+ export function InvoiceDetailSkeleton() {
14
+ return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsx(Header, {}), _jsxs("div", { className: "grid gap-4 md:grid-cols-3", children: [_jsx(InfoCard, { titleWidth: "w-20", rows: 4 }), _jsx(InfoCard, { titleWidth: "w-16", rows: 4 }), _jsx(InfoCard, { titleWidth: "w-20", rows: 3 })] }), _jsx(LineItemsCard, {}), _jsx(PaymentsCard, {}), _jsx(CreditNotesCard, {}), _jsx(NotesCard, {})] }));
15
+ }
16
+ function Header() {
17
+ return (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx(Skeleton, { className: "h-9 w-9 rounded-md" }), _jsxs("div", { className: "flex-1 space-y-2", children: [_jsx(Skeleton, { className: "h-7 w-48" }), _jsx(Skeleton, { className: "h-5 w-20 rounded-full" })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Skeleton, { className: "h-9 w-20" }), _jsx(Skeleton, { className: "h-9 w-24" })] })] }));
18
+ }
19
+ function InfoCard({ titleWidth, rows }) {
20
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(Skeleton, { className: `h-5 ${titleWidth}` }) }), _jsx(CardContent, { className: "space-y-3", children: Array.from({ length: rows }).map((_, i) => (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Skeleton, { className: "h-3.5 w-20" }), _jsx(Skeleton, { className: "h-3.5 w-24" })] }, i))) })] }));
21
+ }
22
+ function LineItemsCard() {
23
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between", children: [_jsx(Skeleton, { className: "h-5 w-24" }), _jsx(Skeleton, { className: "h-8 w-28" })] }), _jsx(CardContent, { children: _jsx("div", { className: "space-y-0 divide-y rounded-md border", children: Array.from({ length: 3 }).map((_, i) => (_jsxs("div", { className: "flex items-center gap-4 px-4 py-3", children: [_jsxs("div", { className: "flex-1 space-y-1.5", children: [_jsx(Skeleton, { className: "h-4 w-2/3" }), _jsx(Skeleton, { className: "h-3 w-20" })] }), _jsx(Skeleton, { className: "h-4 w-8" }), _jsx(Skeleton, { className: "h-4 w-20" }), _jsx(Skeleton, { className: "h-4 w-24" }), _jsx(Skeleton, { className: "h-8 w-8 rounded" })] }, i))) }) })] }));
24
+ }
25
+ function PaymentsCard() {
26
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between", children: [_jsx(Skeleton, { className: "h-5 w-24" }), _jsx(Skeleton, { className: "h-8 w-28" })] }), _jsx(CardContent, { className: "space-y-2", children: Array.from({ length: 2 }).map((_, i) => (_jsxs("div", { className: "flex items-center justify-between rounded-md border px-3 py-3", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx(Skeleton, { className: "h-4 w-32" }), _jsx(Skeleton, { className: "h-3 w-40" })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Skeleton, { className: "h-4 w-20" }), _jsx(Skeleton, { className: "h-5 w-16 rounded-full" })] })] }, i))) })] }));
27
+ }
28
+ function CreditNotesCard() {
29
+ return (_jsxs(Card, { children: [_jsxs(CardHeader, { className: "flex flex-row items-center justify-between", children: [_jsx(Skeleton, { className: "h-5 w-28" }), _jsx(Skeleton, { className: "h-8 w-32" })] }), _jsx(CardContent, { children: _jsx(Skeleton, { className: "h-10 w-full" }) })] }));
30
+ }
31
+ function NotesCard() {
32
+ return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(Skeleton, { className: "h-5 w-16" }) }), _jsxs(CardContent, { className: "space-y-3", children: [_jsx(Skeleton, { className: "h-20 w-full" }), _jsx("div", { className: "space-y-2", children: Array.from({ length: 2 }).map((_, i) => (_jsxs("div", { className: "rounded-md border px-3 py-3 space-y-2", children: [_jsx(Skeleton, { className: "h-4 w-full" }), _jsx(Skeleton, { className: "h-3 w-32" })] }, i))) })] })] }));
33
+ }
@@ -0,0 +1,10 @@
1
+ import { type LineItemRecord } from "../index.js";
2
+ export interface LineItemDialogProps {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ invoiceId: string;
6
+ lineItem?: LineItemRecord;
7
+ onSuccess?: (lineItem: LineItemRecord) => void;
8
+ }
9
+ export declare function LineItemDialog({ open, onOpenChange, invoiceId, lineItem, onSuccess, }: LineItemDialogProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=line-item-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-item-dialog.d.ts","sourceRoot":"","sources":["../../src/admin/line-item-dialog.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,cAAc,EAA8B,MAAM,aAAa,CAAA;AAgB7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAA;CAC/C;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE,mBAAmB,2CAqJrB"}
@@ -0,0 +1,91 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useOperatorAdminMessages } from "@voyant-travel/admin";
4
+ import { Button, Dialog, DialogBody, DialogContent, DialogFooter, DialogHeader, DialogTitle, Input, Label, } from "@voyant-travel/ui/components";
5
+ import { zodResolver } from "@voyant-travel/ui/lib/zod-resolver";
6
+ import { Loader2 } from "lucide-react";
7
+ import { useEffect, useMemo, useState } from "react";
8
+ import { useForm } from "react-hook-form";
9
+ import { z } from "zod/v4";
10
+ import { useInvoiceLineItemMutation } from "../index.js";
11
+ function getLineItemFormSchema(messages) {
12
+ return z.object({
13
+ description: z.string().min(1, messages.finance.lineItemDialog.validationDescriptionRequired),
14
+ quantity: z.coerce.number().int().min(1).default(1),
15
+ unitPriceCents: z.coerce.number().int().min(0),
16
+ totalCents: z.coerce.number().int().min(0),
17
+ taxRate: z.coerce.number().int().min(0).optional().or(z.literal("")).nullable(),
18
+ sortOrder: z.coerce.number().int().min(0).default(0),
19
+ });
20
+ }
21
+ export function LineItemDialog({ open, onOpenChange, invoiceId, lineItem, onSuccess, }) {
22
+ const messages = useOperatorAdminMessages();
23
+ const isEditing = Boolean(lineItem);
24
+ const { create, update } = useInvoiceLineItemMutation(invoiceId);
25
+ const lineItemFormSchema = useMemo(() => getLineItemFormSchema(messages), [messages]);
26
+ const [submitError, setSubmitError] = useState(null);
27
+ const form = useForm({
28
+ resolver: zodResolver(lineItemFormSchema),
29
+ defaultValues: {
30
+ description: "",
31
+ quantity: 1,
32
+ unitPriceCents: 0,
33
+ totalCents: 0,
34
+ taxRate: "",
35
+ sortOrder: 0,
36
+ },
37
+ });
38
+ useEffect(() => {
39
+ if (open && lineItem) {
40
+ form.reset({
41
+ description: lineItem.description,
42
+ quantity: lineItem.quantity,
43
+ unitPriceCents: lineItem.unitPriceCents,
44
+ totalCents: lineItem.totalCents,
45
+ taxRate: lineItem.taxRate ?? "",
46
+ sortOrder: lineItem.sortOrder,
47
+ });
48
+ }
49
+ else if (open) {
50
+ form.reset({
51
+ description: "",
52
+ quantity: 1,
53
+ unitPriceCents: 0,
54
+ totalCents: 0,
55
+ taxRate: "",
56
+ sortOrder: 0,
57
+ });
58
+ }
59
+ }, [open, lineItem, form]);
60
+ const onSubmit = async (values) => {
61
+ setSubmitError(null);
62
+ const payload = {
63
+ description: values.description,
64
+ quantity: values.quantity,
65
+ unitPriceCents: values.unitPriceCents,
66
+ totalCents: values.totalCents,
67
+ taxRate: values.taxRate !== "" && values.taxRate != null && typeof values.taxRate === "number"
68
+ ? values.taxRate
69
+ : null,
70
+ sortOrder: values.sortOrder,
71
+ };
72
+ let saved;
73
+ try {
74
+ saved = isEditing
75
+ ? await update.mutateAsync({ id: lineItem.id, input: payload })
76
+ : await create.mutateAsync(payload);
77
+ }
78
+ catch (error) {
79
+ setSubmitError(error instanceof Error ? error.message : messages.finance.lineItemDialog.saveFailed);
80
+ return;
81
+ }
82
+ onOpenChange(false);
83
+ onSuccess?.(saved);
84
+ };
85
+ const isSubmitting = create.isPending || update.isPending;
86
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing
87
+ ? messages.finance.lineItemDialog.editTitle
88
+ : messages.finance.lineItemDialog.newTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(DialogBody, { className: "grid gap-4", children: [submitError ? (_jsx("div", { className: "rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-destructive text-sm", children: submitError })) : null, _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: messages.finance.lineItemDialog.descriptionLabel }), _jsx(Input, { ...form.register("description"), placeholder: messages.finance.lineItemDialog.descriptionPlaceholder }), form.formState.errors.description ? (_jsx("p", { className: "text-xs text-destructive", children: form.formState.errors.description.message })) : null] }), _jsxs("div", { className: "grid grid-cols-3 gap-4", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: messages.finance.lineItemDialog.quantityLabel }), _jsx(Input, { ...form.register("quantity"), type: "number", min: "1" })] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: messages.finance.lineItemDialog.unitPriceLabel }), _jsx(Input, { ...form.register("unitPriceCents"), type: "number", min: "0" })] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: messages.finance.lineItemDialog.totalLabel }), _jsx(Input, { ...form.register("totalCents"), type: "number", min: "0" })] })] }), _jsxs("div", { className: "grid grid-cols-2 gap-4", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: messages.finance.lineItemDialog.taxRateLabel }), _jsx(Input, { ...form.register("taxRate"), type: "number", min: "0", placeholder: messages.finance.lineItemDialog.taxRatePlaceholder })] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: messages.finance.lineItemDialog.sortOrderLabel }), _jsx(Input, { ...form.register("sortOrder"), type: "number", min: "0" })] })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: messages.finance.lineItemDialog.cancel }), _jsxs(Button, { type: "submit", disabled: isSubmitting, children: [isSubmitting ? _jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : null, isEditing
89
+ ? messages.finance.lineItemDialog.saveChanges
90
+ : messages.finance.lineItemDialog.createLineItem] })] })] })] }) }));
91
+ }
@@ -0,0 +1,8 @@
1
+ import type { AdminRoutePageProps } from "@voyant-travel/admin";
2
+ /**
3
+ * Packaged route page for the invoice detail (route contribution
4
+ * `finance-invoices-detail`): binds the matched `$id` path param onto
5
+ * {@link InvoiceDetailHost}, which owns the operator-grade detail page.
6
+ */
7
+ export default function FinanceInvoiceDetailRoutePage({ params }: AdminRoutePageProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=invoice-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-detail.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/invoice-detail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAI/D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,6BAA6B,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAEpF"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { InvoiceDetailHost } from "../invoice-detail-host.js";
4
+ /**
5
+ * Packaged route page for the invoice detail (route contribution
6
+ * `finance-invoices-detail`): binds the matched `$id` path param onto
7
+ * {@link InvoiceDetailHost}, which owns the operator-grade detail page.
8
+ */
9
+ export default function FinanceInvoiceDetailRoutePage({ params }) {
10
+ return _jsx(InvoiceDetailHost, { id: params.id ?? "" });
11
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Packaged route page for the invoices list (route contribution
3
+ * `finance-invoices-index`). Row activation resolves through the shared
4
+ * `invoice.detail` semantic destination (packaged-admin RFC §4.7), so the
5
+ * page stays host-agnostic — no router import, no route file in the host.
6
+ */
7
+ export default function FinanceInvoicesIndexRoutePage(): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=invoices-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices-index.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/invoices-index.tsx"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,6BAA6B,4CAIpD"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useAdminNavigate } from "@voyant-travel/admin";
4
+ import { InvoicesPage } from "../../components/invoices-page.js";
5
+ /**
6
+ * Packaged route page for the invoices list (route contribution
7
+ * `finance-invoices-index`). Row activation resolves through the shared
8
+ * `invoice.detail` semantic destination (packaged-admin RFC §4.7), so the
9
+ * page stays host-agnostic — no router import, no route file in the host.
10
+ */
11
+ export default function FinanceInvoicesIndexRoutePage() {
12
+ const navigateTo = useAdminNavigate();
13
+ return _jsx(InvoicesPage, { onOpenInvoice: (id) => navigateTo("invoice.detail", { invoiceId: id }) });
14
+ }
@@ -0,0 +1,8 @@
1
+ import type { AdminRoutePageProps } from "@voyant-travel/admin";
2
+ /**
3
+ * Packaged route page for the payment detail (route contribution
4
+ * `finance-payments-detail`): binds the matched `$id` path param onto
5
+ * {@link PaymentDetailHost}, which owns the operator-grade detail page.
6
+ */
7
+ export default function FinancePaymentDetailRoutePage({ params }: AdminRoutePageProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=payment-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-detail.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/payment-detail.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAI/D;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,6BAA6B,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CAEpF"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { PaymentDetailHost } from "../payment-detail-host.js";
4
+ /**
5
+ * Packaged route page for the payment detail (route contribution
6
+ * `finance-payments-detail`): binds the matched `$id` path param onto
7
+ * {@link PaymentDetailHost}, which owns the operator-grade detail page.
8
+ */
9
+ export default function FinancePaymentDetailRoutePage({ params }) {
10
+ return _jsx(PaymentDetailHost, { id: params.id ?? "" });
11
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Packaged route page for the payments list (route contribution
3
+ * `finance-payments-index`). Owns the supplier-filter search state (the
4
+ * supplier combobox options come from `@voyant-travel/distribution-react/suppliers`), renders
5
+ * the record-payment dialog, and resolves row activation through the shared
6
+ * `payment.detail` semantic destination (packaged-admin RFC §4.7).
7
+ */
8
+ export default function FinancePaymentsIndexRoutePage(): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=payments-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payments-index.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/payments-index.tsx"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,6BAA6B,4CAcpD"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useAdminNavigate } from "@voyant-travel/admin";
4
+ import { useSuppliers } from "@voyant-travel/distribution-react/suppliers";
5
+ import { useState } from "react";
6
+ import { PaymentsPage } from "../../components/payments-page.js";
7
+ import { RecordPaymentDialog } from "../record-payment-dialog.js";
8
+ /**
9
+ * Packaged route page for the payments list (route contribution
10
+ * `finance-payments-index`). Owns the supplier-filter search state (the
11
+ * supplier combobox options come from `@voyant-travel/distribution-react/suppliers`), renders
12
+ * the record-payment dialog, and resolves row activation through the shared
13
+ * `payment.detail` semantic destination (packaged-admin RFC §4.7).
14
+ */
15
+ export default function FinancePaymentsIndexRoutePage() {
16
+ const navigateTo = useAdminNavigate();
17
+ const [supplierSearch, setSupplierSearch] = useState("");
18
+ const suppliersQuery = useSuppliers({ search: supplierSearch || undefined, limit: 20 });
19
+ const supplierOptions = suppliersQuery.data?.data ?? [];
20
+ return (_jsx(PaymentsPage, { supplierOptions: supplierOptions, onSupplierSearchChange: setSupplierSearch, onOpenPayment: (id) => navigateTo("payment.detail", { paymentId: id }), renderRecordPaymentDialog: (props) => _jsx(RecordPaymentDialog, { ...props }) }));
21
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Packaged route page for the profitability report (route contribution
3
+ * `finance-profitability`). CSV export links resolve their API origin from
4
+ * the shared finance provider context (`useVoyantFinanceContext`) — the same
5
+ * `baseUrl` every data hook in this package reads — so the page needs no
6
+ * app-supplied URL prop. Exports open in a new tab (browser-only; guarded
7
+ * for SSR render passes).
8
+ */
9
+ export default function FinanceProfitabilityRoutePage(): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=profitability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profitability.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/profitability.tsx"],"names":[],"mappings":"AAsBA;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,6BAA6B,4CAepD"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useAdminBreadcrumbs } from "@voyant-travel/admin";
4
+ import { ProfitabilityPage, } from "../../components/profitability-page.js";
5
+ import { useVoyantFinanceContext } from "../../provider.js";
6
+ function exportUrl(baseUrl, kind, filters) {
7
+ const params = new URLSearchParams();
8
+ if (filters.from)
9
+ params.set("from", filters.from);
10
+ if (filters.to)
11
+ params.set("to", filters.to);
12
+ const qs = params.toString();
13
+ return `${baseUrl}/v1/admin/finance/reports/profitability/${kind}/export${qs ? `?${qs}` : ""}`;
14
+ }
15
+ /**
16
+ * Packaged route page for the profitability report (route contribution
17
+ * `finance-profitability`). CSV export links resolve their API origin from
18
+ * the shared finance provider context (`useVoyantFinanceContext`) — the same
19
+ * `baseUrl` every data hook in this package reads — so the page needs no
20
+ * app-supplied URL prop. Exports open in a new tab (browser-only; guarded
21
+ * for SSR render passes).
22
+ */
23
+ export default function FinanceProfitabilityRoutePage() {
24
+ useAdminBreadcrumbs([{ label: "Profitability" }]);
25
+ const { baseUrl } = useVoyantFinanceContext();
26
+ const openExport = (kind, filters) => {
27
+ if (typeof window === "undefined")
28
+ return;
29
+ window.open(exportUrl(baseUrl, kind, filters), "_blank", "noopener,noreferrer");
30
+ };
31
+ return (_jsx(ProfitabilityPage, { onExportDepartures: (filters) => openExport("departures", filters), onExportProducts: (filters) => openExport("products", filters) }));
32
+ }
@@ -0,0 +1,20 @@
1
+ import { type AdminRoutePageProps } from "@voyant-travel/admin";
2
+ /**
3
+ * Packaged route page for the supplier-invoice detail: binds the matched
4
+ * `$id` param onto {@link SupplierInvoiceDetailPage} and carries the wiring
5
+ * the operator route file used to hand-supply —
6
+ *
7
+ * - attachment uploads post to the starter-level `/v1/uploads` route
8
+ * through the shared finance provider context (`baseUrl` + credentialed
9
+ * fetcher), the same path `BookingInvoicesWidget` uses;
10
+ * - the allocation dialog's cross-domain target search composes the
11
+ * bookings / products / availability packages' own query options through
12
+ * that same context client;
13
+ * - the supplier picker (search + inline create) rides the suppliers
14
+ * package's client — see {@link useSupplierPicker};
15
+ * - document/attachment downloads and the back/breadcrumb links resolve
16
+ * through the finance API origin and the `supplierInvoice.list`
17
+ * destination.
18
+ */
19
+ export default function SupplierInvoiceDetailRoutePage({ params }: AdminRoutePageProps): import("react/jsx-runtime").JSX.Element;
20
+ //# sourceMappingURL=supplier-invoice-detail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supplier-invoice-detail.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/supplier-invoice-detail.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,sBAAsB,CAAA;AAqB7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,2CA2GrF"}
@@ -0,0 +1,102 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useQueryClient } from "@tanstack/react-query";
4
+ import { useAdminBreadcrumbs, useAdminHref, useAdminNavigate, } from "@voyant-travel/admin";
5
+ import { getBookingsQueryOptions } from "@voyant-travel/bookings-react";
6
+ import { getProductsQueryOptions } from "@voyant-travel/inventory-react";
7
+ import { getSlotsQueryOptions } from "@voyant-travel/operations-react/availability";
8
+ import { SupplierInvoiceDetailPage, } from "../../components/supplier-invoice-detail-page.js";
9
+ import { useSupplierInvoice } from "../../hooks/use-supplier-invoice.js";
10
+ import { useFinanceUiMessagesOrDefault } from "../../i18n/index.js";
11
+ import { useVoyantFinanceContext } from "../../provider.js";
12
+ import { useSupplierPicker } from "../use-supplier-picker.js";
13
+ /** New-tab open for download endpoints. No-op during SSR render passes. */
14
+ function openInNewTab(url) {
15
+ if (typeof window === "undefined")
16
+ return;
17
+ window.open(url, "_blank", "noopener,noreferrer");
18
+ }
19
+ /**
20
+ * Packaged route page for the supplier-invoice detail: binds the matched
21
+ * `$id` param onto {@link SupplierInvoiceDetailPage} and carries the wiring
22
+ * the operator route file used to hand-supply —
23
+ *
24
+ * - attachment uploads post to the starter-level `/v1/uploads` route
25
+ * through the shared finance provider context (`baseUrl` + credentialed
26
+ * fetcher), the same path `BookingInvoicesWidget` uses;
27
+ * - the allocation dialog's cross-domain target search composes the
28
+ * bookings / products / availability packages' own query options through
29
+ * that same context client;
30
+ * - the supplier picker (search + inline create) rides the suppliers
31
+ * package's client — see {@link useSupplierPicker};
32
+ * - document/attachment downloads and the back/breadcrumb links resolve
33
+ * through the finance API origin and the `supplierInvoice.list`
34
+ * destination.
35
+ */
36
+ export default function SupplierInvoiceDetailRoutePage({ params }) {
37
+ const id = params.id ?? "";
38
+ const navigateTo = useAdminNavigate();
39
+ const resolveHref = useAdminHref();
40
+ const queryClient = useQueryClient();
41
+ const { baseUrl, fetcher } = useVoyantFinanceContext();
42
+ const messages = useFinanceUiMessagesOrDefault().supplierInvoiceDetail;
43
+ const { data } = useSupplierInvoice(id);
44
+ const invoiceNo = data?.data?.supplierInvoiceNo;
45
+ useAdminBreadcrumbs([
46
+ { label: messages.breadcrumbRoot, href: resolveHref("supplierInvoice.list", {}) },
47
+ ...(invoiceNo ? [{ label: invoiceNo }] : []),
48
+ ]);
49
+ const client = { baseUrl, fetcher };
50
+ const uploadAttachment = async (file) => {
51
+ const body = new FormData();
52
+ body.append("file", file);
53
+ const response = await fetcher(`${baseUrl}/v1/uploads`, { method: "POST", body });
54
+ if (!response.ok) {
55
+ throw new Error(`Upload failed: ${response.status} ${response.statusText}`);
56
+ }
57
+ const uploaded = (await response.json());
58
+ return {
59
+ storageKey: uploaded.key,
60
+ mimeType: uploaded.mimeType ?? file.type,
61
+ fileSize: uploaded.size ?? file.size,
62
+ };
63
+ };
64
+ const searchTargets = async (targetType, query) => {
65
+ if (targetType === "product") {
66
+ const result = await queryClient.fetchQuery(getProductsQueryOptions(client, { search: query || undefined, limit: 20 }));
67
+ return result.data.map((product) => ({
68
+ value: product.id,
69
+ label: `${product.name} (${product.id})`,
70
+ }));
71
+ }
72
+ if (targetType === "booking") {
73
+ const result = await queryClient.fetchQuery(getBookingsQueryOptions(client, { search: query || undefined, limit: 20 }));
74
+ return result.data.map((booking) => ({
75
+ value: booking.id,
76
+ label: `${booking.bookingNumber} (${booking.id})`,
77
+ }));
78
+ }
79
+ if (targetType === "departure") {
80
+ // Product-centric: search products by name, then list each product's
81
+ // departures (slots). Label "<product> · <date>".
82
+ const products = await queryClient.fetchQuery(getProductsQueryOptions(client, { search: query || undefined, limit: 6 }));
83
+ const nameById = new Map(products.data.map((product) => [product.id, product.name]));
84
+ const slotLists = await Promise.all(products.data.map((product) => queryClient.fetchQuery(getSlotsQueryOptions(client, { productId: product.id, limit: 10 }))));
85
+ return slotLists.flatMap((result) => result.data.map((slot) => ({
86
+ value: slot.id,
87
+ label: `${nameById.get(slot.productId) ?? slot.productId} · ${slot.dateLocal}`,
88
+ })));
89
+ }
90
+ return [];
91
+ };
92
+ // Two-step departure picker: list a chosen product's departures (slots).
93
+ const listDeparturesForProduct = async (productId, query) => {
94
+ const result = await queryClient.fetchQuery(getSlotsQueryOptions(client, { productId, limit: 50 }));
95
+ const normalized = query.trim().toLowerCase();
96
+ return result.data
97
+ .filter((slot) => !normalized || slot.dateLocal.toLowerCase().includes(normalized))
98
+ .map((slot) => ({ value: slot.id, label: slot.dateLocal }));
99
+ };
100
+ const { searchSuppliers, createSupplier } = useSupplierPicker();
101
+ return (_jsx(SupplierInvoiceDetailPage, { id: id, onBack: () => navigateTo("supplierInvoice.list", {}), onDownloadDocument: () => openInNewTab(`${baseUrl}/v1/admin/finance/supplier-invoices/${id}/document/download`), uploadFile: uploadAttachment, searchTargets: searchTargets, listDeparturesForProduct: listDeparturesForProduct, searchSuppliers: searchSuppliers, createSupplier: createSupplier, onDownloadAttachment: (attachmentId) => openInNewTab(`${baseUrl}/v1/admin/finance/supplier-invoice-attachments/${attachmentId}/download`) }));
102
+ }
@@ -0,0 +1,9 @@
1
+ import { type AdminRoutePageProps } from "@voyant-travel/admin";
2
+ /**
3
+ * Packaged route page for the supplier-invoices list: opens rows through the
4
+ * `supplierInvoice.detail` destination and wires the create dialog's
5
+ * supplier picker (search + inline create) through the suppliers package's
6
+ * own client — see {@link useSupplierPicker}.
7
+ */
8
+ export default function SupplierInvoicesIndexPage(_props: AdminRoutePageProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=supplier-invoices-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supplier-invoices-index.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/supplier-invoices-index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAoB,MAAM,sBAAsB,CAAA;AAKjF;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,MAAM,EAAE,mBAAmB,2CAa5E"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useAdminNavigate } from "@voyant-travel/admin";
4
+ import { SupplierInvoicesPage } from "../../components/supplier-invoices-page.js";
5
+ import { useSupplierPicker } from "../use-supplier-picker.js";
6
+ /**
7
+ * Packaged route page for the supplier-invoices list: opens rows through the
8
+ * `supplierInvoice.detail` destination and wires the create dialog's
9
+ * supplier picker (search + inline create) through the suppliers package's
10
+ * own client — see {@link useSupplierPicker}.
11
+ */
12
+ export default function SupplierInvoicesIndexPage(_props) {
13
+ const navigateTo = useAdminNavigate();
14
+ const { searchSuppliers, createSupplier } = useSupplierPicker();
15
+ return (_jsx(SupplierInvoicesPage, { onOpenSupplierInvoice: (id) => navigateTo("supplierInvoice.detail", { supplierInvoiceId: id }), searchSuppliers: searchSuppliers, createSupplier: createSupplier }));
16
+ }
@@ -0,0 +1,12 @@
1
+ export interface PaymentDetailHostProps {
2
+ id: string;
3
+ }
4
+ /**
5
+ * Packaged admin host for the payment detail page (packaged-admin RFC
6
+ * Phase 3). Data access goes through `@voyant-travel/finance-react`; every
7
+ * cross-route link (`payment.list` back target, person/organization/
8
+ * invoice/supplier/booking links) resolves through semantic destinations,
9
+ * so the page imports no host route tree.
10
+ */
11
+ export declare function PaymentDetailHost({ id }: PaymentDetailHostProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=payment-detail-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-detail-host.d.ts","sourceRoot":"","sources":["../../src/admin/payment-detail-host.tsx"],"names":[],"mappings":"AAqGA,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,sBAAsB,2CAqN/D"}
@@ -0,0 +1,108 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useAdminHref, useAdminNavigate, useOperatorAdminMessages, } from "@voyant-travel/admin";
4
+ import { Badge, Button, Card, CardContent, CardHeader, CardTitle, } from "@voyant-travel/ui/components";
5
+ import { ArrowLeft, ExternalLink } from "lucide-react";
6
+ import { usePayment } from "../index.js";
7
+ import { formatAmount, paymentStatusVariant } from "./finance-shared.js";
8
+ import { PaymentDetailSkeleton } from "./payment-detail-skeleton.js";
9
+ function getStatusLabel(messages, status) {
10
+ switch (status) {
11
+ case "pending":
12
+ return messages.finance.paymentStatusPending;
13
+ case "completed":
14
+ return messages.finance.paymentStatusCompleted;
15
+ case "failed":
16
+ return messages.finance.paymentStatusFailed;
17
+ case "refunded":
18
+ return messages.finance.paymentStatusRefunded;
19
+ default:
20
+ return status.replace(/_/g, " ");
21
+ }
22
+ }
23
+ function getMethodLabel(messages, method) {
24
+ switch (method) {
25
+ case "bank_transfer":
26
+ return messages.finance.paymentMethodBankTransfer;
27
+ case "credit_card":
28
+ return messages.finance.paymentMethodCreditCard;
29
+ case "debit_card":
30
+ return messages.finance.paymentMethodDebitCard;
31
+ case "cash":
32
+ return messages.finance.paymentMethodCash;
33
+ case "cheque":
34
+ return messages.finance.paymentMethodCheque;
35
+ case "wallet":
36
+ return messages.finance.paymentMethodWallet;
37
+ case "direct_bill":
38
+ return messages.finance.paymentMethodDirectBill;
39
+ case "voucher":
40
+ return messages.finance.paymentMethodVoucher;
41
+ case "other":
42
+ return messages.finance.paymentMethodOther;
43
+ default:
44
+ return method.replace(/_/g, " ");
45
+ }
46
+ }
47
+ function getKindLabel(messages, kind) {
48
+ return kind === "customer" ? messages.finance.kindCustomer : messages.finance.kindSupplier;
49
+ }
50
+ /**
51
+ * Anchor that resolves a semantic destination (RFC §4.7) to an href and
52
+ * commits navigation through the host-injected router — keeps the page free
53
+ * of any host route-tree import while still rendering a real link.
54
+ */
55
+ function DestinationLink({ destination, params, children, }) {
56
+ const resolveHref = useAdminHref();
57
+ const navigateTo = useAdminNavigate();
58
+ return (_jsxs("a", { href: resolveHref(destination, params), onClick: (event) => {
59
+ event.preventDefault();
60
+ navigateTo(destination, params);
61
+ }, className: "inline-flex items-center gap-1 text-primary hover:underline", children: [children, _jsx(ExternalLink, { className: "size-3", "aria-hidden": true })] }));
62
+ }
63
+ /**
64
+ * Packaged admin host for the payment detail page (packaged-admin RFC
65
+ * Phase 3). Data access goes through `@voyant-travel/finance-react`; every
66
+ * cross-route link (`payment.list` back target, person/organization/
67
+ * invoice/supplier/booking links) resolves through semantic destinations,
68
+ * so the page imports no host route tree.
69
+ */
70
+ export function PaymentDetailHost({ id }) {
71
+ const messages = useOperatorAdminMessages();
72
+ const navigateTo = useAdminNavigate();
73
+ const { data, isPending, isError } = usePayment(id);
74
+ const f = messages.finance;
75
+ const detail = f.paymentDetail;
76
+ const noValue = f.detailSections.noValue;
77
+ if (isPending) {
78
+ return _jsx(PaymentDetailSkeleton, {});
79
+ }
80
+ if (isError || !data?.data) {
81
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-4 py-12", children: [_jsx("p", { className: "text-muted-foreground", children: isError ? detail.loadFailed : detail.notFound }), _jsx(Button, { variant: "outline", onClick: () => navigateTo("payment.list", {}), children: detail.backToPayments })] }));
82
+ }
83
+ const payment = data.data;
84
+ const fxRateLabel = formatFxRate(payment);
85
+ // Subtitle surfaces the related document (invoice / booking number) so an
86
+ // operator can recognise *what* this payment is for, but the page itself
87
+ // is identified by the payment id — that's the record on screen.
88
+ const relatedNumber = payment.kind === "customer" ? payment.invoiceNumber : payment.bookingNumber;
89
+ return (_jsxs("div", { className: "flex flex-col gap-6 p-6", children: [_jsxs("div", { className: "flex items-center gap-4", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: () => navigateTo("payment.list", {}), "aria-label": detail.backToPayments, children: _jsx(ArrowLeft, { className: "size-4" }) }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("h1", { className: "truncate font-mono text-lg font-semibold tracking-tight", children: payment.id }), _jsx(Badge, { variant: "outline", className: "capitalize", children: getKindLabel(messages, payment.kind) })] }), relatedNumber ? (_jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: relatedNumber })) : null] }), _jsx(Badge, { variant: paymentStatusVariant[payment.status] ?? "secondary", className: "capitalize", children: getStatusLabel(messages, payment.status) })] }), _jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: detail.summaryTitle }) }), _jsx(CardContent, { children: _jsxs("dl", { className: "grid gap-2 text-sm", children: [_jsx(Row, { label: detail.amountLabel, children: _jsx("span", { className: "font-mono", children: formatAmount(payment.amountCents, payment.currency) }) }), payment.baseAmountCents !== null && payment.baseCurrency ? (_jsx(Row, { label: detail.baseAmountLabel, children: _jsx("span", { className: "font-mono", children: formatAmount(payment.baseAmountCents, payment.baseCurrency) }) })) : null, fxRateLabel ? (_jsx(Row, { label: detail.fxRateLabel, children: _jsx("span", { className: "font-mono", children: fxRateLabel }) })) : null, _jsx(Row, { label: detail.statusLabel, children: _jsx(Badge, { variant: paymentStatusVariant[payment.status] ?? "secondary", className: "capitalize", children: getStatusLabel(messages, payment.status) }) }), _jsx(Row, { label: detail.methodLabel, children: _jsx("span", { className: "capitalize", children: getMethodLabel(messages, payment.paymentMethod) }) }), _jsx(Row, { label: detail.dateLabel, children: payment.paymentDate }), _jsx(Row, { label: detail.referenceLabel, children: payment.referenceNumber ?? noValue }), payment.notes ? (_jsxs("div", { className: "mt-2 flex flex-col gap-1", children: [_jsx("dt", { className: "text-xs uppercase tracking-wide text-muted-foreground", children: detail.notesLabel }), _jsx("dd", { className: "whitespace-pre-wrap text-sm", children: payment.notes })] })) : null] }) })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: detail.linksTitle }) }), _jsx(CardContent, { children: _jsx("dl", { className: "grid gap-2 text-sm", children: payment.kind === "customer" ? (_jsxs(_Fragment, { children: [_jsx(Row, { label: detail.paidByLabel, children: payment.personId && payment.personName ? (_jsx(DestinationLink, { destination: "person.detail", params: { personId: payment.personId }, children: payment.personName })) : payment.organizationId && payment.organizationName ? (_jsx(DestinationLink, { destination: "organization.detail", params: { organizationId: payment.organizationId }, children: payment.organizationName })) : (noValue) }), payment.personId &&
90
+ payment.personName &&
91
+ payment.organizationId &&
92
+ payment.organizationName ? (_jsx(Row, { label: detail.organizationLabel, children: _jsx(DestinationLink, { destination: "organization.detail", params: { organizationId: payment.organizationId }, children: payment.organizationName }) })) : null, _jsx(Row, { label: detail.invoiceLabel, children: payment.invoiceId ? (_jsx(DestinationLink, { destination: "invoice.detail", params: { invoiceId: payment.invoiceId }, children: payment.invoiceNumber ?? detail.viewInvoice })) : (noValue) })] })) : (_jsxs(_Fragment, { children: [_jsx(Row, { label: detail.paidToLabel, children: payment.supplierId && payment.supplierName ? (_jsx(DestinationLink, { destination: "supplier.detail", params: { supplierId: payment.supplierId }, children: payment.supplierName })) : ((payment.supplierName ?? noValue)) }), _jsx(Row, { label: detail.bookingLabel, children: payment.bookingId ? (_jsx(DestinationLink, { destination: "booking.detail", params: { bookingId: payment.bookingId }, children: payment.bookingNumber ?? detail.viewBooking })) : (noValue) })] })) }) })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: detail.metadataTitle }) }), _jsx(CardContent, { children: _jsxs("dl", { className: "grid gap-2 text-sm", children: [_jsx(Row, { label: detail.kindLabel, children: _jsx("span", { className: "capitalize", children: getKindLabel(messages, payment.kind) }) }), _jsx(Row, { label: detail.createdLabel, children: new Date(payment.createdAt).toLocaleString() }), _jsx(Row, { label: detail.updatedLabel, children: new Date(payment.updatedAt).toLocaleString() })] }) })] })] }));
93
+ }
94
+ function formatFxRate(payment) {
95
+ if (payment.baseAmountCents === null ||
96
+ !payment.baseCurrency ||
97
+ payment.baseAmountCents <= 0 ||
98
+ payment.currency === payment.baseCurrency) {
99
+ return null;
100
+ }
101
+ const rate = payment.amountCents / payment.baseAmountCents;
102
+ return `1 ${payment.baseCurrency} = ${new Intl.NumberFormat(undefined, {
103
+ maximumFractionDigits: 6,
104
+ }).format(rate)} ${payment.currency}`;
105
+ }
106
+ function Row({ label, children }) {
107
+ return (_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx("dt", { className: "text-xs uppercase tracking-wide text-muted-foreground", children: label }), _jsx("dd", { className: "text-right", children: children })] }));
108
+ }