@voyant-travel/bookings-react 0.119.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +87 -0
- package/dist/admin/booking-contract-dialog.d.ts +22 -0
- package/dist/admin/booking-contract-dialog.d.ts.map +1 -0
- package/dist/admin/booking-contract-dialog.js +161 -0
- package/dist/admin/booking-detail-host.d.ts +103 -0
- package/dist/admin/booking-detail-host.d.ts.map +1 -0
- package/dist/admin/booking-detail-host.js +127 -0
- package/dist/admin/booking-detail-skeleton.d.ts +7 -0
- package/dist/admin/booking-detail-skeleton.d.ts.map +1 -0
- package/dist/admin/booking-detail-skeleton.js +24 -0
- package/dist/admin/booking-documents-table.d.ts +13 -0
- package/dist/admin/booking-documents-table.d.ts.map +1 -0
- package/dist/admin/booking-documents-table.js +259 -0
- package/dist/admin/booking-invoice-sheet.d.ts +18 -0
- package/dist/admin/booking-invoice-sheet.d.ts.map +1 -0
- package/dist/admin/booking-invoice-sheet.js +101 -0
- package/dist/admin/booking-journey-host.d.ts +24 -0
- package/dist/admin/booking-journey-host.d.ts.map +1 -0
- package/dist/admin/booking-journey-host.js +278 -0
- package/dist/admin/bookings-host.d.ts +26 -0
- package/dist/admin/bookings-host.d.ts.map +1 -0
- package/dist/admin/bookings-host.js +18 -0
- package/dist/admin/bookings-list-skeleton.d.ts +10 -0
- package/dist/admin/bookings-list-skeleton.d.ts.map +1 -0
- package/dist/admin/bookings-list-skeleton.js +25 -0
- package/dist/admin/index.d.ts +273 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +331 -0
- package/dist/admin/journey-billing-duplicate-warning.d.ts +3 -0
- package/dist/admin/journey-billing-duplicate-warning.d.ts.map +1 -0
- package/dist/admin/journey-billing-duplicate-warning.js +26 -0
- package/dist/admin/journey-departure-picker.d.ts +7 -0
- package/dist/admin/journey-departure-picker.d.ts.map +1 -0
- package/dist/admin/journey-departure-picker.js +100 -0
- package/dist/admin/journey-units-picker.d.ts +11 -0
- package/dist/admin/journey-units-picker.d.ts.map +1 -0
- package/dist/admin/journey-units-picker.js +60 -0
- package/dist/admin/journey-voucher-picker.d.ts +3 -0
- package/dist/admin/journey-voucher-picker.d.ts.map +1 -0
- package/dist/admin/journey-voucher-picker.js +71 -0
- package/dist/admin/pages/booking-compose-page.d.ts +9 -0
- package/dist/admin/pages/booking-compose-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-compose-page.js +17 -0
- package/dist/admin/pages/booking-detail-page.d.ts +11 -0
- package/dist/admin/pages/booking-detail-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-detail-page.js +14 -0
- package/dist/admin/pages/booking-journey-page.d.ts +12 -0
- package/dist/admin/pages/booking-journey-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-journey-page.js +26 -0
- package/dist/admin/pages/booking-new-page.d.ts +15 -0
- package/dist/admin/pages/booking-new-page.d.ts.map +1 -0
- package/dist/admin/pages/booking-new-page.js +50 -0
- package/dist/admin/pages/bookings-index-page.d.ts +20 -0
- package/dist/admin/pages/bookings-index-page.d.ts.map +1 -0
- package/dist/admin/pages/bookings-index-page.js +18 -0
- package/dist/admin/person-bookings-widget.d.ts +13 -0
- package/dist/admin/person-bookings-widget.d.ts.map +1 -0
- package/dist/admin/person-bookings-widget.js +48 -0
- package/dist/admin/slots.d.ts +31 -0
- package/dist/admin/slots.d.ts.map +1 -0
- package/dist/admin/slots.js +30 -0
- package/dist/admin/use-booking-action-ledger-events.d.ts +15 -0
- package/dist/admin/use-booking-action-ledger-events.d.ts.map +1 -0
- package/dist/admin/use-booking-action-ledger-events.js +66 -0
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +59 -0
- package/dist/components/booking-activity-timeline.d.ts +32 -0
- package/dist/components/booking-activity-timeline.d.ts.map +1 -0
- package/dist/components/booking-activity-timeline.js +147 -0
- package/dist/components/booking-billing-dialog.d.ts +16 -0
- package/dist/components/booking-billing-dialog.d.ts.map +1 -0
- package/dist/components/booking-billing-dialog.js +315 -0
- package/dist/components/booking-cancellation-dialog.d.ts +18 -0
- package/dist/components/booking-cancellation-dialog.d.ts.map +1 -0
- package/dist/components/booking-cancellation-dialog.js +79 -0
- package/dist/components/booking-combobox.d.ts +13 -0
- package/dist/components/booking-combobox.d.ts.map +1 -0
- package/dist/components/booking-combobox.js +44 -0
- package/dist/components/booking-create-form-utils.d.ts +56 -0
- package/dist/components/booking-create-form-utils.d.ts.map +1 -0
- package/dist/components/booking-create-form-utils.js +216 -0
- package/dist/components/booking-create-page.d.ts +14 -0
- package/dist/components/booking-create-page.d.ts.map +1 -0
- package/dist/components/booking-create-page.js +11 -0
- package/dist/components/booking-create-preview-card.d.ts +26 -0
- package/dist/components/booking-create-preview-card.d.ts.map +1 -0
- package/dist/components/booking-create-preview-card.js +107 -0
- package/dist/components/booking-create-product-extras-picker.d.ts +18 -0
- package/dist/components/booking-create-product-extras-picker.d.ts.map +1 -0
- package/dist/components/booking-create-product-extras-picker.js +82 -0
- package/dist/components/booking-create-sheet.d.ts +34 -0
- package/dist/components/booking-create-sheet.d.ts.map +1 -0
- package/dist/components/booking-create-sheet.js +811 -0
- package/dist/components/booking-create-utils.d.ts +66 -0
- package/dist/components/booking-create-utils.d.ts.map +1 -0
- package/dist/components/booking-create-utils.js +185 -0
- package/dist/components/booking-detail-page.d.ts +126 -0
- package/dist/components/booking-detail-page.d.ts.map +1 -0
- package/dist/components/booking-detail-page.js +264 -0
- package/dist/components/booking-dialog.d.ts +28 -0
- package/dist/components/booking-dialog.d.ts.map +1 -0
- package/dist/components/booking-dialog.js +130 -0
- package/dist/components/booking-document-dialog.d.ts +8 -0
- package/dist/components/booking-document-dialog.d.ts.map +1 -0
- package/dist/components/booking-document-dialog.js +83 -0
- package/dist/components/booking-document-list.d.ts +5 -0
- package/dist/components/booking-document-list.d.ts.map +1 -0
- package/dist/components/booking-document-list.js +43 -0
- package/dist/components/booking-group-link-dialog.d.ts +10 -0
- package/dist/components/booking-group-link-dialog.d.ts.map +1 -0
- package/dist/components/booking-group-link-dialog.js +79 -0
- package/dist/components/booking-group-section.d.ts +27 -0
- package/dist/components/booking-group-section.d.ts.map +1 -0
- package/dist/components/booking-group-section.js +51 -0
- package/dist/components/booking-guarantee-dialog.d.ts +10 -0
- package/dist/components/booking-guarantee-dialog.d.ts.map +1 -0
- package/dist/components/booking-guarantee-dialog.js +123 -0
- package/dist/components/booking-guarantee-list.d.ts +5 -0
- package/dist/components/booking-guarantee-list.d.ts.map +1 -0
- package/dist/components/booking-guarantee-list.js +86 -0
- package/dist/components/booking-item-dialog.d.ts +10 -0
- package/dist/components/booking-item-dialog.d.ts.map +1 -0
- package/dist/components/booking-item-dialog.js +155 -0
- package/dist/components/booking-item-list.d.ts +12 -0
- package/dist/components/booking-item-list.d.ts.map +1 -0
- package/dist/components/booking-item-list.js +191 -0
- package/dist/components/booking-item-travelers.d.ts +6 -0
- package/dist/components/booking-item-travelers.d.ts.map +1 -0
- package/dist/components/booking-item-travelers.js +57 -0
- package/dist/components/booking-list-filters.d.ts +43 -0
- package/dist/components/booking-list-filters.d.ts.map +1 -0
- package/dist/components/booking-list-filters.js +192 -0
- package/dist/components/booking-list.d.ts +50 -0
- package/dist/components/booking-list.d.ts.map +1 -0
- package/dist/components/booking-list.js +352 -0
- package/dist/components/booking-note-dialog.d.ts +16 -0
- package/dist/components/booking-note-dialog.d.ts.map +1 -0
- package/dist/components/booking-note-dialog.js +41 -0
- package/dist/components/booking-notes.d.ts +5 -0
- package/dist/components/booking-notes.d.ts.map +1 -0
- package/dist/components/booking-notes.js +45 -0
- package/dist/components/booking-payment-reconciliation-banner.d.ts +5 -0
- package/dist/components/booking-payment-reconciliation-banner.d.ts.map +1 -0
- package/dist/components/booking-payment-reconciliation-banner.js +91 -0
- package/dist/components/booking-payment-schedule-dialog.d.ts +10 -0
- package/dist/components/booking-payment-schedule-dialog.d.ts.map +1 -0
- package/dist/components/booking-payment-schedule-dialog.js +117 -0
- package/dist/components/booking-payment-schedule-list.d.ts +10 -0
- package/dist/components/booking-payment-schedule-list.d.ts.map +1 -0
- package/dist/components/booking-payment-schedule-list.js +217 -0
- package/dist/components/booking-payments-summary.d.ts +83 -0
- package/dist/components/booking-payments-summary.d.ts.map +1 -0
- package/dist/components/booking-payments-summary.js +176 -0
- package/dist/components/booking-quick-view-sheet.d.ts +14 -0
- package/dist/components/booking-quick-view-sheet.d.ts.map +1 -0
- package/dist/components/booking-quick-view-sheet.js +283 -0
- package/dist/components/bookings-page.d.ts +19 -0
- package/dist/components/bookings-page.d.ts.map +1 -0
- package/dist/components/bookings-page.js +9 -0
- package/dist/components/file-dropzone.d.ts +25 -0
- package/dist/components/file-dropzone.d.ts.map +1 -0
- package/dist/components/file-dropzone.js +102 -0
- package/dist/components/icon-action-button.d.ts +18 -0
- package/dist/components/icon-action-button.d.ts.map +1 -0
- package/dist/components/icon-action-button.js +13 -0
- package/dist/components/option-units-stepper-section.d.ts +111 -0
- package/dist/components/option-units-stepper-section.d.ts.map +1 -0
- package/dist/components/option-units-stepper-section.js +276 -0
- package/dist/components/payment-schedule-section.d.ts +91 -0
- package/dist/components/payment-schedule-section.d.ts.map +1 -0
- package/dist/components/payment-schedule-section.js +206 -0
- package/dist/components/person-picker-section.d.ts +71 -0
- package/dist/components/person-picker-section.d.ts.map +1 -0
- package/dist/components/person-picker-section.js +160 -0
- package/dist/components/price-breakdown-section.d.ts +83 -0
- package/dist/components/price-breakdown-section.d.ts.map +1 -0
- package/dist/components/price-breakdown-section.js +278 -0
- package/dist/components/product-picker-section.d.ts +29 -0
- package/dist/components/product-picker-section.d.ts.map +1 -0
- package/dist/components/product-picker-section.js +74 -0
- package/dist/components/shared-room-section.d.ts +40 -0
- package/dist/components/shared-room-section.d.ts.map +1 -0
- package/dist/components/shared-room-section.js +99 -0
- package/dist/components/status-badge.d.ts +24 -0
- package/dist/components/status-badge.d.ts.map +1 -0
- package/dist/components/status-badge.js +65 -0
- package/dist/components/status-change-dialog.d.ts +10 -0
- package/dist/components/status-change-dialog.d.ts.map +1 -0
- package/dist/components/status-change-dialog.js +57 -0
- package/dist/components/supplier-status-dialog.d.ts +10 -0
- package/dist/components/supplier-status-dialog.d.ts.map +1 -0
- package/dist/components/supplier-status-dialog.js +98 -0
- package/dist/components/supplier-status-list.d.ts +5 -0
- package/dist/components/supplier-status-list.d.ts.map +1 -0
- package/dist/components/supplier-status-list.js +115 -0
- package/dist/components/traveler-category-buttons.d.ts +26 -0
- package/dist/components/traveler-category-buttons.d.ts.map +1 -0
- package/dist/components/traveler-category-buttons.js +35 -0
- package/dist/components/traveler-dialog.d.ts +10 -0
- package/dist/components/traveler-dialog.d.ts.map +1 -0
- package/dist/components/traveler-dialog.js +256 -0
- package/dist/components/traveler-list.d.ts +6 -0
- package/dist/components/traveler-list.d.ts.map +1 -0
- package/dist/components/traveler-list.js +295 -0
- package/dist/components/travelers-section-controls.d.ts +52 -0
- package/dist/components/travelers-section-controls.d.ts.map +1 -0
- package/dist/components/travelers-section-controls.js +206 -0
- package/dist/components/travelers-section.d.ts +159 -0
- package/dist/components/travelers-section.d.ts.map +1 -0
- package/dist/components/travelers-section.js +355 -0
- package/dist/components/voucher-picker-section.d.ts +50 -0
- package/dist/components/voucher-picker-section.d.ts.map +1 -0
- package/dist/components/voucher-picker-section.js +79 -0
- package/dist/extras/client.d.ts +14 -0
- package/dist/extras/client.d.ts.map +1 -0
- package/dist/extras/client.js +58 -0
- package/dist/extras/components/extra-catalog-card.d.ts +13 -0
- package/dist/extras/components/extra-catalog-card.d.ts.map +1 -0
- package/dist/extras/components/extra-catalog-card.js +52 -0
- package/dist/extras/components/product-combobox.d.ts +9 -0
- package/dist/extras/components/product-combobox.d.ts.map +1 -0
- package/dist/extras/components/product-combobox.js +46 -0
- package/dist/extras/components/slot-extras-manifest-panel.d.ts +6 -0
- package/dist/extras/components/slot-extras-manifest-panel.d.ts.map +1 -0
- package/dist/extras/components/slot-extras-manifest-panel.js +108 -0
- package/dist/extras/hooks/index.d.ts +5 -0
- package/dist/extras/hooks/index.d.ts.map +1 -0
- package/dist/extras/hooks/index.js +4 -0
- package/dist/extras/hooks/use-product-extra.d.ts +24 -0
- package/dist/extras/hooks/use-product-extra.d.ts.map +1 -0
- package/dist/extras/hooks/use-product-extra.js +12 -0
- package/dist/extras/hooks/use-product-extras.d.ts +30 -0
- package/dist/extras/hooks/use-product-extras.d.ts.map +1 -0
- package/dist/extras/hooks/use-product-extras.js +12 -0
- package/dist/extras/hooks/use-slot-extra-manifest-mutation.d.ts +48 -0
- package/dist/extras/hooks/use-slot-extra-manifest-mutation.d.ts.map +1 -0
- package/dist/extras/hooks/use-slot-extra-manifest-mutation.js +26 -0
- package/dist/extras/hooks/use-slot-extra-manifest.d.ts +68 -0
- package/dist/extras/hooks/use-slot-extra-manifest.d.ts.map +1 -0
- package/dist/extras/hooks/use-slot-extra-manifest.js +11 -0
- package/dist/extras/i18n/en.d.ts +52 -0
- package/dist/extras/i18n/en.d.ts.map +1 -0
- package/dist/extras/i18n/en.js +51 -0
- package/dist/extras/i18n/index.d.ts +5 -0
- package/dist/extras/i18n/index.d.ts.map +1 -0
- package/dist/extras/i18n/index.js +3 -0
- package/dist/extras/i18n/messages.d.ts +37 -0
- package/dist/extras/i18n/messages.d.ts.map +1 -0
- package/dist/extras/i18n/messages.js +1 -0
- package/dist/extras/i18n/provider.d.ts +126 -0
- package/dist/extras/i18n/provider.d.ts.map +1 -0
- package/dist/extras/i18n/provider.js +44 -0
- package/dist/extras/i18n/ro.d.ts +52 -0
- package/dist/extras/i18n/ro.d.ts.map +1 -0
- package/dist/extras/i18n/ro.js +51 -0
- package/dist/extras/index.d.ts +7 -0
- package/dist/extras/index.d.ts.map +1 -0
- package/dist/extras/index.js +6 -0
- package/dist/extras/provider.d.ts +2 -0
- package/dist/extras/provider.d.ts.map +1 -0
- package/dist/extras/provider.js +1 -0
- package/dist/extras/query-keys.d.ts +16 -0
- package/dist/extras/query-keys.d.ts.map +1 -0
- package/dist/extras/query-keys.js +8 -0
- package/dist/extras/query-options.d.ts +455 -0
- package/dist/extras/query-options.d.ts.map +1 -0
- package/dist/extras/query-options.js +44 -0
- package/dist/extras/schemas.d.ts +416 -0
- package/dist/extras/schemas.d.ts.map +1 -0
- package/dist/extras/schemas.js +89 -0
- package/dist/extras/ui.d.ts +4 -0
- package/dist/extras/ui.d.ts.map +1 -0
- package/dist/extras/ui.js +3 -0
- package/dist/extras.d.ts +10 -0
- package/dist/extras.d.ts.map +1 -0
- package/dist/extras.js +9 -0
- package/dist/hooks/index.d.ts +36 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +35 -0
- package/dist/hooks/use-booking-action-ledger.d.ts +63 -0
- package/dist/hooks/use-booking-action-ledger.d.ts.map +1 -0
- package/dist/hooks/use-booking-action-ledger.js +34 -0
- package/dist/hooks/use-booking-activity.d.ts +17 -0
- package/dist/hooks/use-booking-activity.d.ts.map +1 -0
- package/dist/hooks/use-booking-activity.js +12 -0
- package/dist/hooks/use-booking-cancel-mutation.d.ts +69 -0
- package/dist/hooks/use-booking-cancel-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-cancel-mutation.js +24 -0
- package/dist/hooks/use-booking-contract-generation.d.ts +31 -0
- package/dist/hooks/use-booking-contract-generation.d.ts.map +1 -0
- package/dist/hooks/use-booking-contract-generation.js +36 -0
- package/dist/hooks/use-booking-convert-mutation.d.ts +81 -0
- package/dist/hooks/use-booking-convert-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-convert-mutation.js +24 -0
- package/dist/hooks/use-booking-create-mutation.d.ts +337 -0
- package/dist/hooks/use-booking-create-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-create-mutation.js +43 -0
- package/dist/hooks/use-booking-documents.d.ts +41 -0
- package/dist/hooks/use-booking-documents.d.ts.map +1 -0
- package/dist/hooks/use-booking-documents.js +46 -0
- package/dist/hooks/use-booking-dual-create-mutation.d.ts +338 -0
- package/dist/hooks/use-booking-dual-create-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-dual-create-mutation.js +45 -0
- package/dist/hooks/use-booking-group-for-booking.d.ts +24 -0
- package/dist/hooks/use-booking-group-for-booking.d.ts.map +1 -0
- package/dist/hooks/use-booking-group-for-booking.js +12 -0
- package/dist/hooks/use-booking-group-member-mutation.d.ts +27 -0
- package/dist/hooks/use-booking-group-member-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-group-member-mutation.js +38 -0
- package/dist/hooks/use-booking-group-mutation.d.ts +40 -0
- package/dist/hooks/use-booking-group-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-group-mutation.js +32 -0
- package/dist/hooks/use-booking-group.d.ts +85 -0
- package/dist/hooks/use-booking-group.d.ts.map +1 -0
- package/dist/hooks/use-booking-group.js +12 -0
- package/dist/hooks/use-booking-groups.d.ts +21 -0
- package/dist/hooks/use-booking-groups.d.ts.map +1 -0
- package/dist/hooks/use-booking-groups.js +12 -0
- package/dist/hooks/use-booking-item-mutation.d.ts +101 -0
- package/dist/hooks/use-booking-item-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-item-mutation.js +42 -0
- package/dist/hooks/use-booking-item-travelers.d.ts +32 -0
- package/dist/hooks/use-booking-item-travelers.d.ts.map +1 -0
- package/dist/hooks/use-booking-item-travelers.js +48 -0
- package/dist/hooks/use-booking-items.d.ts +36 -0
- package/dist/hooks/use-booking-items.d.ts.map +1 -0
- package/dist/hooks/use-booking-items.js +12 -0
- package/dist/hooks/use-booking-mutation.d.ts +158 -0
- package/dist/hooks/use-booking-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-mutation.js +39 -0
- package/dist/hooks/use-booking-note-mutation.d.ts +39 -0
- package/dist/hooks/use-booking-note-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-note-mutation.js +44 -0
- package/dist/hooks/use-booking-notes.d.ts +15 -0
- package/dist/hooks/use-booking-notes.d.ts.map +1 -0
- package/dist/hooks/use-booking-notes.js +12 -0
- package/dist/hooks/use-booking-primary-product.d.ts +28 -0
- package/dist/hooks/use-booking-primary-product.d.ts.map +1 -0
- package/dist/hooks/use-booking-primary-product.js +20 -0
- package/dist/hooks/use-booking-status-mutation.d.ts +156 -0
- package/dist/hooks/use-booking-status-mutation.d.ts.map +1 -0
- package/dist/hooks/use-booking-status-mutation.js +54 -0
- package/dist/hooks/use-booking-tax-preview.d.ts +29 -0
- package/dist/hooks/use-booking-tax-preview.d.ts.map +1 -0
- package/dist/hooks/use-booking-tax-preview.js +21 -0
- package/dist/hooks/use-booking.d.ts +67 -0
- package/dist/hooks/use-booking.d.ts.map +1 -0
- package/dist/hooks/use-booking.js +12 -0
- package/dist/hooks/use-bookings.d.ts +71 -0
- package/dist/hooks/use-bookings.d.ts.map +1 -0
- package/dist/hooks/use-bookings.js +12 -0
- package/dist/hooks/use-pricing-preview.d.ts +61 -0
- package/dist/hooks/use-pricing-preview.d.ts.map +1 -0
- package/dist/hooks/use-pricing-preview.js +18 -0
- package/dist/hooks/use-public-booking-session-flow-mutation.d.ts +148 -0
- package/dist/hooks/use-public-booking-session-flow-mutation.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-session-flow-mutation.js +35 -0
- package/dist/hooks/use-public-booking-session-state.d.ts +16 -0
- package/dist/hooks/use-public-booking-session-state.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-session-state.js +12 -0
- package/dist/hooks/use-public-booking-session.d.ts +101 -0
- package/dist/hooks/use-public-booking-session.d.ts.map +1 -0
- package/dist/hooks/use-public-booking-session.js +12 -0
- package/dist/hooks/use-reveal-traveler.d.ts +54 -0
- package/dist/hooks/use-reveal-traveler.d.ts.map +1 -0
- package/dist/hooks/use-reveal-traveler.js +18 -0
- package/dist/hooks/use-sharing-groups.d.ts +41 -0
- package/dist/hooks/use-sharing-groups.d.ts.map +1 -0
- package/dist/hooks/use-sharing-groups.js +20 -0
- package/dist/hooks/use-supplier-status-mutation.d.ts +46 -0
- package/dist/hooks/use-supplier-status-mutation.d.ts.map +1 -0
- package/dist/hooks/use-supplier-status-mutation.js +39 -0
- package/dist/hooks/use-supplier-statuses.d.ts +20 -0
- package/dist/hooks/use-supplier-statuses.d.ts.map +1 -0
- package/dist/hooks/use-supplier-statuses.js +12 -0
- package/dist/hooks/use-traveler-mutation.d.ts +55 -0
- package/dist/hooks/use-traveler-mutation.d.ts.map +1 -0
- package/dist/hooks/use-traveler-mutation.js +42 -0
- package/dist/hooks/use-traveler-with-travel-details-mutation.d.ts +120 -0
- package/dist/hooks/use-traveler-with-travel-details-mutation.d.ts.map +1 -0
- package/dist/hooks/use-traveler-with-travel-details-mutation.js +43 -0
- package/dist/hooks/use-travelers.d.ts +23 -0
- package/dist/hooks/use-travelers.d.ts.map +1 -0
- package/dist/hooks/use-travelers.js +12 -0
- package/dist/i18n/en-base.d.ts +295 -0
- package/dist/i18n/en-base.d.ts.map +1 -0
- package/dist/i18n/en-base.js +294 -0
- package/dist/i18n/en-create-list.d.ts +327 -0
- package/dist/i18n/en-create-list.d.ts.map +1 -0
- package/dist/i18n/en-create-list.js +326 -0
- package/dist/i18n/en-journey.d.ts +229 -0
- package/dist/i18n/en-journey.d.ts.map +1 -0
- package/dist/i18n/en-journey.js +228 -0
- package/dist/i18n/en-operations.d.ts +382 -0
- package/dist/i18n/en-operations.d.ts.map +1 -0
- package/dist/i18n/en-operations.js +381 -0
- package/dist/i18n/en-sections.d.ts +360 -0
- package/dist/i18n/en-sections.d.ts.map +1 -0
- package/dist/i18n/en-sections.js +359 -0
- package/dist/i18n/en.d.ts +1581 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +12 -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-base.d.ts +251 -0
- package/dist/i18n/messages-base.d.ts.map +1 -0
- package/dist/i18n/messages-base.js +1 -0
- package/dist/i18n/messages-create-list.d.ts +310 -0
- package/dist/i18n/messages-create-list.d.ts.map +1 -0
- package/dist/i18n/messages-create-list.js +1 -0
- package/dist/i18n/messages-journey.d.ts +198 -0
- package/dist/i18n/messages-journey.d.ts.map +1 -0
- package/dist/i18n/messages-journey.js +1 -0
- package/dist/i18n/messages-operations.d.ts +362 -0
- package/dist/i18n/messages-operations.d.ts.map +1 -0
- package/dist/i18n/messages-operations.js +1 -0
- package/dist/i18n/messages-sections.d.ts +312 -0
- package/dist/i18n/messages-sections.d.ts.map +1 -0
- package/dist/i18n/messages-sections.js +1 -0
- package/dist/i18n/messages.d.ts +7 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +1 -0
- package/dist/i18n/provider.d.ts +3185 -0
- package/dist/i18n/provider.d.ts.map +1 -0
- package/dist/i18n/provider.js +45 -0
- package/dist/i18n/ro-base.d.ts +295 -0
- package/dist/i18n/ro-base.d.ts.map +1 -0
- package/dist/i18n/ro-base.js +294 -0
- package/dist/i18n/ro-create-list.d.ts +327 -0
- package/dist/i18n/ro-create-list.d.ts.map +1 -0
- package/dist/i18n/ro-create-list.js +326 -0
- package/dist/i18n/ro-journey.d.ts +229 -0
- package/dist/i18n/ro-journey.d.ts.map +1 -0
- package/dist/i18n/ro-journey.js +228 -0
- package/dist/i18n/ro-operations.d.ts +382 -0
- package/dist/i18n/ro-operations.d.ts.map +1 -0
- package/dist/i18n/ro-operations.js +381 -0
- package/dist/i18n/ro-sections.d.ts +360 -0
- package/dist/i18n/ro-sections.d.ts.map +1 -0
- package/dist/i18n/ro-sections.js +359 -0
- package/dist/i18n/ro.d.ts +1581 -0
- package/dist/i18n/ro.d.ts.map +1 -0
- package/dist/i18n/ro.js +12 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/journey/components/booking-journey-rules.d.ts +48 -0
- package/dist/journey/components/booking-journey-rules.d.ts.map +1 -0
- package/dist/journey/components/booking-journey-rules.js +235 -0
- package/dist/journey/components/booking-journey.d.ts +3 -0
- package/dist/journey/components/booking-journey.d.ts.map +1 -0
- package/dist/journey/components/booking-journey.js +368 -0
- package/dist/journey/components/configure-step-skeleton.d.ts +8 -0
- package/dist/journey/components/configure-step-skeleton.d.ts.map +1 -0
- package/dist/journey/components/configure-step-skeleton.js +11 -0
- package/dist/journey/components/contract-preview-dialog.d.ts +47 -0
- package/dist/journey/components/contract-preview-dialog.d.ts.map +1 -0
- package/dist/journey/components/contract-preview-dialog.js +124 -0
- package/dist/journey/components/journey-steps/accommodation-step.d.ts +3 -0
- package/dist/journey/components/journey-steps/accommodation-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/accommodation-step.js +71 -0
- package/dist/journey/components/journey-steps/addons-step.d.ts +3 -0
- package/dist/journey/components/journey-steps/addons-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/addons-step.js +40 -0
- package/dist/journey/components/journey-steps/billing-step.d.ts +8 -0
- package/dist/journey/components/journey-steps/billing-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/billing-step.js +78 -0
- package/dist/journey/components/journey-steps/configure-steps.d.ts +28 -0
- package/dist/journey/components/journey-steps/configure-steps.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/configure-steps.js +232 -0
- package/dist/journey/components/journey-steps/documents-step.d.ts +11 -0
- package/dist/journey/components/journey-steps/documents-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/documents-step.js +36 -0
- package/dist/journey/components/journey-steps/payment-step.d.ts +29 -0
- package/dist/journey/components/journey-steps/payment-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/payment-step.js +225 -0
- package/dist/journey/components/journey-steps/review-step.d.ts +27 -0
- package/dist/journey/components/journey-steps/review-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/review-step.js +18 -0
- package/dist/journey/components/journey-steps/shared.d.ts +75 -0
- package/dist/journey/components/journey-steps/shared.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/shared.js +108 -0
- package/dist/journey/components/journey-steps/travelers-step.d.ts +7 -0
- package/dist/journey/components/journey-steps/travelers-step.d.ts.map +1 -0
- package/dist/journey/components/journey-steps/travelers-step.js +201 -0
- package/dist/journey/components/journey-steps.d.ts +21 -0
- package/dist/journey/components/journey-steps.d.ts.map +1 -0
- package/dist/journey/components/journey-steps.js +20 -0
- package/dist/journey/components/side-panel.d.ts +17 -0
- package/dist/journey/components/side-panel.d.ts.map +1 -0
- package/dist/journey/components/side-panel.js +245 -0
- package/dist/journey/components/stacked-journey.d.ts +30 -0
- package/dist/journey/components/stacked-journey.d.ts.map +1 -0
- package/dist/journey/components/stacked-journey.js +50 -0
- package/dist/journey/components/step-header.d.ts +7 -0
- package/dist/journey/components/step-header.d.ts.map +1 -0
- package/dist/journey/components/step-header.js +12 -0
- package/dist/journey/index.d.ts +18 -0
- package/dist/journey/index.d.ts.map +1 -0
- package/dist/journey/index.js +17 -0
- package/dist/journey/lib/draft-state.d.ts +35 -0
- package/dist/journey/lib/draft-state.d.ts.map +1 -0
- package/dist/journey/lib/draft-state.js +57 -0
- package/dist/journey/lib/pax-band-dependencies.d.ts +27 -0
- package/dist/journey/lib/pax-band-dependencies.d.ts.map +1 -0
- package/dist/journey/lib/pax-band-dependencies.js +50 -0
- package/dist/journey/lib/payment-schedule.d.ts +19 -0
- package/dist/journey/lib/payment-schedule.d.ts.map +1 -0
- package/dist/journey/lib/payment-schedule.js +90 -0
- package/dist/journey/types.d.ts +403 -0
- package/dist/journey/types.d.ts.map +1 -0
- package/dist/journey/types.js +19 -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 +74 -0
- package/dist/query-keys.d.ts.map +1 -0
- package/dist/query-keys.js +26 -0
- package/dist/query-options.d.ts +2534 -0
- package/dist/query-options.d.ts.map +1 -0
- package/dist/query-options.js +233 -0
- package/dist/requirements/client.d.ts +14 -0
- package/dist/requirements/client.d.ts.map +1 -0
- package/dist/requirements/client.js +59 -0
- package/dist/requirements/components/booking-requirements-contact-tab.d.ts +8 -0
- package/dist/requirements/components/booking-requirements-contact-tab.d.ts.map +1 -0
- package/dist/requirements/components/booking-requirements-contact-tab.js +8 -0
- package/dist/requirements/components/booking-requirements-questions-tab.d.ts +14 -0
- package/dist/requirements/components/booking-requirements-questions-tab.d.ts.map +1 -0
- package/dist/requirements/components/booking-requirements-questions-tab.js +17 -0
- package/dist/requirements/constants.d.ts +114 -0
- package/dist/requirements/constants.d.ts.map +1 -0
- package/dist/requirements/constants.js +45 -0
- package/dist/requirements/hooks/index.d.ts +6 -0
- package/dist/requirements/hooks/index.d.ts.map +1 -0
- package/dist/requirements/hooks/index.js +6 -0
- package/dist/requirements/hooks/use-booking-questions.d.ts +24 -0
- package/dist/requirements/hooks/use-booking-questions.d.ts.map +1 -0
- package/dist/requirements/hooks/use-booking-questions.js +9 -0
- package/dist/requirements/hooks/use-contact-requirements.d.ts +22 -0
- package/dist/requirements/hooks/use-contact-requirements.d.ts.map +1 -0
- package/dist/requirements/hooks/use-contact-requirements.js +9 -0
- package/dist/requirements/hooks/use-products.d.ts +16 -0
- package/dist/requirements/hooks/use-products.d.ts.map +1 -0
- package/dist/requirements/hooks/use-products.js +9 -0
- package/dist/requirements/hooks/use-question-options.d.ts +19 -0
- package/dist/requirements/hooks/use-question-options.d.ts.map +1 -0
- package/dist/requirements/hooks/use-question-options.js +9 -0
- package/dist/requirements/hooks/use-transport-requirements.d.ts +30 -0
- package/dist/requirements/hooks/use-transport-requirements.d.ts.map +1 -0
- package/dist/requirements/hooks/use-transport-requirements.js +9 -0
- package/dist/requirements/i18n/en.d.ts +94 -0
- package/dist/requirements/i18n/en.d.ts.map +1 -0
- package/dist/requirements/i18n/en.js +93 -0
- package/dist/requirements/i18n/index.d.ts +5 -0
- package/dist/requirements/i18n/index.d.ts.map +1 -0
- package/dist/requirements/i18n/index.js +3 -0
- package/dist/requirements/i18n/messages.d.ts +59 -0
- package/dist/requirements/i18n/messages.d.ts.map +1 -0
- package/dist/requirements/i18n/messages.js +1 -0
- package/dist/requirements/i18n/provider.d.ts +210 -0
- package/dist/requirements/i18n/provider.d.ts.map +1 -0
- package/dist/requirements/i18n/provider.js +44 -0
- package/dist/requirements/i18n/ro.d.ts +94 -0
- package/dist/requirements/i18n/ro.d.ts.map +1 -0
- package/dist/requirements/i18n/ro.js +93 -0
- package/dist/requirements/index.d.ts +9 -0
- package/dist/requirements/index.d.ts.map +1 -0
- package/dist/requirements/index.js +8 -0
- package/dist/requirements/provider.d.ts +2 -0
- package/dist/requirements/provider.d.ts.map +1 -0
- package/dist/requirements/provider.js +1 -0
- package/dist/requirements/query-keys.d.ts +33 -0
- package/dist/requirements/query-keys.d.ts.map +1 -0
- package/dist/requirements/query-keys.js +13 -0
- package/dist/requirements/query-options.d.ts +371 -0
- package/dist/requirements/query-options.d.ts.map +1 -0
- package/dist/requirements/query-options.js +80 -0
- package/dist/requirements/schemas.d.ts +320 -0
- package/dist/requirements/schemas.d.ts.map +1 -0
- package/dist/requirements/schemas.js +121 -0
- package/dist/requirements/ui.d.ts +4 -0
- package/dist/requirements/ui.d.ts.map +1 -0
- package/dist/requirements/ui.js +3 -0
- package/dist/requirements/utils.d.ts +2 -0
- package/dist/requirements/utils.d.ts.map +1 -0
- package/dist/requirements/utils.js +4 -0
- package/dist/schemas.d.ts +2070 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +507 -0
- package/dist/status-presentation.d.ts +34 -0
- package/dist/status-presentation.d.ts.map +1 -0
- package/dist/status-presentation.js +38 -0
- package/dist/ui.d.ts +43 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +42 -0
- package/package.json +256 -0
- package/src/requirements/styles.css +1 -0
- package/src/styles.css +13 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
// agent-quality: file-size exception -- owner: bookings-react; existing UI surface stays co-located until a dedicated split preserves behavior and tests.
|
|
2
|
+
"use client";
|
|
3
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
4
|
+
import { useAdminBookingPayments, useBookingPaymentSchedules, useInvoiceAttachments, useInvoices, useVoyantFinanceContext, } from "@voyant-travel/finance-react";
|
|
5
|
+
import { useLegalContractAttachments, useLegalContracts, useVoyantLegalContext, } from "@voyant-travel/legal-react";
|
|
6
|
+
import { useOrganization, usePerson } from "@voyant-travel/relationships-react";
|
|
7
|
+
import { Badge, Button, Collapsible, CollapsibleContent, CollapsibleTrigger, cn, Sheet, SheetBody, SheetContent, SheetFooter, SheetHeader, SheetTitle, } from "@voyant-travel/ui/components";
|
|
8
|
+
import { ArrowRight, Building2, Calendar, ChevronDown, CreditCard, ExternalLink, FileText, Globe, Languages, Mail, MessageSquare, Paperclip, Phone, ScrollText, StickyNote, User, Users, } from "lucide-react";
|
|
9
|
+
import { Fragment, useState } from "react";
|
|
10
|
+
import { useBookingsUiI18nOrDefault, useBookingsUiMessagesOrDefault } from "../i18n/index.js";
|
|
11
|
+
import { bookingStatusBadgeVariant, useBooking, useBookingTravelerDocuments, useRevealTraveler, useTravelers, } from "../index.js";
|
|
12
|
+
export function BookingQuickViewSheet({ bookingId, open, onOpenChange, onViewFull, locale, }) {
|
|
13
|
+
const i18n = useBookingsUiI18nOrDefault();
|
|
14
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
15
|
+
const detail = messages.bookingDetailPage;
|
|
16
|
+
const quick = messages.bookingQuickViewSheet;
|
|
17
|
+
const resolvedLocale = locale ?? i18n.locale;
|
|
18
|
+
const query = useBooking(bookingId ?? undefined, {
|
|
19
|
+
enabled: open && Boolean(bookingId),
|
|
20
|
+
});
|
|
21
|
+
const booking = query.data?.data ?? null;
|
|
22
|
+
// `isPending` stays true for disabled queries in @tanstack/react-query
|
|
23
|
+
// v5, so opening the sheet with no `bookingId` would render an
|
|
24
|
+
// indefinite loading state. Gate on an active fetch instead.
|
|
25
|
+
const isLoading = Boolean(bookingId) && query.fetchStatus === "fetching" && !booking;
|
|
26
|
+
return (_jsx(Sheet, { open: open, onOpenChange: onOpenChange, children: _jsxs(SheetContent, { side: "right", className: "sm:max-w-md", children: [_jsx(SheetHeader, { className: "border-b", children: booking ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx(SheetTitle, { className: "font-mono text-sm", children: booking.bookingNumber }), _jsx(Badge, { variant: bookingStatusBadgeVariant[booking.status], children: messages.common.bookingStatusLabels[booking.status] ?? booking.status })] }), _jsx("div", { className: "text-2xl font-semibold tabular-nums", children: formatAmount(booking.sellAmountCents, booking.sellCurrency, resolvedLocale, detail.noValue) })] })) : (_jsx(SheetTitle, { children: quick.loadingTitle })) }), _jsx(SheetBody, { className: "flex flex-col gap-5", children: isLoading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: messages.common.loading })) : !booking ? (_jsx("p", { className: "text-sm text-muted-foreground", children: detail.notFound })) : (_jsx(QuickViewBody, { booking: booking, locale: resolvedLocale })) }), onViewFull && booking ? (_jsx(SheetFooter, { children: _jsxs(Button, { type: "button", className: "w-full", onClick: () => onViewFull(booking), children: [quick.viewFullAction, _jsx(ArrowRight, { className: "ml-1 h-4 w-4", "aria-hidden": "true" })] }) })) : null] }) }));
|
|
27
|
+
}
|
|
28
|
+
function QuickViewBody({ booking, locale }) {
|
|
29
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
30
|
+
const detail = messages.bookingDetailPage;
|
|
31
|
+
const dateRange = booking.startDate
|
|
32
|
+
? booking.endDate && booking.endDate !== booking.startDate
|
|
33
|
+
? `${formatDate(booking.startDate, locale, detail.noValue)} - ${formatDate(booking.endDate, locale, detail.noValue)}`
|
|
34
|
+
: formatDate(booking.startDate, locale, detail.noValue)
|
|
35
|
+
: detail.tbd;
|
|
36
|
+
return (_jsxs("div", { className: "flex flex-col gap-5", children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx(Calendar, { className: "h-4 w-4 text-muted-foreground", "aria-hidden": "true" }), _jsx("span", { children: dateRange })] }), _jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx(Users, { className: "h-4 w-4 text-muted-foreground", "aria-hidden": "true" }), _jsx("span", { children: booking.pax != null
|
|
37
|
+
? `${booking.pax} ${messages.bookingQuickViewSheet.paxSuffix}`
|
|
38
|
+
: detail.noValue })] })] }), _jsx(ContactSection, { booking: booking }), _jsx(TravelersSection, { bookingId: booking.id, expectedPax: booking.pax, locale: locale }), _jsx(PaymentsSection, { booking: booking, locale: locale }), _jsx(InvoicesSection, { booking: booking }), _jsx(PaymentScheduleSection, { booking: booking, locale: locale }), _jsx(ContractsSection, { bookingId: booking.id })] }));
|
|
39
|
+
}
|
|
40
|
+
function ContactSection({ booking }) {
|
|
41
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
42
|
+
const quick = messages.bookingQuickViewSheet;
|
|
43
|
+
// Source of truth for billing snapshot is the booking row itself —
|
|
44
|
+
// those `contact_*` columns are stamped at create time and persist
|
|
45
|
+
// even if the linked CRM record changes. Fall back to the live person
|
|
46
|
+
// / organization for fields we don't snapshot (preferred language,
|
|
47
|
+
// website).
|
|
48
|
+
const person = usePerson(booking.personId ?? undefined, {
|
|
49
|
+
enabled: Boolean(booking.personId),
|
|
50
|
+
}).data;
|
|
51
|
+
const organization = useOrganization(booking.organizationId ?? undefined, {
|
|
52
|
+
enabled: Boolean(booking.organizationId),
|
|
53
|
+
}).data;
|
|
54
|
+
const name = [booking.contactFirstName, booking.contactLastName].filter(Boolean).join(" ") ||
|
|
55
|
+
(person ? [person.firstName, person.lastName].filter(Boolean).join(" ") : "") ||
|
|
56
|
+
organization?.name ||
|
|
57
|
+
"";
|
|
58
|
+
const email = booking.contactEmail ?? person?.email ?? null;
|
|
59
|
+
const phone = booking.contactPhone ?? person?.phone ?? null;
|
|
60
|
+
const language = booking.contactPreferredLanguage ?? person?.preferredLanguage ?? null;
|
|
61
|
+
const addressParts = [
|
|
62
|
+
booking.contactAddressLine1,
|
|
63
|
+
booking.contactAddressLine2,
|
|
64
|
+
[booking.contactPostalCode, booking.contactCity].filter(Boolean).join(" ") || null,
|
|
65
|
+
booking.contactRegion,
|
|
66
|
+
booking.contactCountry,
|
|
67
|
+
].filter((part) => Boolean(part));
|
|
68
|
+
if (!name && !email && !phone && addressParts.length === 0 && !organization)
|
|
69
|
+
return null;
|
|
70
|
+
return (_jsx(Section, { icon: _jsx(User, { className: "h-3.5 w-3.5" }), label: quick.sectionPayer, children: _jsxs("div", { className: "flex flex-col gap-1.5", children: [name ? _jsx("div", { className: "text-sm font-medium", children: name }) : null, organization?.name && organization.name !== name ? (_jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx(Building2, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "truncate", children: organization.name })] })) : null, email ? (_jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx(Mail, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }), _jsx("a", { href: `mailto:${email}`, className: "truncate hover:underline", children: email })] })) : null, phone ? (_jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx(Phone, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }), _jsx("a", { href: `tel:${phone}`, className: "truncate hover:underline", children: phone })] })) : null, language ? (_jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx(Languages, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "truncate uppercase", children: language })] })) : null, person?.website ? (_jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [_jsx(Globe, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }), _jsx("a", { href: person.website, target: "_blank", rel: "noopener noreferrer", className: "truncate hover:underline", children: person.website })] })) : null, addressParts.length > 0 ? (_jsx("div", { className: "text-xs text-muted-foreground", children: addressParts.join(", ") })) : null] }) }));
|
|
71
|
+
}
|
|
72
|
+
function TravelersSection({ bookingId, expectedPax, locale, }) {
|
|
73
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
74
|
+
const quick = messages.bookingQuickViewSheet;
|
|
75
|
+
const { data } = useTravelers(bookingId);
|
|
76
|
+
const documentsQuery = useBookingTravelerDocuments(bookingId);
|
|
77
|
+
const travelers = data?.data ?? [];
|
|
78
|
+
const documentsByTravelerId = new Map();
|
|
79
|
+
// Booking-level documents (no `travelerId`) stay attached to the
|
|
80
|
+
// booking rather than the travelers list — surfacing them per-traveler
|
|
81
|
+
// would imply the wrong owner. We only group attachments that name a
|
|
82
|
+
// specific traveler.
|
|
83
|
+
for (const doc of documentsQuery.data?.data ?? []) {
|
|
84
|
+
if (!doc.travelerId)
|
|
85
|
+
continue;
|
|
86
|
+
const bucket = documentsByTravelerId.get(doc.travelerId) ?? [];
|
|
87
|
+
bucket.push(doc);
|
|
88
|
+
documentsByTravelerId.set(doc.travelerId, bucket);
|
|
89
|
+
}
|
|
90
|
+
const counter = expectedPax != null ? `${travelers.length}/${expectedPax}` : String(travelers.length);
|
|
91
|
+
return (_jsx(Section, { icon: _jsx(Users, { className: "h-3.5 w-3.5" }), label: quick.sectionTravelers, count: counter, children: travelers.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: quick.travelersEmpty })) : (_jsx("ul", { className: "flex flex-col gap-2", children: travelers.map((traveler) => (_jsx(TravelerCard, { bookingId: bookingId, traveler: traveler, documents: documentsByTravelerId.get(traveler.id) ?? [], locale: locale }, traveler.id))) })) }));
|
|
92
|
+
}
|
|
93
|
+
function TravelerCard({ bookingId, traveler, documents, locale, }) {
|
|
94
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
95
|
+
const quick = messages.bookingQuickViewSheet;
|
|
96
|
+
const reveal = quick.travelerReveal;
|
|
97
|
+
const [expanded, setExpanded] = useState(false);
|
|
98
|
+
// The reveal endpoint audit-logs every call, so it must only fire
|
|
99
|
+
// when the operator actively clicks "More info" — never on mount.
|
|
100
|
+
const revealQuery = useRevealTraveler(bookingId, traveler.id, { enabled: expanded });
|
|
101
|
+
const revealed = revealQuery.data?.data ?? null;
|
|
102
|
+
const travelDetails = revealed?.travelDetails ?? null;
|
|
103
|
+
const name = [traveler.firstName, traveler.lastName].filter(Boolean).join(" ").trim();
|
|
104
|
+
const category = traveler.travelerCategory ?? null;
|
|
105
|
+
const categoryLabel = category
|
|
106
|
+
? (quick.travelerCategoryLabels[category] ??
|
|
107
|
+
category)
|
|
108
|
+
: null;
|
|
109
|
+
const revealRows = [];
|
|
110
|
+
if (travelDetails) {
|
|
111
|
+
if (travelDetails.dateOfBirth) {
|
|
112
|
+
revealRows.push({
|
|
113
|
+
label: reveal.dateOfBirth,
|
|
114
|
+
value: formatDate(travelDetails.dateOfBirth, locale, ""),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (travelDetails.nationality) {
|
|
118
|
+
revealRows.push({
|
|
119
|
+
label: reveal.nationality,
|
|
120
|
+
value: _jsx("span", { className: "uppercase", children: travelDetails.nationality }),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (travelDetails.documentType) {
|
|
124
|
+
revealRows.push({
|
|
125
|
+
label: reveal.documentType,
|
|
126
|
+
value: (_jsx(Badge, { variant: "outline", className: "text-[10px] uppercase", children: travelDetails.documentType.replace(/_/g, " ") })),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (travelDetails.documentNumber) {
|
|
130
|
+
revealRows.push({
|
|
131
|
+
label: reveal.documentNumber,
|
|
132
|
+
value: _jsx("span", { className: "font-mono text-xs", children: travelDetails.documentNumber }),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (travelDetails.documentExpiry) {
|
|
136
|
+
revealRows.push({
|
|
137
|
+
label: reveal.documentExpiry,
|
|
138
|
+
value: formatDate(travelDetails.documentExpiry, locale, ""),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
if (travelDetails.documentIssuingCountry) {
|
|
142
|
+
revealRows.push({
|
|
143
|
+
label: reveal.documentIssuingCountry,
|
|
144
|
+
value: _jsx("span", { className: "uppercase", children: travelDetails.documentIssuingCountry }),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
if (travelDetails.documentIssuingAuthority) {
|
|
148
|
+
revealRows.push({
|
|
149
|
+
label: reveal.documentIssuingAuthority,
|
|
150
|
+
value: travelDetails.documentIssuingAuthority,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
if (travelDetails.dietaryRequirements) {
|
|
154
|
+
revealRows.push({
|
|
155
|
+
label: reveal.dietaryRequirements,
|
|
156
|
+
value: _jsx("span", { className: "whitespace-pre-wrap", children: travelDetails.dietaryRequirements }),
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
if (travelDetails.accessibilityNeeds) {
|
|
160
|
+
revealRows.push({
|
|
161
|
+
label: reveal.accessibilityNeeds,
|
|
162
|
+
value: _jsx("span", { className: "whitespace-pre-wrap", children: travelDetails.accessibilityNeeds }),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (travelDetails.bedPreference) {
|
|
166
|
+
revealRows.push({
|
|
167
|
+
label: reveal.bedPreference,
|
|
168
|
+
value: (_jsx(Badge, { variant: "outline", className: "text-[10px] uppercase", children: travelDetails.bedPreference.replace(/-/g, " ") })),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return (_jsxs("li", { className: "flex flex-col gap-2 rounded-md border p-3 text-sm", children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsx("span", { className: "truncate font-medium", children: name || quick.travelerUnnamed }), _jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [traveler.isPrimary ? (_jsx(Badge, { variant: "outline", className: "text-[10px] uppercase", children: quick.travelerCategoryLabels.lead })) : null, categoryLabel ? (_jsx(Badge, { variant: "outline", className: "text-[10px] uppercase", children: categoryLabel })) : null] })] }), _jsxs("div", { className: "flex flex-col gap-1 text-xs text-muted-foreground", children: [traveler.email ? (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Mail, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }), _jsx("a", { href: `mailto:${traveler.email}`, className: "truncate hover:underline", children: traveler.email })] })) : null, traveler.phone ? (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Phone, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }), _jsx("a", { href: `tel:${traveler.phone}`, className: "truncate hover:underline", children: traveler.phone })] })) : null, traveler.preferredLanguage ? (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Languages, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "truncate uppercase", children: traveler.preferredLanguage })] })) : null, traveler.specialRequests ? (_jsxs("div", { className: "flex items-start gap-1.5", children: [_jsx(MessageSquare, { className: "mt-0.5 h-3 w-3 shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "whitespace-pre-wrap", children: traveler.specialRequests })] })) : null, traveler.notes ? (_jsxs("div", { className: "flex items-start gap-1.5", children: [_jsx(StickyNote, { className: "mt-0.5 h-3 w-3 shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "whitespace-pre-wrap", children: traveler.notes })] })) : null] }), documents.length > 0 ? (_jsxs("div", { className: "flex flex-col gap-1 border-t pt-2", children: [_jsxs("div", { className: "flex items-center gap-1.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: [_jsx(Paperclip, { className: "h-3 w-3", "aria-hidden": "true" }), quick.sectionTravelerDocuments, _jsx("span", { className: "font-mono normal-case", children: documents.length })] }), _jsx("ul", { className: "flex flex-col", children: documents.map((doc) => (_jsxs("li", { className: "flex items-center justify-between gap-2 py-0.5 text-xs", children: [_jsxs("a", { href: doc.fileUrl, target: "_blank", rel: "noopener noreferrer", className: "inline-flex min-w-0 items-center gap-1 hover:underline", children: [_jsx("span", { className: "truncate", children: doc.fileName }), _jsx(ExternalLink, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" })] }), _jsx(Badge, { variant: "outline", className: "shrink-0 text-[10px] uppercase", children: doc.type.replace(/_/g, " ") })] }, doc.id))) })] })) : null, _jsxs(Collapsible, { open: expanded, onOpenChange: setExpanded, children: [_jsx(CollapsibleTrigger, { render: _jsxs("button", { type: "button", className: "flex w-full items-center justify-between gap-2 border-t pt-2 text-[10px] font-medium uppercase tracking-wide text-muted-foreground transition-colors hover:text-foreground", children: [_jsx("span", { children: expanded ? reveal.hideAction : reveal.showAction }), _jsx(ChevronDown, { className: cn("h-3 w-3 shrink-0 transition-transform", expanded ? "rotate-180" : null), "aria-hidden": "true" })] }) }), _jsx(CollapsibleContent, { className: "data-closed:hidden", children: _jsx("div", { className: "mt-2 flex flex-col gap-1.5 text-xs", children: revealQuery.isFetching && revealRows.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: messages.common.loading })) : revealQuery.isError ? (_jsx("p", { className: "text-destructive", children: reveal.error })) : revealRows.length === 0 ? (_jsx("p", { className: "text-muted-foreground", children: reveal.empty })) : (_jsx("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1", children: revealRows.map((row) => (_jsxs(Fragment, { children: [_jsx("dt", { className: "text-muted-foreground", children: row.label }), _jsx("dd", { className: "break-words text-right", children: row.value })] }, row.label))) })) }) })] })] }));
|
|
173
|
+
}
|
|
174
|
+
function PaymentsSection({ booking, locale }) {
|
|
175
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
176
|
+
const detail = messages.bookingDetailPage;
|
|
177
|
+
const quick = messages.bookingQuickViewSheet;
|
|
178
|
+
const { data } = useAdminBookingPayments(booking.id);
|
|
179
|
+
const payments = data?.data?.payments ?? [];
|
|
180
|
+
const paidCents = payments
|
|
181
|
+
.filter((payment) => payment.status === "completed")
|
|
182
|
+
.reduce((sum, payment) => sum + payment.amountCents, 0);
|
|
183
|
+
const totalCents = booking.sellAmountCents ?? 0;
|
|
184
|
+
const remainingCents = Math.max(0, totalCents - paidCents);
|
|
185
|
+
return (_jsxs(Section, { icon: _jsx(CreditCard, { className: "h-3.5 w-3.5" }), label: quick.sectionPayments, count: String(payments.length), children: [_jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground", children: quick.paymentsPaid }), _jsx("span", { className: "font-medium tabular-nums", children: formatAmount(paidCents, booking.sellCurrency, locale, detail.noValue) })] }), _jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "text-muted-foreground", children: quick.paymentsRemaining }), _jsx("span", { className: "font-medium tabular-nums", children: formatAmount(remainingCents, booking.sellCurrency, locale, detail.noValue) })] })] }));
|
|
186
|
+
}
|
|
187
|
+
function InvoicesSection({ booking }) {
|
|
188
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
189
|
+
const quick = messages.bookingQuickViewSheet;
|
|
190
|
+
const { data } = useInvoices({ bookingId: booking.id, limit: 20 });
|
|
191
|
+
const invoices = data?.data ?? [];
|
|
192
|
+
return (_jsx(Section, { icon: _jsx(FileText, { className: "h-3.5 w-3.5" }), label: quick.sectionInvoices, count: String(invoices.length), children: invoices.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: quick.invoicesEmpty })) : (_jsx("ul", { className: "flex flex-col", children: invoices.map((invoice) => (_jsx(InvoiceRow, { invoice: invoice }, invoice.id))) })) }));
|
|
193
|
+
}
|
|
194
|
+
function InvoiceRow({ invoice }) {
|
|
195
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
196
|
+
const quick = messages.bookingQuickViewSheet;
|
|
197
|
+
const { baseUrl } = useVoyantFinanceContext();
|
|
198
|
+
const { data } = useInvoiceAttachments(invoice.id);
|
|
199
|
+
const attachment = latestAttachment(data?.data ?? []);
|
|
200
|
+
const statusLabel = quick.invoiceStatusLabels[invoice.status] ??
|
|
201
|
+
invoice.status;
|
|
202
|
+
return (_jsxs("li", { className: "flex items-center justify-between gap-3 py-1 font-mono text-sm", children: [_jsx(LinkedRowTitle, { href: attachment ? getDefaultInvoiceAttachmentDownloadHref(baseUrl, attachment) : null, label: invoice.invoiceNumber }), _jsx(Badge, { variant: "outline", className: "shrink-0 font-sans text-[10px] uppercase", children: statusLabel })] }));
|
|
203
|
+
}
|
|
204
|
+
function PaymentScheduleSection({ booking, locale }) {
|
|
205
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
206
|
+
const detail = messages.bookingDetailPage;
|
|
207
|
+
const quick = messages.bookingQuickViewSheet;
|
|
208
|
+
const { data } = useBookingPaymentSchedules(booking.id);
|
|
209
|
+
const schedules = data?.data ?? [];
|
|
210
|
+
const paidCount = schedules.filter((schedule) => schedule.status === "paid").length;
|
|
211
|
+
const counter = schedules.length === 0 ? "0" : `${paidCount}/${schedules.length} ${quick.scheduleCountSuffix}`;
|
|
212
|
+
return (_jsx(Section, { icon: _jsx(Calendar, { className: "h-3.5 w-3.5" }), label: quick.sectionPaymentSchedule, count: counter, children: schedules.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: quick.scheduleEmpty })) : (_jsx("ul", { className: "flex flex-col gap-1.5", children: schedules.map((schedule) => {
|
|
213
|
+
const typeLabel = quick.scheduleTypeLabels[schedule.scheduleType] ?? schedule.scheduleType;
|
|
214
|
+
return (_jsxs("li", { className: "flex items-center justify-between gap-3 text-sm", children: [_jsxs("span", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: "outline", className: "text-[10px] uppercase", children: typeLabel }), _jsx("span", { className: "text-muted-foreground", children: formatScheduleDate(schedule.dueDate, locale, detail.noValue) })] }), _jsx("span", { className: "font-medium tabular-nums", children: formatAmount(schedule.amountCents, schedule.currency, locale, detail.noValue) })] }, schedule.id));
|
|
215
|
+
}) })) }));
|
|
216
|
+
}
|
|
217
|
+
function ContractsSection({ bookingId }) {
|
|
218
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
219
|
+
const quick = messages.bookingQuickViewSheet;
|
|
220
|
+
const { data } = useLegalContracts({ bookingId, limit: 20 });
|
|
221
|
+
const contracts = data?.data ?? [];
|
|
222
|
+
return (_jsx(Section, { icon: _jsx(ScrollText, { className: "h-3.5 w-3.5" }), label: quick.sectionContracts, count: String(contracts.length), children: contracts.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: quick.contractsEmpty })) : (_jsx("ul", { className: "flex flex-col", children: contracts.map((contract) => (_jsx(ContractRow, { contract: contract }, contract.id))) })) }));
|
|
223
|
+
}
|
|
224
|
+
function ContractRow({ contract }) {
|
|
225
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
226
|
+
const quick = messages.bookingQuickViewSheet;
|
|
227
|
+
const { baseUrl } = useVoyantLegalContext();
|
|
228
|
+
const { data } = useLegalContractAttachments({ contractId: contract.id });
|
|
229
|
+
const attachment = latestAttachment(data);
|
|
230
|
+
const statusLabel = quick.contractStatusLabels[contract.status] ??
|
|
231
|
+
contract.status;
|
|
232
|
+
return (_jsxs("li", { className: "flex items-center justify-between gap-3 py-1 text-sm", children: [_jsx(LinkedRowTitle, { href: attachment ? getDefaultLegalContractAttachmentDownloadHref(baseUrl, attachment) : null, label: contract.contractNumber ?? contract.title }), _jsx(Badge, { variant: "outline", className: "shrink-0 font-sans text-[10px] uppercase", children: statusLabel })] }));
|
|
233
|
+
}
|
|
234
|
+
function LinkedRowTitle({ href, label }) {
|
|
235
|
+
if (!href) {
|
|
236
|
+
return _jsx("span", { className: "min-w-0 truncate font-mono", children: label });
|
|
237
|
+
}
|
|
238
|
+
return (_jsxs("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex min-w-0 items-center gap-1 font-mono text-primary hover:underline", children: [_jsx("span", { className: "truncate", children: label }), _jsx(ExternalLink, { className: "h-3 w-3 shrink-0", "aria-hidden": "true" })] }));
|
|
239
|
+
}
|
|
240
|
+
function latestAttachment(attachments) {
|
|
241
|
+
return (attachments ?? []).reduce((latest, attachment) => !latest || attachment.createdAt > latest.createdAt ? attachment : latest, null);
|
|
242
|
+
}
|
|
243
|
+
function withApiBaseUrl(baseUrl, path) {
|
|
244
|
+
const trimmedBase = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
|
|
245
|
+
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
246
|
+
return `${trimmedBase}${normalizedPath}`;
|
|
247
|
+
}
|
|
248
|
+
function getDefaultInvoiceAttachmentDownloadHref(baseUrl, attachment) {
|
|
249
|
+
return withApiBaseUrl(baseUrl, `/v1/admin/finance/invoice-attachments/${attachment.id}/download`);
|
|
250
|
+
}
|
|
251
|
+
function getDefaultLegalContractAttachmentDownloadHref(baseUrl, attachment) {
|
|
252
|
+
return withApiBaseUrl(baseUrl, `/v1/admin/legal/contracts/attachments/${attachment.id}/download`);
|
|
253
|
+
}
|
|
254
|
+
function Section({ icon, label, count, children, }) {
|
|
255
|
+
return (_jsxs("section", { className: "flex flex-col gap-2 border-t pt-4", children: [_jsxs("header", { className: "flex items-center justify-between gap-2 text-xs font-medium text-muted-foreground uppercase tracking-wide", children: [_jsxs("span", { className: "flex items-center gap-1.5", children: [icon, label] }), count ? _jsx("span", { className: "font-mono normal-case", children: count }) : null] }), children] }));
|
|
256
|
+
}
|
|
257
|
+
function formatAmount(cents, currency, locale, empty) {
|
|
258
|
+
if (cents == null)
|
|
259
|
+
return empty;
|
|
260
|
+
return new Intl.NumberFormat(locale, {
|
|
261
|
+
style: "currency",
|
|
262
|
+
currency,
|
|
263
|
+
minimumFractionDigits: 2,
|
|
264
|
+
maximumFractionDigits: 2,
|
|
265
|
+
}).format(cents / 100);
|
|
266
|
+
}
|
|
267
|
+
function formatDate(iso, locale, empty) {
|
|
268
|
+
if (!iso)
|
|
269
|
+
return empty;
|
|
270
|
+
return new Date(iso).toLocaleDateString(locale, {
|
|
271
|
+
month: "short",
|
|
272
|
+
day: "numeric",
|
|
273
|
+
year: "numeric",
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
function formatScheduleDate(iso, locale, empty) {
|
|
277
|
+
if (!iso)
|
|
278
|
+
return empty;
|
|
279
|
+
return new Date(iso).toLocaleDateString(locale, {
|
|
280
|
+
month: "short",
|
|
281
|
+
day: "numeric",
|
|
282
|
+
});
|
|
283
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import type { BookingRecord } from "../index.js";
|
|
3
|
+
import { type BookingListFiltersState } from "./booking-list.js";
|
|
4
|
+
export interface BookingsPageProps {
|
|
5
|
+
pageSize?: number;
|
|
6
|
+
onBookingOpen?: (booking: BookingRecord) => void;
|
|
7
|
+
onCreateBooking?: () => void;
|
|
8
|
+
/**
|
|
9
|
+
* Extra action(s) rendered alongside the primary "New booking" button.
|
|
10
|
+
* Templates pass adjacent flows (e.g. a "Compose trip" link) here.
|
|
11
|
+
*/
|
|
12
|
+
headerActions?: React.ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
/** Forwarded to `BookingList` — see prop docs there. */
|
|
15
|
+
initialFilters?: Partial<BookingListFiltersState>;
|
|
16
|
+
onFiltersChange?: (filters: BookingListFiltersState) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function BookingsPage({ pageSize, onBookingOpen, onCreateBooking, headerActions, className, initialFilters, onFiltersChange, }?: BookingsPageProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=bookings-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bookings-page.d.ts","sourceRoot":"","sources":["../../src/components/bookings-page.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAe,KAAK,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE7E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IAChD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,cAAc,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACjD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;CAC7D;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,aAAa,EACb,eAAe,EACf,aAAa,EACb,SAAS,EACT,cAAc,EACd,eAAe,GAChB,GAAE,iBAAsB,2CAoBxB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "@voyant-travel/ui/lib/utils";
|
|
4
|
+
import { useBookingsUiMessagesOrDefault } from "../i18n/index.js";
|
|
5
|
+
import { BookingList } from "./booking-list.js";
|
|
6
|
+
export function BookingsPage({ pageSize, onBookingOpen, onCreateBooking, headerActions, className, initialFilters, onFiltersChange, } = {}) {
|
|
7
|
+
const messages = useBookingsUiMessagesOrDefault().bookingsPage;
|
|
8
|
+
return (_jsxs("div", { "data-slot": "bookings-page", className: cn("flex flex-col gap-6 p-6", className), children: [_jsxs("div", { children: [_jsx("h1", { className: "text-2xl font-bold tracking-tight", children: messages.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: messages.description })] }), _jsx(BookingList, { pageSize: pageSize, onSelectBooking: onBookingOpen, onCreateBooking: onCreateBooking, headerActions: headerActions, initialFilters: initialFilters, onFiltersChange: onFiltersChange })] }));
|
|
9
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface UploadedFile {
|
|
2
|
+
key: string;
|
|
3
|
+
url: string;
|
|
4
|
+
mimeType: string;
|
|
5
|
+
size: number;
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
8
|
+
export interface FileDropzoneProps {
|
|
9
|
+
/** URL of the upload endpoint (defaults to /api/v1/uploads). */
|
|
10
|
+
uploadUrl?: string;
|
|
11
|
+
/** MIME types or extensions to accept (same format as <input accept>). */
|
|
12
|
+
accept?: string;
|
|
13
|
+
/** Maximum file size in bytes. */
|
|
14
|
+
maxSize?: number;
|
|
15
|
+
/** Called after a successful upload. */
|
|
16
|
+
onUploaded: (file: UploadedFile) => void;
|
|
17
|
+
/** Called when an error occurs (validation, upload failure). */
|
|
18
|
+
onError?: (message: string) => void;
|
|
19
|
+
/** Helper text shown in the idle state. */
|
|
20
|
+
helperText?: string;
|
|
21
|
+
/** Disable interaction. */
|
|
22
|
+
disabled?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function FileDropzone({ uploadUrl, accept, maxSize, onUploaded, onError, helperText, disabled, }: FileDropzoneProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=file-dropzone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-dropzone.d.ts","sourceRoot":"","sources":["../../src/components/file-dropzone.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wCAAwC;IACxC,UAAU,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IACxC,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAA6B,EAC7B,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,EACP,UAAU,EACV,QAAQ,GACT,EAAE,iBAAiB,2CA8KnB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { File as FileIcon, Loader2, Upload, X } from "lucide-react";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { formatMessage, useBookingsUiI18nOrDefault, useBookingsUiMessagesOrDefault, } from "../i18n/provider.js";
|
|
6
|
+
export function FileDropzone({ uploadUrl = "/api/v1/uploads", accept, maxSize, onUploaded, onError, helperText, disabled, }) {
|
|
7
|
+
const inputRef = React.useRef(null);
|
|
8
|
+
const [isDragging, setIsDragging] = React.useState(false);
|
|
9
|
+
const [isUploading, setIsUploading] = React.useState(false);
|
|
10
|
+
const [uploaded, setUploaded] = React.useState(null);
|
|
11
|
+
const [error, setError] = React.useState(null);
|
|
12
|
+
const { formatNumber } = useBookingsUiI18nOrDefault();
|
|
13
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
14
|
+
const resolvedHelperText = helperText ?? messages.fileDropzone.helperText;
|
|
15
|
+
const formatSize = React.useCallback((bytes) => {
|
|
16
|
+
if (bytes < 1024)
|
|
17
|
+
return `${formatNumber(bytes)} B`;
|
|
18
|
+
if (bytes < 1024 * 1024) {
|
|
19
|
+
return `${formatNumber(bytes / 1024, { maximumFractionDigits: 1 })} KB`;
|
|
20
|
+
}
|
|
21
|
+
return `${formatNumber(bytes / (1024 * 1024), { maximumFractionDigits: 1 })} MB`;
|
|
22
|
+
}, [formatNumber]);
|
|
23
|
+
const reportError = (message) => {
|
|
24
|
+
setError(message);
|
|
25
|
+
onError?.(message);
|
|
26
|
+
};
|
|
27
|
+
const handleFile = async (file) => {
|
|
28
|
+
setError(null);
|
|
29
|
+
if (maxSize && file.size > maxSize) {
|
|
30
|
+
reportError(formatMessage(messages.fileDropzone.validation.fileTooLarge, {
|
|
31
|
+
maxSize: formatSize(maxSize),
|
|
32
|
+
}));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
setIsUploading(true);
|
|
36
|
+
try {
|
|
37
|
+
const formData = new FormData();
|
|
38
|
+
formData.append("file", file);
|
|
39
|
+
const res = await fetch(uploadUrl, {
|
|
40
|
+
method: "POST", // i18n-literal-ok HTTP method
|
|
41
|
+
body: formData,
|
|
42
|
+
credentials: "include", // i18n-literal-ok fetch credentials mode
|
|
43
|
+
});
|
|
44
|
+
if (!res.ok) {
|
|
45
|
+
const body = await res.text();
|
|
46
|
+
reportError(body ||
|
|
47
|
+
formatMessage(messages.fileDropzone.validation.uploadFailedWithStatus, {
|
|
48
|
+
status: res.status,
|
|
49
|
+
}));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const data = (await res.json());
|
|
53
|
+
const result = { ...data, name: file.name };
|
|
54
|
+
setUploaded(result);
|
|
55
|
+
onUploaded(result);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
reportError(err instanceof Error ? err.message : messages.fileDropzone.validation.uploadFailed);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
setIsUploading(false);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const handleDrop = (e) => {
|
|
65
|
+
e.preventDefault();
|
|
66
|
+
e.stopPropagation();
|
|
67
|
+
setIsDragging(false);
|
|
68
|
+
if (disabled || isUploading)
|
|
69
|
+
return;
|
|
70
|
+
const file = e.dataTransfer.files?.[0];
|
|
71
|
+
if (file) {
|
|
72
|
+
void handleFile(file);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const handleDragOver = (e) => {
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
e.stopPropagation();
|
|
78
|
+
if (!disabled && !isUploading) {
|
|
79
|
+
setIsDragging(true);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const handleDragLeave = (e) => {
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
e.stopPropagation();
|
|
85
|
+
setIsDragging(false);
|
|
86
|
+
};
|
|
87
|
+
const handleChange = (e) => {
|
|
88
|
+
const file = e.target.files?.[0];
|
|
89
|
+
if (file) {
|
|
90
|
+
void handleFile(file);
|
|
91
|
+
}
|
|
92
|
+
e.target.value = "";
|
|
93
|
+
};
|
|
94
|
+
const reset = () => {
|
|
95
|
+
setUploaded(null);
|
|
96
|
+
setError(null);
|
|
97
|
+
};
|
|
98
|
+
if (uploaded) {
|
|
99
|
+
return (_jsxs("div", { className: "flex items-center justify-between gap-3 rounded-md border bg-muted/30 p-3", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx(FileIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground" }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "truncate text-sm font-medium", children: uploaded.name }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [formatSize(uploaded.size), " \u00B7 ", uploaded.mimeType] })] })] }), _jsx("button", { type: "button", onClick: reset, className: "text-muted-foreground hover:text-destructive", "aria-label": messages.fileDropzone.removeFileAriaLabel, children: _jsx(X, { className: "h-4 w-4" }) })] }));
|
|
100
|
+
}
|
|
101
|
+
return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("button", { type: "button", onClick: () => inputRef.current?.click(), onDrop: handleDrop, onDragOver: handleDragOver, onDragLeave: handleDragLeave, disabled: disabled || isUploading, "data-dragging": isDragging, className: "flex flex-col items-center justify-center gap-2 rounded-md border border-dashed px-4 py-8 text-center transition-colors hover:border-foreground/30 hover:bg-muted/30 data-[dragging=true]:border-primary data-[dragging=true]:bg-primary/5 disabled:cursor-not-allowed disabled:opacity-60", children: isUploading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "h-6 w-6 animate-spin text-muted-foreground" }), _jsx("p", { className: "text-sm text-muted-foreground", children: messages.fileDropzone.uploading })] })) : (_jsxs(_Fragment, { children: [_jsx(Upload, { className: "h-6 w-6 text-muted-foreground" }), _jsx("p", { className: "text-sm text-muted-foreground", children: resolvedHelperText }), accept && (_jsxs("p", { className: "text-xs text-muted-foreground", children: [messages.fileDropzone.acceptedPrefix, " ", accept] }))] })) }), _jsx("input", { ref: inputRef, type: "file", className: "hidden", accept: accept, onChange: handleChange, disabled: disabled || isUploading }), error && _jsx("p", { className: "text-xs text-destructive", children: error })] }));
|
|
102
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
export interface IconActionButtonProps {
|
|
3
|
+
/** Label shown in the tooltip and used as `aria-label`. */
|
|
4
|
+
label: string;
|
|
5
|
+
/** Lucide icon (or any node) rendered inside the button. */
|
|
6
|
+
icon: React.ReactNode;
|
|
7
|
+
className?: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Standard table-action icon button with a tooltip. Wraps the design
|
|
13
|
+
* system's `<Button variant="ghost" size="icon-sm">` with a base-ui
|
|
14
|
+
* tooltip so every action across the booking detail tables exposes a
|
|
15
|
+
* short verb hint on hover.
|
|
16
|
+
*/
|
|
17
|
+
export declare function IconActionButton({ label, icon, className, disabled, onClick, }: IconActionButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=icon-action-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-action-button.d.ts","sourceRoot":"","sources":["../../src/components/icon-action-button.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAA;AAEnC,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,OAAO,GACR,EAAE,qBAAqB,2CAoBvB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from "@voyant-travel/ui/components/button";
|
|
4
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "@voyant-travel/ui/components/tooltip";
|
|
5
|
+
/**
|
|
6
|
+
* Standard table-action icon button with a tooltip. Wraps the design
|
|
7
|
+
* system's `<Button variant="ghost" size="icon-sm">` with a base-ui
|
|
8
|
+
* tooltip so every action across the booking detail tables exposes a
|
|
9
|
+
* short verb hint on hover.
|
|
10
|
+
*/
|
|
11
|
+
export function IconActionButton({ label, icon, className, disabled, onClick, }) {
|
|
12
|
+
return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { render: _jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": label, className: className, disabled: disabled, onClick: onClick }), children: icon }), _jsx(TooltipContent, { children: label })] }));
|
|
13
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/** Quantity per option_unit id; omitted ids are treated as 0. */
|
|
2
|
+
export interface OptionUnitsStepperValue {
|
|
3
|
+
quantities: Record<string, number>;
|
|
4
|
+
}
|
|
5
|
+
export declare const emptyOptionUnitsStepperValue: OptionUnitsStepperValue;
|
|
6
|
+
export interface OptionUnitsStepperUnit {
|
|
7
|
+
optionId: string | null;
|
|
8
|
+
optionUnitId: string;
|
|
9
|
+
unitName: string;
|
|
10
|
+
/** Stable code from the products schema (`ADULT`, `CHILD`, `SENIOR`, …) when present. */
|
|
11
|
+
unitCode?: string | null;
|
|
12
|
+
/** Inclusive lower age bound for this unit, when configured. */
|
|
13
|
+
minAge?: number | null;
|
|
14
|
+
/** Inclusive upper age bound for this unit, when configured. */
|
|
15
|
+
maxAge?: number | null;
|
|
16
|
+
/** Unit category from option_units.unitType — person/group/room/vehicle/service/other. */
|
|
17
|
+
unitType?: "person" | "group" | "room" | "vehicle" | "service" | "other" | null;
|
|
18
|
+
occupancyMax: number | null;
|
|
19
|
+
initial: number | null;
|
|
20
|
+
reserved: number;
|
|
21
|
+
remaining: number | null;
|
|
22
|
+
}
|
|
23
|
+
export interface OptionUnitsStepperSectionProps {
|
|
24
|
+
value: OptionUnitsStepperValue;
|
|
25
|
+
onChange: (value: OptionUnitsStepperValue) => void;
|
|
26
|
+
/** Product whose options become selectable room quantity rows. */
|
|
27
|
+
productId?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Departure the operator picked. Departure-specific availability wins
|
|
30
|
+
* when present; otherwise the section falls back to option-level units.
|
|
31
|
+
*/
|
|
32
|
+
slotId?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Product option whose units should be shown before a departure is picked.
|
|
35
|
+
* Departure-specific availability wins when `slotId` is present.
|
|
36
|
+
*/
|
|
37
|
+
optionId?: string | null;
|
|
38
|
+
/**
|
|
39
|
+
* When true, only the SELECTED option's units are shown (no cross-option
|
|
40
|
+
* fallback). Use when the option is already chosen and other options'
|
|
41
|
+
* rooms aren't bookable — e.g. the booking journey, where rooms are
|
|
42
|
+
* nested under the picked option. Defaults to false (show all options'
|
|
43
|
+
* units, the create-sheet's cross-option behavior).
|
|
44
|
+
*/
|
|
45
|
+
restrictToOption?: boolean;
|
|
46
|
+
enabled?: boolean;
|
|
47
|
+
onUnitsChange?: (units: OptionUnitsStepperUnit[]) => void;
|
|
48
|
+
labels?: {
|
|
49
|
+
heading?: string;
|
|
50
|
+
noOption?: string;
|
|
51
|
+
noSlot?: string;
|
|
52
|
+
noUnits?: string;
|
|
53
|
+
remaining?: string;
|
|
54
|
+
unlimited?: string;
|
|
55
|
+
fillsSlotCapacity?: string;
|
|
56
|
+
reviewLine?: string;
|
|
57
|
+
};
|
|
58
|
+
slotHasFiniteCapacity?: boolean;
|
|
59
|
+
invalidOptionUnitIds?: readonly string[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Rooms / per-unit stepper for booking-create flows. Drives
|
|
63
|
+
* `GET /v1/operations/availability/slots/:id/unit-availability` from #235 when a
|
|
64
|
+
* departure is selected, and product option-level units before departure
|
|
65
|
+
* selection, so operators can build "2 double rooms and 1 single" drafts.
|
|
66
|
+
*
|
|
67
|
+
* The section only tracks **intent** (how many of each unit the operator
|
|
68
|
+
* wants to book). Actual hold/reservation happens when the parent submits
|
|
69
|
+
* the booking — capacity drops the moment the reservation transaction
|
|
70
|
+
* commits; the next refetch of `useSlotUnitAvailability` reflects it.
|
|
71
|
+
*
|
|
72
|
+
* ### Stepper bounds
|
|
73
|
+
*
|
|
74
|
+
* - Minimum is 0 (operator can deselect).
|
|
75
|
+
* - Maximum is the unit's `remaining` count from the server. Unlimited
|
|
76
|
+
* pools (`remaining === null`) have no upper bound.
|
|
77
|
+
* - The server is the truth: entering `3 doubles` when only 2 remain just
|
|
78
|
+
* disables the "+" button — we don't let the UI submit a request that
|
|
79
|
+
* would 409 at insert time.
|
|
80
|
+
*/
|
|
81
|
+
export declare function OptionUnitsStepperSection({ value, onChange, productId, slotId, optionId, restrictToOption, enabled, onUnitsChange, labels, slotHasFiniteCapacity, invalidOptionUnitIds, }: OptionUnitsStepperSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
82
|
+
export declare function resolveOptionRemainingLabel({ totalRemaining, units, slotHasFiniteCapacity, remaining, unlimited, fillsSlotCapacity, }: {
|
|
83
|
+
totalRemaining: number | null;
|
|
84
|
+
units: ReadonlyArray<Pick<OptionUnitsStepperUnit, "unitType">>;
|
|
85
|
+
slotHasFiniteCapacity: boolean;
|
|
86
|
+
remaining: string;
|
|
87
|
+
unlimited: string;
|
|
88
|
+
fillsSlotCapacity?: string;
|
|
89
|
+
}): string;
|
|
90
|
+
export declare function optionRowHasInvalidUnit(units: ReadonlyArray<Pick<OptionUnitsStepperUnit, "optionUnitId">>, invalidOptionUnitIds: ReadonlySet<string>): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Returns the `optionId` the slot is bound to, derived from the first
|
|
93
|
+
* slot-availability row whose `optionUnitId` we can map to a known
|
|
94
|
+
* product option. Falls back to the caller's `fallbackOptionId` (the
|
|
95
|
+
* dialog's currently-selected option) when no rows resolve — that lets
|
|
96
|
+
* the existing `optionId` prop drive the previous-behavior path for
|
|
97
|
+
* unit pickers that haven't loaded yet.
|
|
98
|
+
*/
|
|
99
|
+
export declare function resolveSlotOptionId(slotRows: ReadonlyArray<{
|
|
100
|
+
optionUnitId: string;
|
|
101
|
+
}>, optionByUnitId: ReadonlyMap<string, string>, fallbackOptionId: string | null): string | null;
|
|
102
|
+
/**
|
|
103
|
+
* Merges slot-bound per-unit availability with the product's option-unit
|
|
104
|
+
* catalog. Slot rows are authoritative for the slot's option (they carry
|
|
105
|
+
* real-time `remaining`); product-level rows fill in the other options
|
|
106
|
+
* the product offers so the operator can still pick mixes the slot isn't
|
|
107
|
+
* explicitly tracking. When the slot is product-level (no `option_id`)
|
|
108
|
+
* or hasn't loaded slot rows yet, the product-level rows cover everything.
|
|
109
|
+
*/
|
|
110
|
+
export declare function mergeStepperUnits(slotRows: ReadonlyArray<OptionUnitsStepperUnit>, productRows: ReadonlyArray<OptionUnitsStepperUnit>, slotOptionId: string | null, hasSlot: boolean): OptionUnitsStepperUnit[];
|
|
111
|
+
//# sourceMappingURL=option-units-stepper-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"option-units-stepper-section.d.ts","sourceRoot":"","sources":["../../src/components/option-units-stepper-section.tsx"],"names":[],"mappings":"AAgBA,iEAAiE;AACjE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACnC;AAED,eAAO,MAAM,4BAA4B,EAAE,uBAA4C,CAAA;AAEvF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,IAAI,CAAA;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,uBAAuB,CAAA;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAClD,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,IAAI,CAAA;IACzD,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACzC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,KAAK,EACL,QAAQ,EACR,SAAS,EACT,MAAM,EACN,QAAQ,EACR,gBAAwB,EACxB,OAAc,EACd,aAAa,EACb,MAAM,EACN,qBAA6B,EAC7B,oBAAyB,GAC1B,EAAE,8BAA8B,2CAoQhC;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,cAAc,EACd,KAAK,EACL,qBAAqB,EACrB,SAAS,EACT,SAAS,EACT,iBAAiB,GAClB,EAAE;IACD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC,CAAA;IAC9D,qBAAqB,EAAE,OAAO,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GAAG,MAAM,CAMT;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC,EAClE,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAC,WAG1C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,CAAC;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,EACjD,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,MAAM,GAAG,IAAI,CAMf;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,CAAC,sBAAsB,CAAC,EAC/C,WAAW,EAAE,aAAa,CAAC,sBAAsB,CAAC,EAClD,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,OAAO,EAAE,OAAO,GACf,sBAAsB,EAAE,CAM1B"}
|