@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,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { formatMessage } from "@voyant-travel/i18n";
3
+ import { Alert, AlertDescription, AlertTitle, ConfirmActionButton, SelectionActionBar, } from "@voyant-travel/ui/components";
4
+ import { useFinanceUiMessagesOrDefault } from "../i18n/index.js";
5
+ export function InvoiceBulkActions({ selectedCount, result, pending, onClear, onMarkPaid, }) {
6
+ const messages = useFinanceUiMessagesOrDefault();
7
+ const bulkActions = messages.invoicesPage.bulkActions;
8
+ return (_jsxs(_Fragment, { children: [selectedCount > 0 && (_jsx(SelectionActionBar, { selectedCount: selectedCount, onClear: onClear, clearLabel: bulkActions.clearSelection, selectionSummary: formatMessage(bulkActions.selectionSummary, {
9
+ count: selectedCount,
10
+ }), children: _jsx(ConfirmActionButton, { buttonLabel: bulkActions.markPaid, confirmLabel: bulkActions.markPaidConfirm, cancelLabel: messages.common.cancel, title: formatMessage(bulkActions.markPaidTitle, { count: selectedCount }), description: bulkActions.markPaidDescription, disabled: pending, onConfirm: async () => {
11
+ await onMarkPaid();
12
+ } }) })), result && (_jsxs(Alert, { variant: result.failed.length > 0 ? "destructive" : "default", children: [_jsx(AlertTitle, { children: result.failed.length > 0 ? bulkActions.partialTitle : bulkActions.successTitle }), _jsx(AlertDescription, { children: formatMessage(result.failed.length > 0
13
+ ? bulkActions.partialDescription
14
+ : bulkActions.successDescription, {
15
+ updated: result.updated.length,
16
+ failed: result.failed.length,
17
+ total: result.total,
18
+ }) })] }))] }));
19
+ }
@@ -0,0 +1,44 @@
1
+ import type { CreditNoteRecord, InvoiceAttachmentRecord, InvoiceRecord, LineItemRecord, PaymentRecord } from "../../index.js";
2
+ export interface InvoiceDetailCardProps {
3
+ invoice: InvoiceRecord;
4
+ className?: string;
5
+ }
6
+ export declare function InvoiceSummaryCard({ invoice, className }: InvoiceDetailCardProps): import("react/jsx-runtime").JSX.Element;
7
+ export interface InvoiceLinksCardProps extends InvoiceDetailCardProps {
8
+ onBookingOpen?: (bookingId: string, invoice: InvoiceRecord) => void;
9
+ onPersonOpen?: (personId: string, invoice: InvoiceRecord) => void;
10
+ onOrganizationOpen?: (organizationId: string, invoice: InvoiceRecord) => void;
11
+ }
12
+ export declare function InvoiceLinksCard({ invoice, className, onBookingOpen, onPersonOpen, onOrganizationOpen, }: InvoiceLinksCardProps): import("react/jsx-runtime").JSX.Element;
13
+ export interface InvoiceLineItemsCardProps extends InvoiceDetailCardProps {
14
+ lineItems: LineItemRecord[];
15
+ pending?: boolean;
16
+ deletePending?: boolean;
17
+ onCreate?: (invoice: InvoiceRecord) => void;
18
+ onEdit?: (lineItem: LineItemRecord, invoice: InvoiceRecord) => void;
19
+ onDelete?: (lineItemId: string) => Promise<void>;
20
+ }
21
+ export declare function InvoiceLineItemsCard({ invoice, lineItems, pending, deletePending, onCreate, onEdit, onDelete, className, }: InvoiceLineItemsCardProps): import("react/jsx-runtime").JSX.Element;
22
+ export interface InvoicePaymentsCardProps extends InvoiceDetailCardProps {
23
+ payments: PaymentRecord[];
24
+ pending?: boolean;
25
+ onCreate?: (invoice: InvoiceRecord) => void;
26
+ }
27
+ export declare function InvoicePaymentsCard({ invoice, payments, pending, onCreate, className, }: InvoicePaymentsCardProps): import("react/jsx-runtime").JSX.Element;
28
+ export interface InvoiceCreditNotesCardProps extends InvoiceDetailCardProps {
29
+ creditNotes: CreditNoteRecord[];
30
+ pending?: boolean;
31
+ onCreate?: (invoice: InvoiceRecord) => void;
32
+ }
33
+ export declare function InvoiceCreditNotesCard({ invoice, creditNotes, pending, onCreate, className, }: InvoiceCreditNotesCardProps): import("react/jsx-runtime").JSX.Element;
34
+ export interface InvoiceAttachmentsCardProps extends InvoiceDetailCardProps {
35
+ attachments: InvoiceAttachmentRecord[];
36
+ pending?: boolean;
37
+ deletePending?: boolean;
38
+ getDownloadHref?: (attachment: InvoiceAttachmentRecord) => string | undefined;
39
+ onCreate: () => void;
40
+ onEdit: (attachment: InvoiceAttachmentRecord) => void;
41
+ onDelete: (attachmentId: string) => Promise<void>;
42
+ }
43
+ export declare function InvoiceAttachmentsCard({ attachments, pending, deletePending, getDownloadHref, onCreate, onEdit, onDelete, className, }: InvoiceAttachmentsCardProps): import("react/jsx-runtime").JSX.Element;
44
+ //# sourceMappingURL=cards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../../src/components/invoice-detail-page/cards.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Badge, Button, Card, CardContent, CardHeader, CardTitle, ConfirmActionButton, } from "@voyant-travel/ui/components";
4
+ import { ExternalLink, FileText, Pencil, Plus } from "lucide-react";
5
+ import { useFinanceUiI18nOrDefault, useFinanceUiMessagesOrDefault } from "../../i18n/index.js";
6
+ import { creditNoteStatusVariant, DetailLink, DetailRow, EmptyRow, formatBytes, formatPaymentMethod, InvoiceSection, invoiceStatusVariant, LoadingRow, Money, paymentStatusVariant, } from "./primitives.js";
7
+ export function InvoiceSummaryCard({ invoice, className }) {
8
+ const { formatCurrency } = useFinanceUiI18nOrDefault();
9
+ const messages = useFinanceUiMessagesOrDefault();
10
+ const detail = messages.invoiceDetailPage;
11
+ return (_jsxs(Card, { "data-slot": "invoice-summary-card", className: className, children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: detail.titles.summary }) }), _jsx(CardContent, { children: _jsxs("dl", { className: "grid gap-3 text-sm", children: [_jsx(DetailRow, { label: detail.fields.currency, children: invoice.currency }), _jsx(DetailRow, { label: detail.fields.subtotal, children: _jsx(Money, { cents: invoice.subtotalCents, currency: invoice.currency }) }), _jsx(DetailRow, { label: detail.fields.tax, children: _jsx(Money, { cents: invoice.taxCents, currency: invoice.currency }) }), _jsx(DetailRow, { label: detail.fields.total, children: _jsx("span", { className: "font-semibold", children: formatCurrency(invoice.totalCents / 100, invoice.currency) }) }), _jsx(DetailRow, { label: detail.fields.paid, children: _jsx(Money, { cents: invoice.paidCents, currency: invoice.currency }) }), _jsx(DetailRow, { label: detail.fields.balanceDue, children: _jsx("span", { className: "font-semibold", children: formatCurrency(invoice.balanceDueCents / 100, invoice.currency) }) }), _jsx(DetailRow, { label: detail.fields.status, children: _jsx(Badge, { variant: invoiceStatusVariant[invoice.status] ?? "secondary", children: messages.common.invoiceStatusLabels[invoice.status] }) })] }) })] }));
12
+ }
13
+ export function InvoiceLinksCard({ invoice, className, onBookingOpen, onPersonOpen, onOrganizationOpen, }) {
14
+ const { formatDate, formatDateTime } = useFinanceUiI18nOrDefault();
15
+ const messages = useFinanceUiMessagesOrDefault();
16
+ const detail = messages.invoiceDetailPage;
17
+ return (_jsxs(Card, { "data-slot": "invoice-links-card", className: className, children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: detail.titles.links }) }), _jsx(CardContent, { children: _jsxs("dl", { className: "grid gap-3 text-sm", children: [_jsx(DetailRow, { label: detail.fields.issueDate, children: formatDate(invoice.issueDate) }), _jsx(DetailRow, { label: detail.fields.dueDate, children: formatDate(invoice.dueDate) }), _jsx(DetailRow, { label: detail.fields.booking, children: _jsx(DetailLink, { label: invoice.bookingId, actionLabel: detail.actions.viewBooking, onClick: () => onBookingOpen?.(invoice.bookingId, invoice), disabled: !onBookingOpen }) }), invoice.personId ? (_jsx(DetailRow, { label: detail.fields.person, children: _jsx(DetailLink, { label: invoice.personId, actionLabel: detail.actions.viewPerson, onClick: () => onPersonOpen?.(invoice.personId, invoice), disabled: !onPersonOpen }) })) : null, invoice.organizationId ? (_jsx(DetailRow, { label: detail.fields.organization, children: _jsx(DetailLink, { label: invoice.organizationId, actionLabel: detail.actions.viewOrganization, onClick: () => onOrganizationOpen?.(invoice.organizationId, invoice), disabled: !onOrganizationOpen }) })) : null, invoice.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.fields.notes }), _jsx("dd", { className: "whitespace-pre-wrap text-sm", children: invoice.notes })] })) : null, _jsx(DetailRow, { label: detail.fields.createdAt, children: formatDateTime(invoice.createdAt) }), _jsx(DetailRow, { label: detail.fields.updatedAt, children: formatDateTime(invoice.updatedAt) })] }) })] }));
18
+ }
19
+ export function InvoiceLineItemsCard({ invoice, lineItems, pending, deletePending, onCreate, onEdit, onDelete, className, }) {
20
+ const messages = useFinanceUiMessagesOrDefault();
21
+ const detail = messages.invoiceDetailPage;
22
+ return (_jsx(InvoiceSection, { dataSlot: "invoice-line-items-card", title: detail.titles.lineItems, className: className, action: onCreate ? (_jsxs(Button, { size: "sm", onClick: () => onCreate(invoice), children: [_jsx(Plus, { className: "size-4", "aria-hidden": "true" }), detail.actions.addLineItem] })) : null, children: pending ? (_jsx(LoadingRow, {})) : lineItems.length === 0 ? (_jsx(EmptyRow, { children: detail.states.noLineItems })) : (_jsx("div", { className: "overflow-hidden rounded border bg-background", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b text-muted-foreground", children: [_jsx("th", { className: "p-2 text-left font-medium", children: detail.columns.description }), _jsx("th", { className: "p-2 text-right font-medium", children: detail.columns.quantity }), _jsx("th", { className: "p-2 text-right font-medium", children: detail.columns.unitPrice }), _jsx("th", { className: "p-2 text-right font-medium", children: detail.columns.total }), _jsx("th", { className: "p-2 text-right font-medium", children: detail.columns.taxRate }), _jsx("th", { className: "w-20 p-2" })] }) }), _jsx("tbody", { children: lineItems.map((lineItem) => (_jsxs("tr", { className: "border-b last:border-b-0", children: [_jsx("td", { className: "p-2", children: lineItem.description }), _jsx("td", { className: "p-2 text-right", children: lineItem.quantity }), _jsx("td", { className: "p-2 text-right", children: _jsx(Money, { cents: lineItem.unitPriceCents, currency: invoice.currency }) }), _jsx("td", { className: "p-2 text-right", children: _jsx(Money, { cents: lineItem.totalCents, currency: invoice.currency }) }), _jsx("td", { className: "p-2 text-right", children: lineItem.taxRate === null ? detail.states.noValue : `${lineItem.taxRate}%` }), _jsx("td", { className: "p-2", children: _jsxs("div", { className: "flex justify-end gap-1", children: [onEdit ? (_jsxs(Button, { type: "button", variant: "ghost", size: "icon-sm", onClick: () => onEdit(lineItem, invoice), children: [_jsx(Pencil, { className: "size-4", "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: detail.actions.editLineItem })] })) : null, onDelete ? (_jsx(ConfirmActionButton, { buttonLabel: detail.actions.deleteLineItemShort, confirmLabel: detail.actions.delete, cancelLabel: messages.common.cancel, title: detail.actions.deleteLineItemTitle, description: detail.actions.deleteLineItemDescription, disabled: deletePending, variant: "ghost", confirmVariant: "destructive", onConfirm: () => onDelete(lineItem.id) })) : null] }) })] }, lineItem.id))) })] }) })) }));
23
+ }
24
+ export function InvoicePaymentsCard({ invoice, payments, pending, onCreate, className, }) {
25
+ const messages = useFinanceUiMessagesOrDefault();
26
+ const detail = messages.invoiceDetailPage;
27
+ return (_jsx(InvoiceSection, { dataSlot: "invoice-payments-card", title: detail.titles.payments, className: className, action: onCreate && invoice.status !== "void" ? (_jsxs(Button, { size: "sm", onClick: () => onCreate(invoice), children: [_jsx(Plus, { className: "size-4", "aria-hidden": "true" }), detail.actions.recordPayment] })) : null, children: pending ? (_jsx(LoadingRow, {})) : payments.length === 0 ? (_jsx(EmptyRow, { children: detail.states.noPayments })) : (_jsx("ul", { className: "divide-y", children: payments.map((payment) => (_jsxs("li", { className: "flex items-center justify-between gap-3 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "truncate text-sm font-medium", children: formatPaymentMethod(payment.paymentMethod, messages) }), _jsx("p", { className: "text-xs text-muted-foreground", children: payment.paymentDate })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Money, { cents: payment.amountCents, currency: payment.currency }), _jsx(Badge, { variant: paymentStatusVariant[payment.status] ?? "secondary", children: messages.common.supplierPaymentStatusLabels[payment.status] })] })] }, payment.id))) })) }));
28
+ }
29
+ export function InvoiceCreditNotesCard({ invoice, creditNotes, pending, onCreate, className, }) {
30
+ const messages = useFinanceUiMessagesOrDefault();
31
+ const detail = messages.invoiceDetailPage;
32
+ return (_jsx(InvoiceSection, { dataSlot: "invoice-credit-notes-card", title: detail.titles.creditNotes, className: className, action: onCreate ? (_jsxs(Button, { size: "sm", onClick: () => onCreate(invoice), children: [_jsx(Plus, { className: "size-4", "aria-hidden": "true" }), detail.actions.addCreditNote] })) : null, children: pending ? (_jsx(LoadingRow, {})) : creditNotes.length === 0 ? (_jsx(EmptyRow, { children: detail.states.noCreditNotes })) : (_jsx("ul", { className: "divide-y", children: creditNotes.map((creditNote) => (_jsxs("li", { className: "flex items-center justify-between gap-3 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "truncate text-sm font-medium", children: creditNote.creditNoteNumber }), _jsx("p", { className: "line-clamp-2 text-xs text-muted-foreground", children: creditNote.reason })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx(Money, { cents: creditNote.amountCents, currency: creditNote.currency }), _jsx(Badge, { variant: creditNoteStatusVariant[creditNote.status] ?? "secondary", children: detail.creditNoteStatusLabels[creditNote.status] })] })] }, creditNote.id))) })) }));
33
+ }
34
+ export function InvoiceAttachmentsCard({ attachments, pending, deletePending, getDownloadHref, onCreate, onEdit, onDelete, className, }) {
35
+ const messages = useFinanceUiMessagesOrDefault();
36
+ const detail = messages.invoiceDetailPage;
37
+ return (_jsx(InvoiceSection, { dataSlot: "invoice-attachments-card", title: detail.titles.attachments, className: className, action: _jsxs(Button, { size: "sm", onClick: onCreate, children: [_jsx(Plus, { className: "size-4", "aria-hidden": "true" }), detail.actions.addAttachment] }), children: pending ? (_jsx(LoadingRow, {})) : attachments.length === 0 ? (_jsx(EmptyRow, { children: detail.states.noAttachments })) : (_jsx("div", { className: "overflow-hidden rounded border bg-background", children: _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b text-muted-foreground", children: [_jsx("th", { className: "p-2 text-left font-medium", children: detail.columns.name }), _jsx("th", { className: "p-2 text-left font-medium", children: detail.columns.kind }), _jsx("th", { className: "p-2 text-left font-medium", children: detail.columns.mimeType }), _jsx("th", { className: "p-2 text-right font-medium", children: detail.columns.size }), _jsx("th", { className: "w-20 p-2" })] }) }), _jsx("tbody", { children: attachments.map((attachment) => {
38
+ const downloadHref = getDownloadHref?.(attachment);
39
+ return (_jsxs("tr", { className: "border-b last:border-b-0", children: [_jsx("td", { className: "min-w-0 p-2", children: downloadHref ? (_jsxs("a", { href: downloadHref, target: "_blank", rel: "noopener noreferrer", className: "inline-flex max-w-full items-center gap-1.5 hover:underline", children: [_jsx(FileText, { className: "size-3.5 shrink-0 opacity-60", "aria-hidden": "true" }), _jsx("span", { className: "truncate", children: attachment.name }), _jsx(ExternalLink, { className: "size-3 shrink-0 opacity-60", "aria-hidden": "true" })] })) : (_jsx("span", { className: "truncate", children: attachment.name })) }), _jsx("td", { className: "p-2", children: attachment.kind }), _jsx("td", { className: "p-2", children: attachment.mimeType ?? detail.states.noValue }), _jsx("td", { className: "p-2 text-right", children: attachment.fileSize == null
40
+ ? detail.states.noValue
41
+ : formatBytes(attachment.fileSize) }), _jsx("td", { className: "p-2", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsxs(Button, { type: "button", variant: "ghost", size: "icon-sm", onClick: () => onEdit(attachment), children: [_jsx(Pencil, { className: "size-4", "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: detail.actions.editAttachment })] }), _jsx(ConfirmActionButton, { buttonLabel: detail.actions.deleteAttachmentShort, confirmLabel: detail.actions.delete, cancelLabel: messages.common.cancel, title: detail.actions.deleteAttachmentTitle, description: detail.actions.deleteAttachmentDescription, disabled: deletePending, variant: "ghost", confirmVariant: "destructive", onConfirm: () => onDelete(attachment.id) })] }) })] }, attachment.id));
42
+ }) })] }) })) }));
43
+ }
@@ -0,0 +1,15 @@
1
+ import type { InvoiceRecord } from "../../index.js";
2
+ export interface InvoiceDetailHeaderProps {
3
+ invoice: InvoiceRecord;
4
+ onBack?: () => void;
5
+ onEdit: () => void;
6
+ onConvert?: () => Promise<void>;
7
+ onVoid: (reason?: string | null) => Promise<void>;
8
+ onDelete: () => Promise<void>;
9
+ convertPending?: boolean;
10
+ voidPending?: boolean;
11
+ deletePending?: boolean;
12
+ className?: string;
13
+ }
14
+ export declare function InvoiceDetailHeader({ invoice, onBack, onEdit, onConvert, onVoid, onDelete, convertPending, voidPending, deletePending, className, }: InvoiceDetailHeaderProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/components/invoice-detail-page/header.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjD,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,EACN,MAAM,EACN,SAAS,EACT,MAAM,EACN,QAAQ,EACR,cAAc,EACd,WAAW,EACX,aAAa,EACb,SAAS,GACV,EAAE,wBAAwB,2CAiJ1B"}
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, Badge, Button, ConfirmActionButton, Textarea, } from "@voyant-travel/ui/components";
4
+ import { cn } from "@voyant-travel/ui/lib/utils";
5
+ import { ArrowLeft, ArrowRightLeft, Loader2, Pencil } from "lucide-react";
6
+ import { useState } from "react";
7
+ import { useFinanceUiMessagesOrDefault } from "../../i18n/index.js";
8
+ import { invoiceStatusVariant, invoiceTypeVariant } from "./primitives.js";
9
+ export function InvoiceDetailHeader({ invoice, onBack, onEdit, onConvert, onVoid, onDelete, convertPending, voidPending, deletePending, className, }) {
10
+ const messages = useFinanceUiMessagesOrDefault();
11
+ const detail = messages.invoiceDetailPage;
12
+ const [voidDialogOpen, setVoidDialogOpen] = useState(false);
13
+ const [voidReason, setVoidReason] = useState("");
14
+ const canDelete = invoice.status === "draft";
15
+ const canVoid = ["pending_external_allocation", "issued", "overdue"].includes(invoice.status);
16
+ const invoiceType = invoice.invoiceType;
17
+ const canConvert = Boolean(onConvert && invoiceType === "proforma" && invoice.status !== "void");
18
+ return (_jsxs("div", { "data-slot": "invoice-detail-header", className: cn("flex flex-col gap-4 md:flex-row md:items-start", className), children: [onBack ? (_jsxs(Button, { type: "button", variant: "ghost", size: "icon", onClick: onBack, children: [_jsx(ArrowLeft, { className: "size-4", "aria-hidden": "true" }), _jsx("span", { className: "sr-only", children: detail.actions.back })] })) : null, _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: detail.title }), _jsx(Badge, { variant: invoiceStatusVariant[invoice.status] ?? "secondary", children: messages.common.invoiceStatusLabels[invoice.status] }), invoiceType ? (_jsx(Badge, { "data-slot": "invoice-type-badge", "data-invoice-type": invoiceType, variant: invoiceTypeVariant[invoiceType] ?? "secondary", children: detail.invoiceTypeLabels[invoiceType] })) : null] }), _jsx("p", { className: "mt-1 truncate font-mono text-muted-foreground text-sm", children: invoice.invoiceNumber }), _jsxs("p", { className: "mt-1 text-muted-foreground text-xs", children: [detail.fields.booking, ": ", invoice.bookingId] })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2 md:justify-end", children: [canConvert ? (_jsxs(AlertDialog, { children: [_jsxs(AlertDialogTrigger, { disabled: convertPending, render: _jsx(Button, { type: "button", variant: "outline", size: "sm" }), children: [_jsx(ArrowRightLeft, { className: "size-4", "aria-hidden": "true" }), detail.actions.convertToInvoice] }), _jsxs(AlertDialogContent, { size: "sm", children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: detail.actions.convertToInvoiceTitle }), _jsx(AlertDialogDescription, { children: detail.actions.convertToInvoiceDescription })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: convertPending, children: messages.common.cancel }), _jsxs(AlertDialogAction, { disabled: convertPending, onClick: () => {
19
+ if (onConvert)
20
+ void onConvert();
21
+ }, children: [convertPending ? (_jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": "true" })) : null, detail.actions.convertToInvoice] })] })] })] })) : null, _jsxs(Button, { type: "button", variant: "outline", onClick: onEdit, children: [_jsx(Pencil, { className: "size-4", "aria-hidden": "true" }), detail.actions.edit] }), _jsxs(AlertDialog, { open: voidDialogOpen, onOpenChange: (open) => {
22
+ setVoidDialogOpen(open);
23
+ if (!open)
24
+ setVoidReason("");
25
+ }, children: [_jsx(AlertDialogTrigger, { disabled: !canVoid || voidPending, render: _jsx(Button, { type: "button", variant: "outline", size: "sm" }), children: detail.actions.void }), _jsxs(AlertDialogContent, { size: "sm", children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: detail.actions.voidTitle }), _jsx(AlertDialogDescription, { children: canVoid ? detail.actions.voidDescription : detail.actions.voidUnavailable })] }), _jsx(Textarea, { value: voidReason, onChange: (event) => setVoidReason(event.target.value), placeholder: detail.actions.voidReasonPlaceholder, className: "min-h-24" }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: voidPending, children: messages.common.cancel }), _jsxs(AlertDialogAction, { variant: "destructive", disabled: voidPending, onClick: () => {
26
+ void onVoid(voidReason.trim() || null);
27
+ setVoidDialogOpen(false);
28
+ setVoidReason("");
29
+ }, children: [voidPending ? (_jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": "true" })) : null, detail.actions.void] })] })] })] }), _jsx(ConfirmActionButton, { buttonLabel: detail.actions.delete, confirmLabel: detail.actions.delete, cancelLabel: messages.common.cancel, title: detail.actions.deleteTitle, description: canDelete ? detail.actions.deleteDescription : detail.actions.deleteOnlyDraft, variant: "destructive", confirmVariant: "destructive", disabled: !canDelete || deletePending, onConfirm: onDelete })] })] }));
30
+ }
@@ -0,0 +1,28 @@
1
+ import type { FinanceNoteRecord, InvoiceAttachmentRecord } from "../../index.js";
2
+ export interface InvoiceNotesCardProps {
3
+ notes: FinanceNoteRecord[];
4
+ noteContent?: string;
5
+ pending?: boolean;
6
+ addPending?: boolean;
7
+ className?: string;
8
+ onNoteChange?: (value: string) => void;
9
+ onAddNote?: () => Promise<void>;
10
+ onCreate?: () => void;
11
+ }
12
+ export declare function InvoiceNotesCard({ notes, noteContent, pending, addPending, className, onNoteChange, onAddNote, onCreate, }: InvoiceNotesCardProps): import("react/jsx-runtime").JSX.Element;
13
+ export interface InvoiceNoteDialogProps {
14
+ open: boolean;
15
+ onOpenChange: (open: boolean) => void;
16
+ pending?: boolean;
17
+ onSubmit: (content: string) => Promise<void>;
18
+ }
19
+ export declare function InvoiceNoteDialog({ open, onOpenChange, pending, onSubmit, }: InvoiceNoteDialogProps): import("react/jsx-runtime").JSX.Element;
20
+ export interface InvoiceAttachmentDialogProps {
21
+ open: boolean;
22
+ onOpenChange: (open: boolean) => void;
23
+ invoiceId: string;
24
+ attachment?: InvoiceAttachmentRecord;
25
+ onSuccess: () => void;
26
+ }
27
+ export declare function InvoiceAttachmentDialog({ open, onOpenChange, invoiceId, attachment, onSuccess, }: InvoiceAttachmentDialogProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=notes-dialogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notes-dialogs.d.ts","sourceRoot":"","sources":["../../../src/components/invoice-detail-page/notes-dialogs.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAIhF,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,OAAO,EACP,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,QAAQ,GACT,EAAE,qBAAqB,2CAuDvB;AAYD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7C;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,QAAQ,GACT,EAAE,sBAAsB,2CA0DxB;AAmBD,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,uBAAuB,CAAA;IACpC,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,SAAS,GACV,EAAE,4BAA4B,2CAgI9B"}
@@ -0,0 +1,104 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button, Dialog, DialogBody, DialogContent, DialogFooter, DialogHeader, DialogTitle, Input, Label, Textarea, } from "@voyant-travel/ui/components";
4
+ import { zodResolver } from "@voyant-travel/ui/lib/zod-resolver";
5
+ import { Loader2, Plus } from "lucide-react";
6
+ import { useEffect } from "react";
7
+ import { useForm } from "react-hook-form";
8
+ import { z } from "zod/v4";
9
+ import { useFinanceUiMessagesOrDefault } from "../../i18n/index.js";
10
+ import { useInvoiceAttachmentMutation } from "../../index.js";
11
+ import { EmptyRow, InvoiceSection, LoadingRow } from "./primitives.js";
12
+ export function InvoiceNotesCard({ notes, noteContent, pending, addPending, className, onNoteChange, onAddNote, onCreate, }) {
13
+ const messages = useFinanceUiMessagesOrDefault();
14
+ const detail = messages.invoiceDetailPage;
15
+ const controlledNoteContent = noteContent ?? "";
16
+ return (_jsxs(InvoiceSection, { dataSlot: "invoice-notes-card", title: detail.titles.notes, className: className, action: onCreate ? (_jsxs(Button, { size: "sm", onClick: onCreate, disabled: addPending, children: [addPending ? _jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": "true" }) : null, _jsx(Plus, { className: "size-4", "aria-hidden": "true" }), detail.actions.addNote] })) : null, children: [pending ? (_jsx(LoadingRow, {})) : notes.length === 0 ? (_jsx(EmptyRow, { children: detail.states.noNotes })) : (_jsx("ul", { className: "divide-y", children: notes.map((note) => (_jsxs("li", { className: "py-3", children: [_jsx("p", { className: "whitespace-pre-wrap text-sm", children: note.content }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: note.createdAt })] }, note.id))) })), !onCreate && onNoteChange && onAddNote ? (_jsxs("div", { className: "mt-4 flex flex-col gap-2", children: [_jsx(Textarea, { value: controlledNoteContent, onChange: (event) => onNoteChange(event.target.value), placeholder: detail.placeholders.note, rows: 3 }), _jsxs(Button, { type: "button", className: "self-end", disabled: addPending || controlledNoteContent.trim().length === 0, onClick: () => void onAddNote(), children: [addPending ? _jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": "true" }) : null, detail.actions.addNote] })] })) : null] }));
17
+ }
18
+ function createInvoiceNoteFormSchema(messages) {
19
+ return z.object({
20
+ content: z.string().trim().min(1, messages.invoiceDetailPage.noteDialog.contentRequired),
21
+ });
22
+ }
23
+ export function InvoiceNoteDialog({ open, onOpenChange, pending, onSubmit, }) {
24
+ const messages = useFinanceUiMessagesOrDefault();
25
+ const detail = messages.invoiceDetailPage;
26
+ const noteFormSchema = createInvoiceNoteFormSchema(messages);
27
+ const form = useForm({
28
+ resolver: zodResolver(noteFormSchema),
29
+ defaultValues: {
30
+ content: "",
31
+ },
32
+ });
33
+ useEffect(() => {
34
+ if (open) {
35
+ form.reset({ content: "" });
36
+ }
37
+ }, [form, open]);
38
+ const handleSubmit = async (values) => {
39
+ await onSubmit(values.content);
40
+ form.reset({ content: "" });
41
+ };
42
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: detail.noteDialog.title }) }), _jsxs("form", { onSubmit: form.handleSubmit(handleSubmit), children: [_jsx(DialogBody, { className: "grid gap-4", children: _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: detail.fields.notes }), _jsx(Textarea, { ...form.register("content"), placeholder: detail.placeholders.note, rows: 4 }), form.formState.errors.content ? (_jsx("p", { className: "text-xs text-destructive", children: form.formState.errors.content.message })) : null] }) }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: messages.common.cancel }), _jsxs(Button, { type: "submit", disabled: pending || form.formState.isSubmitting, children: [pending || form.formState.isSubmitting ? (_jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": "true" })) : null, detail.noteDialog.createAction] })] })] })] }) }));
43
+ }
44
+ function createInvoiceAttachmentFormSchema(messages) {
45
+ return z.object({
46
+ name: z.string().min(1, messages.invoiceDetailPage.attachmentDialog.nameRequired),
47
+ kind: z.string().min(1).optional(),
48
+ mimeType: z.string().optional(),
49
+ fileSize: z.coerce.number().int().min(0).optional(),
50
+ storageKey: z.string().optional(),
51
+ checksum: z.string().optional(),
52
+ });
53
+ }
54
+ export function InvoiceAttachmentDialog({ open, onOpenChange, invoiceId, attachment, onSuccess, }) {
55
+ const isEditing = Boolean(attachment);
56
+ const messages = useFinanceUiMessagesOrDefault();
57
+ const detail = messages.invoiceDetailPage;
58
+ const attachmentFormSchema = createInvoiceAttachmentFormSchema(messages);
59
+ const { create, update } = useInvoiceAttachmentMutation(invoiceId);
60
+ const form = useForm({
61
+ resolver: zodResolver(attachmentFormSchema),
62
+ defaultValues: {
63
+ name: "",
64
+ kind: "supporting_document",
65
+ mimeType: "",
66
+ fileSize: undefined,
67
+ storageKey: "",
68
+ checksum: "",
69
+ },
70
+ });
71
+ useEffect(() => {
72
+ if (open && attachment) {
73
+ form.reset({
74
+ name: attachment.name,
75
+ kind: attachment.kind,
76
+ mimeType: attachment.mimeType ?? "",
77
+ fileSize: attachment.fileSize ?? undefined,
78
+ storageKey: attachment.storageKey ?? "",
79
+ checksum: attachment.checksum ?? "",
80
+ });
81
+ }
82
+ else if (open) {
83
+ form.reset();
84
+ }
85
+ }, [open, attachment, form]);
86
+ const onSubmit = async (values) => {
87
+ const payload = {
88
+ name: values.name,
89
+ kind: values.kind || "supporting_document",
90
+ mimeType: values.mimeType || undefined,
91
+ fileSize: values.fileSize || undefined,
92
+ storageKey: values.storageKey || undefined,
93
+ checksum: values.checksum || undefined,
94
+ };
95
+ if (isEditing && attachment) {
96
+ await update.mutateAsync({ id: attachment.id, input: payload });
97
+ }
98
+ else {
99
+ await create.mutateAsync(payload);
100
+ }
101
+ onSuccess();
102
+ };
103
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: isEditing ? detail.attachmentDialog.editTitle : detail.attachmentDialog.createTitle }) }), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), children: [_jsxs(DialogBody, { className: "grid gap-4", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: detail.fields.name }), _jsx(Input, { ...form.register("name"), placeholder: detail.placeholders.attachmentName }), form.formState.errors.name ? (_jsx("p", { className: "text-xs text-destructive", children: form.formState.errors.name.message })) : null] }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: detail.fields.kind }), _jsx(Input, { ...form.register("kind"), placeholder: detail.placeholders.attachmentKind })] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: detail.fields.mimeType }), _jsx(Input, { ...form.register("mimeType"), placeholder: detail.placeholders.attachmentMimeType })] })] }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: detail.fields.fileSize }), _jsx(Input, { ...form.register("fileSize"), type: "number", placeholder: detail.placeholders.attachmentFileSize })] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: detail.fields.checksum }), _jsx(Input, { ...form.register("checksum"), placeholder: detail.placeholders.attachmentChecksum })] })] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(Label, { children: detail.fields.storageKey }), _jsx(Input, { ...form.register("storageKey"), placeholder: detail.placeholders.attachmentStorageKey })] })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "ghost", onClick: () => onOpenChange(false), children: messages.common.cancel }), _jsxs(Button, { type: "submit", disabled: form.formState.isSubmitting, children: [form.formState.isSubmitting ? (_jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": "true" })) : null, isEditing ? messages.common.saveChanges : detail.attachmentDialog.createAction] })] })] })] }) }));
104
+ }
@@ -0,0 +1,47 @@
1
+ import type { ReactNode } from "react";
2
+ import { useFinanceUiMessagesOrDefault } from "../../i18n/index.js";
3
+ export declare function formatBytes(bytes: number): string;
4
+ export interface MoneyProps {
5
+ cents: number;
6
+ currency: string;
7
+ }
8
+ export interface InvoiceSectionProps {
9
+ dataSlot: string;
10
+ title: string;
11
+ action?: ReactNode;
12
+ children: ReactNode;
13
+ className?: string;
14
+ }
15
+ export declare function InvoiceSection({ dataSlot, title, action, children, className, }: InvoiceSectionProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function Money({ cents, currency }: MoneyProps): import("react/jsx-runtime").JSX.Element;
17
+ export interface DetailRowProps {
18
+ label: string;
19
+ children: ReactNode;
20
+ }
21
+ export declare function DetailRow({ label, children }: DetailRowProps): import("react/jsx-runtime").JSX.Element;
22
+ export interface DetailLinkProps {
23
+ label: string;
24
+ actionLabel: string;
25
+ onClick: () => void;
26
+ disabled?: boolean;
27
+ }
28
+ export declare function DetailLink({ label, actionLabel, onClick, disabled }: DetailLinkProps): string | import("react/jsx-runtime").JSX.Element;
29
+ export interface EmptyRowProps {
30
+ children: ReactNode;
31
+ }
32
+ export declare function EmptyRow({ children }: EmptyRowProps): import("react/jsx-runtime").JSX.Element;
33
+ export declare function LoadingRow(): import("react/jsx-runtime").JSX.Element;
34
+ export declare function InvoiceDetailLoading({ className }: {
35
+ className?: string;
36
+ }): import("react/jsx-runtime").JSX.Element;
37
+ export declare function InvoiceDetailState({ className, message, onBack, }: {
38
+ className?: string;
39
+ message: string;
40
+ onBack?: () => void;
41
+ }): import("react/jsx-runtime").JSX.Element;
42
+ export declare function formatPaymentMethod(method: string, messages: ReturnType<typeof useFinanceUiMessagesOrDefault>): string;
43
+ export declare const invoiceStatusVariant: Record<string, "default" | "secondary" | "outline" | "destructive">;
44
+ export declare const invoiceTypeVariant: Record<string, "default" | "secondary" | "outline" | "destructive">;
45
+ export declare const paymentStatusVariant: Record<string, "default" | "secondary" | "outline" | "destructive">;
46
+ export declare const creditNoteStatusVariant: Record<string, "default" | "secondary" | "outline" | "destructive">;
47
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/components/invoice-detail-page/primitives.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAA6B,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AAE9F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,GACV,EAAE,mBAAmB,2CAUrB;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAIpD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAO5D;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,oDASpF;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAEnD;AAED,wBAAgB,UAAU,4CAMzB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAWzE;AAED,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,OAAO,EACP,MAAM,GACP,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,2CAaA;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,CAAC,OAAO,6BAA6B,CAAC,UAe3D;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,MAAM,EACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CASpD,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CACrC,MAAM,EACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAKpD,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,MAAM,EACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAMpD,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAC1C,MAAM,EACN,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAKpD,CAAA"}
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from "@voyant-travel/ui/components";
4
+ import { cn } from "@voyant-travel/ui/lib/utils";
5
+ import { ExternalLink, Loader2 } from "lucide-react";
6
+ import { useFinanceUiI18nOrDefault, useFinanceUiMessagesOrDefault } from "../../i18n/index.js";
7
+ export function formatBytes(bytes) {
8
+ if (bytes < 1024)
9
+ return `${bytes} B`;
10
+ if (bytes < 1024 * 1024)
11
+ return `${Math.round(bytes / 1024)} KB`;
12
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
13
+ }
14
+ export function InvoiceSection({ dataSlot, title, action, children, className, }) {
15
+ return (_jsxs("section", { "data-slot": dataSlot, className: cn("rounded-md border bg-background", className), children: [_jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 border-b px-4 py-3", children: [_jsx("h2", { className: "font-semibold text-sm", children: title }), action] }), _jsx("div", { className: "p-4", children: children })] }));
16
+ }
17
+ export function Money({ cents, currency }) {
18
+ const { formatCurrency } = useFinanceUiI18nOrDefault();
19
+ return _jsx("span", { className: "font-mono", children: formatCurrency(cents / 100, currency) });
20
+ }
21
+ export function DetailRow({ label, children }) {
22
+ 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 })] }));
23
+ }
24
+ export function DetailLink({ label, actionLabel, onClick, disabled }) {
25
+ if (disabled)
26
+ return label;
27
+ return (_jsxs(Button, { type: "button", variant: "link", className: "h-auto p-0", onClick: onClick, children: [label, _jsx(ExternalLink, { className: "ml-1 size-3", "aria-label": actionLabel })] }));
28
+ }
29
+ export function EmptyRow({ children }) {
30
+ return _jsx("p", { className: "py-6 text-center text-sm text-muted-foreground", children: children });
31
+ }
32
+ export function LoadingRow() {
33
+ return (_jsx("div", { className: "flex justify-center py-6", children: _jsx(Loader2, { className: "size-5 animate-spin text-muted-foreground" }) }));
34
+ }
35
+ export function InvoiceDetailLoading({ className }) {
36
+ const messages = useFinanceUiMessagesOrDefault();
37
+ return (_jsx("div", { className: cn("flex min-h-48 items-center justify-center", className), children: _jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx(Loader2, { className: "size-4 animate-spin", "aria-hidden": "true" }), messages.invoiceDetailPage.states.loading] }) }));
38
+ }
39
+ export function InvoiceDetailState({ className, message, onBack, }) {
40
+ const messages = useFinanceUiMessagesOrDefault();
41
+ return (_jsxs("div", { className: cn("flex flex-col items-center justify-center gap-4 py-12", className), children: [_jsx("p", { className: "text-muted-foreground", children: message }), onBack ? (_jsx(Button, { type: "button", variant: "outline", onClick: onBack, children: messages.invoiceDetailPage.actions.back })) : null] }));
42
+ }
43
+ export function formatPaymentMethod(method, messages) {
44
+ if (method in messages.common.paymentMethodLabels) {
45
+ return messages.common.paymentMethodLabels[method];
46
+ }
47
+ if (method in messages.common.supplierPaymentMethodLabels) {
48
+ return messages.common.supplierPaymentMethodLabels[method];
49
+ }
50
+ return method.replace(/_/g, " ");
51
+ }
52
+ export const invoiceStatusVariant = {
53
+ draft: "outline",
54
+ pending_external_allocation: "outline",
55
+ issued: "secondary",
56
+ partially_paid: "secondary",
57
+ paid: "default",
58
+ overdue: "destructive",
59
+ void: "secondary",
60
+ };
61
+ export const invoiceTypeVariant = {
62
+ invoice: "default",
63
+ proforma: "outline",
64
+ credit_note: "destructive",
65
+ };
66
+ export const paymentStatusVariant = {
67
+ pending: "outline",
68
+ completed: "default",
69
+ failed: "destructive",
70
+ refunded: "secondary",
71
+ };
72
+ export const creditNoteStatusVariant = {
73
+ draft: "outline",
74
+ issued: "secondary",
75
+ applied: "default",
76
+ };
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from "react";
2
+ import { type InvoiceDetailPageProps } from "./invoice-detail-page.js";
3
+ export interface InvoiceDetailPageWithActionLedgerProps extends InvoiceDetailPageProps {
4
+ actionLedgerContent?: ReactNode;
5
+ }
6
+ export declare function InvoiceDetailPageWithActionLedger({ actionLedgerContent, slots, ...props }: InvoiceDetailPageWithActionLedgerProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=invoice-detail-page-with-action-ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-detail-page-with-action-ledger.d.ts","sourceRoot":"","sources":["../../src/components/invoice-detail-page-with-action-ledger.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAGtC,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEzF,MAAM,WAAW,sCAAuC,SAAQ,sBAAsB;IACpF,mBAAmB,CAAC,EAAE,SAAS,CAAA;CAChC;AAED,wBAAgB,iCAAiC,CAAC,EAChD,mBAAmB,EACnB,KAAK,EACL,GAAG,KAAK,EACT,EAAE,sCAAsC,2CAmBxC"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { InvoiceActionLedgerCard } from "./invoice-action-ledger-card.js";
4
+ import { InvoiceDetailPage } from "./invoice-detail-page.js";
5
+ export function InvoiceDetailPageWithActionLedger({ actionLedgerContent, slots, ...props }) {
6
+ const ledgerContent = actionLedgerContent ?? (_jsx(InvoiceActionLedgerCard, { invoiceId: props.id }, props.id));
7
+ return (_jsx(InvoiceDetailPage, { ...props, slots: {
8
+ ...slots,
9
+ afterNotes: (_jsxs(_Fragment, { children: [slots?.afterNotes, ledgerContent] })),
10
+ } }));
11
+ }
@@ -0,0 +1,46 @@
1
+ import { type ReactNode } from "react";
2
+ import type { InvoiceAttachmentRecord, InvoiceRecord, LineItemRecord } from "../index.js";
3
+ import { type InvoiceNoteDialogProps } from "./invoice-detail-page/notes-dialogs.js";
4
+ export interface InvoiceDetailPageSlots {
5
+ afterHeader?: ReactNode;
6
+ integrationsContent?: InvoiceDetailIntegrationContent;
7
+ afterSummary?: ReactNode;
8
+ lineItemsContent?: ReactNode;
9
+ afterLineItems?: ReactNode;
10
+ paymentsContent?: ReactNode;
11
+ afterPayments?: ReactNode;
12
+ creditNotesContent?: ReactNode;
13
+ afterCreditNotes?: ReactNode;
14
+ attachmentsContent?: ReactNode;
15
+ afterAttachments?: ReactNode;
16
+ notesContent?: ReactNode;
17
+ afterNotes?: ReactNode;
18
+ dialogs?: ReactNode;
19
+ }
20
+ export interface InvoiceDetailIntegrationSlotContext {
21
+ invoice: InvoiceRecord;
22
+ }
23
+ export type InvoiceDetailIntegrationContent = ReactNode | ((context: InvoiceDetailIntegrationSlotContext) => ReactNode);
24
+ export interface InvoiceDetailPageProps {
25
+ id: string;
26
+ className?: string;
27
+ onBack?: () => void;
28
+ onDeleted?: () => void;
29
+ onBookingOpen?: (bookingId: string, invoice: InvoiceRecord) => void;
30
+ onPersonOpen?: (personId: string, invoice: InvoiceRecord) => void;
31
+ onOrganizationOpen?: (organizationId: string, invoice: InvoiceRecord) => void;
32
+ onLineItemCreate?: (invoice: InvoiceRecord) => void;
33
+ onLineItemEdit?: (lineItem: LineItemRecord, invoice: InvoiceRecord) => void;
34
+ onPaymentCreate?: (invoice: InvoiceRecord) => void;
35
+ onConverted?: (invoice: InvoiceRecord, source: InvoiceRecord) => void;
36
+ onCreditNoteCreate?: (invoice: InvoiceRecord) => void;
37
+ getAttachmentDownloadHref?: (attachment: InvoiceAttachmentRecord) => string | undefined;
38
+ renderInvoiceNoteDialog?: (props: InvoiceNoteDialogProps) => ReactNode;
39
+ slots?: InvoiceDetailPageSlots;
40
+ }
41
+ export declare function InvoiceDetailPage({ id, className, onBack, onDeleted, onBookingOpen, onPersonOpen, onOrganizationOpen, onLineItemCreate, onLineItemEdit, onPaymentCreate, onConverted, onCreditNoteCreate, getAttachmentDownloadHref, renderInvoiceNoteDialog, slots, }: InvoiceDetailPageProps): import("react/jsx-runtime").JSX.Element;
42
+ export { InvoiceAttachmentsCard, type InvoiceAttachmentsCardProps, InvoiceCreditNotesCard, type InvoiceCreditNotesCardProps, type InvoiceDetailCardProps, InvoiceLineItemsCard, type InvoiceLineItemsCardProps, InvoiceLinksCard, type InvoiceLinksCardProps, InvoicePaymentsCard, type InvoicePaymentsCardProps, InvoiceSummaryCard, } from "./invoice-detail-page/cards.js";
43
+ export { InvoiceDetailHeader, type InvoiceDetailHeaderProps } from "./invoice-detail-page/header.js";
44
+ export { InvoiceNoteDialog, type InvoiceNoteDialogProps, InvoiceNotesCard, type InvoiceNotesCardProps, } from "./invoice-detail-page/notes-dialogs.js";
45
+ export { creditNoteStatusVariant, DetailLink, type DetailLinkProps, DetailRow, type DetailRowProps, EmptyRow, type EmptyRowProps, formatPaymentMethod, InvoiceDetailLoading, InvoiceDetailState, InvoiceSection, type InvoiceSectionProps, invoiceStatusVariant, invoiceTypeVariant, LoadingRow, Money, type MoneyProps, paymentStatusVariant, } from "./invoice-detail-page/primitives.js";
46
+ //# sourceMappingURL=invoice-detail-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoice-detail-page.d.ts","sourceRoot":"","sources":["../../src/components/invoice-detail-page.tsx"],"names":[],"mappings":"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"}