export function tripPlannerForm(form: FormTs) {
// Header with branding
form.setTitle(() => '✈️ Dream Travel Planner');
// Create pages container
const pages = form.addPages('pages-main', {
heightMode: 'tallest-page'
});
// Page 1: Destination & Travel Details
const page1 = pages.addPage('destination');
page1.addRow(row => {
row.addTextPanel('header1', {
label: 'Step 1: Destination & Travel Details',
computedValue: () => 'Choose your destination and travel style'
});
});
page1.addRow(row => {
row.addDropdown('destination', {
label: 'Destination',
defaultValue: 'paris',
isRequired: true,
options: [
{ id: 'paris', name: '🇫🇷 Paris, France' },
{ id: 'tokyo', name: '🇯🇵 Tokyo, Japan' },
{ id: 'bali', name: '🇮🇩 Bali, Indonesia' },
{ id: 'newyork', name: '🇺🇸 New York, USA' },
{ id: 'dubai', name: '🇦🇪 Dubai, UAE' }
]
});
});
page1.addRow(row => {
row.addRadioButton('travelStyle', {
label: 'Travel Style',
defaultValue: 'comfort',
isRequired: true,
orientation: 'horizontal',
options: [
{ id: 'budget', name: '💰 Budget' },
{ id: 'comfort', name: '⭐ Comfort' },
{ id: 'luxury', name: '👑 Luxury' }
]
});
});
page1.addRow(row => {
row.addInteger('travelers', {
label: 'Number of Travelers',
min: 1,
max: 20,
defaultValue: 2,
isRequired: true
});
row.addDropdown('duration', {
label: 'Trip Duration',
defaultValue: 'week',
isRequired: true,
options: [
{ id: 'weekend', name: '🗓️ Weekend (3 days)' },
{ id: 'week', name: '📅 One Week (7 days)' },
{ id: 'twoweeks', name: '🏖️ Two Weeks (14 days)' }
]
});
});
// Page 2: Preferences & Activities
const page2 = pages.addPage('preferences');
page2.addRow(row => {
row.addTextPanel('header2', {
label: 'Step 2: Your Preferences',
computedValue: () => 'Customize your travel experience'
});
});
page2.addRow(row => {
row.addDropdown('accommodation', {
label: 'Accommodation Type',
defaultValue: 'hotel',
isRequired: true,
options: [
{ id: 'hostel', name: '🛏️ Hostel' },
{ id: 'hotel', name: '🏨 Hotel' },
{ id: 'resort', name: '🏝️ Resort' },
{ id: 'villa', name: '🏡 Private Villa' }
]
});
row.addDropdown('mealPlan', {
label: 'Meal Plan',
defaultValue: 'breakfast',
options: [
{ id: 'none', name: '❌ No Meals' },
{ id: 'breakfast', name: '🥐 Breakfast Only' },
{ id: 'halfboard', name: '🍽️ Half Board' },
{ id: 'fullboard', name: '🍴 Full Board' }
]
});
});
page2.addRow(row => {
row.addCheckboxList('activities', {
label: 'Activities',
orientation: 'vertical',
defaultValue: ['cultural'],
options: [
{ id: 'adventure', name: '🏄 Adventure Activities' },
{ id: 'cultural', name: '🏛️ Cultural Tours' },
{ id: 'culinary', name: '👨🍳 Culinary Experiences' },
{ id: 'wellness', name: '🧘 Spa & Wellness' }
]
});
});
page2.addRow(row => {
row.addTextbox('dietary', {
label: 'Dietary Preferences',
placeholder: 'e.g., Vegetarian, Gluten-free'
});
});
page2.addRow(row => {
row.addTextbox('specialRequests', {
label: 'Special Requests',
placeholder: 'e.g., Ocean view, Ground floor'
});
});
// Page 3: Price Summary
const page3 = pages.addPage('summary');
page3.addRow(row => {
row.addTextPanel('header3', {
label: 'Step 3: Trip Summary',
computedValue: () => 'Review your trip costs'
});
});
page3.addRow(row => {
row.addMoney('basePrice', {
label: '🏨 Base Package',
currency: '$',
computedValue: () => {
const destPrices = { paris: 800, tokyo: 1200, bali: 600, newyork: 900, dubai: 1100 };
const styleMultiplier = { budget: 0.7, comfort: 1.0, luxury: 1.8 };
const durationDays = { weekend: 3, week: 7, twoweeks: 14 };
const dest = page1.dropdown('destination')?.value();
const style = page1.radioButton('travelStyle')?.value();
const duration = page1.dropdown('duration')?.value();
const travelers = page1.integer('travelers')?.value() || 1;
if(!dest || !style || !duration)
return 0;
const baseRate = (destPrices[dest] || 800) * (styleMultiplier[style] || 1.0);
return baseRate * (durationDays[duration] || 7) * travelers;
}
});
row.addMoney('addOns', {
label: '🎭 Activities & Add-ons',
currency: '$',
computedValue: () => {
const activities = page2.checkboxList('activities')?.value() || [];
const travelers = page1.integer('travelers')?.value() || 1;
let cost = 0;
if (activities.includes('adventure')) cost += 150 * travelers;
if (activities.includes('cultural')) cost += 100 * travelers;
if (activities.includes('culinary')) cost += 120 * travelers;
if (activities.includes('wellness')) cost += 180 * travelers;
return cost;
}
});
});
page3.addRow(row => {
row.addCheckboxList('discountOptions', {
label: '🏷️ Available Discounts',
orientation: 'vertical',
defaultValue: [],
options: [
{ id: 'earlyBird', name: '🐦 Early Bird (60+ days ahead) - Save 10%' },
{ id: 'returning', name: '🔄 Returning Customer - Save 5%' },
{ id: 'referral', name: '👥 Referral Code - Save $50' }
]
});
});
page3.addRow(row => {
row.addMoney('discount', {
label: '💸 Total Discounts',
currency: '$',
computedValue: () => {
const duration = page1.dropdown('duration')?.value();
const travelers = page1.integer('travelers')?.value() || 1;
const discountOptions = page3.checkboxList('discountOptions')?.value() || [];
const basePrice = page3.money('basePrice')?.value() || 0;
let discount = 0;
if (duration === 'twoweeks') discount += basePrice * 0.15;
if (travelers >= 4) discount += basePrice * 0.10;
if (discountOptions.includes('earlyBird')) discount += basePrice * 0.10;
if (discountOptions.includes('returning')) discount += basePrice * 0.05;
if (discountOptions.includes('referral')) discount += 50;
return discount;
}
});
row.addMoney('total', {
label: '🌟 Total Price',
currency: '$',
computedValue: () => {
const base = page3.money('basePrice')?.value() || 0;
const addOns = page3.money('addOns')?.value() || 0;
const discount = page3.money('discount')?.value() || 0;
return base + addOns - discount;
}
});
});
page3.addRow(row => {
row.addTextPanel('savingsMsg', {
computedValue: () => {
const discount = page3.money('discount')?.value() || 0;
if (discount > 0) {
return `🎉 Amazing! You're saving $${discount.toFixed(2)} on this trip!`;
}
return '💡 Tip: Select discounts above or travel with 4+ people for group savings!';
},
customStyles: {
color: '#1976d2',
fontWeight: '500',
padding: '14px',
background: '#e3f2fd',
borderRadius: '8px'
}
});
});
// Page 4: Payment & Booking
const page4 = pages.addPage('booking');
page4.addRow(row => {
row.addTextPanel('header4', {
label: 'Step 4: Complete Your Booking',
computedValue: () => 'Enter your details and confirm reservation'
});
});
page4.addRow(row => {
row.addTextbox('fullName', {
label: '👤 Full Name',
placeholder: 'John Smith',
isRequired: true
});
row.addEmail('email', {
label: '📧 Email Address',
placeholder: 'john@example.com',
isRequired: true
});
});
page4.addRow(row => {
row.addRadioButton('payment', {
label: '💰 Payment Option',
defaultValue: 'full',
isRequired: true,
orientation: 'vertical',
options: [
{ id: 'full', name: '✅ Pay in Full - Best Value' },
{ id: 'deposit', name: '🔒 Pay 30% Deposit' },
{ id: 'installments', name: '📆 3 Monthly Installments' }
]
});
});
page4.addRow(row => {
row.addMoney('amountDue', {
label: '💵 Amount Due Now',
currency: '$',
computedValue: () => {
const total = page3.money('total')?.value() || 0;
const payment = page4.radioButton('payment')?.value();
if (payment === 'deposit') return total * 0.3;
if (payment === 'installments') return total / 3;
return total;
}
});
});
page4.addRow(row => {
row.addCheckboxList('checks', {
orientation: 'vertical',
options: [{
name: '🛡️ Add Travel Insurance (+$49/person)',
id: 'insurance'
}, {
name: '📜 I agree to Terms & Conditions',
id: 'terms',
isRequired: true
}]
})
});
}