@burdenoff/microfe-housingvista 2026.929.1 → 2026.930.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.
@@ -197,28 +197,28 @@ function z() {
197
197
  /* @__PURE__ */ o(i, {
198
198
  path: "home-loans",
199
199
  element: /* @__PURE__ */ o(u, {
200
- flag: "housingvista.home_loans",
200
+ flag: "housingvista.home-loans",
201
201
  children: /* @__PURE__ */ o(N, {})
202
202
  })
203
203
  }),
204
204
  /* @__PURE__ */ o(i, {
205
205
  path: "home-loans/:id/apply",
206
206
  element: /* @__PURE__ */ o(u, {
207
- flag: "housingvista.home_loans",
207
+ flag: "housingvista.home-loans",
208
208
  children: /* @__PURE__ */ o(P, {})
209
209
  })
210
210
  }),
211
211
  /* @__PURE__ */ o(i, {
212
212
  path: "market-analytics",
213
213
  element: /* @__PURE__ */ o(u, {
214
- flag: "housingvista.market_analytics",
214
+ flag: "housingvista.market-analytics",
215
215
  children: /* @__PURE__ */ o(F, {})
216
216
  })
217
217
  }),
218
218
  /* @__PURE__ */ o(i, {
219
219
  path: "area-insights",
220
220
  element: /* @__PURE__ */ o(u, {
221
- flag: "housingvista.market_analytics",
221
+ flag: "housingvista.market-analytics",
222
222
  children: /* @__PURE__ */ o(I, {})
223
223
  })
224
224
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"HousingVistaRoutes.js","names":[],"sources":["../../src/housingvista/HousingVistaRoutes.tsx"],"sourcesContent":["/**\n * HousingVista Routes\n * All route definitions with lazy loading.\n * @module housingvista\n */\n\nimport { lazy, Suspense, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\n\n// Eagerly load the home page\nimport { HomePage } from './pages/HomePage';\n\n// Loading fallback\nconst PageLoader = () => (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"text-sm text-text-secondary\">Loading...</div>\n </div>\n);\n\n/**\n * Route-level feature flag gate.\n * Every HousingVista page is behind a `housingvista.{route}` flag that defaults\n * to enabled, matching the platform default-allow convention.\n */\nfunction FeatureFlagRoute({ flag, children }: { flag: string; children: ReactNode }) {\n return (\n <FeatureGate flag={flag} defaultValue={true}>\n {children}\n </FeatureGate>\n );\n}\n\n// ── Properties ──────────────────────────────────────────────────────────────\nconst PropertiesPage = lazy(() =>\n import('./pages/properties/PropertiesPage').then((m) => ({ default: m.PropertiesPage }))\n);\nconst AddPropertyPage = lazy(() =>\n import('./pages/properties/AddPropertyPage').then((m) => ({ default: m.AddPropertyPage }))\n);\nconst PropertyDetailPage = lazy(() =>\n import('./pages/properties/PropertyDetailPage').then((m) => ({ default: m.PropertyDetailPage }))\n);\nconst ShortlistPage = lazy(() => import('./pages/shortlist/ShortlistPage').then((m) => ({ default: m.ShortlistPage })));\n\n// ── Transactions ────────────────────────────────────────────────────────────\nconst TransactionsPage = lazy(() =>\n import('./pages/transactions/TransactionsPage').then((m) => ({ default: m.TransactionsPage }))\n);\nconst TransactionDetailPage = lazy(() =>\n import('./pages/transactions/TransactionDetailPage').then((m) => ({ default: m.TransactionDetailPage }))\n);\n\n// ── Investments ─────────────────────────────────────────────────────────────\nconst InvestmentsPage = lazy(() =>\n import('./pages/investments/InvestmentsPage').then((m) => ({ default: m.InvestmentsPage }))\n);\nconst InvestmentDetailPage = lazy(() =>\n import('./pages/investments/InvestmentDetailPage').then((m) => ({ default: m.InvestmentDetailPage }))\n);\n\n// ── Offers ──────────────────────────────────────────────────────────────────\nconst OffersPage = lazy(() => import('./pages/offers/OffersPage').then((m) => ({ default: m.OffersPage })));\n\n// ── Viewings ────────────────────────────────────────────────────────────────\nconst ViewingsPage = lazy(() => import('./pages/viewings/ViewingsPage').then((m) => ({ default: m.ViewingsPage })));\n\n// ── Messages / Chat ───────────────────────────────────────────────────────────\nconst ChatPage = lazy(() => import('./pages/chat/ChatPage').then((m) => ({ default: m.ChatPage })));\n\n// ── Analytics ───────────────────────────────────────────────────────────────\nconst AnalyticsPage = lazy(() => import('./pages/analytics/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage })));\n\n// ── Rental Management ───────────────────────────────────────────────────────\nconst RentalManagementPage = lazy(() =>\n import('./pages/rental/RentalManagementPage').then((m) => ({ default: m.RentalManagementPage }))\n);\n\n// ── Asset Management ────────────────────────────────────────────────────────\nconst AssetManagementPage = lazy(() =>\n import('./pages/assets/AssetManagementPage').then((m) => ({ default: m.AssetManagementPage }))\n);\nconst AssetDetailPage = lazy(() =>\n import('./pages/assets/AssetDetailPage').then((m) => ({ default: m.AssetDetailPage }))\n);\n\n// ── AMC Management ──────────────────────────────────────────────────────────\nconst AMCManagementPage = lazy(() =>\n import('./pages/amc/AMCManagementPage').then((m) => ({ default: m.AMCManagementPage }))\n);\n\n// ── Marketplace ─────────────────────────────────────────────────────────────\nconst MarketplacePage = lazy(() =>\n import('./pages/marketplace/MarketplacePage').then((m) => ({ default: m.MarketplacePage }))\n);\nconst ServiceDetailPage = lazy(() =>\n import('./pages/marketplace/ServiceDetailPage').then((m) => ({ default: m.ServiceDetailPage }))\n);\n\n// ── Verification ────────────────────────────────────────────────────────────\nconst VerificationPage = lazy(() =>\n import('./pages/verification/VerificationPage').then((m) => ({ default: m.VerificationPage }))\n);\nconst VerificationDetailPage = lazy(() =>\n import('./pages/verification/VerificationDetailPage').then((m) => ({ default: m.VerificationDetailPage }))\n);\n\n// ── Legal ───────────────────────────────────────────────────────────────────\nconst LegalPage = lazy(() => import('./pages/legal/LegalPage').then((m) => ({ default: m.LegalPage })));\nconst LegalServiceDetailPage = lazy(() =>\n import('./pages/legal/LegalServiceDetailPage').then((m) => ({ default: m.LegalServiceDetailPage }))\n);\n\n// ── Finance ─────────────────────────────────────────────────────────────────\nconst HomeLoansPage = lazy(() => import('./pages/finance/HomeLoansPage').then((m) => ({ default: m.HomeLoansPage })));\nconst HomeLoanDetailPage = lazy(() =>\n import('./pages/finance/HomeLoanDetailPage').then((m) => ({ default: m.HomeLoanDetailPage }))\n);\n\n// ── Market ──────────────────────────────────────────────────────────────────\nconst MarketAnalyticsPage = lazy(() =>\n import('./pages/market/MarketAnalyticsPage').then((m) => ({ default: m.MarketAnalyticsPage }))\n);\nconst AreaInsightsPage = lazy(() =>\n import('./pages/market/AreaInsightsPage').then((m) => ({ default: m.AreaInsightsPage }))\n);\n\n// ── Settings ────────────────────────────────────────────────────────────────\nconst SettingsPage = lazy(() => import('./pages/settings/SettingsPage').then((m) => ({ default: m.SettingsPage })));\nconst ProfilePage = lazy(() => import('./pages/settings/ProfilePage').then((m) => ({ default: m.ProfilePage })));\n\n// ============================================================================\n// Routes\n// ============================================================================\n\nexport function HousingVistaRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Dashboard */}\n <Route\n index\n element={\n <FeatureFlagRoute flag=\"housingvista.dashboard\">\n <HomePage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Properties */}\n <Route\n path=\"properties\"\n element={\n <FeatureFlagRoute flag=\"housingvista.properties\">\n <PropertiesPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"properties/new\"\n element={\n <FeatureFlagRoute flag=\"housingvista.properties\">\n <AddPropertyPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"properties/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.properties\">\n <PropertyDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Shortlist */}\n <Route\n path=\"shortlist\"\n element={\n <FeatureFlagRoute flag=\"housingvista.shortlist\">\n <ShortlistPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Transactions */}\n <Route\n path=\"transactions\"\n element={\n <FeatureFlagRoute flag=\"housingvista.transactions\">\n <TransactionsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"transactions/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.transactions\">\n <TransactionDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Investments */}\n <Route\n path=\"investments\"\n element={\n <FeatureFlagRoute flag=\"housingvista.investments\">\n <InvestmentsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"investments/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.investments\">\n <InvestmentDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Offers */}\n <Route\n path=\"offers\"\n element={\n <FeatureFlagRoute flag=\"housingvista.offers\">\n <OffersPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Viewings */}\n <Route\n path=\"viewings\"\n element={\n <FeatureFlagRoute flag=\"housingvista.viewings\">\n <ViewingsPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Messages / Chat */}\n <Route\n path=\"chat\"\n element={\n <FeatureFlagRoute flag=\"housingvista.chat\">\n <ChatPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"messages\"\n element={\n <FeatureFlagRoute flag=\"housingvista.chat\">\n <Navigate to=\"../chat\" replace />\n </FeatureFlagRoute>\n }\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics\"\n element={\n <FeatureFlagRoute flag=\"housingvista.analytics\">\n <AnalyticsPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Rental Management */}\n <Route\n path=\"rental\"\n element={\n <FeatureFlagRoute flag=\"housingvista.rental\">\n <RentalManagementPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Asset Management */}\n <Route\n path=\"assets\"\n element={\n <FeatureFlagRoute flag=\"housingvista.assets\">\n <AssetManagementPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"assets/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.assets\">\n <AssetDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* AMC Management */}\n <Route\n path=\"amc\"\n element={\n <FeatureFlagRoute flag=\"housingvista.amc\">\n <AMCManagementPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <FeatureFlagRoute flag=\"housingvista.marketplace\">\n <MarketplacePage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"marketplace/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.marketplace\">\n <ServiceDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Verification */}\n <Route\n path=\"verification\"\n element={\n <FeatureFlagRoute flag=\"housingvista.verification\">\n <VerificationPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"verification/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.verification\">\n <VerificationDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Legal */}\n <Route\n path=\"legal\"\n element={\n <FeatureFlagRoute flag=\"housingvista.legal\">\n <LegalPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"legal/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.legal\">\n <LegalServiceDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Home Loans */}\n <Route\n path=\"home-loans\"\n element={\n <FeatureFlagRoute flag=\"housingvista.home_loans\">\n <HomeLoansPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"home-loans/:id/apply\"\n element={\n <FeatureFlagRoute flag=\"housingvista.home_loans\">\n <HomeLoanDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Market Analytics */}\n <Route\n path=\"market-analytics\"\n element={\n <FeatureFlagRoute flag=\"housingvista.market_analytics\">\n <MarketAnalyticsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"area-insights\"\n element={\n <FeatureFlagRoute flag=\"housingvista.market_analytics\">\n <AreaInsightsPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Settings & Profile */}\n <Route\n path=\"settings\"\n element={\n <FeatureFlagRoute flag=\"housingvista.settings\">\n <SettingsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"profile\"\n element={\n <FeatureFlagRoute flag=\"housingvista.settings\">\n <ProfilePage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Catch-all: redirect to dashboard */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"HousingVistaRoutes.js","names":[],"sources":["../../src/housingvista/HousingVistaRoutes.tsx"],"sourcesContent":["/**\n * HousingVista Routes\n * All route definitions with lazy loading.\n * @module housingvista\n */\n\nimport { lazy, Suspense, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\n\n// Eagerly load the home page\nimport { HomePage } from './pages/HomePage';\n\n// Loading fallback\nconst PageLoader = () => (\n <div className=\"flex items-center justify-center p-12\">\n <div className=\"text-sm text-text-secondary\">Loading...</div>\n </div>\n);\n\n/**\n * Route-level feature flag gate.\n * Every HousingVista page is behind a `housingvista.{route}` flag that defaults\n * to enabled, matching the platform default-allow convention.\n */\nfunction FeatureFlagRoute({ flag, children }: { flag: string; children: ReactNode }) {\n return (\n <FeatureGate flag={flag} defaultValue={true}>\n {children}\n </FeatureGate>\n );\n}\n\n// ── Properties ──────────────────────────────────────────────────────────────\nconst PropertiesPage = lazy(() =>\n import('./pages/properties/PropertiesPage').then((m) => ({ default: m.PropertiesPage }))\n);\nconst AddPropertyPage = lazy(() =>\n import('./pages/properties/AddPropertyPage').then((m) => ({ default: m.AddPropertyPage }))\n);\nconst PropertyDetailPage = lazy(() =>\n import('./pages/properties/PropertyDetailPage').then((m) => ({ default: m.PropertyDetailPage }))\n);\nconst ShortlistPage = lazy(() => import('./pages/shortlist/ShortlistPage').then((m) => ({ default: m.ShortlistPage })));\n\n// ── Transactions ────────────────────────────────────────────────────────────\nconst TransactionsPage = lazy(() =>\n import('./pages/transactions/TransactionsPage').then((m) => ({ default: m.TransactionsPage }))\n);\nconst TransactionDetailPage = lazy(() =>\n import('./pages/transactions/TransactionDetailPage').then((m) => ({ default: m.TransactionDetailPage }))\n);\n\n// ── Investments ─────────────────────────────────────────────────────────────\nconst InvestmentsPage = lazy(() =>\n import('./pages/investments/InvestmentsPage').then((m) => ({ default: m.InvestmentsPage }))\n);\nconst InvestmentDetailPage = lazy(() =>\n import('./pages/investments/InvestmentDetailPage').then((m) => ({ default: m.InvestmentDetailPage }))\n);\n\n// ── Offers ──────────────────────────────────────────────────────────────────\nconst OffersPage = lazy(() => import('./pages/offers/OffersPage').then((m) => ({ default: m.OffersPage })));\n\n// ── Viewings ────────────────────────────────────────────────────────────────\nconst ViewingsPage = lazy(() => import('./pages/viewings/ViewingsPage').then((m) => ({ default: m.ViewingsPage })));\n\n// ── Messages / Chat ───────────────────────────────────────────────────────────\nconst ChatPage = lazy(() => import('./pages/chat/ChatPage').then((m) => ({ default: m.ChatPage })));\n\n// ── Analytics ───────────────────────────────────────────────────────────────\nconst AnalyticsPage = lazy(() => import('./pages/analytics/AnalyticsPage').then((m) => ({ default: m.AnalyticsPage })));\n\n// ── Rental Management ───────────────────────────────────────────────────────\nconst RentalManagementPage = lazy(() =>\n import('./pages/rental/RentalManagementPage').then((m) => ({ default: m.RentalManagementPage }))\n);\n\n// ── Asset Management ────────────────────────────────────────────────────────\nconst AssetManagementPage = lazy(() =>\n import('./pages/assets/AssetManagementPage').then((m) => ({ default: m.AssetManagementPage }))\n);\nconst AssetDetailPage = lazy(() =>\n import('./pages/assets/AssetDetailPage').then((m) => ({ default: m.AssetDetailPage }))\n);\n\n// ── AMC Management ──────────────────────────────────────────────────────────\nconst AMCManagementPage = lazy(() =>\n import('./pages/amc/AMCManagementPage').then((m) => ({ default: m.AMCManagementPage }))\n);\n\n// ── Marketplace ─────────────────────────────────────────────────────────────\nconst MarketplacePage = lazy(() =>\n import('./pages/marketplace/MarketplacePage').then((m) => ({ default: m.MarketplacePage }))\n);\nconst ServiceDetailPage = lazy(() =>\n import('./pages/marketplace/ServiceDetailPage').then((m) => ({ default: m.ServiceDetailPage }))\n);\n\n// ── Verification ────────────────────────────────────────────────────────────\nconst VerificationPage = lazy(() =>\n import('./pages/verification/VerificationPage').then((m) => ({ default: m.VerificationPage }))\n);\nconst VerificationDetailPage = lazy(() =>\n import('./pages/verification/VerificationDetailPage').then((m) => ({ default: m.VerificationDetailPage }))\n);\n\n// ── Legal ───────────────────────────────────────────────────────────────────\nconst LegalPage = lazy(() => import('./pages/legal/LegalPage').then((m) => ({ default: m.LegalPage })));\nconst LegalServiceDetailPage = lazy(() =>\n import('./pages/legal/LegalServiceDetailPage').then((m) => ({ default: m.LegalServiceDetailPage }))\n);\n\n// ── Finance ─────────────────────────────────────────────────────────────────\nconst HomeLoansPage = lazy(() => import('./pages/finance/HomeLoansPage').then((m) => ({ default: m.HomeLoansPage })));\nconst HomeLoanDetailPage = lazy(() =>\n import('./pages/finance/HomeLoanDetailPage').then((m) => ({ default: m.HomeLoanDetailPage }))\n);\n\n// ── Market ──────────────────────────────────────────────────────────────────\nconst MarketAnalyticsPage = lazy(() =>\n import('./pages/market/MarketAnalyticsPage').then((m) => ({ default: m.MarketAnalyticsPage }))\n);\nconst AreaInsightsPage = lazy(() =>\n import('./pages/market/AreaInsightsPage').then((m) => ({ default: m.AreaInsightsPage }))\n);\n\n// ── Settings ────────────────────────────────────────────────────────────────\nconst SettingsPage = lazy(() => import('./pages/settings/SettingsPage').then((m) => ({ default: m.SettingsPage })));\nconst ProfilePage = lazy(() => import('./pages/settings/ProfilePage').then((m) => ({ default: m.ProfilePage })));\n\n// ============================================================================\n// Routes\n// ============================================================================\n\nexport function HousingVistaRoutes() {\n return (\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Dashboard */}\n <Route\n index\n element={\n <FeatureFlagRoute flag=\"housingvista.dashboard\">\n <HomePage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Properties */}\n <Route\n path=\"properties\"\n element={\n <FeatureFlagRoute flag=\"housingvista.properties\">\n <PropertiesPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"properties/new\"\n element={\n <FeatureFlagRoute flag=\"housingvista.properties\">\n <AddPropertyPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"properties/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.properties\">\n <PropertyDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Shortlist */}\n <Route\n path=\"shortlist\"\n element={\n <FeatureFlagRoute flag=\"housingvista.shortlist\">\n <ShortlistPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Transactions */}\n <Route\n path=\"transactions\"\n element={\n <FeatureFlagRoute flag=\"housingvista.transactions\">\n <TransactionsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"transactions/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.transactions\">\n <TransactionDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Investments */}\n <Route\n path=\"investments\"\n element={\n <FeatureFlagRoute flag=\"housingvista.investments\">\n <InvestmentsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"investments/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.investments\">\n <InvestmentDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Offers */}\n <Route\n path=\"offers\"\n element={\n <FeatureFlagRoute flag=\"housingvista.offers\">\n <OffersPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Viewings */}\n <Route\n path=\"viewings\"\n element={\n <FeatureFlagRoute flag=\"housingvista.viewings\">\n <ViewingsPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Messages / Chat */}\n <Route\n path=\"chat\"\n element={\n <FeatureFlagRoute flag=\"housingvista.chat\">\n <ChatPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"messages\"\n element={\n <FeatureFlagRoute flag=\"housingvista.chat\">\n <Navigate to=\"../chat\" replace />\n </FeatureFlagRoute>\n }\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics\"\n element={\n <FeatureFlagRoute flag=\"housingvista.analytics\">\n <AnalyticsPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Rental Management */}\n <Route\n path=\"rental\"\n element={\n <FeatureFlagRoute flag=\"housingvista.rental\">\n <RentalManagementPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Asset Management */}\n <Route\n path=\"assets\"\n element={\n <FeatureFlagRoute flag=\"housingvista.assets\">\n <AssetManagementPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"assets/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.assets\">\n <AssetDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* AMC Management */}\n <Route\n path=\"amc\"\n element={\n <FeatureFlagRoute flag=\"housingvista.amc\">\n <AMCManagementPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <FeatureFlagRoute flag=\"housingvista.marketplace\">\n <MarketplacePage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"marketplace/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.marketplace\">\n <ServiceDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Verification */}\n <Route\n path=\"verification\"\n element={\n <FeatureFlagRoute flag=\"housingvista.verification\">\n <VerificationPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"verification/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.verification\">\n <VerificationDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Legal */}\n <Route\n path=\"legal\"\n element={\n <FeatureFlagRoute flag=\"housingvista.legal\">\n <LegalPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"legal/:id\"\n element={\n <FeatureFlagRoute flag=\"housingvista.legal\">\n <LegalServiceDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Home Loans */}\n <Route\n path=\"home-loans\"\n element={\n <FeatureFlagRoute flag=\"housingvista.home-loans\">\n <HomeLoansPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"home-loans/:id/apply\"\n element={\n <FeatureFlagRoute flag=\"housingvista.home-loans\">\n <HomeLoanDetailPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Market Analytics */}\n <Route\n path=\"market-analytics\"\n element={\n <FeatureFlagRoute flag=\"housingvista.market-analytics\">\n <MarketAnalyticsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"area-insights\"\n element={\n <FeatureFlagRoute flag=\"housingvista.market-analytics\">\n <AreaInsightsPage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Settings & Profile */}\n <Route\n path=\"settings\"\n element={\n <FeatureFlagRoute flag=\"housingvista.settings\">\n <SettingsPage />\n </FeatureFlagRoute>\n }\n />\n <Route\n path=\"profile\"\n element={\n <FeatureFlagRoute flag=\"housingvista.settings\">\n <ProfilePage />\n </FeatureFlagRoute>\n }\n />\n\n {/* Catch-all: redirect to dashboard */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { ReraVerificationStatus } from '../types';
2
+ import { ReraVerificationStatus, VerificationStatus } from '../types';
3
3
 
4
4
  interface PropertyCardProps {
5
5
  id: string;
@@ -24,6 +24,10 @@ interface PropertyCardProps {
24
24
  /** RERA (India) verification workflow status — badge shown for
25
25
  * `verified`/`pending`, omitted for `not_applicable`/`rejected` (BOFF-4132). */
26
26
  reraStatus?: ReraVerificationStatus;
27
+ /** Generic listing verification status — badge shown for `verified`,
28
+ * a muted marker for `rejected`; `pending` is the default state and
29
+ * stays silent (same rule as the detail page). BOFF-8088. */
30
+ verificationStatus?: VerificationStatus;
27
31
  /** When provided, renders a compare-selection toggle (BOFF-3931). */
28
32
  isCompareSelected?: boolean;
29
33
  onToggleCompare?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyCard.d.ts","sourceRoot":"","sources":["../../../src/housingvista/components/PropertyCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAI1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEvD,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;oFACgF;IAChF,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAsCD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAmL9C,CAAC"}
1
+ {"version":3,"file":"PropertyCard.d.ts","sourceRoot":"","sources":["../../../src/housingvista/components/PropertyCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAI1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE3E,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qEAAqE;IACrE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;oFACgF;IAChF,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC;;iEAE6D;IAC7D,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAsCD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAqM9C,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { cn as e, formatCompactCurrency as t, formatNumber as n } from "../utils/helpers.js";
2
2
  import { StatusBadge as r } from "./StatusBadge.js";
3
3
  import { useState as i } from "react";
4
- import { Bath as a, Bed as o, Check as s, GitCompare as c, Heart as l, Home as u, MapPin as d, ShieldCheck as f, Square as p } from "lucide-react";
5
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
4
+ import { BadgeCheck as a, Bath as o, Bed as s, Check as c, GitCompare as l, Heart as u, Home as d, MapPin as f, ShieldCheck as p, Square as m } from "lucide-react";
5
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
6
6
  //#region src/housingvista/components/PropertyCard.tsx
7
- var g = {
7
+ var _ = {
8
8
  available: "success",
9
9
  active: "success",
10
10
  listed: "success",
@@ -20,137 +20,147 @@ var g = {
20
20
  off_market: "muted",
21
21
  "off market": "muted",
22
22
  draft: "muted"
23
- }, _ = () => /* @__PURE__ */ h("div", {
23
+ }, v = () => /* @__PURE__ */ g("div", {
24
24
  className: "relative flex h-full w-full items-center justify-center overflow-hidden bg-gradient-to-br from-[var(--color-action-primary-bg)]/15 via-bg-sunken to-[var(--color-accent-blue)]/15",
25
- children: [/* @__PURE__ */ m("div", {
25
+ children: [/* @__PURE__ */ h("div", {
26
26
  className: "absolute inset-0 opacity-[0.35]",
27
27
  style: {
28
28
  backgroundImage: "radial-gradient(circle at 1px 1px, var(--color-border-seam, rgba(120,120,120,.25)) 1px, transparent 0)",
29
29
  backgroundSize: "16px 16px"
30
30
  }
31
- }), /* @__PURE__ */ h("div", {
31
+ }), /* @__PURE__ */ g("div", {
32
32
  className: "relative flex flex-col items-center gap-2 text-text-secondary/70",
33
- children: [/* @__PURE__ */ m(u, { className: "h-9 w-9" }), /* @__PURE__ */ m("span", {
33
+ children: [/* @__PURE__ */ h(d, { className: "h-9 w-9" }), /* @__PURE__ */ h("span", {
34
34
  className: "text-[11px] font-medium tracking-wide",
35
35
  children: "HousingVista"
36
36
  })]
37
37
  })]
38
- }), v = ({ title: u, price: v, priceType: y, pricePeriod: b, currency: x = "USD", location: S, bedrooms: C, bathrooms: w, area: T, imageUrl: E, status: D, type: O, onClick: k, className: A, isShortlisted: j, onToggleShortlist: M, reraStatus: N, isCompareSelected: P, onToggleCompare: F }) => {
39
- let [I, L] = i(!1), R = !!E && !I, z = t(v, x), B = y === "rent" ? `${z}${b ? `/${b.replace("ly", "")}` : "/mo"}` : z, V = g[D.toLowerCase()] ?? "default";
40
- return /* @__PURE__ */ h("div", {
41
- className: e("group flex flex-col overflow-hidden rounded-card border border-border-seam bg-bg-surface shadow-elevation-1 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-elevation-2 focus-within:border-border-strong", k && "cursor-pointer", A),
42
- onClick: k,
38
+ }), y = ({ title: d, price: y, priceType: b, pricePeriod: x, currency: S = "USD", location: C, bedrooms: w, bathrooms: T, area: E, imageUrl: D, status: O, type: k, onClick: A, className: j, isShortlisted: M, onToggleShortlist: N, reraStatus: P, verificationStatus: F, isCompareSelected: I, onToggleCompare: L }) => {
39
+ let [R, z] = i(!1), B = !!D && !R, V = t(y, S), H = b === "rent" ? `${V}${x ? `/${x.replace("ly", "")}` : "/mo"}` : V, U = _[O.toLowerCase()] ?? "default";
40
+ return /* @__PURE__ */ g("div", {
41
+ className: e("group flex flex-col overflow-hidden rounded-card border border-border-seam bg-bg-surface shadow-elevation-1 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-elevation-2 focus-within:border-border-strong", A && "cursor-pointer", j),
42
+ onClick: A,
43
43
  onKeyDown: (e) => {
44
- k && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), k());
44
+ A && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), A());
45
45
  },
46
- role: k ? "button" : void 0,
47
- tabIndex: k ? 0 : void 0,
48
- "aria-label": k ? `View ${u}` : void 0,
49
- children: [/* @__PURE__ */ h("div", {
46
+ role: A ? "button" : void 0,
47
+ tabIndex: A ? 0 : void 0,
48
+ "aria-label": A ? `View ${d}` : void 0,
49
+ children: [/* @__PURE__ */ g("div", {
50
50
  className: "relative aspect-[16/10] shrink-0 overflow-hidden",
51
51
  children: [
52
- R ? /* @__PURE__ */ m("img", {
53
- src: E,
54
- alt: u,
52
+ B ? /* @__PURE__ */ h("img", {
53
+ src: D,
54
+ alt: d,
55
55
  loading: "lazy",
56
- onError: () => L(!0),
56
+ onError: () => z(!0),
57
57
  className: "h-full w-full object-cover transition-[filter] duration-300 group-hover:brightness-[1.02]"
58
- }) : /* @__PURE__ */ m(_, {}),
59
- /* @__PURE__ */ m("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-bg-overlay/75 to-transparent" }),
60
- /* @__PURE__ */ m("div", {
58
+ }) : /* @__PURE__ */ h(v, {}),
59
+ /* @__PURE__ */ h("div", { className: "pointer-events-none absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-bg-overlay/75 to-transparent" }),
60
+ /* @__PURE__ */ h("div", {
61
61
  className: "absolute left-3 top-3",
62
- children: /* @__PURE__ */ m(r, {
63
- label: D,
64
- variant: V,
62
+ children: /* @__PURE__ */ h(r, {
63
+ label: O,
64
+ variant: U,
65
65
  dot: !0
66
66
  })
67
67
  }),
68
- M && /* @__PURE__ */ m("button", {
68
+ N && /* @__PURE__ */ h("button", {
69
69
  type: "button",
70
70
  onClick: (e) => {
71
- e.stopPropagation(), M();
71
+ e.stopPropagation(), N();
72
72
  },
73
- className: e("absolute right-3 top-3 rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", j ? "text-status-error-text" : "text-text-secondary"),
74
- "aria-pressed": j,
75
- "aria-label": j ? "Remove from shortlist" : "Save to shortlist",
76
- children: /* @__PURE__ */ m(l, { className: e("h-4 w-4", j && "fill-current") })
73
+ className: e("absolute right-3 top-3 rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", M ? "text-status-error-text" : "text-text-secondary"),
74
+ "aria-pressed": M,
75
+ "aria-label": M ? "Remove from shortlist" : "Save to shortlist",
76
+ children: /* @__PURE__ */ h(u, { className: e("h-4 w-4", M && "fill-current") })
77
77
  }),
78
- F && /* @__PURE__ */ m("button", {
78
+ L && /* @__PURE__ */ h("button", {
79
79
  type: "button",
80
80
  onClick: (e) => {
81
- e.stopPropagation(), F();
81
+ e.stopPropagation(), L();
82
82
  },
83
- className: e("absolute top-14 right-3 rounded-full p-2 shadow-elevation-1 backdrop-blur-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", P ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-surface/85 text-text-secondary hover:bg-bg-surface"),
84
- "aria-pressed": P,
85
- "aria-label": P ? "Remove from comparison" : "Add to comparison",
86
- children: m(P ? s : c, { className: "h-4 w-4" })
83
+ className: e("absolute top-14 right-3 rounded-full p-2 shadow-elevation-1 backdrop-blur-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]", I ? "bg-action-primary-bg text-action-primary-text" : "bg-bg-surface/85 text-text-secondary hover:bg-bg-surface"),
84
+ "aria-pressed": I,
85
+ "aria-label": I ? "Remove from comparison" : "Add to comparison",
86
+ children: h(I ? c : l, { className: "h-4 w-4" })
87
87
  }),
88
- /* @__PURE__ */ m("div", {
88
+ /* @__PURE__ */ h("div", {
89
89
  className: "absolute bottom-3 left-3",
90
- children: /* @__PURE__ */ m("span", {
90
+ children: /* @__PURE__ */ h("span", {
91
91
  className: "text-lg font-bold text-text-inverse drop-shadow-sm",
92
- children: B
92
+ children: H
93
93
  })
94
94
  }),
95
- /* @__PURE__ */ m("div", {
95
+ /* @__PURE__ */ h("div", {
96
96
  className: "absolute bottom-3 right-3",
97
- children: /* @__PURE__ */ m("span", {
97
+ children: /* @__PURE__ */ h("span", {
98
98
  className: "rounded-md bg-bg-surface/85 px-2 py-1 text-xs font-medium capitalize text-text-primary backdrop-blur-sm",
99
- children: O
99
+ children: k
100
100
  })
101
101
  })
102
102
  ]
103
- }), /* @__PURE__ */ h("div", {
103
+ }), /* @__PURE__ */ g("div", {
104
104
  className: "flex flex-1 flex-col p-4",
105
105
  children: [
106
- /* @__PURE__ */ h("div", {
106
+ /* @__PURE__ */ g("div", {
107
107
  className: "flex items-center gap-1.5",
108
108
  children: [
109
- /* @__PURE__ */ m("h3", {
109
+ /* @__PURE__ */ h("h3", {
110
110
  className: "truncate text-sm font-semibold text-text-primary",
111
- children: u
111
+ children: d
112
112
  }),
113
- N === "verified" && /* @__PURE__ */ h("span", {
113
+ P === "verified" && /* @__PURE__ */ g("span", {
114
114
  className: "inline-flex shrink-0 items-center gap-1 rounded-full bg-status-success-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-success-text",
115
115
  title: "RERA verified",
116
- children: [/* @__PURE__ */ m(f, { className: "h-3 w-3" }), "RERA"]
116
+ children: [/* @__PURE__ */ h(p, { className: "h-3 w-3" }), "RERA"]
117
117
  }),
118
- N === "pending" && /* @__PURE__ */ m("span", {
118
+ P === "pending" && /* @__PURE__ */ h("span", {
119
119
  className: "inline-flex shrink-0 items-center gap-1 rounded-full bg-status-warning-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-warning-text",
120
120
  title: "RERA verification pending",
121
121
  children: "RERA pending"
122
+ }),
123
+ F === "verified" && /* @__PURE__ */ g("span", {
124
+ className: "inline-flex shrink-0 items-center gap-1 rounded-full bg-status-success-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-success-text",
125
+ title: "Listing verified",
126
+ children: [/* @__PURE__ */ h(a, { className: "h-3 w-3" }), "Verified"]
127
+ }),
128
+ F === "rejected" && /* @__PURE__ */ h("span", {
129
+ className: "inline-flex shrink-0 items-center gap-1 rounded-full bg-status-error-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-error-text",
130
+ title: "Listing verification rejected",
131
+ children: "Verification rejected"
122
132
  })
123
133
  ]
124
134
  }),
125
- /* @__PURE__ */ h("div", {
135
+ /* @__PURE__ */ g("div", {
126
136
  className: "mt-1 flex items-center gap-1 text-text-secondary",
127
- children: [/* @__PURE__ */ m(d, { className: "h-3.5 w-3.5 shrink-0" }), /* @__PURE__ */ m("span", {
137
+ children: [/* @__PURE__ */ h(f, { className: "h-3.5 w-3.5 shrink-0" }), /* @__PURE__ */ h("span", {
128
138
  className: "truncate text-xs",
129
- children: S
139
+ children: C
130
140
  })]
131
141
  }),
132
- /* @__PURE__ */ h("div", {
142
+ /* @__PURE__ */ g("div", {
133
143
  className: "mt-3 flex items-center gap-4 border-t border-border-subtle pt-3",
134
144
  children: [
135
- C != null && /* @__PURE__ */ h("div", {
145
+ w != null && /* @__PURE__ */ g("div", {
136
146
  className: "flex items-center gap-1.5 text-xs text-text-secondary",
137
- children: [/* @__PURE__ */ m(o, { className: "h-4 w-4" }), /* @__PURE__ */ h("span", { children: [
138
- C,
147
+ children: [/* @__PURE__ */ h(s, { className: "h-4 w-4" }), /* @__PURE__ */ g("span", { children: [
148
+ w,
139
149
  " ",
140
- C === 1 ? "Bed" : "Beds"
150
+ w === 1 ? "Bed" : "Beds"
141
151
  ] })]
142
152
  }),
143
- w != null && /* @__PURE__ */ h("div", {
153
+ T != null && /* @__PURE__ */ g("div", {
144
154
  className: "flex items-center gap-1.5 text-xs text-text-secondary",
145
- children: [/* @__PURE__ */ m(a, { className: "h-4 w-4" }), /* @__PURE__ */ h("span", { children: [
146
- w,
155
+ children: [/* @__PURE__ */ h(o, { className: "h-4 w-4" }), /* @__PURE__ */ g("span", { children: [
156
+ T,
147
157
  " ",
148
- w === 1 ? "Bath" : "Baths"
158
+ T === 1 ? "Bath" : "Baths"
149
159
  ] })]
150
160
  }),
151
- /* @__PURE__ */ h("div", {
161
+ /* @__PURE__ */ g("div", {
152
162
  className: "flex items-center gap-1.5 text-xs text-text-secondary",
153
- children: [/* @__PURE__ */ m(p, { className: "h-4 w-4" }), /* @__PURE__ */ h("span", { children: [n(T), " sq ft"] })]
163
+ children: [/* @__PURE__ */ h(m, { className: "h-4 w-4" }), /* @__PURE__ */ g("span", { children: [n(E), " sq ft"] })]
154
164
  })
155
165
  ]
156
166
  })
@@ -159,6 +169,6 @@ var g = {
159
169
  });
160
170
  };
161
171
  //#endregion
162
- export { v as PropertyCard };
172
+ export { y as PropertyCard };
163
173
 
164
174
  //# sourceMappingURL=PropertyCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyCard.js","names":[],"sources":["../../../src/housingvista/components/PropertyCard.tsx"],"sourcesContent":["import { type FC, useState } from 'react';\nimport { MapPin, Bed, Bath, Square, Heart, Home, ShieldCheck, GitCompare, Check } from 'lucide-react';\nimport { cn, formatNumber, formatCompactCurrency } from '../utils/helpers';\nimport { StatusBadge } from './StatusBadge';\nimport type { ReraVerificationStatus } from '../types';\n\ninterface PropertyCardProps {\n id: string;\n title: string;\n price: number;\n priceType: 'sale' | 'rent';\n pricePeriod?: string;\n /** ISO currency code for the price (defaults to USD). */\n currency?: string;\n location: string;\n bedrooms?: number;\n bathrooms?: number;\n area: number;\n imageUrl?: string;\n status: string;\n type: string;\n onClick?: () => void;\n className?: string;\n /** When provided the heart becomes a controlled shortlist toggle. */\n isShortlisted?: boolean;\n onToggleShortlist?: () => void;\n /** RERA (India) verification workflow status — badge shown for\n * `verified`/`pending`, omitted for `not_applicable`/`rejected` (BOFF-4132). */\n reraStatus?: ReraVerificationStatus;\n /** When provided, renders a compare-selection toggle (BOFF-3931). */\n isCompareSelected?: boolean;\n onToggleCompare?: () => void;\n}\n\nconst statusVariantMap: Record<string, 'success' | 'warning' | 'error' | 'info' | 'default' | 'muted'> = {\n available: 'success',\n active: 'success',\n listed: 'success',\n for_sale: 'success',\n 'for sale': 'success',\n for_rent: 'info',\n 'for rent': 'info',\n pending: 'warning',\n 'under contract': 'warning',\n 'under offer': 'warning',\n sold: 'error',\n rented: 'error',\n off_market: 'muted',\n 'off market': 'muted',\n draft: 'muted',\n};\n\n/** Tasteful branded fallback shown when a listing has no files-svc image. */\nconst PropertyPlaceholder: FC = () => (\n <div className=\"relative flex h-full w-full items-center justify-center overflow-hidden bg-gradient-to-br from-[var(--color-action-primary-bg)]/15 via-bg-sunken to-[var(--color-accent-blue)]/15\">\n <div\n className=\"absolute inset-0 opacity-[0.35]\"\n style={{\n backgroundImage:\n 'radial-gradient(circle at 1px 1px, var(--color-border-seam, rgba(120,120,120,.25)) 1px, transparent 0)',\n backgroundSize: '16px 16px',\n }}\n />\n <div className=\"relative flex flex-col items-center gap-2 text-text-secondary/70\">\n <Home className=\"h-9 w-9\" />\n <span className=\"text-[11px] font-medium tracking-wide\">HousingVista</span>\n </div>\n </div>\n);\n\nexport const PropertyCard: FC<PropertyCardProps> = ({\n title,\n price,\n priceType,\n pricePeriod,\n currency = 'USD',\n location,\n bedrooms,\n bathrooms,\n area,\n imageUrl,\n status,\n type,\n onClick,\n className,\n isShortlisted,\n onToggleShortlist,\n reraStatus,\n isCompareSelected,\n onToggleCompare,\n}) => {\n const [imgFailed, setImgFailed] = useState(false);\n const showImage = Boolean(imageUrl) && !imgFailed;\n\n const compactPrice = formatCompactCurrency(price, currency);\n const priceDisplay =\n priceType === 'rent' ? `${compactPrice}${pricePeriod ? `/${pricePeriod.replace('ly', '')}` : '/mo'}` : compactPrice;\n\n const badgeVariant = statusVariantMap[status.toLowerCase()] ?? 'default';\n\n return (\n <div\n className={cn(\n 'group flex flex-col overflow-hidden rounded-card border border-border-seam bg-bg-surface shadow-elevation-1 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-elevation-2 focus-within:border-border-strong',\n onClick && 'cursor-pointer',\n className\n )}\n onClick={onClick}\n onKeyDown={(e) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n }}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n aria-label={onClick ? `View ${title}` : undefined}\n >\n {/* Image Section */}\n <div className=\"relative aspect-[16/10] shrink-0 overflow-hidden\">\n {showImage ? (\n <img\n src={imageUrl}\n alt={title}\n loading=\"lazy\"\n onError={() => setImgFailed(true)}\n className=\"h-full w-full object-cover transition-[filter] duration-300 group-hover:brightness-[1.02]\"\n />\n ) : (\n <PropertyPlaceholder />\n )}\n\n {/* Gradient scrim so overlaid text stays legible over any photo */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-bg-overlay/75 to-transparent\" />\n\n {/* Status pill (top-left) */}\n <div className=\"absolute left-3 top-3\">\n <StatusBadge label={status} variant={badgeVariant} dot />\n </div>\n\n {/* Shortlist heart (top-right) */}\n {onToggleShortlist && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleShortlist();\n }}\n className={cn(\n 'absolute right-3 top-3 rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]',\n isShortlisted ? 'text-status-error-text' : 'text-text-secondary'\n )}\n aria-pressed={isShortlisted}\n aria-label={isShortlisted ? 'Remove from shortlist' : 'Save to shortlist'}\n >\n <Heart className={cn('h-4 w-4', isShortlisted && 'fill-current')} />\n </button>\n )}\n\n {/* Compare-selection toggle (bottom of the top-right stack, BOFF-3931) */}\n {onToggleCompare && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleCompare();\n }}\n className={cn(\n 'absolute top-14 right-3 rounded-full p-2 shadow-elevation-1 backdrop-blur-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]',\n isCompareSelected\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface/85 text-text-secondary hover:bg-bg-surface'\n )}\n aria-pressed={isCompareSelected}\n aria-label={isCompareSelected ? 'Remove from comparison' : 'Add to comparison'}\n >\n {isCompareSelected ? <Check className=\"h-4 w-4\" /> : <GitCompare className=\"h-4 w-4\" />}\n </button>\n )}\n\n {/* Price overlay (bottom-left) */}\n <div className=\"absolute bottom-3 left-3\">\n <span className=\"text-lg font-bold text-text-inverse drop-shadow-sm\">{priceDisplay}</span>\n </div>\n\n {/* Category chip (bottom-right) */}\n <div className=\"absolute bottom-3 right-3\">\n <span className=\"rounded-md bg-bg-surface/85 px-2 py-1 text-xs font-medium capitalize text-text-primary backdrop-blur-sm\">\n {type}\n </span>\n </div>\n </div>\n\n {/* Content Section */}\n <div className=\"flex flex-1 flex-col p-4\">\n {/* Title */}\n <div className=\"flex items-center gap-1.5\">\n <h3 className=\"truncate text-sm font-semibold text-text-primary\">{title}</h3>\n {reraStatus === 'verified' && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-status-success-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-success-text\"\n title=\"RERA verified\"\n >\n <ShieldCheck className=\"h-3 w-3\" />\n RERA\n </span>\n )}\n {reraStatus === 'pending' && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-status-warning-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-warning-text\"\n title=\"RERA verification pending\"\n >\n RERA pending\n </span>\n )}\n </div>\n\n {/* Location */}\n <div className=\"mt-1 flex items-center gap-1 text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"truncate text-xs\">{location}</span>\n </div>\n\n {/* Specs Row */}\n <div className=\"mt-3 flex items-center gap-4 border-t border-border-subtle pt-3\">\n {bedrooms != null && (\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Bed className=\"h-4 w-4\" />\n <span>\n {bedrooms} {bedrooms === 1 ? 'Bed' : 'Beds'}\n </span>\n </div>\n )}\n {bathrooms != null && (\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Bath className=\"h-4 w-4\" />\n <span>\n {bathrooms} {bathrooms === 1 ? 'Bath' : 'Baths'}\n </span>\n </div>\n )}\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Square className=\"h-4 w-4\" />\n <span>{formatNumber(area)} sq ft</span>\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"PropertyCard.js","names":[],"sources":["../../../src/housingvista/components/PropertyCard.tsx"],"sourcesContent":["import { type FC, useState } from 'react';\nimport { MapPin, Bed, Bath, Square, Heart, Home, ShieldCheck, BadgeCheck, GitCompare, Check } from 'lucide-react';\nimport { cn, formatNumber, formatCompactCurrency } from '../utils/helpers';\nimport { StatusBadge } from './StatusBadge';\nimport type { ReraVerificationStatus, VerificationStatus } from '../types';\n\ninterface PropertyCardProps {\n id: string;\n title: string;\n price: number;\n priceType: 'sale' | 'rent';\n pricePeriod?: string;\n /** ISO currency code for the price (defaults to USD). */\n currency?: string;\n location: string;\n bedrooms?: number;\n bathrooms?: number;\n area: number;\n imageUrl?: string;\n status: string;\n type: string;\n onClick?: () => void;\n className?: string;\n /** When provided the heart becomes a controlled shortlist toggle. */\n isShortlisted?: boolean;\n onToggleShortlist?: () => void;\n /** RERA (India) verification workflow status — badge shown for\n * `verified`/`pending`, omitted for `not_applicable`/`rejected` (BOFF-4132). */\n reraStatus?: ReraVerificationStatus;\n /** Generic listing verification status — badge shown for `verified`,\n * a muted marker for `rejected`; `pending` is the default state and\n * stays silent (same rule as the detail page). BOFF-8088. */\n verificationStatus?: VerificationStatus;\n /** When provided, renders a compare-selection toggle (BOFF-3931). */\n isCompareSelected?: boolean;\n onToggleCompare?: () => void;\n}\n\nconst statusVariantMap: Record<string, 'success' | 'warning' | 'error' | 'info' | 'default' | 'muted'> = {\n available: 'success',\n active: 'success',\n listed: 'success',\n for_sale: 'success',\n 'for sale': 'success',\n for_rent: 'info',\n 'for rent': 'info',\n pending: 'warning',\n 'under contract': 'warning',\n 'under offer': 'warning',\n sold: 'error',\n rented: 'error',\n off_market: 'muted',\n 'off market': 'muted',\n draft: 'muted',\n};\n\n/** Tasteful branded fallback shown when a listing has no files-svc image. */\nconst PropertyPlaceholder: FC = () => (\n <div className=\"relative flex h-full w-full items-center justify-center overflow-hidden bg-gradient-to-br from-[var(--color-action-primary-bg)]/15 via-bg-sunken to-[var(--color-accent-blue)]/15\">\n <div\n className=\"absolute inset-0 opacity-[0.35]\"\n style={{\n backgroundImage:\n 'radial-gradient(circle at 1px 1px, var(--color-border-seam, rgba(120,120,120,.25)) 1px, transparent 0)',\n backgroundSize: '16px 16px',\n }}\n />\n <div className=\"relative flex flex-col items-center gap-2 text-text-secondary/70\">\n <Home className=\"h-9 w-9\" />\n <span className=\"text-[11px] font-medium tracking-wide\">HousingVista</span>\n </div>\n </div>\n);\n\nexport const PropertyCard: FC<PropertyCardProps> = ({\n title,\n price,\n priceType,\n pricePeriod,\n currency = 'USD',\n location,\n bedrooms,\n bathrooms,\n area,\n imageUrl,\n status,\n type,\n onClick,\n className,\n isShortlisted,\n onToggleShortlist,\n reraStatus,\n verificationStatus,\n isCompareSelected,\n onToggleCompare,\n}) => {\n const [imgFailed, setImgFailed] = useState(false);\n const showImage = Boolean(imageUrl) && !imgFailed;\n\n const compactPrice = formatCompactCurrency(price, currency);\n const priceDisplay =\n priceType === 'rent' ? `${compactPrice}${pricePeriod ? `/${pricePeriod.replace('ly', '')}` : '/mo'}` : compactPrice;\n\n const badgeVariant = statusVariantMap[status.toLowerCase()] ?? 'default';\n\n return (\n <div\n className={cn(\n 'group flex flex-col overflow-hidden rounded-card border border-border-seam bg-bg-surface shadow-elevation-1 transition-[box-shadow,border-color] hover:border-border-strong hover:shadow-elevation-2 focus-within:border-border-strong',\n onClick && 'cursor-pointer',\n className\n )}\n onClick={onClick}\n onKeyDown={(e) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n }}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n aria-label={onClick ? `View ${title}` : undefined}\n >\n {/* Image Section */}\n <div className=\"relative aspect-[16/10] shrink-0 overflow-hidden\">\n {showImage ? (\n <img\n src={imageUrl}\n alt={title}\n loading=\"lazy\"\n onError={() => setImgFailed(true)}\n className=\"h-full w-full object-cover transition-[filter] duration-300 group-hover:brightness-[1.02]\"\n />\n ) : (\n <PropertyPlaceholder />\n )}\n\n {/* Gradient scrim so overlaid text stays legible over any photo */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-24 bg-gradient-to-t from-bg-overlay/75 to-transparent\" />\n\n {/* Status pill (top-left) */}\n <div className=\"absolute left-3 top-3\">\n <StatusBadge label={status} variant={badgeVariant} dot />\n </div>\n\n {/* Shortlist heart (top-right) */}\n {onToggleShortlist && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleShortlist();\n }}\n className={cn(\n 'absolute right-3 top-3 rounded-full bg-bg-surface/85 p-2 shadow-elevation-1 backdrop-blur-sm transition-colors hover:bg-bg-surface focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]',\n isShortlisted ? 'text-status-error-text' : 'text-text-secondary'\n )}\n aria-pressed={isShortlisted}\n aria-label={isShortlisted ? 'Remove from shortlist' : 'Save to shortlist'}\n >\n <Heart className={cn('h-4 w-4', isShortlisted && 'fill-current')} />\n </button>\n )}\n\n {/* Compare-selection toggle (bottom of the top-right stack, BOFF-3931) */}\n {onToggleCompare && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleCompare();\n }}\n className={cn(\n 'absolute top-14 right-3 rounded-full p-2 shadow-elevation-1 backdrop-blur-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]',\n isCompareSelected\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-surface/85 text-text-secondary hover:bg-bg-surface'\n )}\n aria-pressed={isCompareSelected}\n aria-label={isCompareSelected ? 'Remove from comparison' : 'Add to comparison'}\n >\n {isCompareSelected ? <Check className=\"h-4 w-4\" /> : <GitCompare className=\"h-4 w-4\" />}\n </button>\n )}\n\n {/* Price overlay (bottom-left) */}\n <div className=\"absolute bottom-3 left-3\">\n <span className=\"text-lg font-bold text-text-inverse drop-shadow-sm\">{priceDisplay}</span>\n </div>\n\n {/* Category chip (bottom-right) */}\n <div className=\"absolute bottom-3 right-3\">\n <span className=\"rounded-md bg-bg-surface/85 px-2 py-1 text-xs font-medium capitalize text-text-primary backdrop-blur-sm\">\n {type}\n </span>\n </div>\n </div>\n\n {/* Content Section */}\n <div className=\"flex flex-1 flex-col p-4\">\n {/* Title */}\n <div className=\"flex items-center gap-1.5\">\n <h3 className=\"truncate text-sm font-semibold text-text-primary\">{title}</h3>\n {reraStatus === 'verified' && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-status-success-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-success-text\"\n title=\"RERA verified\"\n >\n <ShieldCheck className=\"h-3 w-3\" />\n RERA\n </span>\n )}\n {reraStatus === 'pending' && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-status-warning-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-warning-text\"\n title=\"RERA verification pending\"\n >\n RERA pending\n </span>\n )}\n {verificationStatus === 'verified' && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-status-success-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-success-text\"\n title=\"Listing verified\"\n >\n <BadgeCheck className=\"h-3 w-3\" />\n Verified\n </span>\n )}\n {verificationStatus === 'rejected' && (\n <span\n className=\"inline-flex shrink-0 items-center gap-1 rounded-full bg-status-error-bg-subtle px-1.5 py-0.5 text-[10px] font-semibold text-status-error-text\"\n title=\"Listing verification rejected\"\n >\n Verification rejected\n </span>\n )}\n </div>\n\n {/* Location */}\n <div className=\"mt-1 flex items-center gap-1 text-text-secondary\">\n <MapPin className=\"h-3.5 w-3.5 shrink-0\" />\n <span className=\"truncate text-xs\">{location}</span>\n </div>\n\n {/* Specs Row */}\n <div className=\"mt-3 flex items-center gap-4 border-t border-border-subtle pt-3\">\n {bedrooms != null && (\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Bed className=\"h-4 w-4\" />\n <span>\n {bedrooms} {bedrooms === 1 ? 'Bed' : 'Beds'}\n </span>\n </div>\n )}\n {bathrooms != null && (\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Bath className=\"h-4 w-4\" />\n <span>\n {bathrooms} {bathrooms === 1 ? 'Bath' : 'Baths'}\n </span>\n </div>\n )}\n <div className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <Square className=\"h-4 w-4\" />\n <span>{formatNumber(area)} sq ft</span>\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyMapView.d.ts","sourceRoot":"","sources":["../../../../src/housingvista/components/maps/PropertyMapView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6B5C,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC1D;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,8GAS7B,oBAAoB,gCAmLtB,CAAC"}
1
+ {"version":3,"file":"PropertyMapView.d.ts","sourceRoot":"","sources":["../../../../src/housingvista/components/maps/PropertyMapView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA6B5C,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,6FAA6F;IAC7F,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC1D;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,8GAS7B,oBAAoB,gCAyLtB,CAAC"}