@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.
- package/LICENSE +201 -0
- package/README.md +75 -0
- package/dist/admin/booking-invoices-widget.d.ts +19 -0
- package/dist/admin/booking-invoices-widget.d.ts.map +1 -0
- package/dist/admin/booking-invoices-widget.js +204 -0
- package/dist/admin/booking-payment-policy-widget.d.ts +21 -0
- package/dist/admin/booking-payment-policy-widget.d.ts.map +1 -0
- package/dist/admin/booking-payment-policy-widget.js +128 -0
- package/dist/admin/booking-pending-payment-sessions-widget.d.ts +24 -0
- package/dist/admin/booking-pending-payment-sessions-widget.d.ts.map +1 -0
- package/dist/admin/booking-pending-payment-sessions-widget.js +139 -0
- package/dist/admin/credit-note-dialog.d.ts +9 -0
- package/dist/admin/credit-note-dialog.d.ts.map +1 -0
- package/dist/admin/credit-note-dialog.js +70 -0
- package/dist/admin/finance-shared.d.ts +7 -0
- package/dist/admin/finance-shared.d.ts.map +1 -0
- package/dist/admin/finance-shared.js +30 -0
- package/dist/admin/index.d.ts +99 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +286 -0
- package/dist/admin/invoice-detail-host.d.ts +19 -0
- package/dist/admin/invoice-detail-host.d.ts.map +1 -0
- package/dist/admin/invoice-detail-host.js +147 -0
- package/dist/admin/invoice-detail-sections.d.ts +31 -0
- package/dist/admin/invoice-detail-sections.d.ts.map +1 -0
- package/dist/admin/invoice-detail-sections.js +109 -0
- package/dist/admin/invoice-detail-skeleton.d.ts +11 -0
- package/dist/admin/invoice-detail-skeleton.d.ts.map +1 -0
- package/dist/admin/invoice-detail-skeleton.js +33 -0
- package/dist/admin/line-item-dialog.d.ts +10 -0
- package/dist/admin/line-item-dialog.d.ts.map +1 -0
- package/dist/admin/line-item-dialog.js +91 -0
- package/dist/admin/pages/invoice-detail.d.ts +8 -0
- package/dist/admin/pages/invoice-detail.d.ts.map +1 -0
- package/dist/admin/pages/invoice-detail.js +11 -0
- package/dist/admin/pages/invoices-index.d.ts +8 -0
- package/dist/admin/pages/invoices-index.d.ts.map +1 -0
- package/dist/admin/pages/invoices-index.js +14 -0
- package/dist/admin/pages/payment-detail.d.ts +8 -0
- package/dist/admin/pages/payment-detail.d.ts.map +1 -0
- package/dist/admin/pages/payment-detail.js +11 -0
- package/dist/admin/pages/payments-index.d.ts +9 -0
- package/dist/admin/pages/payments-index.d.ts.map +1 -0
- package/dist/admin/pages/payments-index.js +21 -0
- package/dist/admin/pages/profitability.d.ts +10 -0
- package/dist/admin/pages/profitability.d.ts.map +1 -0
- package/dist/admin/pages/profitability.js +32 -0
- package/dist/admin/pages/supplier-invoice-detail.d.ts +20 -0
- package/dist/admin/pages/supplier-invoice-detail.d.ts.map +1 -0
- package/dist/admin/pages/supplier-invoice-detail.js +102 -0
- package/dist/admin/pages/supplier-invoices-index.d.ts +9 -0
- package/dist/admin/pages/supplier-invoices-index.d.ts.map +1 -0
- package/dist/admin/pages/supplier-invoices-index.js +16 -0
- package/dist/admin/payment-detail-host.d.ts +12 -0
- package/dist/admin/payment-detail-host.d.ts.map +1 -0
- package/dist/admin/payment-detail-host.js +108 -0
- package/dist/admin/payment-detail-skeleton.d.ts +8 -0
- package/dist/admin/payment-detail-skeleton.d.ts.map +1 -0
- package/dist/admin/payment-detail-skeleton.js +15 -0
- package/dist/admin/payment-dialog.d.ts +9 -0
- package/dist/admin/payment-dialog.d.ts.map +1 -0
- package/dist/admin/payment-dialog.js +99 -0
- package/dist/admin/record-payment-dialog.d.ts +16 -0
- package/dist/admin/record-payment-dialog.d.ts.map +1 -0
- package/dist/admin/record-payment-dialog.js +219 -0
- package/dist/admin/supplier-payment-policy-widget.d.ts +18 -0
- package/dist/admin/supplier-payment-policy-widget.d.ts.map +1 -0
- package/dist/admin/supplier-payment-policy-widget.js +31 -0
- package/dist/admin/use-supplier-picker.d.ts +19 -0
- package/dist/admin/use-supplier-picker.d.ts.map +1 -0
- package/dist/admin/use-supplier-picker.js +30 -0
- package/dist/checkout-components/collect-payment-dialog.d.ts +45 -0
- package/dist/checkout-components/collect-payment-dialog.d.ts.map +1 -0
- package/dist/checkout-components/collect-payment-dialog.js +121 -0
- package/dist/checkout-components/payment-link-landing-page.d.ts +76 -0
- package/dist/checkout-components/payment-link-landing-page.d.ts.map +1 -0
- package/dist/checkout-components/payment-link-landing-page.js +173 -0
- package/dist/checkout-components/payment-step.d.ts +42 -0
- package/dist/checkout-components/payment-step.d.ts.map +1 -0
- package/dist/checkout-components/payment-step.js +113 -0
- package/dist/checkout-hooks/index.d.ts +5 -0
- package/dist/checkout-hooks/index.d.ts.map +1 -0
- package/dist/checkout-hooks/index.js +4 -0
- package/dist/checkout-hooks/use-checkout-payment-link-config.d.ts +20 -0
- package/dist/checkout-hooks/use-checkout-payment-link-config.d.ts.map +1 -0
- package/dist/checkout-hooks/use-checkout-payment-link-config.js +26 -0
- package/dist/checkout-hooks/use-collect-payment.d.ts +227 -0
- package/dist/checkout-hooks/use-collect-payment.d.ts.map +1 -0
- package/dist/checkout-hooks/use-collect-payment.js +80 -0
- package/dist/checkout-hooks/use-initiate-checkout-collection.d.ts +308 -0
- package/dist/checkout-hooks/use-initiate-checkout-collection.d.ts.map +1 -0
- package/dist/checkout-hooks/use-initiate-checkout-collection.js +35 -0
- package/dist/checkout-hooks/use-preview-checkout-collection.d.ts +65 -0
- package/dist/checkout-hooks/use-preview-checkout-collection.d.ts.map +1 -0
- package/dist/checkout-hooks/use-preview-checkout-collection.js +27 -0
- package/dist/checkout-i18n/en.d.ts +3 -0
- package/dist/checkout-i18n/en.d.ts.map +1 -0
- package/dist/checkout-i18n/en.js +127 -0
- package/dist/checkout-i18n/index.d.ts +5 -0
- package/dist/checkout-i18n/index.d.ts.map +1 -0
- package/dist/checkout-i18n/index.js +3 -0
- package/dist/checkout-i18n/messages.d.ts +121 -0
- package/dist/checkout-i18n/messages.d.ts.map +1 -0
- package/dist/checkout-i18n/messages.js +1 -0
- package/dist/checkout-i18n/provider.d.ts +26 -0
- package/dist/checkout-i18n/provider.d.ts.map +1 -0
- package/dist/checkout-i18n/provider.js +41 -0
- package/dist/checkout-i18n/ro.d.ts +3 -0
- package/dist/checkout-i18n/ro.d.ts.map +1 -0
- package/dist/checkout-i18n/ro.js +127 -0
- package/dist/checkout-types.d.ts +53 -0
- package/dist/checkout-types.d.ts.map +1 -0
- package/dist/checkout-types.js +1 -0
- package/dist/checkout-ui.d.ts +7 -0
- package/dist/checkout-ui.d.ts.map +1 -0
- package/dist/checkout-ui.js +4 -0
- package/dist/checkout.d.ts +5 -0
- package/dist/checkout.d.ts.map +1 -0
- package/dist/checkout.js +3 -0
- package/dist/client.d.ts +16 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +79 -0
- package/dist/components/accountant-portal/body.d.ts +8 -0
- package/dist/components/accountant-portal/body.d.ts.map +1 -0
- package/dist/components/accountant-portal/body.js +114 -0
- package/dist/components/accountant-portal/widgets.d.ts +13 -0
- package/dist/components/accountant-portal/widgets.d.ts.map +1 -0
- package/dist/components/accountant-portal/widgets.js +27 -0
- package/dist/components/accountant-portal.d.ts +10 -0
- package/dist/components/accountant-portal.d.ts.map +1 -0
- package/dist/components/accountant-portal.js +22 -0
- package/dist/components/accountant-share-dialog.d.ts +6 -0
- package/dist/components/accountant-share-dialog.d.ts.map +1 -0
- package/dist/components/accountant-share-dialog.js +53 -0
- package/dist/components/async-combobox.d.ts +33 -0
- package/dist/components/async-combobox.d.ts.map +1 -0
- package/dist/components/async-combobox.js +100 -0
- package/dist/components/booking-invoice-dialog.d.ts +63 -0
- package/dist/components/booking-invoice-dialog.d.ts.map +1 -0
- package/dist/components/booking-invoice-dialog.js +383 -0
- package/dist/components/cost-categories-page.d.ts +5 -0
- package/dist/components/cost-categories-page.d.ts.map +1 -0
- package/dist/components/cost-categories-page.js +30 -0
- package/dist/components/invoice-action-ledger-card.d.ts +15 -0
- package/dist/components/invoice-action-ledger-card.d.ts.map +1 -0
- package/dist/components/invoice-action-ledger-card.js +76 -0
- package/dist/components/invoice-bulk-actions.d.ts +10 -0
- package/dist/components/invoice-bulk-actions.d.ts.map +1 -0
- package/dist/components/invoice-bulk-actions.js +19 -0
- package/dist/components/invoice-detail-page/cards.d.ts +44 -0
- package/dist/components/invoice-detail-page/cards.d.ts.map +1 -0
- package/dist/components/invoice-detail-page/cards.js +43 -0
- package/dist/components/invoice-detail-page/header.d.ts +15 -0
- package/dist/components/invoice-detail-page/header.d.ts.map +1 -0
- package/dist/components/invoice-detail-page/header.js +30 -0
- package/dist/components/invoice-detail-page/notes-dialogs.d.ts +28 -0
- package/dist/components/invoice-detail-page/notes-dialogs.d.ts.map +1 -0
- package/dist/components/invoice-detail-page/notes-dialogs.js +104 -0
- package/dist/components/invoice-detail-page/primitives.d.ts +47 -0
- package/dist/components/invoice-detail-page/primitives.d.ts.map +1 -0
- package/dist/components/invoice-detail-page/primitives.js +76 -0
- package/dist/components/invoice-detail-page-with-action-ledger.d.ts +7 -0
- package/dist/components/invoice-detail-page-with-action-ledger.d.ts.map +1 -0
- package/dist/components/invoice-detail-page-with-action-ledger.js +11 -0
- package/dist/components/invoice-detail-page.d.ts +46 -0
- package/dist/components/invoice-detail-page.d.ts.map +1 -0
- package/dist/components/invoice-detail-page.js +134 -0
- package/dist/components/invoice-dialog.d.ts +9 -0
- package/dist/components/invoice-dialog.d.ts.map +1 -0
- package/dist/components/invoice-dialog.js +145 -0
- package/dist/components/invoice-number-series-dialog.d.ts +9 -0
- package/dist/components/invoice-number-series-dialog.d.ts.map +1 -0
- package/dist/components/invoice-number-series-dialog.js +134 -0
- package/dist/components/invoice-number-series-format.d.ts +3 -0
- package/dist/components/invoice-number-series-format.d.ts.map +1 -0
- package/dist/components/invoice-number-series-format.js +4 -0
- package/dist/components/invoice-number-series-page.d.ts +5 -0
- package/dist/components/invoice-number-series-page.d.ts.map +1 -0
- package/dist/components/invoice-number-series-page.js +55 -0
- package/dist/components/invoice-table-parts.d.ts +25 -0
- package/dist/components/invoice-table-parts.d.ts.map +1 -0
- package/dist/components/invoice-table-parts.js +32 -0
- package/dist/components/invoices-page-skeleton.d.ts +5 -0
- package/dist/components/invoices-page-skeleton.d.ts.map +1 -0
- package/dist/components/invoices-page-skeleton.js +13 -0
- package/dist/components/invoices-page.d.ts +6 -0
- package/dist/components/invoices-page.d.ts.map +1 -0
- package/dist/components/invoices-page.js +145 -0
- package/dist/components/payment-detail-page.d.ts +47 -0
- package/dist/components/payment-detail-page.d.ts.map +1 -0
- package/dist/components/payment-detail-page.js +90 -0
- package/dist/components/payment-policy-form.d.ts +49 -0
- package/dist/components/payment-policy-form.d.ts.map +1 -0
- package/dist/components/payment-policy-form.js +82 -0
- package/dist/components/payments-page/controls.d.ts +23 -0
- package/dist/components/payments-page/controls.d.ts.map +1 -0
- package/dist/components/payments-page/controls.js +20 -0
- package/dist/components/payments-page-skeleton.d.ts +5 -0
- package/dist/components/payments-page-skeleton.d.ts.map +1 -0
- package/dist/components/payments-page-skeleton.js +13 -0
- package/dist/components/payments-page.d.ts +20 -0
- package/dist/components/payments-page.d.ts.map +1 -0
- package/dist/components/payments-page.js +143 -0
- package/dist/components/profitability-page/sections.d.ts +24 -0
- package/dist/components/profitability-page/sections.d.ts.map +1 -0
- package/dist/components/profitability-page/sections.js +43 -0
- package/dist/components/profitability-page.d.ts +13 -0
- package/dist/components/profitability-page.d.ts.map +1 -0
- package/dist/components/profitability-page.js +175 -0
- package/dist/components/record-booking-payment-dialog/shared.d.ts +54 -0
- package/dist/components/record-booking-payment-dialog/shared.d.ts.map +1 -0
- package/dist/components/record-booking-payment-dialog/shared.js +47 -0
- package/dist/components/record-booking-payment-dialog.d.ts +4 -0
- package/dist/components/record-booking-payment-dialog.d.ts.map +1 -0
- package/dist/components/record-booking-payment-dialog.js +256 -0
- package/dist/components/supplier-invoice-detail-page/dialogs.d.ts +34 -0
- package/dist/components/supplier-invoice-detail-page/dialogs.d.ts.map +1 -0
- package/dist/components/supplier-invoice-detail-page/dialogs.js +119 -0
- package/dist/components/supplier-invoice-detail-page/shared.d.ts +64 -0
- package/dist/components/supplier-invoice-detail-page/shared.d.ts.map +1 -0
- package/dist/components/supplier-invoice-detail-page/shared.js +70 -0
- package/dist/components/supplier-invoice-detail-page.d.ts +4 -0
- package/dist/components/supplier-invoice-detail-page.d.ts.map +1 -0
- package/dist/components/supplier-invoice-detail-page.js +101 -0
- package/dist/components/supplier-invoice-form-dialog.d.ts +45 -0
- package/dist/components/supplier-invoice-form-dialog.d.ts.map +1 -0
- package/dist/components/supplier-invoice-form-dialog.js +102 -0
- package/dist/components/supplier-invoices-page.d.ts +14 -0
- package/dist/components/supplier-invoices-page.d.ts.map +1 -0
- package/dist/components/supplier-invoices-page.js +69 -0
- package/dist/components/supplier-payment-dialog.d.ts +7 -0
- package/dist/components/supplier-payment-dialog.d.ts.map +1 -0
- package/dist/components/supplier-payment-dialog.js +103 -0
- package/dist/components/taxes-page/policy-profile-sheet.d.ts +8 -0
- package/dist/components/taxes-page/policy-profile-sheet.d.ts.map +1 -0
- package/dist/components/taxes-page/policy-profile-sheet.js +52 -0
- package/dist/components/taxes-page/policy-rule-sheet.d.ts +10 -0
- package/dist/components/taxes-page/policy-rule-sheet.d.ts.map +1 -0
- package/dist/components/taxes-page/policy-rule-sheet.js +137 -0
- package/dist/components/taxes-page/shared.d.ts +128 -0
- package/dist/components/taxes-page/shared.d.ts.map +1 -0
- package/dist/components/taxes-page/shared.js +288 -0
- package/dist/components/taxes-page/sheets.d.ts +4 -0
- package/dist/components/taxes-page/sheets.d.ts.map +1 -0
- package/dist/components/taxes-page/sheets.js +3 -0
- package/dist/components/taxes-page/tax-sheet.d.ts +9 -0
- package/dist/components/taxes-page/tax-sheet.d.ts.map +1 -0
- package/dist/components/taxes-page/tax-sheet.js +108 -0
- package/dist/components/taxes-page.d.ts +4 -0
- package/dist/components/taxes-page.d.ts.map +1 -0
- package/dist/components/taxes-page.js +165 -0
- package/dist/hooks/index.d.ts +53 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +52 -0
- package/dist/hooks/use-accountant-share-mutation.d.ts +20 -0
- package/dist/hooks/use-accountant-share-mutation.d.ts.map +1 -0
- package/dist/hooks/use-accountant-share-mutation.js +27 -0
- package/dist/hooks/use-accountant-shares.d.ts +13 -0
- package/dist/hooks/use-accountant-shares.d.ts.map +1 -0
- package/dist/hooks/use-accountant-shares.js +8 -0
- package/dist/hooks/use-admin-booking-payments.d.ts +30 -0
- package/dist/hooks/use-admin-booking-payments.d.ts.map +1 -0
- package/dist/hooks/use-admin-booking-payments.js +18 -0
- package/dist/hooks/use-all-payments.d.ts +35 -0
- package/dist/hooks/use-all-payments.d.ts.map +1 -0
- package/dist/hooks/use-all-payments.js +12 -0
- package/dist/hooks/use-booking-guarantees.d.ts +82 -0
- package/dist/hooks/use-booking-guarantees.d.ts.map +1 -0
- package/dist/hooks/use-booking-guarantees.js +46 -0
- package/dist/hooks/use-booking-payment-schedule-regenerate-mutation.d.ts +44 -0
- package/dist/hooks/use-booking-payment-schedule-regenerate-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-payment-schedule-regenerate-mutation.js +27 -0
- package/dist/hooks/use-booking-payment-schedules.d.ts +63 -0
- package/dist/hooks/use-booking-payment-schedules.d.ts.map +1 -0
- package/dist/hooks/use-booking-payment-schedules.js +47 -0
- package/dist/hooks/use-cost-categories.d.ts +14 -0
- package/dist/hooks/use-cost-categories.d.ts.map +1 -0
- package/dist/hooks/use-cost-categories.js +9 -0
- package/dist/hooks/use-cost-category-mutation.d.ts +31 -0
- package/dist/hooks/use-cost-category-mutation.d.ts.map +1 -0
- package/dist/hooks/use-cost-category-mutation.js +27 -0
- package/dist/hooks/use-departure-profitability.d.ts +56 -0
- package/dist/hooks/use-departure-profitability.d.ts.map +1 -0
- package/dist/hooks/use-departure-profitability.js +12 -0
- package/dist/hooks/use-finance-action-ledger.d.ts +94 -0
- package/dist/hooks/use-finance-action-ledger.d.ts.map +1 -0
- package/dist/hooks/use-finance-action-ledger.js +20 -0
- package/dist/hooks/use-invoice-attachment-mutation.d.ts +43 -0
- package/dist/hooks/use-invoice-attachment-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-attachment-mutation.js +39 -0
- package/dist/hooks/use-invoice-attachments.d.ts +18 -0
- package/dist/hooks/use-invoice-attachments.d.ts.map +1 -0
- package/dist/hooks/use-invoice-attachments.js +12 -0
- package/dist/hooks/use-invoice-bulk-status-mutation.d.ts +51 -0
- package/dist/hooks/use-invoice-bulk-status-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-bulk-status-mutation.js +66 -0
- package/dist/hooks/use-invoice-credit-note-mutation.d.ts +38 -0
- package/dist/hooks/use-invoice-credit-note-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-credit-note-mutation.js +35 -0
- package/dist/hooks/use-invoice-credit-notes.d.ts +17 -0
- package/dist/hooks/use-invoice-credit-notes.d.ts.map +1 -0
- package/dist/hooks/use-invoice-credit-notes.js +12 -0
- package/dist/hooks/use-invoice-fx-rate.d.ts +19 -0
- package/dist/hooks/use-invoice-fx-rate.d.ts.map +1 -0
- package/dist/hooks/use-invoice-fx-rate.js +13 -0
- package/dist/hooks/use-invoice-line-item-mutation.d.ts +40 -0
- package/dist/hooks/use-invoice-line-item-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-line-item-mutation.js +42 -0
- package/dist/hooks/use-invoice-line-items.d.ts +17 -0
- package/dist/hooks/use-invoice-line-items.d.ts.map +1 -0
- package/dist/hooks/use-invoice-line-items.js +12 -0
- package/dist/hooks/use-invoice-mutation.d.ts +225 -0
- package/dist/hooks/use-invoice-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-mutation.js +121 -0
- package/dist/hooks/use-invoice-note-mutation.d.ts +11 -0
- package/dist/hooks/use-invoice-note-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-note-mutation.js +23 -0
- package/dist/hooks/use-invoice-notes.d.ts +13 -0
- package/dist/hooks/use-invoice-notes.d.ts.map +1 -0
- package/dist/hooks/use-invoice-notes.js +12 -0
- package/dist/hooks/use-invoice-number-series-mutation.d.ts +62 -0
- package/dist/hooks/use-invoice-number-series-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-number-series-mutation.js +39 -0
- package/dist/hooks/use-invoice-number-series.d.ts +28 -0
- package/dist/hooks/use-invoice-number-series.d.ts.map +1 -0
- package/dist/hooks/use-invoice-number-series.js +12 -0
- package/dist/hooks/use-invoice-payment-mutation.d.ts +29 -0
- package/dist/hooks/use-invoice-payment-mutation.d.ts.map +1 -0
- package/dist/hooks/use-invoice-payment-mutation.js +35 -0
- package/dist/hooks/use-invoice-payments.d.ts +21 -0
- package/dist/hooks/use-invoice-payments.d.ts.map +1 -0
- package/dist/hooks/use-invoice-payments.js +12 -0
- package/dist/hooks/use-invoice.d.ts +32 -0
- package/dist/hooks/use-invoice.d.ts.map +1 -0
- package/dist/hooks/use-invoice.js +12 -0
- package/dist/hooks/use-invoices.d.ts +36 -0
- package/dist/hooks/use-invoices.d.ts.map +1 -0
- package/dist/hooks/use-invoices.js +12 -0
- package/dist/hooks/use-payment-mutation.d.ts +57 -0
- package/dist/hooks/use-payment-mutation.d.ts.map +1 -0
- package/dist/hooks/use-payment-mutation.js +59 -0
- package/dist/hooks/use-payment-session-mutation.d.ts +205 -0
- package/dist/hooks/use-payment-session-mutation.d.ts.map +1 -0
- package/dist/hooks/use-payment-session-mutation.js +38 -0
- package/dist/hooks/use-payment-sessions.d.ts +97 -0
- package/dist/hooks/use-payment-sessions.d.ts.map +1 -0
- package/dist/hooks/use-payment-sessions.js +17 -0
- package/dist/hooks/use-payment.d.ts +31 -0
- package/dist/hooks/use-payment.d.ts.map +1 -0
- package/dist/hooks/use-payment.js +12 -0
- package/dist/hooks/use-product-profitability.d.ts +52 -0
- package/dist/hooks/use-product-profitability.d.ts.map +1 -0
- package/dist/hooks/use-product-profitability.js +12 -0
- package/dist/hooks/use-public-booking-documents.d.ts +29 -0
- package/dist/hooks/use-public-booking-documents.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-documents.js +12 -0
- package/dist/hooks/use-public-booking-payment-options.d.ts +47 -0
- package/dist/hooks/use-public-booking-payment-options.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-payment-options.js +12 -0
- package/dist/hooks/use-public-booking-payments.d.ts +24 -0
- package/dist/hooks/use-public-booking-payments.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-payments.js +12 -0
- package/dist/hooks/use-public-finance-document-by-reference.d.ts +27 -0
- package/dist/hooks/use-public-finance-document-by-reference.d.ts.map +1 -0
- package/dist/hooks/use-public-finance-document-by-reference.js +12 -0
- package/dist/hooks/use-public-payment-session-mutation.d.ts +82 -0
- package/dist/hooks/use-public-payment-session-mutation.d.ts.map +1 -0
- package/dist/hooks/use-public-payment-session-mutation.js +33 -0
- package/dist/hooks/use-public-payment-session.d.ts +73 -0
- package/dist/hooks/use-public-payment-session.d.ts.map +1 -0
- package/dist/hooks/use-public-payment-session.js +12 -0
- package/dist/hooks/use-public-voucher-validation-mutation.d.ts +23 -0
- package/dist/hooks/use-public-voucher-validation-mutation.d.ts.map +1 -0
- package/dist/hooks/use-public-voucher-validation-mutation.js +17 -0
- package/dist/hooks/use-supplier-invoice-attachments.d.ts +17 -0
- package/dist/hooks/use-supplier-invoice-attachments.d.ts.map +1 -0
- package/dist/hooks/use-supplier-invoice-attachments.js +12 -0
- package/dist/hooks/use-supplier-invoice-mutation.d.ts +353 -0
- package/dist/hooks/use-supplier-invoice-mutation.d.ts.map +1 -0
- package/dist/hooks/use-supplier-invoice-mutation.js +81 -0
- package/dist/hooks/use-supplier-invoice-payments.d.ts +26 -0
- package/dist/hooks/use-supplier-invoice-payments.d.ts.map +1 -0
- package/dist/hooks/use-supplier-invoice-payments.js +12 -0
- package/dist/hooks/use-supplier-invoice.d.ts +65 -0
- package/dist/hooks/use-supplier-invoice.d.ts.map +1 -0
- package/dist/hooks/use-supplier-invoice.js +12 -0
- package/dist/hooks/use-supplier-invoices.d.ts +36 -0
- package/dist/hooks/use-supplier-invoices.d.ts.map +1 -0
- package/dist/hooks/use-supplier-invoices.js +12 -0
- package/dist/hooks/use-supplier-payment-mutation.d.ts +55 -0
- package/dist/hooks/use-supplier-payment-mutation.d.ts.map +1 -0
- package/dist/hooks/use-supplier-payment-mutation.js +35 -0
- package/dist/hooks/use-supplier-payments.d.ts +27 -0
- package/dist/hooks/use-supplier-payments.d.ts.map +1 -0
- package/dist/hooks/use-supplier-payments.js +12 -0
- package/dist/hooks/use-traveler-profitability.d.ts +24 -0
- package/dist/hooks/use-traveler-profitability.d.ts.map +1 -0
- package/dist/hooks/use-traveler-profitability.js +11 -0
- package/dist/hooks/use-voucher-mutation.d.ts +105 -0
- package/dist/hooks/use-voucher-mutation.d.ts.map +1 -0
- package/dist/hooks/use-voucher-mutation.js +50 -0
- package/dist/hooks/use-voucher.d.ts +38 -0
- package/dist/hooks/use-voucher.d.ts.map +1 -0
- package/dist/hooks/use-voucher.js +17 -0
- package/dist/hooks/use-vouchers.d.ts +34 -0
- package/dist/hooks/use-vouchers.d.ts.map +1 -0
- package/dist/hooks/use-vouchers.js +18 -0
- package/dist/i18n/en/invoices.d.ts +278 -0
- package/dist/i18n/en/invoices.d.ts.map +1 -0
- package/dist/i18n/en/invoices.js +277 -0
- package/dist/i18n/en/numberingAndPayments.d.ts +387 -0
- package/dist/i18n/en/numberingAndPayments.d.ts.map +1 -0
- package/dist/i18n/en/numberingAndPayments.js +386 -0
- package/dist/i18n/en/profitability.d.ts +147 -0
- package/dist/i18n/en/profitability.d.ts.map +1 -0
- package/dist/i18n/en/profitability.js +146 -0
- package/dist/i18n/en/suppliers.d.ts +187 -0
- package/dist/i18n/en/suppliers.d.ts.map +1 -0
- package/dist/i18n/en/suppliers.js +186 -0
- package/dist/i18n/en.d.ts +998 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +22 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/messages/core.d.ts +18 -0
- package/dist/i18n/messages/core.d.ts.map +1 -0
- package/dist/i18n/messages/core.js +30 -0
- package/dist/i18n/messages/invoices.d.ts +252 -0
- package/dist/i18n/messages/invoices.d.ts.map +1 -0
- package/dist/i18n/messages/invoices.js +1 -0
- package/dist/i18n/messages/numberingAndPayments.d.ts +277 -0
- package/dist/i18n/messages/numberingAndPayments.d.ts.map +1 -0
- package/dist/i18n/messages/numberingAndPayments.js +1 -0
- package/dist/i18n/messages/profitability.d.ts +151 -0
- package/dist/i18n/messages/profitability.d.ts.map +1 -0
- package/dist/i18n/messages/profitability.js +1 -0
- package/dist/i18n/messages/suppliers.d.ts +167 -0
- package/dist/i18n/messages/suppliers.d.ts.map +1 -0
- package/dist/i18n/messages/suppliers.js +1 -0
- package/dist/i18n/messages.d.ts +29 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +1 -0
- package/dist/i18n/provider.d.ts +2018 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +44 -0
- package/dist/i18n/ro/invoices.d.ts +278 -0
- package/dist/i18n/ro/invoices.d.ts.map +1 -0
- package/dist/i18n/ro/invoices.js +277 -0
- package/dist/i18n/ro/numberingAndPayments.d.ts +387 -0
- package/dist/i18n/ro/numberingAndPayments.d.ts.map +1 -0
- package/dist/i18n/ro/numberingAndPayments.js +386 -0
- package/dist/i18n/ro/profitability.d.ts +147 -0
- package/dist/i18n/ro/profitability.d.ts.map +1 -0
- package/dist/i18n/ro/profitability.js +146 -0
- package/dist/i18n/ro/suppliers.d.ts +187 -0
- package/dist/i18n/ro/suppliers.d.ts.map +1 -0
- package/dist/i18n/ro/suppliers.js +186 -0
- package/dist/i18n/ro.d.ts +998 -0
- package/dist/i18n/ro.d.ts.map +1 -0
- package/dist/i18n/ro.js +22 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/operations.d.ts +484 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +52 -0
- package/dist/provider.d.ts +2 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +1 -0
- package/dist/query-keys.d.ts +195 -0
- package/dist/query-keys.d.ts.map +1 -0
- package/dist/query-keys.js +49 -0
- package/dist/query-options/public-reporting.d.ts +2129 -0
- package/dist/query-options/public-reporting.d.ts.map +1 -0
- package/dist/query-options/public-reporting.js +193 -0
- package/dist/query-options-action-ledger.d.ts +382 -0
- package/dist/query-options-action-ledger.d.ts.map +1 -0
- package/dist/query-options-action-ledger.js +36 -0
- package/dist/query-options.d.ts +2057 -0
- package/dist/query-options.d.ts.map +1 -0
- package/dist/query-options.js +328 -0
- package/dist/schemas/accountant.d.ts +168 -0
- package/dist/schemas/accountant.d.ts.map +1 -0
- package/dist/schemas/accountant.js +53 -0
- package/dist/schemas/action-ledger.d.ts +206 -0
- package/dist/schemas/action-ledger.d.ts.map +1 -0
- package/dist/schemas/action-ledger.js +83 -0
- package/dist/schemas/common.d.ts +17 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +10 -0
- package/dist/schemas/invoice.d.ts +1451 -0
- package/dist/schemas/invoice.d.ts.map +1 -0
- package/dist/schemas/invoice.js +438 -0
- package/dist/schemas/profitability.d.ts +333 -0
- package/dist/schemas/profitability.d.ts.map +1 -0
- package/dist/schemas/profitability.js +84 -0
- package/dist/schemas/public.d.ts +481 -0
- package/dist/schemas/public.d.ts.map +1 -0
- package/dist/schemas/public.js +9 -0
- package/dist/schemas/responses.d.ts +632 -0
- package/dist/schemas/responses.d.ts.map +1 -0
- package/dist/schemas/responses.js +27 -0
- package/dist/schemas/supplier.d.ts +226 -0
- package/dist/schemas/supplier.d.ts.map +1 -0
- package/dist/schemas/supplier.js +103 -0
- package/dist/schemas/vouchers.d.ts +283 -0
- package/dist/schemas/vouchers.d.ts.map +1 -0
- package/dist/schemas/vouchers.js +49 -0
- package/dist/schemas.d.ts +10 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +9 -0
- package/dist/ui.d.ts +27 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +26 -0
- package/package.json +181 -0
- 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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"}
|