@voyantjs/bookings-ui 0.107.0 → 0.108.0
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/dist/components/option-units-stepper-section.d.ts +9 -1
- package/dist/components/option-units-stepper-section.d.ts.map +1 -1
- package/dist/components/option-units-stepper-section.js +10 -2
- package/dist/components/person-picker-section.d.ts +7 -1
- package/dist/components/person-picker-section.d.ts.map +1 -1
- package/dist/components/person-picker-section.js +2 -2
- package/dist/i18n/en.d.ts +37 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +40 -4
- package/dist/i18n/messages.d.ts +37 -1
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/i18n/provider.d.ts +74 -2
- package/dist/i18n/provider.d.ts.map +1 -1
- package/dist/i18n/ro.d.ts +37 -1
- package/dist/i18n/ro.d.ts.map +1 -1
- package/dist/i18n/ro.js +39 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/journey/components/booking-journey.d.ts.map +1 -1
- package/dist/journey/components/booking-journey.js +270 -27
- 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 +231 -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 +224 -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 +13 -39
- package/dist/journey/components/journey-steps.d.ts.map +1 -1
- package/dist/journey/components/journey-steps.js +16 -613
- package/dist/journey/components/side-panel.d.ts +7 -2
- package/dist/journey/components/side-panel.d.ts.map +1 -1
- package/dist/journey/components/side-panel.js +73 -24
- package/dist/journey/index.d.ts +2 -2
- package/dist/journey/index.d.ts.map +1 -1
- package/dist/journey/index.js +1 -1
- 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 +141 -8
- package/dist/journey/types.d.ts.map +1 -1
- package/dist/journey/types.js +3 -1
- package/package.json +32 -32
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Separator } from "@voyantjs/ui/components";
|
|
4
|
+
import { Button } from "@voyantjs/ui/components/button";
|
|
5
|
+
import { Card, CardContent, CardHeader, CardTitle } from "@voyantjs/ui/components/card";
|
|
6
|
+
import { Plus } from "lucide-react";
|
|
7
|
+
import { useEffect, useRef } from "react";
|
|
8
|
+
import { formatMessage, useBookingsUiMessagesOrDefault } from "../../../i18n/index.js";
|
|
9
|
+
import { canCopyBillingContactToTraveler, patchConfigure, setTravelers, totalPax, } from "../../lib/draft-state.js";
|
|
10
|
+
import { PaxDependencyWarnings, PaxValidation } from "./configure-steps.js";
|
|
11
|
+
import { computeAge, cryptoRowId, DateField, Field, JourneyWarnings, PhoneField, SelectField, } from "./shared.js";
|
|
12
|
+
/** Pax counts are DERIVED from the traveler rows — each row's band is the
|
|
13
|
+
* source of truth, so the quote always matches who's actually in the list. */
|
|
14
|
+
function paxFromTravelers(travelers, bands) {
|
|
15
|
+
const counts = {};
|
|
16
|
+
for (const band of bands)
|
|
17
|
+
counts[band.code] = 0;
|
|
18
|
+
for (const traveler of travelers) {
|
|
19
|
+
counts[traveler.band] = (counts[traveler.band] ?? 0) + 1;
|
|
20
|
+
}
|
|
21
|
+
return counts;
|
|
22
|
+
}
|
|
23
|
+
/** Commit a new traveler list AND re-derive the band counts in one update. */
|
|
24
|
+
function applyTravelers(draft, next, bands) {
|
|
25
|
+
return patchConfigure(setTravelers(draft, next), { pax: paxFromTravelers(next, bands) });
|
|
26
|
+
}
|
|
27
|
+
export function TravelersStep({ draft, setDraft, shape, renderTravelerContactPicker, warnings, }) {
|
|
28
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
29
|
+
const travelers = draft.travelers;
|
|
30
|
+
const bands = shape.paxBands;
|
|
31
|
+
const hasBandChoice = bands.length > 1;
|
|
32
|
+
const { min, max } = shape.paxBandsAllowedTotal;
|
|
33
|
+
// Seed the initial rows ONCE: from any pre-set band counts (detail-page
|
|
34
|
+
// hand-off) or up to the minimum party size, then keep the derived pax in
|
|
35
|
+
// sync. After this, the rows are authoritative.
|
|
36
|
+
const seeded = useRef(false);
|
|
37
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: one-shot seed guarded by the ref
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (seeded.current)
|
|
40
|
+
return;
|
|
41
|
+
seeded.current = true;
|
|
42
|
+
const target = Math.max(min, totalPax(draft), travelers.length);
|
|
43
|
+
if (travelers.length >= target) {
|
|
44
|
+
// Rows already exist — just make sure the counts reflect them.
|
|
45
|
+
if (travelers.length > 0)
|
|
46
|
+
setDraft(applyTravelers(draft, travelers, bands));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const rows = [...travelers];
|
|
50
|
+
while (rows.length < target) {
|
|
51
|
+
rows.push({
|
|
52
|
+
rowId: cryptoRowId(),
|
|
53
|
+
firstName: "",
|
|
54
|
+
lastName: "",
|
|
55
|
+
band: bandForSeedIndex(draft, rows.length, shape),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
setDraft(applyTravelers(draft, rows, bands));
|
|
59
|
+
}, []);
|
|
60
|
+
const addTraveler = () => {
|
|
61
|
+
const band = (bands[0]?.code ?? "adult");
|
|
62
|
+
const next = [...travelers, { rowId: cryptoRowId(), firstName: "", lastName: "", band }];
|
|
63
|
+
setDraft(applyTravelers(draft, next, bands));
|
|
64
|
+
};
|
|
65
|
+
const removeTraveler = (idx) => {
|
|
66
|
+
setDraft(applyTravelers(draft, travelers.filter((_, i) => i !== idx), bands));
|
|
67
|
+
};
|
|
68
|
+
const atMax = max != null && travelers.length >= max;
|
|
69
|
+
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: messages.bookingJourney.travelers.title }) }), _jsx(Separator, {}), _jsxs(CardContent, { className: "space-y-4", children: [travelers.map((traveler, idx) => {
|
|
70
|
+
const apply = (contact) => {
|
|
71
|
+
const next = [...travelers];
|
|
72
|
+
next[idx] = {
|
|
73
|
+
...next[idx],
|
|
74
|
+
firstName: contact.firstName,
|
|
75
|
+
lastName: contact.lastName,
|
|
76
|
+
email: contact.email,
|
|
77
|
+
phone: contact.phone,
|
|
78
|
+
personId: contact.personId,
|
|
79
|
+
};
|
|
80
|
+
setDraft(applyTravelers(draft, next, bands));
|
|
81
|
+
};
|
|
82
|
+
return (_jsx(TravelerCard, { idx: idx, traveler: traveler, shape: shape, draft: draft, setDraft: setDraft, renderTravelerContactPicker: renderTravelerContactPicker, apply: apply, showBandSelect: hasBandChoice, onRemove: travelers.length > 1 ? () => removeTraveler(idx) : undefined }, traveler.rowId ?? idx));
|
|
83
|
+
}), _jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: addTraveler, disabled: atMax, className: "w-full", children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), messages.bookingJourney.travelers.addTraveler] }), _jsx(PaxValidation, { draft: draft, shape: shape }), _jsx(PaxDependencyWarnings, { draft: draft, shape: shape }), _jsx(JourneyWarnings, { warnings: warnings })] })] }));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* One traveler block — type (band) selector, name, optional contact, age, and
|
|
87
|
+
* any descriptor-driven document fields. Honors `appliesToBands` so DOB is
|
|
88
|
+
* required for child / infant bands and adult-only fields like passport drop
|
|
89
|
+
* off the form for non-adult travelers.
|
|
90
|
+
*/
|
|
91
|
+
function TravelerCard({ idx, traveler, shape, draft, setDraft, renderTravelerContactPicker, apply, showBandSelect, onRemove, }) {
|
|
92
|
+
const messages = useBookingsUiMessagesOrDefault();
|
|
93
|
+
const bands = shape.paxBands;
|
|
94
|
+
const applicableFields = shape.travelerFields.filter((f) => {
|
|
95
|
+
if (!f.appliesToBands || f.appliesToBands.length === 0)
|
|
96
|
+
return true;
|
|
97
|
+
return f.appliesToBands.includes(traveler.band);
|
|
98
|
+
});
|
|
99
|
+
const dobField = applicableFields.find((f) => f.key === "dateOfBirth");
|
|
100
|
+
const phoneField = applicableFields.find((f) => f.key === "phone");
|
|
101
|
+
const dynamicFields = applicableFields.filter((f) => !["firstName", "lastName", "email", "phone", "dateOfBirth"].includes(f.key));
|
|
102
|
+
// When a contact picker is wired (operator), identity comes from the picked
|
|
103
|
+
// CRM contact — the manual name/email/phone inputs are never shown (pick an
|
|
104
|
+
// existing contact or Create new). Only surfaces (e.g. storefront) WITHOUT a
|
|
105
|
+
// picker show the manual identity fields. Travel-specific fields (DOB,
|
|
106
|
+
// documents) always show.
|
|
107
|
+
const showIdentity = !renderTravelerContactPicker;
|
|
108
|
+
const gridHasContent = showIdentity || Boolean(dobField) || dynamicFields.length > 0;
|
|
109
|
+
// Live age from DOB — surfaces in the header so the user gets feedback as
|
|
110
|
+
// they pick a date.
|
|
111
|
+
const computedAge = traveler.dateOfBirth ? computeAge(traveler.dateOfBirth) : null;
|
|
112
|
+
// All row mutations go through here so the derived band counts stay in sync.
|
|
113
|
+
const patchRow = (patch) => {
|
|
114
|
+
const next = [...draft.travelers];
|
|
115
|
+
if (!next[idx])
|
|
116
|
+
return;
|
|
117
|
+
next[idx] = { ...next[idx], ...patch };
|
|
118
|
+
setDraft(applyTravelers(draft, next, bands));
|
|
119
|
+
};
|
|
120
|
+
// Picking a DOB that lands in a different band snaps the type selector to
|
|
121
|
+
// match, so pricing stays correct.
|
|
122
|
+
const onDobChange = (v) => {
|
|
123
|
+
const age = v ? computeAge(v) : null;
|
|
124
|
+
let band = traveler.band;
|
|
125
|
+
if (age != null) {
|
|
126
|
+
const target = bands.find((b) => {
|
|
127
|
+
if (b.minAge != null && age < b.minAge)
|
|
128
|
+
return false;
|
|
129
|
+
if (b.maxAge != null && age > b.maxAge)
|
|
130
|
+
return false;
|
|
131
|
+
return true;
|
|
132
|
+
});
|
|
133
|
+
if (target)
|
|
134
|
+
band = target.code;
|
|
135
|
+
}
|
|
136
|
+
patchRow({ dateOfBirth: v, band });
|
|
137
|
+
};
|
|
138
|
+
// Out-of-range warning — only when the DOB fits NO band (e.g. older than the
|
|
139
|
+
// supplier accepts); we can't auto-fix that, the booking would be rejected.
|
|
140
|
+
const ageOutOfBounds = computedAge != null &&
|
|
141
|
+
!bands.some((b) => {
|
|
142
|
+
if (b.minAge != null && computedAge < b.minAge)
|
|
143
|
+
return false;
|
|
144
|
+
if (b.maxAge != null && computedAge > b.maxAge)
|
|
145
|
+
return false;
|
|
146
|
+
return true;
|
|
147
|
+
});
|
|
148
|
+
// Quick-fill from billing — useful when the lead booker is also a traveler.
|
|
149
|
+
const billingContact = draft.billing.contact;
|
|
150
|
+
const canCopyFromBilling = canCopyBillingContactToTraveler(billingContact);
|
|
151
|
+
const copyFromBilling = () => {
|
|
152
|
+
patchRow({
|
|
153
|
+
firstName: billingContact.firstName,
|
|
154
|
+
lastName: billingContact.lastName,
|
|
155
|
+
email: billingContact.email || undefined,
|
|
156
|
+
phone: billingContact.phone || undefined,
|
|
157
|
+
personId: billingContact.personId || undefined,
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
const travelerName = [traveler.firstName, traveler.lastName].filter(Boolean).join(" ").trim();
|
|
161
|
+
return (_jsxs("div", { className: "space-y-4 rounded-md border p-4", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { className: "text-sm font-medium", children: [formatMessage(messages.bookingJourney.travelers.travelerNumber, {
|
|
162
|
+
number: idx + 1,
|
|
163
|
+
}), travelerName ? (_jsx("span", { className: "text-muted-foreground font-normal", children: ` · ${travelerName}` })) : null, computedAge != null ? (_jsxs("span", { className: "text-muted-foreground font-normal", children: [" · ", formatMessage(messages.bookingJourney.travelers.ageLabel, {
|
|
164
|
+
age: computedAge,
|
|
165
|
+
})] })) : null] }), _jsxs("div", { className: "flex items-center gap-1", children: [canCopyFromBilling ? (_jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "h-7 text-muted-foreground", onClick: copyFromBilling, children: messages.bookingJourney.travelers.copyFromBilling })) : null, onRemove ? (_jsx(Button, { type: "button", variant: "ghost", size: "sm", className: "h-7 text-destructive hover:text-destructive", onClick: onRemove, children: messages.bookingJourney.travelers.remove })) : null] })] }), showBandSelect ? (_jsx(SelectField, { id: `bj-trav-${idx}-band`, label: messages.bookingJourney.travelers.travelerType, value: traveler.band, options: bands.map((b) => ({ value: b.code, label: b.label })), onChange: (code) => patchRow({ band: code }) })) : null, renderTravelerContactPicker ? (_jsx("div", { children: renderTravelerContactPicker({
|
|
166
|
+
rowIndex: idx,
|
|
167
|
+
apply,
|
|
168
|
+
selectedPersonId: traveler.personId,
|
|
169
|
+
}) })) : null, gridHasContent ? (_jsxs("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2", children: [showIdentity ? (_jsxs(_Fragment, { children: [_jsx(Field, { id: `bj-trav-${idx}-first`, label: messages.bookingJourney.billing.firstName, value: traveler.firstName, onChange: (v) => patchRow({ firstName: v }) }), _jsx(Field, { id: `bj-trav-${idx}-last`, label: messages.bookingJourney.billing.lastName, value: traveler.lastName, onChange: (v) => patchRow({ lastName: v }) }), applicableFields.some((f) => f.key === "email") ? (_jsx(Field, { id: `bj-trav-${idx}-email`, label: messages.bookingJourney.billing.email, type: "email", value: traveler.email ?? "", onChange: (v) => patchRow({ email: v }) })) : null, phoneField ? (_jsx(PhoneField, { id: `bj-trav-${idx}-phone`,
|
|
170
|
+
// i18n-literal-ok Required marker appended to a descriptor-supplied field label.
|
|
171
|
+
label: phoneField.label + (phoneField.required ? " *" : ""), value: traveler.phone ?? "", onChange: (v) => patchRow({ phone: v }) })) : null] })) : null, dobField ? (_jsxs("div", { className: "space-y-1", children: [_jsx(DateField, { id: `bj-trav-${idx}-dob`,
|
|
172
|
+
// i18n-literal-ok Required marker appended to a descriptor-supplied field label.
|
|
173
|
+
label: dobField.label + (dobField.required ? " *" : ""), value: traveler.dateOfBirth ?? "", onChange: onDobChange, range: "past" }), ageOutOfBounds ? (_jsxs("p", { className: "text-amber-600 text-xs dark:text-amber-400", children: ["\u26A0", " ", formatMessage(messages.bookingJourney.validation.ageOutOfRange, {
|
|
174
|
+
age: computedAge,
|
|
175
|
+
})] })) : null] })) : null, dynamicFields.map((field) => {
|
|
176
|
+
const value = traveler.documents?.[field.key] ?? "";
|
|
177
|
+
const onFieldChange = (v) => patchRow({ documents: { ...traveler.documents, [field.key]: v } });
|
|
178
|
+
// i18n-literal-ok Required marker appended to a descriptor-supplied field label.
|
|
179
|
+
const labelText = field.label + (field.required ? " *" : "");
|
|
180
|
+
if (field.type === "select" && field.options) {
|
|
181
|
+
return (_jsx(SelectField, { id: `bj-trav-${idx}-${field.key}`, label: labelText, value: value, options: field.options, onChange: onFieldChange }, field.key));
|
|
182
|
+
}
|
|
183
|
+
if (field.type === "date") {
|
|
184
|
+
return (_jsx(DateField, { id: `bj-trav-${idx}-${field.key}`, label: labelText, value: value, onChange: onFieldChange, range: field.key === "documentExpiry" ? "document" : "future" }, field.key));
|
|
185
|
+
}
|
|
186
|
+
return (_jsx(Field, { id: `bj-trav-${idx}-${field.key}`, label: labelText, type: "text", value: value, onChange: onFieldChange }, field.key));
|
|
187
|
+
})] })) : null] }));
|
|
188
|
+
}
|
|
189
|
+
/** Band for a freshly-seeded row at `idx`, distributing across any pre-set
|
|
190
|
+
* band counts in order (so a detail-page hand-off of 1 adult + 1 child seeds
|
|
191
|
+
* the right two rows). Falls back to the first band. */
|
|
192
|
+
function bandForSeedIndex(draft, idx, shape) {
|
|
193
|
+
let cursor = 0;
|
|
194
|
+
for (const band of shape.paxBands) {
|
|
195
|
+
const count = draft.configure.pax?.[band.code] ?? 0;
|
|
196
|
+
if (idx < cursor + count)
|
|
197
|
+
return band.code;
|
|
198
|
+
cursor += count;
|
|
199
|
+
}
|
|
200
|
+
return (shape.paxBands[0]?.code ?? "adult");
|
|
201
|
+
}
|
|
@@ -4,44 +4,18 @@
|
|
|
4
4
|
* via setDraft and the shell re-quotes on the next debounce tick.
|
|
5
5
|
*
|
|
6
6
|
* Per booking-journey-architecture §3.
|
|
7
|
+
*
|
|
8
|
+
* This module is a thin barrel — the implementations live in the
|
|
9
|
+
* `./journey-steps/` directory, split by step. Consumers import the
|
|
10
|
+
* same public symbols from here as before.
|
|
7
11
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
export
|
|
17
|
-
renderExtras?: () => React.ReactNode;
|
|
18
|
-
}): React.ReactElement;
|
|
19
|
-
export declare function BillingStep({ draft, setDraft, renderLeadContactPicker, renderExtras, }: StepCommonProps & {
|
|
20
|
-
renderLeadContactPicker?: (props: LeadContactPickerProps) => React.ReactNode;
|
|
21
|
-
renderExtras?: () => React.ReactNode;
|
|
22
|
-
}): React.ReactElement;
|
|
23
|
-
export declare function TravelersStep({ draft, setDraft, shape, renderTravelerContactPicker, }: StepCommonProps & {
|
|
24
|
-
renderTravelerContactPicker?: (props: TravelerContactPickerProps) => React.ReactNode;
|
|
25
|
-
}): React.ReactElement;
|
|
26
|
-
export declare function AccommodationStep({ draft, setDraft, shape }: StepCommonProps): React.ReactElement;
|
|
27
|
-
export declare function AddonsStep({ draft, setDraft, shape }: StepCommonProps): React.ReactElement;
|
|
28
|
-
export declare function PaymentStep({ draft, setDraft, shape, capabilities, renderProviderStep, }: StepCommonProps & {
|
|
29
|
-
capabilities: PaymentProviderCapabilities;
|
|
30
|
-
renderProviderStep?: (props: PaymentProviderStepRenderProps) => React.ReactNode;
|
|
31
|
-
}): React.ReactElement;
|
|
32
|
-
export declare function ReviewStep({ draft, setDraft, isCommitting, onConfirm, renderExtras, surface, }: {
|
|
33
|
-
draft: Draft;
|
|
34
|
-
setDraft: (next: Draft) => void;
|
|
35
|
-
isCommitting: boolean;
|
|
36
|
-
onConfirm: () => void;
|
|
37
|
-
renderExtras?: () => React.ReactNode;
|
|
38
|
-
/**
|
|
39
|
-
* Drives the notes field. Public storefronts collect
|
|
40
|
-
* customer-facing "anything we should know?" notes; operator
|
|
41
|
-
* surfaces collect operator-only internal notes. Defaults to
|
|
42
|
-
* `admin` so existing operator usage stays unchanged.
|
|
43
|
-
*/
|
|
44
|
-
surface?: "admin" | "public";
|
|
45
|
-
}): React.ReactElement;
|
|
46
|
-
export {};
|
|
12
|
+
export { AccommodationStep } from "./journey-steps/accommodation-step.js";
|
|
13
|
+
export { AddonsStep } from "./journey-steps/addons-step.js";
|
|
14
|
+
export { BillingStep } from "./journey-steps/billing-step.js";
|
|
15
|
+
export { DepartureStep, OptionsStep } from "./journey-steps/configure-steps.js";
|
|
16
|
+
export { DocumentsStep } from "./journey-steps/documents-step.js";
|
|
17
|
+
export { FinalizeControls, PaymentStep } from "./journey-steps/payment-step.js";
|
|
18
|
+
export { ReviewStep } from "./journey-steps/review-step.js";
|
|
19
|
+
export { JourneyWarnings } from "./journey-steps/shared.js";
|
|
20
|
+
export { TravelersStep } from "./journey-steps/travelers-step.js";
|
|
47
21
|
//# sourceMappingURL=journey-steps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-steps.d.ts","sourceRoot":"","sources":["../../../src/journey/components/journey-steps.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"journey-steps.d.ts","sourceRoot":"","sources":["../../../src/journey/components/journey-steps.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA"}
|