@burdenoff/microfe-housingvista 2026.703.13 → 2026.709.2
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/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-types.d.ts +23527 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +267 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-operations.js +67 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.d.ts +57868 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/housingvista/HousingVistaRoot.d.ts +5 -0
- package/dist/housingvista/HousingVistaRoot.d.ts.map +1 -0
- package/dist/housingvista/HousingVistaRoutes.d.ts +7 -0
- package/dist/housingvista/HousingVistaRoutes.d.ts.map +1 -0
- package/dist/housingvista/components/Breadcrumbs.d.ts +13 -0
- package/dist/housingvista/components/Breadcrumbs.d.ts.map +1 -0
- package/dist/housingvista/components/ChartCard.d.ts +12 -0
- package/dist/housingvista/components/ChartCard.d.ts.map +1 -0
- package/dist/housingvista/components/ContactOwnerDialog.d.ts +33 -0
- package/dist/housingvista/components/ContactOwnerDialog.d.ts.map +1 -0
- package/dist/housingvista/components/DataTable.d.ts +42 -0
- package/dist/housingvista/components/DataTable.d.ts.map +1 -0
- package/dist/housingvista/components/EmptyState.d.ts +19 -0
- package/dist/housingvista/components/EmptyState.d.ts.map +1 -0
- package/dist/housingvista/components/ErrorBoundary.d.ts +19 -0
- package/dist/housingvista/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/housingvista/components/FileUploader.d.ts +16 -0
- package/dist/housingvista/components/FileUploader.d.ts.map +1 -0
- package/dist/housingvista/components/FilterBar.d.ts +13 -0
- package/dist/housingvista/components/FilterBar.d.ts.map +1 -0
- package/dist/housingvista/components/LoadingSkeleton.d.ts +10 -0
- package/dist/housingvista/components/LoadingSkeleton.d.ts.map +1 -0
- package/dist/housingvista/components/PageLayout.d.ts +18 -0
- package/dist/housingvista/components/PageLayout.d.ts.map +1 -0
- package/dist/housingvista/components/PropertyCard.d.ts +26 -0
- package/dist/housingvista/components/PropertyCard.d.ts.map +1 -0
- package/dist/housingvista/components/ReviewsSection.d.ts +12 -0
- package/dist/housingvista/components/ReviewsSection.d.ts.map +1 -0
- package/dist/housingvista/components/StatCard.d.ts +18 -0
- package/dist/housingvista/components/StatCard.d.ts.map +1 -0
- package/dist/housingvista/components/StatusBadge.d.ts +12 -0
- package/dist/housingvista/components/StatusBadge.d.ts.map +1 -0
- package/dist/housingvista/components/index.d.ts +17 -0
- package/dist/housingvista/components/index.d.ts.map +1 -0
- package/dist/housingvista/context/HousingVistaContext.d.ts +15 -0
- package/dist/housingvista/context/HousingVistaContext.d.ts.map +1 -0
- package/dist/housingvista/hooks/index.d.ts +804 -0
- package/dist/housingvista/hooks/index.d.ts.map +1 -0
- package/dist/housingvista/hooks/index.js +1 -0
- package/dist/housingvista/hooks/index.js.map +1 -1
- package/dist/housingvista/hooks/messages.d.ts +65 -0
- package/dist/housingvista/hooks/messages.d.ts.map +1 -0
- package/dist/housingvista/hooks/platform.d.ts +140 -0
- package/dist/housingvista/hooks/platform.d.ts.map +1 -0
- package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts +16 -0
- package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts.map +1 -0
- package/dist/housingvista/hooks/useHousingVistaAnalytics.js +57 -0
- package/dist/housingvista/hooks/useHousingVistaAnalytics.js.map +1 -0
- package/dist/housingvista/hooks/useServerPagination.d.ts +12 -0
- package/dist/housingvista/hooks/useServerPagination.d.ts.map +1 -0
- package/dist/housingvista/index.d.ts +13 -0
- package/dist/housingvista/index.d.ts.map +1 -0
- package/dist/housingvista/index.js +2 -0
- package/dist/housingvista/lib/toast.d.ts +11 -0
- package/dist/housingvista/lib/toast.d.ts.map +1 -0
- package/dist/housingvista/pages/HomePage.d.ts +7 -0
- package/dist/housingvista/pages/HomePage.d.ts.map +1 -0
- package/dist/housingvista/pages/HomePage.js +135 -132
- package/dist/housingvista/pages/HomePage.js.map +1 -1
- package/dist/housingvista/pages/amc/AMCManagementPage.d.ts +2 -0
- package/dist/housingvista/pages/amc/AMCManagementPage.d.ts.map +1 -0
- package/dist/housingvista/pages/analytics/AnalyticsPage.d.ts +2 -0
- package/dist/housingvista/pages/analytics/AnalyticsPage.d.ts.map +1 -0
- package/dist/housingvista/pages/analytics/AnalyticsPage.js +136 -134
- package/dist/housingvista/pages/analytics/AnalyticsPage.js.map +1 -1
- package/dist/housingvista/pages/assets/AssetDetailPage.d.ts +9 -0
- package/dist/housingvista/pages/assets/AssetDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/assets/AssetManagementPage.d.ts +2 -0
- package/dist/housingvista/pages/assets/AssetManagementPage.d.ts.map +1 -0
- package/dist/housingvista/pages/assets/AssetManagementPage.js.map +1 -1
- package/dist/housingvista/pages/chat/ChatPage.d.ts +14 -0
- package/dist/housingvista/pages/chat/ChatPage.d.ts.map +1 -0
- package/dist/housingvista/pages/finance/HomeLoanDetailPage.d.ts +11 -0
- package/dist/housingvista/pages/finance/HomeLoanDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/finance/HomeLoansPage.d.ts +2 -0
- package/dist/housingvista/pages/finance/HomeLoansPage.d.ts.map +1 -0
- package/dist/housingvista/pages/investments/InvestmentDetailPage.d.ts +2 -0
- package/dist/housingvista/pages/investments/InvestmentDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/investments/InvestmentsPage.d.ts +2 -0
- package/dist/housingvista/pages/investments/InvestmentsPage.d.ts.map +1 -0
- package/dist/housingvista/pages/investments/InvestmentsPage.js.map +1 -1
- package/dist/housingvista/pages/legal/LegalPage.d.ts +2 -0
- package/dist/housingvista/pages/legal/LegalPage.d.ts.map +1 -0
- package/dist/housingvista/pages/legal/LegalServiceDetailPage.d.ts +12 -0
- package/dist/housingvista/pages/legal/LegalServiceDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/market/AreaInsightsPage.d.ts +2 -0
- package/dist/housingvista/pages/market/AreaInsightsPage.d.ts.map +1 -0
- package/dist/housingvista/pages/market/MarketAnalyticsPage.d.ts +2 -0
- package/dist/housingvista/pages/market/MarketAnalyticsPage.d.ts.map +1 -0
- package/dist/housingvista/pages/marketplace/MarketplacePage.d.ts +2 -0
- package/dist/housingvista/pages/marketplace/MarketplacePage.d.ts.map +1 -0
- package/dist/housingvista/pages/marketplace/ServiceDetailPage.d.ts +12 -0
- package/dist/housingvista/pages/marketplace/ServiceDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/offers/OffersPage.d.ts +10 -0
- package/dist/housingvista/pages/offers/OffersPage.d.ts.map +1 -0
- package/dist/housingvista/pages/properties/AddPropertyPage.d.ts +8 -0
- package/dist/housingvista/pages/properties/AddPropertyPage.d.ts.map +1 -0
- package/dist/housingvista/pages/properties/AddPropertyPage.js +279 -278
- package/dist/housingvista/pages/properties/AddPropertyPage.js.map +1 -1
- package/dist/housingvista/pages/properties/PropertiesPage.d.ts +7 -0
- package/dist/housingvista/pages/properties/PropertiesPage.d.ts.map +1 -0
- package/dist/housingvista/pages/properties/PropertiesPage.js +93 -86
- package/dist/housingvista/pages/properties/PropertiesPage.js.map +1 -1
- package/dist/housingvista/pages/properties/PropertyDetailPage.d.ts +9 -0
- package/dist/housingvista/pages/properties/PropertyDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/properties/PropertyDetailPage.js +514 -511
- package/dist/housingvista/pages/properties/PropertyDetailPage.js.map +1 -1
- package/dist/housingvista/pages/rental/RentalManagementPage.d.ts +2 -0
- package/dist/housingvista/pages/rental/RentalManagementPage.d.ts.map +1 -0
- package/dist/housingvista/pages/settings/ProfilePage.d.ts +2 -0
- package/dist/housingvista/pages/settings/ProfilePage.d.ts.map +1 -0
- package/dist/housingvista/pages/settings/SettingsPage.d.ts +2 -0
- package/dist/housingvista/pages/settings/SettingsPage.d.ts.map +1 -0
- package/dist/housingvista/pages/shortlist/ShortlistPage.d.ts +8 -0
- package/dist/housingvista/pages/shortlist/ShortlistPage.d.ts.map +1 -0
- package/dist/housingvista/pages/transactions/TransactionDetailPage.d.ts +8 -0
- package/dist/housingvista/pages/transactions/TransactionDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/transactions/TransactionsPage.d.ts +7 -0
- package/dist/housingvista/pages/transactions/TransactionsPage.d.ts.map +1 -0
- package/dist/housingvista/pages/transactions/milestones.d.ts +35 -0
- package/dist/housingvista/pages/transactions/milestones.d.ts.map +1 -0
- package/dist/housingvista/pages/verification/VerificationDetailPage.d.ts +10 -0
- package/dist/housingvista/pages/verification/VerificationDetailPage.d.ts.map +1 -0
- package/dist/housingvista/pages/verification/VerificationPage.d.ts +2 -0
- package/dist/housingvista/pages/verification/VerificationPage.d.ts.map +1 -0
- package/dist/housingvista/pages/viewings/ViewingsPage.d.ts +9 -0
- package/dist/housingvista/pages/viewings/ViewingsPage.d.ts.map +1 -0
- package/dist/housingvista/services/assistantApi.d.ts +90 -0
- package/dist/housingvista/services/assistantApi.d.ts.map +1 -0
- package/dist/housingvista/services/assistantApi.js +222 -0
- package/dist/housingvista/services/assistantApi.js.map +1 -0
- package/dist/housingvista/services/createSandboxAssistantTransport.d.ts +42 -0
- package/dist/housingvista/services/createSandboxAssistantTransport.d.ts.map +1 -0
- package/dist/housingvista/services/createSandboxAssistantTransport.js +120 -0
- package/dist/housingvista/services/createSandboxAssistantTransport.js.map +1 -0
- package/dist/housingvista/store/housingvistaStore.d.ts +72 -0
- package/dist/housingvista/store/housingvistaStore.d.ts.map +1 -0
- package/dist/housingvista/types/assistant.d.ts +16 -0
- package/dist/housingvista/types/assistant.d.ts.map +1 -0
- package/dist/housingvista/types/index.d.ts +1328 -0
- package/dist/housingvista/types/index.d.ts.map +1 -0
- package/dist/housingvista/utils/helpers.d.ts +25 -0
- package/dist/housingvista/utils/helpers.d.ts.map +1 -0
- package/dist/housingvista/utils/index.d.ts +2 -0
- package/dist/housingvista/utils/index.d.ts.map +1 -0
- package/dist/housingvista/utils/pageContext.d.ts +25 -0
- package/dist/housingvista/utils/pageContext.d.ts.map +1 -0
- package/dist/housingvista/utils/pageContext.js +77 -0
- package/dist/housingvista/utils/pageContext.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -3
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddPropertyPage.js","names":[],"sources":["../../../../src/housingvista/pages/properties/AddPropertyPage.tsx"],"sourcesContent":["/**\n * HousingVista Add Property Page\n * Multi-step property creation form.\n * Migrated from legacy housingvista-frontend add-property.tsx\n * @module housingvista\n */\n\nimport { useState, useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Home,\n MapPin,\n DollarSign,\n Bed,\n Bath,\n Maximize,\n Calendar,\n Upload,\n CheckCircle,\n ChevronLeft,\n ChevronRight,\n Wifi,\n Car,\n Waves,\n Dumbbell,\n TreePine,\n Shield,\n Flame,\n Wind,\n} from 'lucide-react';\nimport { EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout, Breadcrumbs, FileUploader } from '../../components';\nimport type { BreadcrumbItem } from '../../components';\nimport { cn } from '../../utils/helpers';\nimport { useCreateProperty, type CreatePropertyInput, type HvUploadedFile } from '../../hooks';\nimport { notify } from '../../lib/toast';\nimport type { PropertyStatus, PropertyType } from '../../types';\n\n// Map the form's listing type to the schema property status + price type.\nconst listingToStatus: Record<string, PropertyStatus> = {\n sale: 'for_sale',\n rent: 'for_rent',\n lease: 'for_rent',\n};\nconst listingToPriceType: Record<string, string> = {\n sale: 'sale',\n rent: 'rent',\n lease: 'lease',\n};\n\n// ---- Step definitions ----\nconst steps = [\n { id: 'basic', label: 'Basic Info', icon: Home },\n { id: 'location', label: 'Location', icon: MapPin },\n { id: 'specs', label: 'Specifications', icon: Maximize },\n { id: 'amenities', label: 'Amenities', icon: Wifi },\n { id: 'pricing', label: 'Pricing', icon: DollarSign },\n { id: 'images', label: 'Images', icon: Upload },\n] as const;\n\n// ---- Amenity options ----\nconst amenityOptions = [\n { id: 'swimming_pool', label: 'Swimming Pool', icon: Waves },\n { id: 'gym', label: 'Gym / Fitness', icon: Dumbbell },\n { id: 'parking', label: 'Parking', icon: Car },\n { id: 'garden', label: 'Garden', icon: TreePine },\n { id: 'security', label: '24/7 Security', icon: Shield },\n { id: 'wifi', label: 'Wi-Fi', icon: Wifi },\n { id: 'fireplace', label: 'Fireplace', icon: Flame },\n { id: 'ac', label: 'Central AC', icon: Wind },\n];\n\nconst breadcrumbs: BreadcrumbItem[] = [{ label: 'Properties', href: '../' }, { label: 'Add New' }];\n\nexport const AddPropertyPage = () => {\n const navigate = useNavigate();\n const { createProperty, loading: isSubmitting } = useCreateProperty();\n const [currentStep, setCurrentStep] = useState(0);\n\n const [formData, setFormData] = useState({\n // Basic Info\n title: '',\n description: '',\n propertyType: 'residential',\n category: 'apartment',\n listingType: 'sale',\n // Location\n address: '',\n city: '',\n state: '',\n zipCode: '',\n neighborhood: '',\n country: 'USA',\n // Specifications\n bedrooms: '',\n bathrooms: '',\n area: '',\n floors: '1',\n parking: '0',\n yearBuilt: '',\n furnishing: 'unfurnished',\n facing: 'North',\n // Amenities\n amenities: [] as string[],\n // Pricing\n price: '',\n currency: 'USD',\n negotiable: false,\n // Images — real files-svc uploads (first one is the primary/cover image)\n images: [] as HvUploadedFile[],\n });\n\n const handleImagesUploaded = useCallback((uploaded: HvUploadedFile[]) => {\n setFormData((prev) => {\n const existingIds = new Set(prev.images.map((img) => img.id));\n const merged = [...prev.images, ...uploaded.filter((f) => !existingIds.has(f.id))];\n return { ...prev, images: merged };\n });\n }, []);\n\n const handleImageRemove = useCallback((fileId: string) => {\n setFormData((prev) => ({ ...prev, images: prev.images.filter((img) => img.id !== fileId) }));\n }, []);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n const { name, value, type } = e.target;\n setFormData((prev) => ({\n ...prev,\n [name]: type === 'checkbox' ? (e.target as HTMLInputElement).checked : value,\n }));\n },\n []\n );\n\n const toggleAmenity = useCallback((id: string) => {\n setFormData((prev) => ({\n ...prev,\n amenities: prev.amenities.includes(id) ? prev.amenities.filter((a) => a !== id) : [...prev.amenities, id],\n }));\n }, []);\n\n const canGoNext = () => {\n switch (currentStep) {\n case 0:\n return formData.title.trim() !== '' && formData.description.trim() !== '';\n case 1:\n return formData.address.trim() !== '' && formData.city.trim() !== '' && formData.state.trim() !== '';\n case 2:\n return formData.area.trim() !== '';\n case 3:\n return true;\n case 4:\n return formData.price.trim() !== '';\n case 5:\n return true;\n default:\n return false;\n }\n };\n\n const handleSubmit = async () => {\n const input: CreatePropertyInput = {\n title: formData.title.trim(),\n description: formData.description.trim() || undefined,\n status: listingToStatus[formData.listingType] ?? 'for_sale',\n type: formData.propertyType as PropertyType,\n category: formData.category,\n address: formData.address.trim() || undefined,\n city: formData.city.trim(),\n state: formData.state.trim(),\n country: formData.country || undefined,\n pincode: formData.zipCode.trim() || undefined,\n neighborhood: formData.neighborhood.trim() || undefined,\n price: Number(formData.price) || 0,\n currency: formData.currency,\n priceType: listingToPriceType[formData.listingType] ?? 'sale',\n negotiable: formData.negotiable,\n bedrooms: Number(formData.bedrooms) || 0,\n bathrooms: Number(formData.bathrooms) || 0,\n totalArea: Number(formData.area) || 0,\n floors: formData.floors ? Number(formData.floors) : undefined,\n parking: formData.parking ? Number(formData.parking) : undefined,\n furnishingStatus: formData.furnishing,\n ageOfProperty: formData.yearBuilt\n ? Math.max(0, new Date().getFullYear() - Number(formData.yearBuilt))\n : undefined,\n facing: formData.facing,\n amenities: formData.amenities.map((id) => ({\n name: amenityOptions.find((a) => a.id === id)?.label ?? id,\n category: 'general',\n available: true,\n })),\n images: formData.images.map((file, index) => ({\n url: file.url,\n isPrimary: index === 0,\n order: index,\n })),\n };\n\n try {\n const created = await createProperty(input);\n notify.success('Property created', `${created.title} has been added to your listings.`);\n navigate(`../properties/${created.id}`);\n } catch (err) {\n notify.error('Could not create property', (err as Error).message);\n }\n };\n\n const isLastStep = currentStep === steps.length - 1;\n\n return (\n <PageLayout\n title=\"Add New Property\"\n description=\"List your property for sale or rent\"\n purpose=\"Create a complete, market-ready listing in a few guided steps. Fill in the basics, location, specifications, amenities, pricing, and photos — the more detail you add, the more inquiries and stronger offers your property attracts.\"\n >\n <Breadcrumbs items={breadcrumbs} />\n\n {/* Step Indicators — primary emphasis zone (one per page) */}\n <EmphasisPanel className=\"p-5\">\n <div className=\"mb-3 flex items-center justify-between\">\n <div>\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Step {currentStep + 1} of {steps.length}\n </p>\n <p className=\"text-base font-semibold text-text-primary\">{steps[currentStep].label}</p>\n </div>\n <span className=\"text-sm font-semibold text-text-primary\">\n {Math.round(((currentStep + 1) / steps.length) * 100)}%\n </span>\n </div>\n {/* Progress bar */}\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-action-primary-bg transition-[width] duration-300\"\n style={{ width: `${((currentStep + 1) / steps.length) * 100}%` }}\n />\n </div>\n {/* Step chips */}\n <div className=\"mt-4 flex items-center gap-1 overflow-x-auto pb-1\">\n {steps.map((step, index) => {\n const Icon = step.icon;\n const isActive = index === currentStep;\n const isCompleted = index < currentStep;\n return (\n <button\n key={step.id}\n onClick={() => index <= currentStep && setCurrentStep(index)}\n className={cn(\n 'flex shrink-0 items-center gap-2 rounded-full px-3 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]',\n isActive && 'bg-action-primary-bg text-action-primary-text',\n isCompleted && 'bg-status-success-bg-subtle text-status-success-text',\n !isActive && !isCompleted && 'text-text-secondary hover:bg-bg-sunken/50',\n index > currentStep && 'cursor-not-allowed'\n )}\n disabled={index > currentStep}\n >\n {isCompleted ? <CheckCircle className=\"h-4 w-4\" /> : <Icon className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{step.label}</span>\n <span className=\"sm:hidden\">{index + 1}</span>\n </button>\n );\n })}\n </div>\n </EmphasisPanel>\n\n {/* Form Content */}\n <div className=\"max-w-3xl\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n {/* Step 0: Basic Info */}\n {currentStep === 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Basic Information</h3>\n <div>\n <label htmlFor=\"title\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Property Title *\n </label>\n <input\n id=\"title\"\n name=\"title\"\n value={formData.title}\n onChange={handleChange}\n placeholder=\"e.g., Luxury 3BHK Apartment in Downtown\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"description\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Description *\n </label>\n <textarea\n id=\"description\"\n name=\"description\"\n value={formData.description}\n onChange={handleChange}\n placeholder=\"Describe your property in detail...\"\n required\n rows={4}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label htmlFor=\"propertyType\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Property Type *\n </label>\n <select\n id=\"propertyType\"\n name=\"propertyType\"\n value={formData.propertyType}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"residential\">Residential</option>\n <option value=\"commercial\">Commercial</option>\n <option value=\"industrial\">Industrial</option>\n <option value=\"agricultural\">Agricultural</option>\n <option value=\"mixed_use\">Mixed Use</option>\n </select>\n </div>\n <div>\n <label htmlFor=\"category\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Category *\n </label>\n <select\n id=\"category\"\n name=\"category\"\n value={formData.category}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"apartment\">Apartment</option>\n <option value=\"house\">House</option>\n <option value=\"villa\">Villa</option>\n <option value=\"office\">Office</option>\n <option value=\"retail\">Retail</option>\n <option value=\"warehouse\">Warehouse</option>\n <option value=\"land\">Land</option>\n <option value=\"plot\">Plot</option>\n </select>\n </div>\n </div>\n <div>\n <label htmlFor=\"listingType\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Listing Type *\n </label>\n <select\n id=\"listingType\"\n name=\"listingType\"\n value={formData.listingType}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] sm:max-w-xs\"\n >\n <option value=\"sale\">For Sale</option>\n <option value=\"rent\">For Rent</option>\n <option value=\"lease\">For Lease</option>\n </select>\n </div>\n </div>\n )}\n\n {/* Step 1: Location */}\n {currentStep === 1 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <MapPin className=\"h-5 w-5\" />\n Location Details\n </h3>\n <div>\n <label htmlFor=\"address\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Street Address *\n </label>\n <input\n id=\"address\"\n name=\"address\"\n value={formData.address}\n onChange={handleChange}\n placeholder=\"e.g., 123 Main Street, Unit 2504\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"neighborhood\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Neighborhood\n </label>\n <input\n id=\"neighborhood\"\n name=\"neighborhood\"\n value={formData.neighborhood}\n onChange={handleChange}\n placeholder=\"e.g., Midtown\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div>\n <label htmlFor=\"city\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n City *\n </label>\n <input\n id=\"city\"\n name=\"city\"\n value={formData.city}\n onChange={handleChange}\n placeholder=\"City\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"state\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n State *\n </label>\n <input\n id=\"state\"\n name=\"state\"\n value={formData.state}\n onChange={handleChange}\n placeholder=\"State\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"zipCode\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n ZIP Code *\n </label>\n <input\n id=\"zipCode\"\n name=\"zipCode\"\n value={formData.zipCode}\n onChange={handleChange}\n placeholder=\"ZIP Code\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"country\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Country\n </label>\n <select\n id=\"country\"\n name=\"country\"\n value={formData.country}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] sm:max-w-xs\"\n >\n <option value=\"USA\">United States</option>\n <option value=\"Canada\">Canada</option>\n <option value=\"UK\">United Kingdom</option>\n <option value=\"India\">India</option>\n </select>\n </div>\n </div>\n )}\n\n {/* Step 2: Specifications */}\n {currentStep === 2 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Property Specifications</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label\n htmlFor=\"area\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Maximize className=\"h-4 w-4\" />\n Total Area (sq ft) *\n </label>\n <input\n id=\"area\"\n name=\"area\"\n type=\"number\"\n value={formData.area}\n onChange={handleChange}\n placeholder=\"Enter area\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label\n htmlFor=\"yearBuilt\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Calendar className=\"h-4 w-4\" />\n Year Built\n </label>\n <input\n id=\"yearBuilt\"\n name=\"yearBuilt\"\n type=\"number\"\n value={formData.yearBuilt}\n onChange={handleChange}\n placeholder=\"YYYY\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div>\n <label\n htmlFor=\"bedrooms\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Bed className=\"h-4 w-4\" />\n Bedrooms\n </label>\n <input\n id=\"bedrooms\"\n name=\"bedrooms\"\n type=\"number\"\n value={formData.bedrooms}\n onChange={handleChange}\n placeholder=\"0\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label\n htmlFor=\"bathrooms\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Bath className=\"h-4 w-4\" />\n Bathrooms\n </label>\n <input\n id=\"bathrooms\"\n name=\"bathrooms\"\n type=\"number\"\n value={formData.bathrooms}\n onChange={handleChange}\n placeholder=\"0\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label\n htmlFor=\"parking\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Car className=\"h-4 w-4\" />\n Parking Spots\n </label>\n <input\n id=\"parking\"\n name=\"parking\"\n type=\"number\"\n value={formData.parking}\n onChange={handleChange}\n placeholder=\"0\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label htmlFor=\"furnishing\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Furnishing Status\n </label>\n <select\n id=\"furnishing\"\n name=\"furnishing\"\n value={formData.furnishing}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"unfurnished\">Unfurnished</option>\n <option value=\"semi_furnished\">Semi Furnished</option>\n <option value=\"furnished\">Furnished</option>\n </select>\n </div>\n <div>\n <label htmlFor=\"facing\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Facing Direction\n </label>\n <select\n id=\"facing\"\n name=\"facing\"\n value={formData.facing}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"North\">North</option>\n <option value=\"South\">South</option>\n <option value=\"East\">East</option>\n <option value=\"West\">West</option>\n <option value=\"Northeast\">Northeast</option>\n <option value=\"Northwest\">Northwest</option>\n <option value=\"Southeast\">Southeast</option>\n <option value=\"Southwest\">Southwest</option>\n </select>\n </div>\n </div>\n </div>\n )}\n\n {/* Step 3: Amenities */}\n {currentStep === 3 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Property Amenities</h3>\n <p className=\"text-sm text-text-secondary\">Select all amenities available at this property.</p>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n {amenityOptions.map((amenity) => {\n const Icon = amenity.icon;\n const isSelected = formData.amenities.includes(amenity.id);\n return (\n <button\n key={amenity.id}\n type=\"button\"\n onClick={() => toggleAmenity(amenity.id)}\n className={cn(\n 'flex flex-col items-center gap-2 rounded-lg border p-4 text-sm font-medium transition-colors',\n isSelected\n ? 'border-action-primary-border bg-action-primary-bg/5 text-text-primary'\n : 'border-border-subtle text-text-secondary hover:bg-bg-sunken/50'\n )}\n >\n <Icon className=\"h-6 w-6\" />\n <span>{amenity.label}</span>\n {isSelected && <CheckCircle className=\"h-4 w-4 text-status-success-text\" />}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Step 4: Pricing */}\n {currentStep === 4 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <DollarSign className=\"h-5 w-5\" />\n Pricing Details\n </h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label htmlFor=\"price\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Price *\n </label>\n <input\n id=\"price\"\n name=\"price\"\n type=\"number\"\n value={formData.price}\n onChange={handleChange}\n placeholder=\"Enter price\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"currency\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Currency\n </label>\n <select\n id=\"currency\"\n name=\"currency\"\n value={formData.currency}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"USD\">USD ($)</option>\n <option value=\"EUR\">EUR</option>\n <option value=\"GBP\">GBP</option>\n <option value=\"INR\">INR</option>\n </select>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"negotiable\"\n name=\"negotiable\"\n checked={formData.negotiable}\n onChange={handleChange}\n className=\"h-4 w-4 rounded border-border-subtle\"\n />\n <label htmlFor=\"negotiable\" className=\"text-sm text-text-primary\">\n Price is negotiable\n </label>\n </div>\n </div>\n )}\n\n {/* Step 5: Images */}\n {currentStep === 5 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <Upload className=\"h-5 w-5\" />\n Property Images\n </h3>\n <p className=\"text-sm text-text-secondary\">\n Upload photos of the property (JPG, PNG). The first image becomes the cover.\n </p>\n <FileUploader\n accept=\"image/*\"\n multiple\n label=\"Upload property images\"\n value={formData.images}\n onUploaded={handleImagesUploaded}\n onRemove={handleImageRemove}\n />\n {formData.images.length > 0 && (\n <div className=\"grid grid-cols-3 gap-3 sm:grid-cols-4\">\n {formData.images.map((img, index) => (\n <div\n key={img.id}\n className=\"relative aspect-square overflow-hidden rounded-lg border border-border-subtle bg-bg-sunken/50\"\n >\n <img src={img.url} alt={img.name} className=\"h-full w-full object-cover\" />\n {index === 0 && (\n <span className=\"absolute left-1.5 top-1.5 rounded bg-action-primary-bg px-1.5 py-0.5 text-[10px] font-semibold text-action-primary-text\">\n Cover\n </span>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Navigation Buttons */}\n <div className=\"mt-6 flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => (currentStep === 0 ? navigate('../properties') : setCurrentStep((s) => s - 1))}\n disabled={isSubmitting}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-50\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n {currentStep === 0 ? 'Cancel' : 'Previous'}\n </button>\n\n {isLastStep ? (\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!canGoNext() || isSubmitting}\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-6 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n {isSubmitting ? 'Adding Property...' : 'Submit Property'}\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => setCurrentStep((s) => s + 1)}\n disabled={!canGoNext()}\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAuCA,IAAM,IAAkD;CACtD,MAAM;CACN,MAAM;CACN,OAAO;CACR,EACK,IAA6C;CACjD,MAAM;CACN,MAAM;CACN,OAAO;CACR,EAGK,IAAQ;CACZ;EAAE,IAAI;EAAS,OAAO;EAAc,MAAM;EAAM;CAChD;EAAE,IAAI;EAAY,OAAO;EAAY,MAAM;EAAQ;CACnD;EAAE,IAAI;EAAS,OAAO;EAAkB,MAAM;EAAU;CACxD;EAAE,IAAI;EAAa,OAAO;EAAa,MAAM;EAAM;CACnD;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM;EAAY;CACrD;EAAE,IAAI;EAAU,OAAO;EAAU,MAAM;EAAQ;CAChD,EAGK,IAAiB;CACrB;EAAE,IAAI;EAAiB,OAAO;EAAiB,MAAM;EAAO;CAC5D;EAAE,IAAI;EAAO,OAAO;EAAiB,MAAM;EAAU;CACrD;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM;EAAK;CAC9C;EAAE,IAAI;EAAU,OAAO;EAAU,MAAM;EAAU;CACjD;EAAE,IAAI;EAAY,OAAO;EAAiB,MAAM;EAAQ;CACxD;EAAE,IAAI;EAAQ,OAAO;EAAS,MAAM;EAAM;CAC1C;EAAE,IAAI;EAAa,OAAO;EAAa,MAAM;EAAO;CACpD;EAAE,IAAI;EAAM,OAAO;EAAc,MAAM;EAAM;CAC9C,EAEK,IAAgC,CAAC;CAAE,OAAO;CAAc,MAAM;CAAO,EAAE,EAAE,OAAO,WAAW,CAAC,EAErF,UAAwB;CACnC,IAAM,IAAW,GAAa,EACxB,EAAE,mBAAgB,SAAS,MAAiB,GAAmB,EAC/D,CAAC,GAAa,KAAkB,EAAS,EAAE,EAE3C,CAAC,GAAU,KAAe,EAAS;EAEvC,OAAO;EACP,aAAa;EACb,cAAc;EACd,UAAU;EACV,aAAa;EAEb,SAAS;EACT,MAAM;EACN,OAAO;EACP,SAAS;EACT,cAAc;EACd,SAAS;EAET,UAAU;EACV,WAAW;EACX,MAAM;EACN,QAAQ;EACR,SAAS;EACT,WAAW;EACX,YAAY;EACZ,QAAQ;EAER,WAAW,EAAE;EAEb,OAAO;EACP,UAAU;EACV,YAAY;EAEZ,QAAQ,EAAE;EACX,CAAC,EAEI,IAAuB,GAAa,MAA+B;AACvE,KAAa,MAAS;GACpB,IAAM,IAAc,IAAI,IAAI,EAAK,OAAO,KAAK,MAAQ,EAAI,GAAG,CAAC,EACvD,IAAS,CAAC,GAAG,EAAK,QAAQ,GAAG,EAAS,QAAQ,MAAM,CAAC,EAAY,IAAI,EAAE,GAAG,CAAC,CAAC;AAClF,UAAO;IAAE,GAAG;IAAM,QAAQ;IAAQ;IAClC;IACD,EAAE,CAAC,EAEA,IAAoB,GAAa,MAAmB;AACxD,KAAa,OAAU;GAAE,GAAG;GAAM,QAAQ,EAAK,OAAO,QAAQ,MAAQ,EAAI,OAAO,EAAO;GAAE,EAAE;IAC3F,EAAE,CAAC,EAEA,IAAe,GAClB,MAAqF;EACpF,IAAM,EAAE,SAAM,UAAO,YAAS,EAAE;AAChC,KAAa,OAAU;GACrB,GAAG;IACF,IAAO,MAAS,aAAc,EAAE,OAA4B,UAAU;GACxE,EAAE;IAEL,EAAE,CACH,EAEK,IAAgB,GAAa,MAAe;AAChD,KAAa,OAAU;GACrB,GAAG;GACH,WAAW,EAAK,UAAU,SAAS,EAAG,GAAG,EAAK,UAAU,QAAQ,MAAM,MAAM,EAAG,GAAG,CAAC,GAAG,EAAK,WAAW,EAAG;GAC1G,EAAE;IACF,EAAE,CAAC,EAEA,UAAkB;AACtB,UAAQ,GAAR;GACE,KAAK,EACH,QAAO,EAAS,MAAM,MAAM,KAAK,MAAM,EAAS,YAAY,MAAM,KAAK;GACzE,KAAK,EACH,QAAO,EAAS,QAAQ,MAAM,KAAK,MAAM,EAAS,KAAK,MAAM,KAAK,MAAM,EAAS,MAAM,MAAM,KAAK;GACpG,KAAK,EACH,QAAO,EAAS,KAAK,MAAM,KAAK;GAClC,KAAK,EACH,QAAO;GACT,KAAK,EACH,QAAO,EAAS,MAAM,MAAM,KAAK;GACnC,KAAK,EACH,QAAO;GACT,QACE,QAAO;;IAIP,IAAe,YAAY;EAC/B,IAAM,IAA6B;GACjC,OAAO,EAAS,MAAM,MAAM;GAC5B,aAAa,EAAS,YAAY,MAAM,IAAI,KAAA;GAC5C,QAAQ,EAAgB,EAAS,gBAAgB;GACjD,MAAM,EAAS;GACf,UAAU,EAAS;GACnB,SAAS,EAAS,QAAQ,MAAM,IAAI,KAAA;GACpC,MAAM,EAAS,KAAK,MAAM;GAC1B,OAAO,EAAS,MAAM,MAAM;GAC5B,SAAS,EAAS,WAAW,KAAA;GAC7B,SAAS,EAAS,QAAQ,MAAM,IAAI,KAAA;GACpC,cAAc,EAAS,aAAa,MAAM,IAAI,KAAA;GAC9C,OAAO,OAAO,EAAS,MAAM,IAAI;GACjC,UAAU,EAAS;GACnB,WAAW,EAAmB,EAAS,gBAAgB;GACvD,YAAY,EAAS;GACrB,UAAU,OAAO,EAAS,SAAS,IAAI;GACvC,WAAW,OAAO,EAAS,UAAU,IAAI;GACzC,WAAW,OAAO,EAAS,KAAK,IAAI;GACpC,QAAQ,EAAS,SAAS,OAAO,EAAS,OAAO,GAAG,KAAA;GACpD,SAAS,EAAS,UAAU,OAAO,EAAS,QAAQ,GAAG,KAAA;GACvD,kBAAkB,EAAS;GAC3B,eAAe,EAAS,YACpB,KAAK,IAAI,oBAAG,IAAI,MAAM,EAAC,aAAa,GAAG,OAAO,EAAS,UAAU,CAAC,GAClE,KAAA;GACJ,QAAQ,EAAS;GACjB,WAAW,EAAS,UAAU,KAAK,OAAQ;IACzC,MAAM,EAAe,MAAM,MAAM,EAAE,OAAO,EAAG,EAAE,SAAS;IACxD,UAAU;IACV,WAAW;IACZ,EAAE;GACH,QAAQ,EAAS,OAAO,KAAK,GAAM,OAAW;IAC5C,KAAK,EAAK;IACV,WAAW,MAAU;IACrB,OAAO;IACR,EAAE;GACJ;AAED,MAAI;GACF,IAAM,IAAU,MAAM,EAAe,EAAM;AAE3C,GADA,EAAO,QAAQ,oBAAoB,GAAG,EAAQ,MAAM,mCAAmC,EACvF,EAAS,iBAAiB,EAAQ,KAAK;WAChC,GAAK;AACZ,KAAO,MAAM,6BAA8B,EAAc,QAAQ;;IAI/D,IAAa,MAAgB,EAAM,SAAS;AAElD,QACE,kBAAC,GAAD;EACE,OAAM;EACN,aAAY;EACZ,SAAQ;YAHV;GAKE,kBAAC,GAAD,EAAa,OAAO,GAAe,CAAA;GAGnC,kBAAC,GAAD;IAAe,WAAU;cAAzB;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;OAAG,WAAU;iBAAb;QAA+E;QACvE,IAAc;QAAE;QAAK,EAAM;QAC/B;UACJ,kBAAC,KAAD;OAAG,WAAU;iBAA6C,EAAM,GAAa;OAAU,CAAA,CACnF,EAAA,CAAA,EACN,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CACG,KAAK,OAAQ,IAAc,KAAK,EAAM,SAAU,IAAI,EAAC,IACjD;SACH;;KAEN,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,OAAD;OACE,WAAU;OACV,OAAO,EAAE,OAAO,IAAK,IAAc,KAAK,EAAM,SAAU,IAAI,IAAI;OAChE,CAAA;MACE,CAAA;KAEN,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAM,KAAK,GAAM,MAAU;OAC1B,IAAM,IAAO,EAAK,MACZ,IAAW,MAAU,GACrB,IAAc,IAAQ;AAC5B,cACE,kBAAC,UAAD;QAEE,eAAe,KAAS,KAAe,EAAe,EAAM;QAC5D,WAAW,EACT,gMACA,KAAY,iDACZ,KAAe,wDACf,CAAC,KAAY,CAAC,KAAe,6CAC7B,IAAQ,KAAe,qBACxB;QACD,UAAU,IAAQ;kBAVpB;SAYiB,EAAd,IAAe,IAAsC,GAAvC,EAAa,WAAU,WAAY,CAA+B;SACjF,kBAAC,QAAD;UAAM,WAAU;oBAAoB,EAAK;UAAa,CAAA;SACtD,kBAAC,QAAD;UAAM,WAAU;oBAAa,IAAQ;UAAS,CAAA;SACvC;UAdF,EAAK,GAcH;QAEX;MACE,CAAA;KACQ;;GAGhB,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MAEG,MAAgB,KACf,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAA0C;SAAsB,CAAA;QAC9E,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,SAAQ;SAAQ,WAAU;mBAAqD;SAE9E,CAAA,EACR,kBAAC,SAAD;SACE,IAAG;SACH,MAAK;SACL,OAAO,EAAS;SAChB,UAAU;SACV,aAAY;SACZ,UAAA;SACA,WAAU;SACV,CAAA,CACE,EAAA,CAAA;QACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,SAAQ;SAAc,WAAU;mBAAqD;SAEpF,CAAA,EACR,kBAAC,YAAD;SACE,IAAG;SACH,MAAK;SACL,OAAO,EAAS;SAChB,UAAU;SACV,aAAY;SACZ,UAAA;SACA,MAAM;SACN,WAAU;SACV,CAAA,CACE,EAAA,CAAA;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UAAO,SAAQ;UAAe,WAAU;oBAAqD;UAErF,CAAA,EACR,kBAAC,UAAD;UACE,IAAG;UACH,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,WAAU;oBALZ;WAOE,kBAAC,UAAD;YAAQ,OAAM;sBAAc;YAAoB,CAAA;WAChD,kBAAC,UAAD;YAAQ,OAAM;sBAAa;YAAmB,CAAA;WAC9C,kBAAC,UAAD;YAAQ,OAAM;sBAAa;YAAmB,CAAA;WAC9C,kBAAC,UAAD;YAAQ,OAAM;sBAAe;YAAqB,CAAA;WAClD,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WACrC;YACL,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UAAO,SAAQ;UAAW,WAAU;oBAAqD;UAEjF,CAAA,EACR,kBAAC,UAAD;UACE,IAAG;UACH,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,WAAU;oBALZ;WAOE,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WAC5C,kBAAC,UAAD;YAAQ,OAAM;sBAAQ;YAAc,CAAA;WACpC,kBAAC,UAAD;YAAQ,OAAM;sBAAQ;YAAc,CAAA;WACpC,kBAAC,UAAD;YAAQ,OAAM;sBAAS;YAAe,CAAA;WACtC,kBAAC,UAAD;YAAQ,OAAM;sBAAS;YAAe,CAAA;WACtC,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WAC5C,kBAAC,UAAD;YAAQ,OAAM;sBAAO;YAAa,CAAA;WAClC,kBAAC,UAAD;YAAQ,OAAM;sBAAO;YAAa,CAAA;WAC3B;YACL,EAAA,CAAA,CACF;;QACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,SAAQ;SAAc,WAAU;mBAAqD;SAEpF,CAAA,EACR,kBAAC,UAAD;SACE,IAAG;SACH,MAAK;SACL,OAAO,EAAS;SAChB,UAAU;SACV,WAAU;mBALZ;UAOE,kBAAC,UAAD;WAAQ,OAAM;qBAAO;WAAiB,CAAA;UACtC,kBAAC,UAAD;WAAQ,OAAM;qBAAO;WAAiB,CAAA;UACtC,kBAAC,UAAD;WAAQ,OAAM;qBAAQ;WAAkB,CAAA;UACjC;WACL,EAAA,CAAA;QACF;;MAIP,MAAgB,KACf,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAAA,mBAE3B;;QACL,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,SAAQ;SAAU,WAAU;mBAAqD;SAEhF,CAAA,EACR,kBAAC,SAAD;SACE,IAAG;SACH,MAAK;SACL,OAAO,EAAS;SAChB,UAAU;SACV,aAAY;SACZ,UAAA;SACA,WAAU;SACV,CAAA,CACE,EAAA,CAAA;QACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,SAAQ;SAAe,WAAU;mBAAqD;SAErF,CAAA,EACR,kBAAC,SAAD;SACE,IAAG;SACH,MAAK;SACL,OAAO,EAAS;SAChB,UAAU;SACV,aAAY;SACZ,WAAU;SACV,CAAA,CACE,EAAA,CAAA;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;WAAO,SAAQ;WAAO,WAAU;qBAAqD;WAE7E,CAAA,EACR,kBAAC,SAAD;WACE,IAAG;WACH,MAAK;WACL,OAAO,EAAS;WAChB,UAAU;WACV,aAAY;WACZ,UAAA;WACA,WAAU;WACV,CAAA,CACE,EAAA,CAAA;UACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;WAAO,SAAQ;WAAQ,WAAU;qBAAqD;WAE9E,CAAA,EACR,kBAAC,SAAD;WACE,IAAG;WACH,MAAK;WACL,OAAO,EAAS;WAChB,UAAU;WACV,aAAY;WACZ,UAAA;WACA,WAAU;WACV,CAAA,CACE,EAAA,CAAA;UACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;WAAO,SAAQ;WAAU,WAAU;qBAAqD;WAEhF,CAAA,EACR,kBAAC,SAAD;WACE,IAAG;WACH,MAAK;WACL,OAAO,EAAS;WAChB,UAAU;WACV,aAAY;WACZ,UAAA;WACA,WAAU;WACV,CAAA,CACE,EAAA,CAAA;UACF;;QACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;SAAO,SAAQ;SAAU,WAAU;mBAAqD;SAEhF,CAAA,EACR,kBAAC,UAAD;SACE,IAAG;SACH,MAAK;SACL,OAAO,EAAS;SAChB,UAAU;SACV,WAAU;mBALZ;UAOE,kBAAC,UAAD;WAAQ,OAAM;qBAAM;WAAsB,CAAA;UAC1C,kBAAC,UAAD;WAAQ,OAAM;qBAAS;WAAe,CAAA;UACtC,kBAAC,UAAD;WAAQ,OAAM;qBAAK;WAAuB,CAAA;UAC1C,kBAAC,UAAD;WAAQ,OAAM;qBAAQ;WAAc,CAAA;UAC7B;WACL,EAAA,CAAA;QACF;;MAIP,MAAgB,KACf,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAA0C;SAA4B,CAAA;QACpF,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UACE,SAAQ;UACR,WAAU;oBAFZ,CAIE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAAA,uBAE1B;aACR,kBAAC,SAAD;UACE,IAAG;UACH,MAAK;UACL,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,aAAY;UACZ,UAAA;UACA,WAAU;UACV,CAAA,CACE,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UACE,SAAQ;UACR,WAAU;oBAFZ,CAIE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA,EAAA,aAE1B;aACR,kBAAC,SAAD;UACE,IAAG;UACH,MAAK;UACL,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,aAAY;UACZ,WAAU;UACV,CAAA,CACE,EAAA,CAAA,CACF;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf;UACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;WACE,SAAQ;WACR,WAAU;qBAFZ,CAIE,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA,EAAA,WAErB;cACR,kBAAC,SAAD;WACE,IAAG;WACH,MAAK;WACL,MAAK;WACL,OAAO,EAAS;WAChB,UAAU;WACV,aAAY;WACZ,WAAU;WACV,CAAA,CACE,EAAA,CAAA;UACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;WACE,SAAQ;WACR,WAAU;qBAFZ,CAIE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,YAEtB;cACR,kBAAC,SAAD;WACE,IAAG;WACH,MAAK;WACL,MAAK;WACL,OAAO,EAAS;WAChB,UAAU;WACV,aAAY;WACZ,WAAU;WACV,CAAA,CACE,EAAA,CAAA;UACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;WACE,SAAQ;WACR,WAAU;qBAFZ,CAIE,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA,EAAA,gBAErB;cACR,kBAAC,SAAD;WACE,IAAG;WACH,MAAK;WACL,MAAK;WACL,OAAO,EAAS;WAChB,UAAU;WACV,aAAY;WACZ,WAAU;WACV,CAAA,CACE,EAAA,CAAA;UACF;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UAAO,SAAQ;UAAa,WAAU;oBAAqD;UAEnF,CAAA,EACR,kBAAC,UAAD;UACE,IAAG;UACH,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,WAAU;oBALZ;WAOE,kBAAC,UAAD;YAAQ,OAAM;sBAAc;YAAoB,CAAA;WAChD,kBAAC,UAAD;YAAQ,OAAM;sBAAiB;YAAuB,CAAA;WACtD,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WACrC;YACL,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UAAO,SAAQ;UAAS,WAAU;oBAAqD;UAE/E,CAAA,EACR,kBAAC,UAAD;UACE,IAAG;UACH,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,WAAU;oBALZ;WAOE,kBAAC,UAAD;YAAQ,OAAM;sBAAQ;YAAc,CAAA;WACpC,kBAAC,UAAD;YAAQ,OAAM;sBAAQ;YAAc,CAAA;WACpC,kBAAC,UAAD;YAAQ,OAAM;sBAAO;YAAa,CAAA;WAClC,kBAAC,UAAD;YAAQ,OAAM;sBAAO;YAAa,CAAA;WAClC,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WAC5C,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WAC5C,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WAC5C,kBAAC,UAAD;YAAQ,OAAM;sBAAY;YAAkB,CAAA;WACrC;YACL,EAAA,CAAA,CACF;;QACF;;MAIP,MAAgB,KACf,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAA0C;SAAuB,CAAA;QAC/E,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAAoD,CAAA;QAC/F,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAe,KAAK,MAAY;UAC/B,IAAM,IAAO,EAAQ,MACf,IAAa,EAAS,UAAU,SAAS,EAAQ,GAAG;AAC1D,iBACE,kBAAC,UAAD;WAEE,MAAK;WACL,eAAe,EAAc,EAAQ,GAAG;WACxC,WAAW,EACT,gGACA,IACI,0EACA,iEACL;qBATH;YAWE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;YAC5B,kBAAC,QAAD,EAAA,UAAO,EAAQ,OAAa,CAAA;YAC3B,KAAc,kBAAC,GAAD,EAAa,WAAU,oCAAqC,CAAA;YACpE;aAbF,EAAQ,GAaN;WAEX;SACE,CAAA;QACF;;MAIP,MAAgB,KACf,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,EAAA,kBAE/B;;QACL,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UAAO,SAAQ;UAAQ,WAAU;oBAAqD;UAE9E,CAAA,EACR,kBAAC,SAAD;UACE,IAAG;UACH,MAAK;UACL,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,aAAY;UACZ,UAAA;UACA,WAAU;UACV,CAAA,CACE,EAAA,CAAA,EACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,SAAD;UAAO,SAAQ;UAAW,WAAU;oBAAqD;UAEjF,CAAA,EACR,kBAAC,UAAD;UACE,IAAG;UACH,MAAK;UACL,OAAO,EAAS;UAChB,UAAU;UACV,WAAU;oBALZ;WAOE,kBAAC,UAAD;YAAQ,OAAM;sBAAM;YAAgB,CAAA;WACpC,kBAAC,UAAD;YAAQ,OAAM;sBAAM;YAAY,CAAA;WAChC,kBAAC,UAAD;YAAQ,OAAM;sBAAM;YAAY,CAAA;WAChC,kBAAC,UAAD;YAAQ,OAAM;sBAAM;YAAY,CAAA;WACzB;YACL,EAAA,CAAA,CACF;;QACN,kBAAC,OAAD;SAAK,WAAU;mBAAf,CACE,kBAAC,SAAD;UACE,MAAK;UACL,IAAG;UACH,MAAK;UACL,SAAS,EAAS;UAClB,UAAU;UACV,WAAU;UACV,CAAA,EACF,kBAAC,SAAD;UAAO,SAAQ;UAAa,WAAU;oBAA4B;UAE1D,CAAA,CACJ;;QACF;;MAIP,MAAgB,KACf,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAAd,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAAA,kBAE3B;;QACL,kBAAC,KAAD;SAAG,WAAU;mBAA8B;SAEvC,CAAA;QACJ,kBAAC,GAAD;SACE,QAAO;SACP,UAAA;SACA,OAAM;SACN,OAAO,EAAS;SAChB,YAAY;SACZ,UAAU;SACV,CAAA;QACD,EAAS,OAAO,SAAS,KACxB,kBAAC,OAAD;SAAK,WAAU;mBACZ,EAAS,OAAO,KAAK,GAAK,MACzB,kBAAC,OAAD;UAEE,WAAU;oBAFZ,CAIE,kBAAC,OAAD;WAAK,KAAK,EAAI;WAAK,KAAK,EAAI;WAAM,WAAU;WAA+B,CAAA,EAC1E,MAAU,KACT,kBAAC,QAAD;WAAM,WAAU;qBAA0H;WAEnI,CAAA,CAEL;YATC,EAAI,GASL,CACN;SACE,CAAA;QAEJ;;MAEJ;QAGN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,MAAK;MACL,eAAgB,MAAgB,IAAI,EAAS,gBAAgB,GAAG,GAAgB,MAAM,IAAI,EAAE;MAC5F,UAAU;MACV,WAAU;gBAJZ,CAME,kBAAC,GAAD,EAAa,WAAU,WAAY,CAAA,EAClC,MAAgB,IAAI,WAAW,WACzB;SAER,IACC,kBAAC,UAAD;MACE,MAAK;MACL,SAAS;MACT,UAAU,CAAC,GAAW,IAAI;MAC1B,WAAU;gBAET,IAAe,uBAAuB;MAChC,CAAA,GAET,kBAAC,UAAD;MACE,MAAK;MACL,eAAe,GAAgB,MAAM,IAAI,EAAE;MAC3C,UAAU,CAAC,GAAW;MACtB,WAAU;gBAJZ,CAKC,QAEC,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,CAC7B;QAEP;OACF;;GACK"}
|
|
1
|
+
{"version":3,"file":"AddPropertyPage.js","names":[],"sources":["../../../../src/housingvista/pages/properties/AddPropertyPage.tsx"],"sourcesContent":["/**\n * HousingVista Add Property Page\n * Multi-step property creation form.\n * Migrated from legacy housingvista-frontend add-property.tsx\n * @module housingvista\n */\n\nimport { useState, useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Home,\n MapPin,\n DollarSign,\n Bed,\n Bath,\n Maximize,\n Calendar,\n Upload,\n CheckCircle,\n ChevronLeft,\n ChevronRight,\n Wifi,\n Car,\n Waves,\n Dumbbell,\n TreePine,\n Shield,\n Flame,\n Wind,\n} from 'lucide-react';\nimport { EmphasisPanel } from '@burdenoff/fe-libs/ui';\nimport { PageLayout, Breadcrumbs, FileUploader } from '../../components';\nimport type { BreadcrumbItem } from '../../components';\nimport { cn } from '../../utils/helpers';\nimport { useCreateProperty, type CreatePropertyInput, type HvUploadedFile } from '../../hooks';\nimport { useHousingVistaAnalytics } from '../../hooks/useHousingVistaAnalytics';\nimport { notify } from '../../lib/toast';\nimport type { PropertyStatus, PropertyType } from '../../types';\n\n// Map the form's listing type to the schema property status + price type.\nconst listingToStatus: Record<string, PropertyStatus> = {\n sale: 'for_sale',\n rent: 'for_rent',\n lease: 'for_rent',\n};\nconst listingToPriceType: Record<string, string> = {\n sale: 'sale',\n rent: 'rent',\n lease: 'lease',\n};\n\n// ---- Step definitions ----\nconst steps = [\n { id: 'basic', label: 'Basic Info', icon: Home },\n { id: 'location', label: 'Location', icon: MapPin },\n { id: 'specs', label: 'Specifications', icon: Maximize },\n { id: 'amenities', label: 'Amenities', icon: Wifi },\n { id: 'pricing', label: 'Pricing', icon: DollarSign },\n { id: 'images', label: 'Images', icon: Upload },\n] as const;\n\n// ---- Amenity options ----\nconst amenityOptions = [\n { id: 'swimming_pool', label: 'Swimming Pool', icon: Waves },\n { id: 'gym', label: 'Gym / Fitness', icon: Dumbbell },\n { id: 'parking', label: 'Parking', icon: Car },\n { id: 'garden', label: 'Garden', icon: TreePine },\n { id: 'security', label: '24/7 Security', icon: Shield },\n { id: 'wifi', label: 'Wi-Fi', icon: Wifi },\n { id: 'fireplace', label: 'Fireplace', icon: Flame },\n { id: 'ac', label: 'Central AC', icon: Wind },\n];\n\nconst breadcrumbs: BreadcrumbItem[] = [{ label: 'Properties', href: '../' }, { label: 'Add New' }];\n\nexport const AddPropertyPage = () => {\n const navigate = useNavigate();\n const { createProperty, loading: isSubmitting } = useCreateProperty();\n const { emitResource } = useHousingVistaAnalytics();\n const [currentStep, setCurrentStep] = useState(0);\n\n const [formData, setFormData] = useState({\n // Basic Info\n title: '',\n description: '',\n propertyType: 'residential',\n category: 'apartment',\n listingType: 'sale',\n // Location\n address: '',\n city: '',\n state: '',\n zipCode: '',\n neighborhood: '',\n country: 'USA',\n // Specifications\n bedrooms: '',\n bathrooms: '',\n area: '',\n floors: '1',\n parking: '0',\n yearBuilt: '',\n furnishing: 'unfurnished',\n facing: 'North',\n // Amenities\n amenities: [] as string[],\n // Pricing\n price: '',\n currency: 'USD',\n negotiable: false,\n // Images — real files-svc uploads (first one is the primary/cover image)\n images: [] as HvUploadedFile[],\n });\n\n const handleImagesUploaded = useCallback((uploaded: HvUploadedFile[]) => {\n setFormData((prev) => {\n const existingIds = new Set(prev.images.map((img) => img.id));\n const merged = [...prev.images, ...uploaded.filter((f) => !existingIds.has(f.id))];\n return { ...prev, images: merged };\n });\n }, []);\n\n const handleImageRemove = useCallback((fileId: string) => {\n setFormData((prev) => ({ ...prev, images: prev.images.filter((img) => img.id !== fileId) }));\n }, []);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>) => {\n const { name, value, type } = e.target;\n setFormData((prev) => ({\n ...prev,\n [name]: type === 'checkbox' ? (e.target as HTMLInputElement).checked : value,\n }));\n },\n []\n );\n\n const toggleAmenity = useCallback((id: string) => {\n setFormData((prev) => ({\n ...prev,\n amenities: prev.amenities.includes(id) ? prev.amenities.filter((a) => a !== id) : [...prev.amenities, id],\n }));\n }, []);\n\n const canGoNext = () => {\n switch (currentStep) {\n case 0:\n return formData.title.trim() !== '' && formData.description.trim() !== '';\n case 1:\n return formData.address.trim() !== '' && formData.city.trim() !== '' && formData.state.trim() !== '';\n case 2:\n return formData.area.trim() !== '';\n case 3:\n return true;\n case 4:\n return formData.price.trim() !== '';\n case 5:\n return true;\n default:\n return false;\n }\n };\n\n const handleSubmit = async () => {\n const input: CreatePropertyInput = {\n title: formData.title.trim(),\n description: formData.description.trim() || undefined,\n status: listingToStatus[formData.listingType] ?? 'for_sale',\n type: formData.propertyType as PropertyType,\n category: formData.category,\n address: formData.address.trim() || undefined,\n city: formData.city.trim(),\n state: formData.state.trim(),\n country: formData.country || undefined,\n pincode: formData.zipCode.trim() || undefined,\n neighborhood: formData.neighborhood.trim() || undefined,\n price: Number(formData.price) || 0,\n currency: formData.currency,\n priceType: listingToPriceType[formData.listingType] ?? 'sale',\n negotiable: formData.negotiable,\n bedrooms: Number(formData.bedrooms) || 0,\n bathrooms: Number(formData.bathrooms) || 0,\n totalArea: Number(formData.area) || 0,\n floors: formData.floors ? Number(formData.floors) : undefined,\n parking: formData.parking ? Number(formData.parking) : undefined,\n furnishingStatus: formData.furnishing,\n ageOfProperty: formData.yearBuilt\n ? Math.max(0, new Date().getFullYear() - Number(formData.yearBuilt))\n : undefined,\n facing: formData.facing,\n amenities: formData.amenities.map((id) => ({\n name: amenityOptions.find((a) => a.id === id)?.label ?? id,\n category: 'general',\n available: true,\n })),\n images: formData.images.map((file, index) => ({\n url: file.url,\n isPrimary: index === 0,\n order: index,\n })),\n };\n\n try {\n const created = await createProperty(input);\n emitResource('housingvista.property.created', created.id);\n notify.success('Property created', `${created.title} has been added to your listings.`);\n navigate(`../properties/${created.id}`);\n } catch (err) {\n notify.error('Could not create property', (err as Error).message);\n }\n };\n\n const isLastStep = currentStep === steps.length - 1;\n\n return (\n <PageLayout\n title=\"Add New Property\"\n description=\"List your property for sale or rent\"\n purpose=\"Create a complete, market-ready listing in a few guided steps. Fill in the basics, location, specifications, amenities, pricing, and photos — the more detail you add, the more inquiries and stronger offers your property attracts.\"\n >\n <Breadcrumbs items={breadcrumbs} />\n\n {/* Step Indicators — primary emphasis zone (one per page) */}\n <EmphasisPanel className=\"p-5\">\n <div className=\"mb-3 flex items-center justify-between\">\n <div>\n <p className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">\n Step {currentStep + 1} of {steps.length}\n </p>\n <p className=\"text-base font-semibold text-text-primary\">{steps[currentStep].label}</p>\n </div>\n <span className=\"text-sm font-semibold text-text-primary\">\n {Math.round(((currentStep + 1) / steps.length) * 100)}%\n </span>\n </div>\n {/* Progress bar */}\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-action-primary-bg transition-[width] duration-300\"\n style={{ width: `${((currentStep + 1) / steps.length) * 100}%` }}\n />\n </div>\n {/* Step chips */}\n <div className=\"mt-4 flex items-center gap-1 overflow-x-auto pb-1\">\n {steps.map((step, index) => {\n const Icon = step.icon;\n const isActive = index === currentStep;\n const isCompleted = index < currentStep;\n return (\n <button\n key={step.id}\n onClick={() => index <= currentStep && setCurrentStep(index)}\n className={cn(\n 'flex shrink-0 items-center gap-2 rounded-full px-3 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]',\n isActive && 'bg-action-primary-bg text-action-primary-text',\n isCompleted && 'bg-status-success-bg-subtle text-status-success-text',\n !isActive && !isCompleted && 'text-text-secondary hover:bg-bg-sunken/50',\n index > currentStep && 'cursor-not-allowed'\n )}\n disabled={index > currentStep}\n >\n {isCompleted ? <CheckCircle className=\"h-4 w-4\" /> : <Icon className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{step.label}</span>\n <span className=\"sm:hidden\">{index + 1}</span>\n </button>\n );\n })}\n </div>\n </EmphasisPanel>\n\n {/* Form Content */}\n <div className=\"max-w-3xl\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-6\">\n {/* Step 0: Basic Info */}\n {currentStep === 0 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Basic Information</h3>\n <div>\n <label htmlFor=\"title\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Property Title *\n </label>\n <input\n id=\"title\"\n name=\"title\"\n value={formData.title}\n onChange={handleChange}\n placeholder=\"e.g., Luxury 3BHK Apartment in Downtown\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"description\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Description *\n </label>\n <textarea\n id=\"description\"\n name=\"description\"\n value={formData.description}\n onChange={handleChange}\n placeholder=\"Describe your property in detail...\"\n required\n rows={4}\n className=\"w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label htmlFor=\"propertyType\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Property Type *\n </label>\n <select\n id=\"propertyType\"\n name=\"propertyType\"\n value={formData.propertyType}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"residential\">Residential</option>\n <option value=\"commercial\">Commercial</option>\n <option value=\"industrial\">Industrial</option>\n <option value=\"agricultural\">Agricultural</option>\n <option value=\"mixed_use\">Mixed Use</option>\n </select>\n </div>\n <div>\n <label htmlFor=\"category\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Category *\n </label>\n <select\n id=\"category\"\n name=\"category\"\n value={formData.category}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"apartment\">Apartment</option>\n <option value=\"house\">House</option>\n <option value=\"villa\">Villa</option>\n <option value=\"office\">Office</option>\n <option value=\"retail\">Retail</option>\n <option value=\"warehouse\">Warehouse</option>\n <option value=\"land\">Land</option>\n <option value=\"plot\">Plot</option>\n </select>\n </div>\n </div>\n <div>\n <label htmlFor=\"listingType\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Listing Type *\n </label>\n <select\n id=\"listingType\"\n name=\"listingType\"\n value={formData.listingType}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] sm:max-w-xs\"\n >\n <option value=\"sale\">For Sale</option>\n <option value=\"rent\">For Rent</option>\n <option value=\"lease\">For Lease</option>\n </select>\n </div>\n </div>\n )}\n\n {/* Step 1: Location */}\n {currentStep === 1 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <MapPin className=\"h-5 w-5\" />\n Location Details\n </h3>\n <div>\n <label htmlFor=\"address\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Street Address *\n </label>\n <input\n id=\"address\"\n name=\"address\"\n value={formData.address}\n onChange={handleChange}\n placeholder=\"e.g., 123 Main Street, Unit 2504\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"neighborhood\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Neighborhood\n </label>\n <input\n id=\"neighborhood\"\n name=\"neighborhood\"\n value={formData.neighborhood}\n onChange={handleChange}\n placeholder=\"e.g., Midtown\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div>\n <label htmlFor=\"city\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n City *\n </label>\n <input\n id=\"city\"\n name=\"city\"\n value={formData.city}\n onChange={handleChange}\n placeholder=\"City\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"state\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n State *\n </label>\n <input\n id=\"state\"\n name=\"state\"\n value={formData.state}\n onChange={handleChange}\n placeholder=\"State\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"zipCode\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n ZIP Code *\n </label>\n <input\n id=\"zipCode\"\n name=\"zipCode\"\n value={formData.zipCode}\n onChange={handleChange}\n placeholder=\"ZIP Code\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"country\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Country\n </label>\n <select\n id=\"country\"\n name=\"country\"\n value={formData.country}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] sm:max-w-xs\"\n >\n <option value=\"USA\">United States</option>\n <option value=\"Canada\">Canada</option>\n <option value=\"UK\">United Kingdom</option>\n <option value=\"India\">India</option>\n </select>\n </div>\n </div>\n )}\n\n {/* Step 2: Specifications */}\n {currentStep === 2 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Property Specifications</h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label\n htmlFor=\"area\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Maximize className=\"h-4 w-4\" />\n Total Area (sq ft) *\n </label>\n <input\n id=\"area\"\n name=\"area\"\n type=\"number\"\n value={formData.area}\n onChange={handleChange}\n placeholder=\"Enter area\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label\n htmlFor=\"yearBuilt\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Calendar className=\"h-4 w-4\" />\n Year Built\n </label>\n <input\n id=\"yearBuilt\"\n name=\"yearBuilt\"\n type=\"number\"\n value={formData.yearBuilt}\n onChange={handleChange}\n placeholder=\"YYYY\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-3\">\n <div>\n <label\n htmlFor=\"bedrooms\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Bed className=\"h-4 w-4\" />\n Bedrooms\n </label>\n <input\n id=\"bedrooms\"\n name=\"bedrooms\"\n type=\"number\"\n value={formData.bedrooms}\n onChange={handleChange}\n placeholder=\"0\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label\n htmlFor=\"bathrooms\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Bath className=\"h-4 w-4\" />\n Bathrooms\n </label>\n <input\n id=\"bathrooms\"\n name=\"bathrooms\"\n type=\"number\"\n value={formData.bathrooms}\n onChange={handleChange}\n placeholder=\"0\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label\n htmlFor=\"parking\"\n className=\"mb-1.5 flex items-center gap-1.5 text-sm font-medium text-text-primary\"\n >\n <Car className=\"h-4 w-4\" />\n Parking Spots\n </label>\n <input\n id=\"parking\"\n name=\"parking\"\n type=\"number\"\n value={formData.parking}\n onChange={handleChange}\n placeholder=\"0\"\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n </div>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label htmlFor=\"furnishing\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Furnishing Status\n </label>\n <select\n id=\"furnishing\"\n name=\"furnishing\"\n value={formData.furnishing}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"unfurnished\">Unfurnished</option>\n <option value=\"semi_furnished\">Semi Furnished</option>\n <option value=\"furnished\">Furnished</option>\n </select>\n </div>\n <div>\n <label htmlFor=\"facing\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Facing Direction\n </label>\n <select\n id=\"facing\"\n name=\"facing\"\n value={formData.facing}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"North\">North</option>\n <option value=\"South\">South</option>\n <option value=\"East\">East</option>\n <option value=\"West\">West</option>\n <option value=\"Northeast\">Northeast</option>\n <option value=\"Northwest\">Northwest</option>\n <option value=\"Southeast\">Southeast</option>\n <option value=\"Southwest\">Southwest</option>\n </select>\n </div>\n </div>\n </div>\n )}\n\n {/* Step 3: Amenities */}\n {currentStep === 3 && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-text-primary\">Property Amenities</h3>\n <p className=\"text-sm text-text-secondary\">Select all amenities available at this property.</p>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n {amenityOptions.map((amenity) => {\n const Icon = amenity.icon;\n const isSelected = formData.amenities.includes(amenity.id);\n return (\n <button\n key={amenity.id}\n type=\"button\"\n onClick={() => toggleAmenity(amenity.id)}\n className={cn(\n 'flex flex-col items-center gap-2 rounded-lg border p-4 text-sm font-medium transition-colors',\n isSelected\n ? 'border-action-primary-border bg-action-primary-bg/5 text-text-primary'\n : 'border-border-subtle text-text-secondary hover:bg-bg-sunken/50'\n )}\n >\n <Icon className=\"h-6 w-6\" />\n <span>{amenity.label}</span>\n {isSelected && <CheckCircle className=\"h-4 w-4 text-status-success-text\" />}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Step 4: Pricing */}\n {currentStep === 4 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <DollarSign className=\"h-5 w-5\" />\n Pricing Details\n </h3>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label htmlFor=\"price\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Price *\n </label>\n <input\n id=\"price\"\n name=\"price\"\n type=\"number\"\n value={formData.price}\n onChange={handleChange}\n placeholder=\"Enter price\"\n required\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n <div>\n <label htmlFor=\"currency\" className=\"mb-1.5 block text-sm font-medium text-text-primary\">\n Currency\n </label>\n <select\n id=\"currency\"\n name=\"currency\"\n value={formData.currency}\n onChange={handleChange}\n className=\"h-10 w-full rounded-md border border-border-subtle bg-bg-surface px-3 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"USD\">USD ($)</option>\n <option value=\"EUR\">EUR</option>\n <option value=\"GBP\">GBP</option>\n <option value=\"INR\">INR</option>\n </select>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"negotiable\"\n name=\"negotiable\"\n checked={formData.negotiable}\n onChange={handleChange}\n className=\"h-4 w-4 rounded border-border-subtle\"\n />\n <label htmlFor=\"negotiable\" className=\"text-sm text-text-primary\">\n Price is negotiable\n </label>\n </div>\n </div>\n )}\n\n {/* Step 5: Images */}\n {currentStep === 5 && (\n <div className=\"space-y-4\">\n <h3 className=\"flex items-center gap-2 text-lg font-semibold text-text-primary\">\n <Upload className=\"h-5 w-5\" />\n Property Images\n </h3>\n <p className=\"text-sm text-text-secondary\">\n Upload photos of the property (JPG, PNG). The first image becomes the cover.\n </p>\n <FileUploader\n accept=\"image/*\"\n multiple\n label=\"Upload property images\"\n value={formData.images}\n onUploaded={handleImagesUploaded}\n onRemove={handleImageRemove}\n />\n {formData.images.length > 0 && (\n <div className=\"grid grid-cols-3 gap-3 sm:grid-cols-4\">\n {formData.images.map((img, index) => (\n <div\n key={img.id}\n className=\"relative aspect-square overflow-hidden rounded-lg border border-border-subtle bg-bg-sunken/50\"\n >\n <img src={img.url} alt={img.name} className=\"h-full w-full object-cover\" />\n {index === 0 && (\n <span className=\"absolute left-1.5 top-1.5 rounded bg-action-primary-bg px-1.5 py-0.5 text-[10px] font-semibold text-action-primary-text\">\n Cover\n </span>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Navigation Buttons */}\n <div className=\"mt-6 flex items-center justify-between\">\n <button\n type=\"button\"\n onClick={() => (currentStep === 0 ? navigate('../properties') : setCurrentStep((s) => s - 1))}\n disabled={isSubmitting}\n className=\"inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken disabled:opacity-50\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n {currentStep === 0 ? 'Cancel' : 'Previous'}\n </button>\n\n {isLastStep ? (\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!canGoNext() || isSubmitting}\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-6 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n {isSubmitting ? 'Adding Property...' : 'Submit Property'}\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={() => setCurrentStep((s) => s + 1)}\n disabled={!canGoNext()}\n className=\"inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg-hover disabled:opacity-50\"\n >\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n </PageLayout>\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertiesPage.d.ts","sourceRoot":"","sources":["../../../../src/housingvista/pages/properties/PropertiesPage.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,eAAO,MAAM,cAAc,mCAsd1B,CAAC"}
|