@burdenoff/microfe-housingvista 2026.1023.1 → 2026.1023.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/housingvista/hooks/index.d.ts +3 -1
- package/dist/housingvista/hooks/index.d.ts.map +1 -1
- package/dist/housingvista/hooks/index.js.map +1 -1
- package/dist/housingvista/pages/amc/AMCManagementPage.d.ts.map +1 -1
- package/dist/housingvista/pages/amc/AMCManagementPage.js +184 -174
- package/dist/housingvista/pages/amc/AMCManagementPage.js.map +1 -1
- package/dist/housingvista/pages/amc/AmcContractActionDialogs.d.ts.map +1 -1
- package/dist/housingvista/pages/amc/AmcContractActionDialogs.js +3 -4
- package/dist/housingvista/pages/amc/AmcContractActionDialogs.js.map +1 -1
- package/dist/housingvista/pages/amc/AmcContractFormDialog.d.ts +2 -0
- package/dist/housingvista/pages/amc/AmcContractFormDialog.d.ts.map +1 -1
- package/dist/housingvista/pages/amc/AmcContractFormDialog.js +110 -84
- package/dist/housingvista/pages/amc/AmcContractFormDialog.js.map +1 -1
- package/dist/housingvista/pages/amc/amcDates.d.ts +16 -0
- package/dist/housingvista/pages/amc/amcDates.d.ts.map +1 -1
- package/dist/housingvista/pages/amc/amcDates.js +19 -5
- package/dist/housingvista/pages/amc/amcDates.js.map +1 -1
- package/dist/housingvista/pages/amc/useAmcManagement.d.ts.map +1 -1
- package/dist/housingvista/pages/amc/useAmcManagement.js +15 -16
- package/dist/housingvista/pages/amc/useAmcManagement.js.map +1 -1
- package/package.json +1 -1
|
@@ -958,7 +958,9 @@ export declare const useDeleteAsset: () => {
|
|
|
958
958
|
deleteAsset: (id: string) => Promise<boolean>;
|
|
959
959
|
loading: boolean;
|
|
960
960
|
};
|
|
961
|
-
export type UpdateAmcContractInput = Partial<CreateAmcContractInput
|
|
961
|
+
export type UpdateAmcContractInput = Partial<Omit<CreateAmcContractInput, 'nextServiceDate'>> & {
|
|
962
|
+
nextServiceDate?: string | null;
|
|
963
|
+
};
|
|
962
964
|
export declare const useUpdateAmcContract: () => {
|
|
963
965
|
updateAmcContract: (id: string, input: UpdateAmcContractInput) => Promise<void>;
|
|
964
966
|
loading: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/housingvista/hooks/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/housingvista/hooks/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/housingvista/hooks/index.ts"],"sourcesContent":["/**\n * HousingVista data hooks — real GraphQL against the wspace gateway via Apollo.\n *\n * Every read maps the `housingvista*` query contract to the MFE domain types in\n * `../types`. Every write wraps a `housingvista*` mutation and (where it changes\n * a list the UI shows) refetches the affected query so the cache stays honest.\n * No `any`, no mock data — hooks that have no backing query return an explicit\n * `unsupported` empty-state instead of fabricating rows.\n * @module housingvista\n */\n\nimport { gql, type DocumentNode } from '@apollo/client';\nimport { useQuery, useMutation, useLazyQuery, useApolloClient } from '@apollo/client/react';\nimport { useEffect, useMemo, useState, useCallback, useRef } from 'react';\nimport type {\n Property,\n Transaction,\n Investment,\n DashboardStats,\n DashboardTrends,\n RecentActivity,\n RentalUnit,\n Asset,\n AMCContract,\n MarketplaceService,\n VerificationItem,\n LegalService,\n HomeLoan,\n MarketTrend,\n AreaInsight,\n AnalyticsChartData,\n AnalyticsPeriod,\n PropertyType,\n PropertyStatus,\n ReraVerificationStatus,\n VerificationStatus,\n} from '../types';\n\n// ---------------------------------------------------------------------------\n// Shared input shapes (mirror HousingVista*Input from the subgraph schema)\n// ---------------------------------------------------------------------------\n\nexport type PaginationInput = {\n limit?: number;\n offset?: number;\n};\n\nexport type PropertyGeoBoundsInput = {\n neLat: number;\n neLng: number;\n swLat: number;\n swLng: number;\n};\n\nexport type PropertyGeoCenterInput = {\n latitude: number;\n longitude: number;\n radiusKm: number;\n};\n\nexport type PropertyFilterInput = {\n search?: string;\n status?: PropertyStatus;\n type?: PropertyType;\n city?: string;\n category?: string;\n priceMin?: number;\n priceMax?: number;\n bedroomsMin?: number;\n amenities?: string[];\n reraVerificationStatus?: ReraVerificationStatus;\n bounds?: PropertyGeoBoundsInput;\n center?: PropertyGeoCenterInput;\n};\n\nexport type TransactionFilterInput = {\n search?: string;\n status?: string;\n type?: string;\n propertyId?: string;\n};\n\nexport type LeaseFilterInput = {\n status?: string;\n type?: string;\n rentalUnitId?: string;\n};\n\nexport type InvestmentFilterInput = {\n search?: string;\n status?: string;\n investmentType?: string;\n riskLevel?: string;\n propertyId?: string;\n};\n\nexport type RentalUnitFilterInput = {\n search?: string;\n status?: string;\n paymentStatus?: string;\n propertyId?: string;\n};\n\nexport type AssetFilterInput = {\n search?: string;\n status?: string;\n type?: string;\n category?: string;\n};\n\nexport type AmcContractFilterInput = {\n search?: string;\n status?: string;\n propertyId?: string;\n};\n\nexport type MarketplaceServiceFilterInput = {\n search?: string;\n category?: string;\n verified?: boolean;\n};\n\nexport type LegalServiceFilterInput = {\n search?: string;\n status?: string;\n category?: string;\n};\n\nexport type VerificationItemFilterInput = {\n search?: string;\n status?: string;\n priority?: string;\n entityType?: string;\n};\n\nexport type CreateVerificationItemInput = {\n entityLabel: string;\n entityType: string;\n entityId?: string;\n priority: string;\n notes?: string;\n documentFileIds?: string[];\n};\n\nexport type ViewingFilterInput = {\n search?: string;\n status?: string;\n type?: string;\n propertyId?: string;\n};\n\nexport type OfferFilterInput = {\n status?: string;\n propertyId?: string;\n};\n\nexport type RentalApplicationFilterInput = {\n search?: string;\n status?: string;\n rentalUnitId?: string;\n};\n\nexport type MaintenanceRequestFilterInput = {\n search?: string;\n status?: string;\n priority?: 'low' | 'medium' | 'high';\n category?: string;\n propertyId?: string;\n rentalUnitId?: string;\n};\n\n/** Options accepted by every server-filtered list hook. */\nexport interface ListOptions<TFilter> {\n filter?: TFilter;\n pagination?: PaginationInput;\n}\n\nconst DEFAULT_LIST_PAGINATION: Required<PaginationInput> = { limit: 50, offset: 0 };\n\nconst getPaginationVariables = (pagination: PaginationInput = DEFAULT_LIST_PAGINATION) => ({\n pagination: {\n limit: pagination.limit ?? DEFAULT_LIST_PAGINATION.limit,\n offset: pagination.offset ?? DEFAULT_LIST_PAGINATION.offset,\n },\n});\n\n// ---------------------------------------------------------------------------\n// Query documents\n// ---------------------------------------------------------------------------\n\nconst GET_DASHBOARD_STATS = gql`\n query GetDashboardStats {\n housingvistaDashboardStats {\n totalProperties\n totalValue\n occupancyRate\n monthlyRevenue\n activeTransactions\n pendingVerifications\n totalInvestments\n totalPortfolioValue\n investmentReturns\n totalTenants\n maintenanceRequests\n unreadMessages\n upcomingViewings\n trends {\n totalProperties {\n label\n value\n }\n monthlyRevenue {\n label\n value\n }\n occupancyRate {\n label\n value\n }\n activeTransactions {\n label\n value\n }\n }\n }\n }\n`;\n\nconst PROPERTY_FIELDS = gql`\n fragment PropertyFields on HousingVistaProperty {\n id\n title\n description\n type\n status\n category\n verificationStatus\n reraRegistrationNo\n reraAuthority\n reraApprovalDate\n reraUrl\n reraVerificationStatus\n imageUrl\n createdAt\n updatedAt\n price {\n amount\n currency\n type\n period\n negotiable\n pricePerSqft\n }\n location {\n address\n city\n state\n country\n pincode\n coordinates {\n latitude\n longitude\n }\n neighborhood\n landmarks\n }\n specifications {\n totalArea\n carpetArea\n builtUpArea\n bedrooms\n bathrooms\n floors\n totalFloors\n parking\n balconies\n furnishingStatus\n ageOfProperty\n facing\n }\n amenities {\n id\n name\n category\n available\n }\n images {\n id\n url\n title\n type\n order\n isPrimary\n }\n }\n`;\n\n// Trust-layer evidence (BOFF-8674) — DETAIL-ONLY. Kept out of the shared\n// PROPERTY_FIELDS on purpose: list/map queries (up to 200 listings) must not\n// resolve evidence files + signed downloadUrls they never render (Codex P2,\n// mfe#19). Only GetProperty spreads this fragment.\nconst PROPERTY_VERIFICATION_FIELDS = gql`\n fragment PropertyVerificationFields on HousingVistaProperty {\n verificationItems {\n id\n entityLabel\n entityType\n status\n submittedAt\n documentFiles {\n id\n name\n downloadUrl\n createdAt\n }\n }\n }\n`;\n\nconst GET_PROPERTIES = gql`\n ${PROPERTY_FIELDS}\n query GetProperties($filter: HousingVistaPropertyFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaProperties(filter: $filter, pagination: $pagination) {\n ...PropertyFields\n }\n }\n`;\n\nconst GET_PROPERTY = gql`\n ${PROPERTY_FIELDS}\n ${PROPERTY_VERIFICATION_FIELDS}\n query GetProperty($id: ID!) {\n housingvistaProperty(id: $id) {\n ...PropertyFields\n ...PropertyVerificationFields\n }\n }\n`;\n\nconst TRANSACTION_FIELDS = gql`\n fragment TransactionFields on HousingVistaTransaction {\n id\n title\n type\n status\n amount\n currency\n documents\n milestones\n parties\n escrow\n # Origin offer this deal was converted from (TXN-01 / BOFF-9171); null for\n # transactions not born from an accepted offer.\n offerId\n createdAt\n updatedAt\n property {\n id\n title\n location {\n city\n state\n }\n images {\n id\n url\n isPrimary\n }\n }\n buyer {\n id\n firstName\n lastName\n avatar\n }\n seller {\n id\n firstName\n lastName\n avatar\n }\n tenant {\n id\n firstName\n lastName\n avatar\n }\n landlord {\n id\n firstName\n lastName\n avatar\n }\n }\n`;\n\nconst GET_TRANSACTIONS = gql`\n ${TRANSACTION_FIELDS}\n query GetTransactions($filter: HousingVistaTransactionFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaTransactions(filter: $filter, pagination: $pagination) {\n ...TransactionFields\n }\n }\n`;\n\nconst GET_TRANSACTION = gql`\n ${TRANSACTION_FIELDS}\n query GetTransaction($id: ID!) {\n housingvistaTransaction(id: $id) {\n ...TransactionFields\n }\n }\n`;\n\nconst INVESTMENT_FIELDS = gql`\n fragment InvestmentFields on HousingVistaInvestment {\n id\n title\n investmentType\n totalValue\n status\n startDate\n maturityDate\n riskLevel\n investors\n returns\n property {\n id\n title\n location {\n city\n state\n }\n }\n }\n`;\n\nconst GET_INVESTMENTS = gql`\n ${INVESTMENT_FIELDS}\n query GetInvestments($filter: HousingVistaInvestmentFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaInvestments(filter: $filter, pagination: $pagination) {\n ...InvestmentFields\n }\n }\n`;\n\nconst GET_INVESTMENT = gql`\n ${INVESTMENT_FIELDS}\n query GetInvestment($id: ID!) {\n housingvistaInvestment(id: $id) {\n ...InvestmentFields\n }\n }\n`;\n\nconst GET_RENTAL_UNITS = gql`\n query GetRentalUnits($filter: HousingVistaRentalUnitFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaRentalUnits(filter: $filter, pagination: $pagination) {\n id\n propertyId\n propertyTitle\n unitNumber\n tenantName\n tenantEmail\n tenantPhone\n monthlyRent\n leaseStart\n leaseEnd\n status\n lastPaymentDate\n paymentStatus\n securityDeposit\n }\n }\n`;\n\nconst ASSET_FIELDS = gql`\n fragment AssetFields on HousingVistaAsset {\n id\n title\n type\n category\n location\n currentValue\n purchasePrice\n purchaseDate\n appreciationPercent\n rentalYield\n status\n imageUrl\n lastValuationDate\n }\n`;\n\nconst GET_ASSETS = gql`\n ${ASSET_FIELDS}\n query GetAssets($filter: HousingVistaAssetFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaAssets(filter: $filter, pagination: $pagination) {\n ...AssetFields\n }\n }\n`;\n\nconst GET_ASSET = gql`\n ${ASSET_FIELDS}\n query GetAsset($id: ID!) {\n housingvistaAsset(id: $id) {\n ...AssetFields\n }\n }\n`;\n\nconst GET_AMC_CONTRACTS = gql`\n query GetAmcContracts($filter: HousingVistaAmcContractFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaAmcContracts(filter: $filter, pagination: $pagination) {\n id\n propertyId\n propertyTitle\n packageName\n providerName\n status\n startDate\n endDate\n monthlyCost\n nextServiceDate\n servicesIncluded\n }\n }\n`;\n\nconst MARKETPLACE_SERVICE_FIELDS = gql`\n fragment MarketplaceServiceFields on HousingVistaMarketplaceService {\n id\n name\n providerName\n category\n description\n rating\n reviewCount\n priceRange\n availableAreas\n responseTime\n verified\n imageUrl\n featured\n }\n`;\n\nconst GET_MARKETPLACE_SERVICES = gql`\n ${MARKETPLACE_SERVICE_FIELDS}\n query GetMarketplaceServices(\n $filter: HousingVistaMarketplaceServiceFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaMarketplaceServices(filter: $filter, pagination: $pagination) {\n ...MarketplaceServiceFields\n }\n }\n`;\n\nconst GET_MARKETPLACE_SERVICE = gql`\n ${MARKETPLACE_SERVICE_FIELDS}\n query GetMarketplaceService($id: ID!) {\n housingvistaMarketplaceService(id: $id) {\n ...MarketplaceServiceFields\n }\n }\n`;\n\nconst VERIFICATION_FIELDS = gql`\n fragment VerificationFields on HousingVistaVerificationItem {\n id\n entityType\n entityId\n entityLabel\n status\n submittedDate\n reviewerName\n priority\n notes\n createdAt\n updatedAt\n }\n`;\n\nconst GET_VERIFICATIONS = gql`\n ${VERIFICATION_FIELDS}\n query GetVerifications($filter: HousingVistaVerificationItemFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaVerificationItems(filter: $filter, pagination: $pagination) {\n ...VerificationFields\n }\n }\n`;\n\nconst GET_VERIFICATION = gql`\n ${VERIFICATION_FIELDS}\n query GetVerification($id: ID!) {\n housingvistaVerificationItem(id: $id) {\n ...VerificationFields\n }\n }\n`;\n\nconst LEGAL_SERVICE_FIELDS = gql`\n fragment LegalServiceFields on HousingVistaLegalService {\n id\n title\n category\n description\n providerName\n providerRating\n estimatedDuration\n priceRange\n status\n consultationFee\n documentsRequired\n }\n`;\n\nconst GET_LEGAL_SERVICES = gql`\n ${LEGAL_SERVICE_FIELDS}\n query GetLegalServices($filter: HousingVistaLegalServiceFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaLegalServices(filter: $filter, pagination: $pagination) {\n ...LegalServiceFields\n }\n }\n`;\n\nconst GET_LEGAL_SERVICE = gql`\n ${LEGAL_SERVICE_FIELDS}\n query GetLegalService($id: ID!) {\n housingvistaLegalService(id: $id) {\n ...LegalServiceFields\n }\n }\n`;\n\nconst HOME_LOAN_FIELDS = gql`\n fragment HomeLoanFields on HousingVistaHomeLoanOffer {\n id\n bankName\n bankLogo\n interestRate\n maxTenure\n maxAmount\n processingFee\n emiPerLakh\n features\n rating\n specialOffer\n prepaymentCharges\n }\n`;\n\nconst GET_HOME_LOANS = gql`\n ${HOME_LOAN_FIELDS}\n query GetHomeLoans($pagination: HousingVistaPaginationInput) {\n housingvistaHomeLoanOffers(pagination: $pagination) {\n ...HomeLoanFields\n }\n }\n`;\n\nconst GET_HOME_LOAN = gql`\n ${HOME_LOAN_FIELDS}\n query GetHomeLoan($id: ID!) {\n housingvistaHomeLoanOffer(id: $id) {\n ...HomeLoanFields\n }\n }\n`;\n\nconst GET_MARKET_TRENDS = gql`\n query GetMarketTrends($pagination: HousingVistaPaginationInput) {\n housingvistaMarketTrends(pagination: $pagination) {\n month\n avgPrice\n avgRent\n demandIndex\n supplyIndex\n priceChangePercent\n }\n }\n`;\n\nconst GET_AREA_INSIGHTS = gql`\n query GetAreaInsights($pagination: HousingVistaPaginationInput) {\n housingvistaAreaInsights(pagination: $pagination) {\n id\n areaName\n city\n avgPropertyPrice\n avgRentalYield\n appreciationRate\n safetyScore\n connectivityScore\n amenitiesScore\n schoolsNearby\n hospitalsNearby\n population\n greenCoverPercent\n upcomingProjects\n avg2BhkPrice\n avg3BhkPrice\n amenitiesRating\n priceTrend {\n period\n avgPrice\n }\n futureProjects {\n name\n type\n expectedCompletion\n description\n }\n nearbyHubs\n transportLinks\n schools\n hospitals\n malls\n }\n }\n`;\n\nconst GET_ANALYTICS = gql`\n query GetHousingvistaAnalytics($period: HousingVistaAnalyticsPeriod) {\n housingvistaAnalytics(period: $period) {\n kpis {\n id\n label\n value\n previousValue\n unit\n trend\n changePercent\n }\n revenueByMonth {\n month\n revenue\n expenses\n }\n propertyTypeDistribution {\n type\n count\n value\n }\n occupancyRate {\n month\n rate\n }\n period\n }\n }\n`;\n\nconst SHORTLIST_FIELDS = gql`\n ${PROPERTY_FIELDS}\n fragment ShortlistFields on HousingVistaShortlist {\n id\n propertyId\n notes\n createdAt\n property {\n ...PropertyFields\n }\n }\n`;\n\nconst GET_SHORTLISTS = gql`\n ${SHORTLIST_FIELDS}\n query GetShortlists($pagination: HousingVistaPaginationInput) {\n housingvistaShortlists(pagination: $pagination) {\n ...ShortlistFields\n }\n }\n`;\n\nconst OFFER_FIELDS = gql`\n fragment OfferFields on HousingVistaOffer {\n id\n propertyId\n amount\n counterAmount\n currency\n status\n notes\n respondedAt\n expiresAt\n createdAt\n updatedAt\n property {\n id\n title\n location {\n city\n state\n }\n images {\n id\n url\n isPrimary\n }\n price {\n amount\n currency\n # sale | rent — drives the deal type when converting to a transaction.\n type\n }\n }\n }\n`;\n\nconst GET_OFFERS = gql`\n ${OFFER_FIELDS}\n query GetOffers($filter: HousingVistaOfferFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaOffers(filter: $filter, pagination: $pagination) {\n ...OfferFields\n }\n }\n`;\n\nconst GET_OFFER = gql`\n ${OFFER_FIELDS}\n query GetOffer($id: ID!) {\n housingvistaOffer(id: $id) {\n ...OfferFields\n }\n }\n`;\n\nconst VIEWING_FIELDS = gql`\n fragment ViewingFields on HousingVistaViewing {\n id\n propertyId\n scheduledAt\n type\n status\n attendeeName\n attendeeEmail\n notes\n createdAt\n updatedAt\n property {\n id\n title\n location {\n city\n state\n }\n images {\n id\n url\n isPrimary\n }\n }\n }\n`;\n\nconst GET_VIEWINGS = gql`\n ${VIEWING_FIELDS}\n query GetViewings($filter: HousingVistaViewingFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaViewings(filter: $filter, pagination: $pagination) {\n ...ViewingFields\n }\n }\n`;\n\nconst GET_VIEWING = gql`\n ${VIEWING_FIELDS}\n query GetViewing($id: ID!) {\n housingvistaViewing(id: $id) {\n ...ViewingFields\n }\n }\n`;\n\nconst RENTAL_APPLICATION_FIELDS = gql`\n fragment RentalApplicationFields on HousingVistaRentalApplication {\n id\n rentalUnitId\n applicantName\n applicantEmail\n applicantPhone\n monthlyIncome\n moveInDate\n status\n reviewNotes\n reviewedAt\n createdAt\n updatedAt\n rentalUnit {\n id\n unitNumber\n propertyTitle\n monthlyRent\n }\n }\n`;\n\nconst GET_RENTAL_APPLICATIONS = gql`\n ${RENTAL_APPLICATION_FIELDS}\n query GetRentalApplications(\n $filter: HousingVistaRentalApplicationFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaRentalApplications(filter: $filter, pagination: $pagination) {\n ...RentalApplicationFields\n }\n }\n`;\n\nconst MAINTENANCE_FIELDS = gql`\n fragment MaintenanceFields on HousingVistaMaintenanceRequest {\n id\n propertyId\n rentalUnitId\n title\n description\n category\n priority\n status\n resolutionNotes\n resolvedAt\n createdAt\n updatedAt\n }\n`;\n\nconst GET_MAINTENANCE_REQUESTS = gql`\n ${MAINTENANCE_FIELDS}\n query GetMaintenanceRequests(\n $filter: HousingVistaMaintenanceRequestFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaMaintenanceRequests(filter: $filter, pagination: $pagination) {\n ...MaintenanceFields\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Mutation documents\n// ---------------------------------------------------------------------------\n\nconst CREATE_PROPERTY = gql`\n ${PROPERTY_FIELDS}\n mutation CreateHousingvistaProperty($input: HousingVistaCreatePropertyInput!) {\n createHousingvistaProperty(input: $input) {\n ...PropertyFields\n }\n }\n`;\n\nconst UPDATE_PROPERTY = gql`\n ${PROPERTY_FIELDS}\n mutation UpdateHousingvistaProperty($id: ID!, $input: HousingVistaUpdatePropertyInput!) {\n updateHousingvistaProperty(id: $id, input: $input) {\n ...PropertyFields\n }\n }\n`;\n\nconst DELETE_PROPERTY = gql`\n mutation DeleteHousingvistaProperty($id: ID!) {\n deleteHousingvistaProperty(id: $id)\n }\n`;\n\nconst SAVE_SHORTLIST = gql`\n ${SHORTLIST_FIELDS}\n mutation SaveHousingvistaShortlist($input: HousingVistaSaveShortlistInput!) {\n saveHousingvistaShortlist(input: $input) {\n ...ShortlistFields\n }\n }\n`;\n\nconst REMOVE_SHORTLIST = gql`\n mutation RemoveHousingvistaShortlist($propertyId: ID!) {\n removeHousingvistaShortlist(propertyId: $propertyId)\n }\n`;\n\nconst BOOK_VIEWING = gql`\n mutation BookHousingvistaViewing($input: HousingVistaBookViewingInput!) {\n bookHousingvistaViewing(input: $input) {\n id\n propertyId\n scheduledAt\n type\n status\n attendeeName\n attendeeEmail\n notes\n }\n }\n`;\n\nconst CANCEL_VIEWING = gql`\n mutation CancelHousingvistaViewing($id: ID!) {\n cancelHousingvistaViewing(id: $id) {\n id\n status\n }\n }\n`;\n\nconst SUBMIT_OFFER = gql`\n mutation SubmitHousingvistaOffer($input: HousingVistaSubmitOfferInput!) {\n submitHousingvistaOffer(input: $input) {\n id\n propertyId\n amount\n currency\n status\n notes\n expiresAt\n createdAt\n }\n }\n`;\n\nconst RESPOND_OFFER = gql`\n mutation RespondHousingvistaOffer($id: ID!, $input: HousingVistaRespondOfferInput!) {\n respondHousingvistaOffer(id: $id, input: $input) {\n id\n status\n counterAmount\n respondedAt\n }\n }\n`;\n\nconst CREATE_TRANSACTION = gql`\n ${TRANSACTION_FIELDS}\n mutation CreateHousingvistaTransaction($input: HousingVistaCreateTransactionInput!) {\n createHousingvistaTransaction(input: $input) {\n ...TransactionFields\n }\n }\n`;\n\nconst CREATE_INVESTMENT = gql`\n ${INVESTMENT_FIELDS}\n mutation CreateHousingvistaInvestment($input: HousingVistaCreateInvestmentInput!) {\n createHousingvistaInvestment(input: $input) {\n ...InvestmentFields\n }\n }\n`;\n\nconst CREATE_RENTAL_UNIT = gql`\n mutation CreateHousingvistaRentalUnit($input: HousingVistaCreateRentalUnitInput!) {\n createHousingvistaRentalUnit(input: $input) {\n id\n propertyTitle\n unitNumber\n tenantName\n monthlyRent\n status\n }\n }\n`;\n\nconst SUBMIT_RENTAL_APPLICATION = gql`\n mutation SubmitHousingvistaRentalApplication($input: HousingVistaSubmitRentalApplicationInput!) {\n submitHousingvistaRentalApplication(input: $input) {\n id\n rentalUnitId\n applicantName\n status\n }\n }\n`;\n\nconst CREATE_AMC_CONTRACT = gql`\n mutation CreateHousingvistaAmcContract($input: HousingVistaCreateAmcContractInput!) {\n createHousingvistaAmcContract(input: $input) {\n id\n propertyTitle\n packageName\n providerName\n monthlyCost\n status\n }\n }\n`;\n\nconst CREATE_MAINTENANCE_REQUEST = gql`\n mutation CreateHousingvistaMaintenanceRequest($input: HousingVistaCreateMaintenanceRequestInput!) {\n createHousingvistaMaintenanceRequest(input: $input) {\n id\n title\n category\n priority\n status\n }\n }\n`;\n\nconst CREATE_VERIFICATION_ITEM = gql`\n mutation CreateHousingvistaVerificationItem($input: HousingVistaCreateVerificationItemInput!) {\n createHousingvistaVerificationItem(input: $input) {\n id\n status\n entityLabel\n }\n }\n`;\n\nconst APPROVE_VERIFICATION = gql`\n mutation ApproveHousingvistaVerificationItem($id: ID!, $notes: String) {\n approveHousingvistaVerificationItem(id: $id, notes: $notes) {\n id\n status\n reviewerName\n notes\n # Needed to sync the normalized listing record (badge) in the cache\n # after a decision (reviewer P2, mfe#19).\n entityType\n entityId\n }\n }\n`;\n\nconst REJECT_VERIFICATION = gql`\n mutation RejectHousingvistaVerificationItem($id: ID!, $notes: String) {\n rejectHousingvistaVerificationItem(id: $id, notes: $notes) {\n id\n status\n reviewerName\n notes\n entityType\n entityId\n }\n }\n`;\n\nconst UPDATE_PROPERTY_RERA_STATUS = gql`\n mutation UpdateHousingvistaPropertyReraStatus(\n $id: ID!\n $status: HousingVistaReraVerificationStatus!\n $notes: String\n ) {\n updateHousingvistaPropertyReraStatus(id: $id, status: $status, notes: $notes) {\n id\n reraVerificationStatus\n reraApprovalDate\n }\n }\n`;\n\nconst WITHDRAW_OFFER = gql`\n mutation WithdrawHousingvistaOffer($id: ID!) {\n withdrawHousingvistaOffer(id: $id) {\n id\n status\n }\n }\n`;\n\nconst UPDATE_VIEWING = gql`\n mutation UpdateHousingvistaViewing($id: ID!, $input: HousingVistaUpdateViewingInput!) {\n updateHousingvistaViewing(id: $id, input: $input) {\n id\n scheduledAt\n status\n type\n notes\n }\n }\n`;\n\nconst UPDATE_INVESTMENT = gql`\n ${INVESTMENT_FIELDS}\n mutation UpdateHousingvistaInvestment($id: ID!, $input: HousingVistaUpdateInvestmentInput!) {\n updateHousingvistaInvestment(id: $id, input: $input) {\n ...InvestmentFields\n }\n }\n`;\n\nconst DELETE_INVESTMENT = gql`\n mutation DeleteHousingvistaInvestment($id: ID!) {\n deleteHousingvistaInvestment(id: $id)\n }\n`;\n\nconst CREATE_ASSET = gql`\n ${ASSET_FIELDS}\n mutation CreateHousingvistaAsset($input: HousingVistaCreateAssetInput!) {\n createHousingvistaAsset(input: $input) {\n ...AssetFields\n }\n }\n`;\n\nconst UPDATE_ASSET = gql`\n ${ASSET_FIELDS}\n mutation UpdateHousingvistaAsset($id: ID!, $input: HousingVistaUpdateAssetInput!) {\n updateHousingvistaAsset(id: $id, input: $input) {\n ...AssetFields\n }\n }\n`;\n\nconst DELETE_ASSET = gql`\n mutation DeleteHousingvistaAsset($id: ID!) {\n deleteHousingvistaAsset(id: $id)\n }\n`;\n\nconst UPDATE_AMC_CONTRACT = gql`\n mutation UpdateHousingvistaAmcContract($id: ID!, $input: HousingVistaUpdateAmcContractInput!) {\n updateHousingvistaAmcContract(id: $id, input: $input) {\n id\n status\n packageName\n providerName\n monthlyCost\n }\n }\n`;\n\nconst DELETE_AMC_CONTRACT = gql`\n mutation DeleteHousingvistaAmcContract($id: ID!) {\n deleteHousingvistaAmcContract(id: $id)\n }\n`;\n\nconst UPDATE_TRANSACTION = gql`\n ${TRANSACTION_FIELDS}\n mutation UpdateHousingvistaTransaction($id: ID!, $input: HousingVistaUpdateTransactionInput!) {\n updateHousingvistaTransaction(id: $id, input: $input) {\n ...TransactionFields\n }\n }\n`;\n\nconst DELETE_TRANSACTION = gql`\n mutation DeleteHousingvistaTransaction($id: ID!) {\n deleteHousingvistaTransaction(id: $id)\n }\n`;\n\nconst RESOLVE_MAINTENANCE = gql`\n ${MAINTENANCE_FIELDS}\n mutation ResolveHousingvistaMaintenanceRequest($id: ID!, $resolutionNotes: String) {\n resolveHousingvistaMaintenanceRequest(id: $id, resolutionNotes: $resolutionNotes) {\n ...MaintenanceFields\n }\n }\n`;\n\nconst REVIEW_RENTAL_APPLICATION = gql`\n ${RENTAL_APPLICATION_FIELDS}\n mutation ReviewHousingvistaRentalApplication($id: ID!, $input: HousingVistaReviewRentalApplicationInput!) {\n reviewHousingvistaRentalApplication(id: $id, input: $input) {\n ...RentalApplicationFields\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Query-result row shapes (as selected above)\n// ---------------------------------------------------------------------------\n\ninterface PropertyVerificationItemRow {\n id: string;\n entityLabel: string;\n entityType: string;\n status: string;\n submittedAt: string;\n documentFiles: {\n id: string;\n name: string;\n downloadUrl: string | null;\n createdAt: string;\n }[];\n}\n\ninterface PropertyRow {\n id: string;\n title: string;\n description: string | null;\n type: Property['type'];\n status: Property['status'];\n category: string;\n verificationStatus: string;\n reraRegistrationNo: string | null;\n reraAuthority: string | null;\n reraApprovalDate: string | null;\n reraUrl: string | null;\n reraVerificationStatus: ReraVerificationStatus;\n imageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n price: Property['price'];\n location: Omit<Property['location'], 'coordinates'> & {\n coordinates: { latitude: number; longitude: number } | null;\n };\n specifications: Property['specifications'];\n amenities: Property['amenities'];\n images: Property['images'];\n // Trust layer (BOFF-8674): verification checks filed against the listing.\n // Detail-only (see PROPERTY_VERIFICATION_FIELDS) — absent on list rows.\n verificationItems?: PropertyVerificationItemRow[];\n}\n\ninterface TransactionRow {\n id: string;\n title: string;\n type: string;\n status: string;\n amount: number;\n currency: string;\n documents: unknown;\n milestones: unknown;\n parties: unknown;\n escrow: unknown;\n /** Origin offer id when this deal was converted from an accepted offer (TXN-01). */\n offerId: string | null;\n createdAt: string;\n updatedAt: string;\n property: PropertyRow | null;\n buyer: TxParty | null;\n seller: TxParty | null;\n tenant: TxParty | null;\n landlord: TxParty | null;\n}\n\ninterface TxParty {\n id: string | null;\n firstName: string | null;\n lastName: string | null;\n avatar: string | null;\n}\n\ninterface InvestmentRow {\n id: string;\n title: string;\n investmentType: string;\n totalValue: number;\n status: string;\n startDate: string;\n maturityDate: string | null;\n riskLevel: string;\n investors: unknown;\n returns: unknown;\n property: PropertyRow | null;\n}\n\ninterface ShortlistRow {\n id: string;\n propertyId: string;\n notes: string | null;\n createdAt: string;\n property: PropertyRow;\n}\n\n// ---------------------------------------------------------------------------\n// Mappers: GraphQL row → MFE domain type\n// ---------------------------------------------------------------------------\n\n/**\n * The domain `Property` carries display-only fields the subgraph does not\n * resolve (owner/documents/features/virtualTours/availability). We fill the\n * present fields from the query and default the rest to empty so consumers can\n * render honest empty-states rather than crashing on `undefined`.\n */\nconst mapProperty = (row: PropertyRow): Property => ({\n id: row.id,\n title: row.title,\n description: row.description ?? '',\n type: row.type,\n status: row.status,\n category: row.category as Property['category'],\n price: row.price,\n location: {\n ...row.location,\n coordinates: row.location.coordinates ?? { latitude: 0, longitude: 0 },\n },\n specifications: row.specifications,\n amenities: row.amenities ?? [],\n images: row.images ?? [],\n // Trust layer (BOFF-8674): flatten each verification check's evidence\n // files into the existing PropertyDocument shape so any consumer of\n // property.documents sees per-document verification. The check's status\n // covers its whole document set (batch-level truth; the item IS the\n // document batch here) — 'approved' maps to the 'verified' signal the\n // badge/filter already use.\n documents: (row.verificationItems ?? []).flatMap((item) =>\n (item.documentFiles ?? []).map((file) => ({\n id: file.id,\n name: file.name,\n type: 'verification',\n url: file.downloadUrl ?? '',\n verificationStatus: (item.status === 'approved' ? 'verified' : item.status) as VerificationStatus,\n // The File's own createdAt is the upload time — the item's submittedAt\n // can be later than the actual upload if the agent drafted first\n // (Codex P2, mfe#19).\n uploadedAt: new Date(file.createdAt),\n }))\n ),\n virtualTours: [],\n owner: { id: '', name: '', email: '', phone: '', verified: false },\n features: [],\n verificationStatus: (row.verificationStatus as Property['verificationStatus']) ?? 'pending',\n availability: { available: true },\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n reraRegistrationNo: row.reraRegistrationNo,\n reraAuthority: row.reraAuthority,\n reraApprovalDate: row.reraApprovalDate ? new Date(row.reraApprovalDate) : null,\n reraUrl: row.reraUrl,\n reraVerificationStatus: row.reraVerificationStatus ?? 'not_applicable',\n});\n\n// ---------------------------------------------------------------------------\n// Query hooks\n// ---------------------------------------------------------------------------\n\nconst emptyTrends: DashboardTrends = {\n totalProperties: [],\n monthlyRevenue: [],\n occupancyRate: [],\n activeTransactions: [],\n};\n\nexport const useDashboardStats = () => {\n const { data, loading, error } = useQuery<{ housingvistaDashboardStats: DashboardStats }>(GET_DASHBOARD_STATS);\n const empty: DashboardStats = {\n totalProperties: 0,\n totalValue: 0,\n occupancyRate: 0,\n monthlyRevenue: 0,\n activeTransactions: 0,\n pendingVerifications: 0,\n totalInvestments: 0,\n investmentReturns: 0,\n totalTenants: 0,\n maintenanceRequests: 0,\n unreadMessages: 0,\n upcomingViewings: 0,\n trends: emptyTrends,\n };\n return { data: data?.housingvistaDashboardStats ?? empty, loading, error };\n};\n\nexport const useRecentActivities = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaTransactions: TransactionRow[] }>(GET_TRANSACTIONS, {\n variables: getPaginationVariables(pagination),\n });\n const activities: RecentActivity[] = (data?.housingvistaTransactions ?? []).map((txn) => ({\n id: `act-${txn.id}`,\n type: 'transaction_update',\n title: `Transaction: ${txn.type}`,\n description: `${txn.property?.title ?? 'Property'} - ${txn.status}`,\n timestamp: txn.updatedAt || txn.createdAt,\n entityId: txn.id,\n entityType: 'transaction',\n actorName: txn.buyer\n ? `${txn.buyer.firstName ?? ''} ${txn.buyer.lastName ?? ''}`.trim()\n : txn.tenant\n ? `${txn.tenant.firstName ?? ''} ${txn.tenant.lastName ?? ''}`.trim()\n : 'System',\n actorAvatar: txn.buyer?.avatar ?? txn.tenant?.avatar ?? undefined,\n }));\n return { data: activities, loading, error };\n};\n\nexport const useProperties = (options?: {\n filter?: PropertyFilterInput;\n pagination?: PaginationInput;\n skip?: boolean;\n}) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaProperties: PropertyRow[] }>(GET_PROPERTIES, {\n variables: {\n filter: options?.filter,\n ...getPaginationVariables(options?.pagination),\n },\n skip: options?.skip,\n });\n return {\n data: (data?.housingvistaProperties ?? []).map(mapProperty),\n loading,\n error,\n refetch,\n };\n};\n\nexport const useProperty = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaProperty: PropertyRow | null }>(GET_PROPERTY, {\n variables: { id: id ?? '' },\n skip: !id,\n // cache-and-network: the Documents tab's evidence can change from the\n // Verification Center (or another reviewer) between visits — serve the\n // cache instantly but always reconcile against the network on mount\n // (Codex P2, mfe#19).\n fetchPolicy: 'cache-and-network',\n });\n return {\n data: data?.housingvistaProperty ? mapProperty(data.housingvistaProperty) : null,\n loading,\n error,\n };\n};\n\n// BOFF-4129 — natural-language property search. `method` tells the caller\n// whether the filter shown was extracted by an LLM ('ai') or the\n// deterministic keyword baseline ('keyword'); `fallbackReason` is set when\n// an AI attempt was made and failed. `results` are always a real\n// `listProperties` query result — never LLM-generated listing data.\nexport interface NlSearchFilter {\n city?: string | null;\n type?: PropertyType | null;\n status?: PropertyStatus | null;\n category?: string | null;\n priceMin?: number | null;\n priceMax?: number | null;\n bedroomsMin?: number | null;\n amenities?: string[] | null;\n reraVerificationStatus?: string | null;\n}\n\ninterface NlSearchResultRow {\n query: string;\n method: 'ai' | 'keyword';\n fallbackReason: string | null;\n filter: NlSearchFilter;\n properties: PropertyRow[];\n}\n\nconst NL_SEARCH_PROPERTIES = gql`\n ${PROPERTY_FIELDS}\n query HousingVistaNaturalLanguageSearch($query: String!, $pagination: HousingVistaPaginationInput) {\n housingvistaNaturalLanguageSearch(query: $query, pagination: $pagination) {\n query\n method\n fallbackReason\n filter {\n city\n type\n status\n category\n priceMin\n priceMax\n bedroomsMin\n amenities\n reraVerificationStatus\n }\n properties {\n ...PropertyFields\n }\n }\n }\n`;\n\nexport const useNaturalLanguageSearch = () => {\n const [run, { data, loading, error }] = useLazyQuery<\n { housingvistaNaturalLanguageSearch: NlSearchResultRow },\n { query: string; pagination?: PaginationInput }\n >(NL_SEARCH_PROPERTIES);\n\n const search = (query: string, pagination?: PaginationInput) => run({ variables: { query, pagination } });\n\n const result = data?.housingvistaNaturalLanguageSearch;\n return {\n search,\n loading,\n error,\n method: result?.method ?? null,\n fallbackReason: result?.fallbackReason ?? null,\n filter: result?.filter ?? null,\n properties: (result?.properties ?? []).map(mapProperty),\n };\n};\n\nexport const useTransactions = (options?: ListOptions<TransactionFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaTransactions: TransactionRow[] }>(GET_TRANSACTIONS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n // Transaction JSON columns (documents/milestones/parties/escrow) are opaque to\n // the schema; the page guards their runtime shape. Cast is localized here.\n return { data: (data?.housingvistaTransactions ?? []) as unknown as Transaction[], loading, error, refetch };\n};\n\n/**\n * Generic paged-to-completion reader: the svc caps a page at 100, so crawl\n * until a short page (50-page safety bound = 5,000 rows). Pure crawl: state\n * is written only behind the caller's cancellation guard, so a stopped crawl\n * never publishes partial results. Exposes error + refetch so callers can\n * tell \"no rows\" apart from \"we don't know\" and refresh after a mutation.\n */\nfunction useAllPages<TRow>(query: DocumentNode, listField: string, baseVariables?: Record<string, unknown>) {\n const client = useApolloClient();\n const [data, setData] = useState<TRow[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n // Ref indirection so an inline baseVariables object (new ref every render)\n // cannot re-trigger the crawl effect on every render.\n const baseVariablesRef = useRef(baseVariables);\n useEffect(() => {\n baseVariablesRef.current = baseVariables;\n }, [baseVariables]);\n\n const fetchAll = useCallback(\n async (shouldStop?: () => boolean): Promise<TRow[]> => {\n const all: TRow[] = [];\n let offset = 0;\n const MAX_PAGES = 50;\n for (let pageIndex = 0; pageIndex < MAX_PAGES; pageIndex += 1) {\n if (shouldStop?.()) break;\n const result = await client.query<{ [key: string]: TRow[] | undefined }>({\n query,\n variables: { ...baseVariablesRef.current, pagination: { limit: 100, offset } },\n fetchPolicy: 'network-only',\n });\n const page = result.data?.[listField] ?? [];\n all.push(...page);\n if (page.length < 100) break;\n offset += page.length;\n }\n return all;\n },\n [client, query, listField]\n );\n\n // Monotonic generation: a crawl superseded by a newer one (e.g. refetch()\n // racing an in-flight initial crawl) must never write state — only the\n // latest generation publishes.\n const generationRef = useRef(0);\n\n const refetch = useCallback(async () => {\n const generation = ++generationRef.current;\n setLoading(true);\n setError(null);\n try {\n const all = await fetchAll();\n if (generation !== generationRef.current) return;\n setData(all);\n } catch (err) {\n if (generation === generationRef.current) setError(err as Error);\n } finally {\n if (generation === generationRef.current) setLoading(false);\n }\n }, [fetchAll]);\n\n useEffect(() => {\n let cancelled = false;\n const generation = ++generationRef.current;\n setLoading(true);\n setError(null);\n fetchAll(() => cancelled)\n .then((all) => {\n if (!cancelled && generation === generationRef.current) setData(all);\n })\n .catch((err) => {\n if (!cancelled) setError(err as Error);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [fetchAll]);\n\n return { data, loading, error, refetch };\n}\n\n/**\n * Every transaction in the workspace, paged to completion. Used where the UI\n * must match rows across the full set — e.g. the OffersPage \"Create deal\"\n * gate, which must see a deal converted from any accepted offer no matter\n * where it falls in the list.\n */\nexport const useAllTransactions = () => {\n const { data, loading, error, refetch } = useAllPages<TransactionRow>(GET_TRANSACTIONS, 'housingvistaTransactions');\n // Transaction JSON columns are opaque to the schema; pages guard their\n // runtime shape. Cast is localized here.\n return {\n data: data as unknown as Transaction[],\n loading,\n error,\n refetch,\n };\n};\n\nexport const useTransaction = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaTransaction: TransactionRow | null }>(GET_TRANSACTION, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return {\n data: (data?.housingvistaTransaction ?? null) as unknown as Transaction | null,\n loading,\n error,\n };\n};\n\nexport const useInvestments = (options?: ListOptions<InvestmentFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaInvestments: InvestmentRow[] }>(GET_INVESTMENTS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: (data?.housingvistaInvestments ?? []) as unknown as Investment[], loading, error, refetch };\n};\n\nexport const useInvestment = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaInvestment: InvestmentRow | null }>(GET_INVESTMENT, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: (data?.housingvistaInvestment ?? null) as unknown as Investment | null, loading, error };\n};\n\nexport const useRentalUnits = (options?: ListOptions<RentalUnitFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaRentalUnits: RentalUnit[] }>(GET_RENTAL_UNITS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaRentalUnits ?? [], loading, error, refetch };\n};\n\nexport const useAssets = (options?: ListOptions<AssetFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaAssets: Asset[] }>(GET_ASSETS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaAssets ?? [], loading, error, refetch };\n};\n\nexport const useAsset = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaAsset: Asset | null }>(GET_ASSET, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaAsset ?? null, loading, error };\n};\n\nexport const useAMCContracts = (options?: ListOptions<AmcContractFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaAmcContracts: AMCContract[] }>(GET_AMC_CONTRACTS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n // servicesIncluded is a JSON column: a contract created without services reads back null.\n const contracts = useMemo(\n () =>\n (data?.housingvistaAmcContracts ?? []).map((contract) => ({\n ...contract,\n servicesIncluded: Array.isArray(contract.servicesIncluded) ? contract.servicesIncluded : [],\n })),\n [data]\n );\n return { data: contracts, loading, error, refetch };\n};\n\nexport const useMarketplaceServices = (options?: ListOptions<MarketplaceServiceFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaMarketplaceServices: MarketplaceService[] }>(\n GET_MARKETPLACE_SERVICES,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaMarketplaceServices ?? [], loading, error, refetch };\n};\n\nexport const useMarketplaceService = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaMarketplaceService: MarketplaceService | null }>(\n GET_MARKETPLACE_SERVICE,\n { variables: { id: id ?? '' }, skip: !id }\n );\n return { data: data?.housingvistaMarketplaceService ?? null, loading, error };\n};\n\nexport const useVerifications = (options?: ListOptions<VerificationItemFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaVerificationItems: VerificationItem[] }>(\n GET_VERIFICATIONS,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaVerificationItems ?? [], loading, error, refetch };\n};\n\n/**\n * Single verification item. The detail view needs the audit timestamps\n * (`createdAt`/`updatedAt`) that the list type omits, so the result is typed as\n * `VerificationItem` extended with those ISO-string fields.\n */\nexport type VerificationItemDetail = VerificationItem & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport const useVerificationItem = (id: string | undefined) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaVerificationItem: VerificationItemDetail | null }>(\n GET_VERIFICATION,\n { variables: { id: id ?? '' }, skip: !id }\n );\n return { data: data?.housingvistaVerificationItem ?? null, loading, error, refetch };\n};\n\nexport const useLegalServices = (options?: ListOptions<LegalServiceFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaLegalServices: LegalService[] }>(\n GET_LEGAL_SERVICES,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaLegalServices ?? [], loading, error, refetch };\n};\n\nexport const useLegalService = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaLegalService: LegalService | null }>(GET_LEGAL_SERVICE, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaLegalService ?? null, loading, error };\n};\n\nexport const useHomeLoans = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaHomeLoanOffers: HomeLoan[] }>(GET_HOME_LOANS, {\n variables: getPaginationVariables(pagination),\n });\n return { data: data?.housingvistaHomeLoanOffers ?? [], loading, error };\n};\n\nexport const useHomeLoanOffer = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaHomeLoanOffer: HomeLoan | null }>(GET_HOME_LOAN, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaHomeLoanOffer ?? null, loading, error };\n};\n\nexport const useMarketTrends = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaMarketTrends: MarketTrend[] }>(GET_MARKET_TRENDS, {\n variables: getPaginationVariables(pagination),\n });\n return { data: data?.housingvistaMarketTrends ?? [], loading, error };\n};\n\nexport const useAreaInsights = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaAreaInsights: AreaInsight[] }>(GET_AREA_INSIGHTS, {\n variables: getPaginationVariables(pagination),\n });\n return { data: data?.housingvistaAreaInsights ?? [], loading, error };\n};\n\nexport const useShortlists = (pagination?: PaginationInput) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaShortlists: ShortlistRow[] }>(GET_SHORTLISTS, {\n variables: getPaginationVariables(pagination),\n });\n const shortlists = (data?.housingvistaShortlists ?? []).map((row) => ({\n id: row.id,\n propertyId: row.propertyId,\n notes: row.notes ?? undefined,\n createdAt: row.createdAt,\n property: mapProperty(row.property),\n }));\n return { data: shortlists, loading, error, refetch };\n};\n\nexport const useAnalyticsData = (period: AnalyticsPeriod = 'month') => {\n const { data, loading, error } = useQuery<{ housingvistaAnalytics: AnalyticsChartData }>(GET_ANALYTICS, {\n variables: { period },\n });\n return { data: data?.housingvistaAnalytics ?? null, loading, error };\n};\n\n// ---------------------------------------------------------------------------\n// Offers / Viewings / Rental applications / Maintenance — query hooks\n// ---------------------------------------------------------------------------\n\nexport interface OfferRow {\n id: string;\n propertyId: string;\n amount: number;\n counterAmount: number | null;\n currency: string;\n status: 'submitted' | 'countered' | 'accepted' | 'rejected' | 'withdrawn' | 'expired';\n notes: string | null;\n respondedAt: string | null;\n /** Optional deadline; open offers flip to 'expired' past it (backend lazy sweep). */\n expiresAt: string | null;\n createdAt: string;\n updatedAt: string;\n property: {\n id: string;\n title: string;\n location: { city: string; state: string };\n images: { id: string; url: string; isPrimary: boolean }[];\n price: { amount: number; currency: string; type?: string | null };\n } | null;\n}\n\nexport const useOffers = (options?: ListOptions<OfferFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaOffers: OfferRow[] }>(GET_OFFERS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaOffers ?? [], loading, error, refetch };\n};\n\nexport const useOffer = (id: string | undefined) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaOffer: OfferRow | null }>(GET_OFFER, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaOffer ?? null, loading, error, refetch };\n};\n\nexport interface ViewingRow {\n id: string;\n propertyId: string;\n scheduledAt: string;\n type: 'in_person' | 'virtual';\n status: 'requested' | 'confirmed' | 'completed' | 'cancelled';\n attendeeName: string | null;\n attendeeEmail: string | null;\n notes: string | null;\n createdAt: string;\n updatedAt: string;\n property: {\n id: string;\n title: string;\n location: { city: string; state: string };\n images: { id: string; url: string; isPrimary: boolean }[];\n } | null;\n}\n\nexport const useViewings = (options?: ListOptions<ViewingFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaViewings: ViewingRow[] }>(GET_VIEWINGS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaViewings ?? [], loading, error, refetch };\n};\n\nexport const useViewing = (id: string | undefined) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaViewing: ViewingRow | null }>(GET_VIEWING, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaViewing ?? null, loading, error, refetch };\n};\n\nexport interface RentalApplicationRow {\n id: string;\n rentalUnitId: string;\n applicantName: string;\n applicantEmail: string;\n applicantPhone: string | null;\n monthlyIncome: number | null;\n moveInDate: string | null;\n status: 'submitted' | 'screening' | 'approved' | 'rejected';\n reviewNotes: string | null;\n reviewedAt: string | null;\n createdAt: string;\n updatedAt: string;\n rentalUnit: {\n id: string;\n unitNumber: string;\n propertyTitle: string;\n monthlyRent: number;\n } | null;\n}\n\nexport const useRentalApplications = (options?: ListOptions<RentalApplicationFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaRentalApplications: RentalApplicationRow[] }>(\n GET_RENTAL_APPLICATIONS,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaRentalApplications ?? [], loading, error, refetch };\n};\n\n// ── Leases (TXN-02 / BOFF-9330) ──────────────────────────────────────────\n\nconst LEASE_FIELDS = gql`\n fragment LeaseFields on HousingVistaLease {\n id\n rentalUnitId\n rentalApplicationId\n tenantName\n tenantEmail\n tenantPhone\n monthlyRent\n securityDeposit\n leaseStart\n leaseEnd\n type\n status\n createdAt\n updatedAt\n rentalUnit {\n id\n unitNumber\n propertyTitle\n }\n }\n`;\n\nconst GET_LEASES = gql`\n ${LEASE_FIELDS}\n query GetLeases($filter: HousingVistaLeaseFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaLeases(filter: $filter, pagination: $pagination) {\n ...LeaseFields\n }\n }\n`;\n\nexport interface LeaseRow {\n id: string;\n rentalUnitId: string;\n rentalApplicationId: string | null;\n tenantName: string;\n tenantEmail: string;\n tenantPhone: string | null;\n monthlyRent: number;\n securityDeposit: number | null;\n leaseStart: string;\n leaseEnd: string;\n type: string;\n status: 'draft' | 'active' | 'renewed' | 'terminated';\n createdAt: string;\n updatedAt: string;\n rentalUnit: {\n id: string;\n unitNumber: string;\n propertyTitle: string;\n } | null;\n}\n\nexport const useLeases = (options?: ListOptions<LeaseFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaLeases: LeaseRow[] }>(GET_LEASES, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaLeases ?? [], loading, error, refetch };\n};\n\n/** Every lease in the workspace, paged to completion (see useAllPages). */\nexport const useAllLeases = () => useAllPages<LeaseRow>(GET_LEASES, 'housingvistaLeases');\n\nexport interface CreateLeaseInput {\n rentalUnitId: string;\n rentalApplicationId?: string;\n tenantName: string;\n tenantEmail: string;\n tenantPhone?: string;\n monthlyRent: number;\n securityDeposit?: number;\n leaseStart: string;\n leaseEnd: string;\n type?: string;\n status?: string;\n}\n\nexport const useCreateLease = () => {\n const [mutate, { loading }] = useMutation<{ createHousingvistaLease: LeaseRow }, { input: CreateLeaseInput }>(\n gql`\n ${LEASE_FIELDS}\n mutation CreateHousingvistaLease($input: HousingVistaCreateLeaseInput!) {\n createHousingvistaLease(input: $input) {\n ...LeaseFields\n }\n }\n `,\n { refetchQueries: ['GetLeases', 'GetRentalUnits', 'GetRentalApplications'], awaitRefetchQueries: true }\n );\n const createLease = async (input: CreateLeaseInput) => {\n await mutate({ variables: { input } });\n };\n return { createLease, loading };\n};\n\nexport const useRenewLease = () => {\n const [mutate, { loading }] = useMutation<\n { renewHousingvistaLease: LeaseRow },\n { id: string; input: { leaseEnd: string } }\n >(\n gql`\n ${LEASE_FIELDS}\n mutation RenewHousingvistaLease($id: ID!, $input: HousingVistaRenewLeaseInput!) {\n renewHousingvistaLease(id: $id, input: $input) {\n ...LeaseFields\n }\n }\n `,\n { refetchQueries: ['GetLeases', 'GetRentalUnits'], awaitRefetchQueries: true }\n );\n const renewLease = async (id: string, leaseEnd: string) => {\n await mutate({ variables: { id, input: { leaseEnd } } });\n };\n return { renewLease, loading };\n};\n\nexport const useTerminateLease = () => {\n const [mutate, { loading }] = useMutation<\n { terminateHousingvistaLease: LeaseRow },\n { id: string; input: { notes?: string } }\n >(\n gql`\n ${LEASE_FIELDS}\n mutation TerminateHousingvistaLease($id: ID!, $input: HousingVistaTerminateLeaseInput!) {\n terminateHousingvistaLease(id: $id, input: $input) {\n ...LeaseFields\n }\n }\n `,\n { refetchQueries: ['GetLeases', 'GetRentalUnits'], awaitRefetchQueries: true }\n );\n const terminateLease = async (id: string, notes?: string) => {\n await mutate({ variables: { id, input: { notes } } });\n };\n return { terminateLease, loading };\n};\n\nexport interface MaintenanceRequestRow {\n id: string;\n propertyId: string | null;\n rentalUnitId: string | null;\n title: string;\n description: string | null;\n category: string;\n priority: 'low' | 'medium' | 'high';\n status: 'open' | 'in_progress' | 'resolved';\n resolutionNotes: string | null;\n resolvedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const useMaintenanceRequests = (options?: ListOptions<MaintenanceRequestFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaMaintenanceRequests: MaintenanceRequestRow[] }>(\n GET_MAINTENANCE_REQUESTS,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaMaintenanceRequests ?? [], loading, error, refetch };\n};\n\n// ---------------------------------------------------------------------------\n// Mutation hooks\n// ---------------------------------------------------------------------------\n\nexport interface CreatePropertyInput {\n title: string;\n description?: string;\n status: PropertyStatus;\n type: PropertyType;\n category: string;\n address?: string;\n city: string;\n state: string;\n country?: string;\n pincode?: string;\n neighborhood?: string;\n landmarks?: string[];\n price: number;\n currency?: string;\n priceType?: string;\n /** On update, pass null to clear a stored period; absent/undefined means \"no change\". */\n pricePeriod?: string | null;\n negotiable?: boolean;\n pricePerSqft?: number;\n bedrooms: number;\n bathrooms: number;\n totalArea: number;\n carpetArea?: number;\n builtUpArea?: number;\n floors?: number;\n totalFloors?: number;\n parking?: number;\n balconies?: number;\n furnishingStatus?: string;\n ageOfProperty?: number;\n facing?: string;\n amenities?: { name: string; category: string; available?: boolean }[];\n images?: { url: string; title?: string; type?: string; order?: number; isPrimary?: boolean }[];\n imageUrl?: string;\n /** Optional geo-pin captured in the listing wizard (BOFF-7795). */\n coordinates?: { latitude: number; longitude: number } | null;\n}\n\nexport type UpdatePropertyInput = Partial<CreatePropertyInput>;\n\nexport const useCreateProperty = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaProperty: PropertyRow },\n { input: CreatePropertyInput }\n >(CREATE_PROPERTY, { refetchQueries: ['GetProperties'], awaitRefetchQueries: true });\n const createProperty = async (input: CreatePropertyInput): Promise<Property> => {\n const res = await mutate({ variables: { input } });\n if (!res.data) throw new Error('Property was not created');\n return mapProperty(res.data.createHousingvistaProperty);\n };\n return { createProperty, loading };\n};\n\nexport const useUpdateProperty = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaProperty: PropertyRow },\n { id: string; input: UpdatePropertyInput }\n >(UPDATE_PROPERTY);\n const updateProperty = async (id: string, input: UpdatePropertyInput): Promise<Property> => {\n const res = await mutate({ variables: { id, input } });\n if (!res.data) throw new Error('Property was not updated');\n return mapProperty(res.data.updateHousingvistaProperty);\n };\n return { updateProperty, loading };\n};\n\nexport const useDeleteProperty = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaProperty: boolean }, { id: string }>(DELETE_PROPERTY, {\n refetchQueries: ['GetProperties'],\n awaitRefetchQueries: true,\n });\n const deleteProperty = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaProperty ?? false;\n };\n return { deleteProperty, loading };\n};\n\nexport const useSaveShortlist = () => {\n const [mutate, { loading }] = useMutation<\n { saveHousingvistaShortlist: ShortlistRow },\n { input: { propertyId: string; notes?: string } }\n >(SAVE_SHORTLIST, { refetchQueries: ['GetShortlists'], awaitRefetchQueries: true });\n const saveShortlist = async (propertyId: string, notes?: string) => {\n await mutate({ variables: { input: { propertyId, notes } } });\n };\n return { saveShortlist, loading };\n};\n\nexport const useRemoveShortlist = () => {\n const [mutate, { loading }] = useMutation<{ removeHousingvistaShortlist: boolean }, { propertyId: string }>(\n REMOVE_SHORTLIST,\n { refetchQueries: ['GetShortlists'], awaitRefetchQueries: true }\n );\n const removeShortlist = async (propertyId: string) => {\n await mutate({ variables: { propertyId } });\n };\n return { removeShortlist, loading };\n};\n\nexport interface BookViewingInput {\n propertyId: string;\n scheduledAt: string;\n type?: 'in_person' | 'virtual';\n attendeeName?: string;\n attendeeEmail?: string;\n notes?: string;\n}\n\nexport const useBookViewing = () => {\n const [mutate, { loading }] = useMutation<{ bookHousingvistaViewing: { id: string } }, { input: BookViewingInput }>(\n BOOK_VIEWING\n );\n const bookViewing = async (input: BookViewingInput) => {\n await mutate({ variables: { input } });\n };\n return { bookViewing, loading };\n};\n\nexport const useCancelViewing = () => {\n const [mutate, { loading }] = useMutation<{ cancelHousingvistaViewing: { id: string } }, { id: string }>(\n CANCEL_VIEWING\n );\n const cancelViewing = async (id: string) => {\n await mutate({ variables: { id } });\n };\n return { cancelViewing, loading };\n};\n\nexport interface SubmitOfferInput {\n propertyId: string;\n amount: number;\n currency?: string;\n notes?: string;\n /** ISO deadline; omit for an offer that never expires. */\n expiresAt?: string;\n}\n\nexport const useSubmitOffer = () => {\n const [mutate, { loading }] = useMutation<{ submitHousingvistaOffer: { id: string } }, { input: SubmitOfferInput }>(\n SUBMIT_OFFER\n );\n const submitOffer = async (input: SubmitOfferInput) => {\n await mutate({ variables: { input } });\n };\n return { submitOffer, loading };\n};\n\nexport const useRespondOffer = () => {\n const [mutate, { loading }] = useMutation<\n { respondHousingvistaOffer: { id: string } },\n { id: string; input: { action: 'accept' | 'reject' | 'counter'; counterAmount?: number; notes?: string } }\n >(RESPOND_OFFER);\n const respondOffer = async (\n id: string,\n input: { action: 'accept' | 'reject' | 'counter'; counterAmount?: number; notes?: string }\n ) => {\n await mutate({ variables: { id, input } });\n };\n return { respondOffer, loading };\n};\n\nexport interface CreateTransactionInput {\n propertyId: string;\n title: string;\n type: string;\n status: string;\n amount: number;\n currency?: string;\n /** Accepted offer being converted into this deal (TXN-01 / BOFF-9171). */\n offerId?: string;\n}\n\nexport const useCreateTransaction = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaTransaction: TransactionRow },\n { input: CreateTransactionInput }\n >(CREATE_TRANSACTION, { refetchQueries: ['GetTransactions'], awaitRefetchQueries: true });\n const createTransaction = async (input: CreateTransactionInput) => {\n await mutate({ variables: { input } });\n };\n return { createTransaction, loading };\n};\n\nexport interface CreateInvestmentInput {\n propertyId: string;\n title: string;\n status: string;\n investmentType: string;\n riskLevel: string;\n totalValue: number;\n startDate?: string;\n maturityDate?: string;\n}\n\nexport const useCreateInvestment = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaInvestment: InvestmentRow },\n { input: CreateInvestmentInput }\n >(CREATE_INVESTMENT, { refetchQueries: ['GetInvestments'], awaitRefetchQueries: true });\n const createInvestment = async (input: CreateInvestmentInput) => {\n await mutate({ variables: { input } });\n };\n return { createInvestment, loading };\n};\n\nexport interface CreateRentalUnitInput {\n propertyId?: string;\n propertyTitle: string;\n unitNumber: string;\n tenantName: string;\n tenantEmail: string;\n tenantPhone?: string;\n monthlyRent: number;\n leaseStart: string;\n leaseEnd: string;\n status: string;\n paymentStatus: string;\n securityDeposit?: number;\n}\n\nexport const useCreateRentalUnit = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaRentalUnit: { id: string } },\n { input: CreateRentalUnitInput }\n >(CREATE_RENTAL_UNIT, { refetchQueries: ['GetRentalUnits'], awaitRefetchQueries: true });\n const createRentalUnit = async (input: CreateRentalUnitInput) => {\n await mutate({ variables: { input } });\n };\n return { createRentalUnit, loading };\n};\n\nexport interface SubmitRentalApplicationInput {\n rentalUnitId: string;\n applicantName: string;\n applicantEmail: string;\n applicantPhone?: string;\n monthlyIncome?: number;\n moveInDate?: string;\n}\n\nexport const useSubmitRentalApplication = () => {\n const [mutate, { loading }] = useMutation<\n { submitHousingvistaRentalApplication: { id: string } },\n { input: SubmitRentalApplicationInput }\n >(SUBMIT_RENTAL_APPLICATION);\n const submitRentalApplication = async (input: SubmitRentalApplicationInput) => {\n await mutate({ variables: { input } });\n };\n return { submitRentalApplication, loading };\n};\n\nexport interface CreateAmcContractInput {\n propertyId?: string;\n propertyTitle: string;\n packageName: string;\n providerName: string;\n monthlyCost: number;\n startDate: string;\n endDate: string;\n nextServiceDate?: string;\n status: string;\n servicesIncluded?: string[];\n}\n\nexport const useCreateAmcContract = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaAmcContract: { id: string } },\n { input: CreateAmcContractInput }\n >(CREATE_AMC_CONTRACT, { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true });\n const createAmcContract = async (input: CreateAmcContractInput) => {\n await mutate({ variables: { input } });\n };\n return { createAmcContract, loading };\n};\n\nexport interface CreateMaintenanceRequestInput {\n propertyId?: string;\n rentalUnitId?: string;\n title: string;\n description?: string;\n category: string;\n priority?: 'low' | 'medium' | 'high';\n}\n\nexport const useCreateMaintenanceRequest = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaMaintenanceRequest: { id: string } },\n { input: CreateMaintenanceRequestInput }\n >(CREATE_MAINTENANCE_REQUEST);\n const createMaintenanceRequest = async (input: CreateMaintenanceRequestInput) => {\n await mutate({ variables: { input } });\n };\n return { createMaintenanceRequest, loading };\n};\n\nexport const useCreateVerification = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaVerificationItem: { id: string } },\n { input: CreateVerificationItemInput }\n >(CREATE_VERIFICATION_ITEM, {\n // GetProperty refetch: a new check changes the detail page's Documents\n // evidence (active-query case); cache-and-network on useProperty covers\n // the return-to-listing case (Codex P2, mfe#19). Deliberately NO\n // GetProperties refetch and NO cache.modify here: creating an item does\n // NOT change Property.verificationStatus server-side (the svc write-back\n // is decide-path only, BOFF-8673), so a cached list badge stays truthful\n // — refetching the list would be pure waste.\n refetchQueries: ['GetVerifications', 'GetProperty'],\n awaitRefetchQueries: true,\n });\n const createVerification = async (input: CreateVerificationItemInput) => {\n await mutate({ variables: { input } });\n };\n return { createVerification, loading };\n};\n\nexport const useApproveVerification = () => {\n const [mutate, { loading }] = useMutation<\n {\n approveHousingvistaVerificationItem: {\n id: string;\n status: string;\n entityType: string | null;\n entityId: string | null;\n };\n },\n { id: string; notes?: string }\n >(APPROVE_VERIFICATION, {\n refetchQueries: ['GetVerifications', 'GetProperty'],\n awaitRefetchQueries: true,\n // Sync the normalized listing record so a badge shown by a cached,\n // unmounted list query updates immediately (reviewer P2, mfe#19) —\n // refetchQueries only reaches ACTIVE queries.\n update: (cache, result) => {\n const item = result.data?.approveHousingvistaVerificationItem;\n if (item?.entityType !== 'property' || !item.entityId) return;\n const pid = cache.identify({\n __typename: 'HousingVistaProperty',\n id: item.entityId,\n });\n if (!pid) return;\n cache.modify({\n id: pid,\n fields: {\n // Fail-safe direction: ONLY an explicit rejection writes\n // 'rejected'. The mutation currently returns the raw svc value\n // 'approved' (live-verified on alpha), but the MFE convention is\n // 'verified' — if the API ever normalizes to that, an\n // === 'approved' ternary would write 'rejected' for approvals\n // (Codex P2, mfe#19).\n verificationStatus: () => (item.status === 'rejected' ? 'rejected' : 'verified'),\n },\n });\n },\n });\n const approveVerification = async (id: string, notes?: string) => {\n await mutate({ variables: { id, notes } });\n };\n return { approveVerification, loading };\n};\n\nexport const useRejectVerification = () => {\n const [mutate, { loading }] = useMutation<\n {\n rejectHousingvistaVerificationItem: {\n id: string;\n status: string;\n entityType: string | null;\n entityId: string | null;\n };\n },\n { id: string; notes?: string }\n >(REJECT_VERIFICATION, {\n refetchQueries: ['GetVerifications', 'GetProperty'],\n awaitRefetchQueries: true,\n update: (cache, result) => {\n const item = result.data?.rejectHousingvistaVerificationItem;\n if (item?.entityType !== 'property' || !item.entityId) return;\n const pid = cache.identify({\n __typename: 'HousingVistaProperty',\n id: item.entityId,\n });\n if (!pid) return;\n cache.modify({\n id: pid,\n fields: {\n // Same fail-safe direction as approve: only an explicit\n // 'rejected' writes 'rejected'.\n verificationStatus: () => (item.status === 'rejected' ? 'rejected' : 'verified'),\n },\n });\n },\n });\n const rejectVerification = async (id: string, notes?: string) => {\n await mutate({ variables: { id, notes } });\n };\n return { rejectVerification, loading };\n};\n\n/** RERA review workflow transition (BOFF-4132) — separate from the generic\n * verification review above since RERA is its own regulatory workflow. */\nexport const useUpdatePropertyReraStatus = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaPropertyReraStatus: { id: string; reraVerificationStatus: ReraVerificationStatus } },\n { id: string; status: ReraVerificationStatus; notes?: string }\n >(UPDATE_PROPERTY_RERA_STATUS, { refetchQueries: ['GetProperties', 'GetProperty'], awaitRefetchQueries: true });\n const updatePropertyReraStatus = async (id: string, status: ReraVerificationStatus, notes?: string) => {\n await mutate({ variables: { id, status, notes } });\n };\n return { updatePropertyReraStatus, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Offer / Viewing owner-side + lifecycle mutation hooks\n// ---------------------------------------------------------------------------\n\nexport const useWithdrawOffer = () => {\n const [mutate, { loading }] = useMutation<{ withdrawHousingvistaOffer: { id: string } }, { id: string }>(\n WITHDRAW_OFFER,\n { refetchQueries: ['GetOffers', 'GetOffer'], awaitRefetchQueries: true }\n );\n const withdrawOffer = async (id: string) => {\n await mutate({ variables: { id } });\n };\n return { withdrawOffer, loading };\n};\n\nexport interface UpdateViewingInput {\n scheduledAt?: string;\n status?: 'requested' | 'confirmed' | 'completed' | 'cancelled';\n type?: 'in_person' | 'virtual';\n attendeeName?: string;\n attendeeEmail?: string;\n notes?: string;\n}\n\nexport const useUpdateViewing = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaViewing: { id: string } },\n { id: string; input: UpdateViewingInput }\n >(UPDATE_VIEWING, { refetchQueries: ['GetViewings', 'GetViewing'], awaitRefetchQueries: true });\n const updateViewing = async (id: string, input: UpdateViewingInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateViewing, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Investment update / delete\n// ---------------------------------------------------------------------------\n\nexport interface UpdateInvestmentInput {\n title?: string;\n investmentType?: string;\n status?: string;\n riskLevel?: string;\n totalValue?: number;\n startDate?: string;\n maturityDate?: string;\n}\n\nexport const useUpdateInvestment = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaInvestment: InvestmentRow },\n { id: string; input: UpdateInvestmentInput }\n >(UPDATE_INVESTMENT, { refetchQueries: ['GetInvestments', 'GetInvestment'], awaitRefetchQueries: true });\n const updateInvestment = async (id: string, input: UpdateInvestmentInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateInvestment, loading };\n};\n\nexport const useDeleteInvestment = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaInvestment: boolean }, { id: string }>(\n DELETE_INVESTMENT,\n { refetchQueries: ['GetInvestments'], awaitRefetchQueries: true }\n );\n const deleteInvestment = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaInvestment ?? false;\n };\n return { deleteInvestment, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Asset create / update / delete\n// ---------------------------------------------------------------------------\n\nexport interface CreateAssetInput {\n title: string;\n type: string;\n category: string;\n location: string;\n currentValue: number;\n purchasePrice: number;\n purchaseDate?: string;\n appreciationPercent?: number;\n rentalYield?: number;\n status: string;\n imageUrl?: string;\n lastValuationDate?: string;\n}\n\nexport const useCreateAsset = () => {\n const [mutate, { loading }] = useMutation<{ createHousingvistaAsset: Asset }, { input: CreateAssetInput }>(\n CREATE_ASSET,\n { refetchQueries: ['GetAssets'], awaitRefetchQueries: true }\n );\n const createAsset = async (input: CreateAssetInput) => {\n await mutate({ variables: { input } });\n };\n return { createAsset, loading };\n};\n\nexport type UpdateAssetInput = Partial<CreateAssetInput>;\n\nexport const useUpdateAsset = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaAsset: Asset },\n { id: string; input: UpdateAssetInput }\n >(UPDATE_ASSET, { refetchQueries: ['GetAssets', 'GetAsset'], awaitRefetchQueries: true });\n const updateAsset = async (id: string, input: UpdateAssetInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateAsset, loading };\n};\n\nexport const useDeleteAsset = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaAsset: boolean }, { id: string }>(DELETE_ASSET, {\n refetchQueries: ['GetAssets'],\n awaitRefetchQueries: true,\n });\n const deleteAsset = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaAsset ?? false;\n };\n return { deleteAsset, loading };\n};\n\n// ---------------------------------------------------------------------------\n// AMC update / delete\n// ---------------------------------------------------------------------------\n\nexport type UpdateAmcContractInput = Partial<CreateAmcContractInput>;\n\nexport const useUpdateAmcContract = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaAmcContract: { id: string } },\n { id: string; input: UpdateAmcContractInput }\n >(UPDATE_AMC_CONTRACT, { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true });\n const updateAmcContract = async (id: string, input: UpdateAmcContractInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateAmcContract, loading };\n};\n\nexport const useRenewAmcContract = () => {\n const [mutate, { loading }] = useMutation<\n { renewHousingvistaAmcContract: { id: string; status: string; endDate: string } },\n { id: string; input: { endDate: string } }\n >(\n gql`\n mutation RenewHousingvistaAmcContract($id: ID!, $input: HousingVistaRenewAmcContractInput!) {\n renewHousingvistaAmcContract(id: $id, input: $input) {\n id\n status\n endDate\n }\n }\n `,\n { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true }\n );\n const renewAmcContract = async (id: string, endDate: string) => {\n await mutate({ variables: { id, input: { endDate } } });\n };\n return { renewAmcContract, loading };\n};\n\nexport const useDeleteAmcContract = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaAmcContract: boolean }, { id: string }>(\n DELETE_AMC_CONTRACT,\n { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true }\n );\n const deleteAmcContract = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaAmcContract ?? false;\n };\n return { deleteAmcContract, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Transaction update / delete\n// ---------------------------------------------------------------------------\n\nexport interface UpdateTransactionInput {\n title?: string;\n type?: string;\n status?: string;\n amount?: number;\n currency?: string;\n documents?: unknown;\n}\n\nexport const useUpdateTransaction = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaTransaction: TransactionRow },\n { id: string; input: UpdateTransactionInput }\n >(UPDATE_TRANSACTION, { refetchQueries: ['GetTransactions', 'GetTransaction'], awaitRefetchQueries: true });\n const updateTransaction = async (id: string, input: UpdateTransactionInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateTransaction, loading };\n};\n\nexport const useDeleteTransaction = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaTransaction: boolean }, { id: string }>(\n DELETE_TRANSACTION,\n { refetchQueries: ['GetTransactions'], awaitRefetchQueries: true }\n );\n const deleteTransaction = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaTransaction ?? false;\n };\n return { deleteTransaction, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Maintenance resolve + Rental-application review\n// ---------------------------------------------------------------------------\n\nexport const useResolveMaintenanceRequest = () => {\n const [mutate, { loading }] = useMutation<\n { resolveHousingvistaMaintenanceRequest: MaintenanceRequestRow },\n { id: string; resolutionNotes?: string }\n >(RESOLVE_MAINTENANCE, { refetchQueries: ['GetMaintenanceRequests'], awaitRefetchQueries: true });\n const resolveMaintenanceRequest = async (id: string, resolutionNotes?: string) => {\n await mutate({ variables: { id, resolutionNotes } });\n };\n return { resolveMaintenanceRequest, loading };\n};\n\nexport interface ReviewRentalApplicationInput {\n decision: 'approved' | 'rejected' | 'screening' | 'submitted';\n reviewNotes?: string;\n}\n\nexport const useReviewRentalApplication = () => {\n const [mutate, { loading }] = useMutation<\n { reviewHousingvistaRentalApplication: RentalApplicationRow },\n { id: string; input: ReviewRentalApplicationInput }\n >(REVIEW_RENTAL_APPLICATION, { refetchQueries: ['GetRentalApplications'], awaitRefetchQueries: true });\n const reviewRentalApplication = async (id: string, input: ReviewRentalApplicationInput) => {\n await mutate({ variables: { id, input } });\n };\n return { reviewRentalApplication, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Platform-service reuse (conversations / files) — re-exported from ./platform\n// ---------------------------------------------------------------------------\n\nexport {\n useContactConversation,\n useSendMessage,\n useSendContextMessage,\n useConversationMessages,\n useEntityComments,\n useCreateEntityComment,\n useFileUpload,\n} from './platform';\nexport type {\n HvContextTarget,\n HvConversationMessage,\n HvConversationSourceContext,\n HvEntityComment,\n HvMessageAttachment,\n HvUploadedFile,\n} from './platform';\n\n// Analytics\nexport { useHousingVistaAnalytics } from './useHousingVistaAnalytics';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/housingvista/hooks/index.ts"],"sourcesContent":["/**\n * HousingVista data hooks — real GraphQL against the wspace gateway via Apollo.\n *\n * Every read maps the `housingvista*` query contract to the MFE domain types in\n * `../types`. Every write wraps a `housingvista*` mutation and (where it changes\n * a list the UI shows) refetches the affected query so the cache stays honest.\n * No `any`, no mock data — hooks that have no backing query return an explicit\n * `unsupported` empty-state instead of fabricating rows.\n * @module housingvista\n */\n\nimport { gql, type DocumentNode } from '@apollo/client';\nimport { useQuery, useMutation, useLazyQuery, useApolloClient } from '@apollo/client/react';\nimport { useEffect, useMemo, useState, useCallback, useRef } from 'react';\nimport type {\n Property,\n Transaction,\n Investment,\n DashboardStats,\n DashboardTrends,\n RecentActivity,\n RentalUnit,\n Asset,\n AMCContract,\n MarketplaceService,\n VerificationItem,\n LegalService,\n HomeLoan,\n MarketTrend,\n AreaInsight,\n AnalyticsChartData,\n AnalyticsPeriod,\n PropertyType,\n PropertyStatus,\n ReraVerificationStatus,\n VerificationStatus,\n} from '../types';\n\n// ---------------------------------------------------------------------------\n// Shared input shapes (mirror HousingVista*Input from the subgraph schema)\n// ---------------------------------------------------------------------------\n\nexport type PaginationInput = {\n limit?: number;\n offset?: number;\n};\n\nexport type PropertyGeoBoundsInput = {\n neLat: number;\n neLng: number;\n swLat: number;\n swLng: number;\n};\n\nexport type PropertyGeoCenterInput = {\n latitude: number;\n longitude: number;\n radiusKm: number;\n};\n\nexport type PropertyFilterInput = {\n search?: string;\n status?: PropertyStatus;\n type?: PropertyType;\n city?: string;\n category?: string;\n priceMin?: number;\n priceMax?: number;\n bedroomsMin?: number;\n amenities?: string[];\n reraVerificationStatus?: ReraVerificationStatus;\n bounds?: PropertyGeoBoundsInput;\n center?: PropertyGeoCenterInput;\n};\n\nexport type TransactionFilterInput = {\n search?: string;\n status?: string;\n type?: string;\n propertyId?: string;\n};\n\nexport type LeaseFilterInput = {\n status?: string;\n type?: string;\n rentalUnitId?: string;\n};\n\nexport type InvestmentFilterInput = {\n search?: string;\n status?: string;\n investmentType?: string;\n riskLevel?: string;\n propertyId?: string;\n};\n\nexport type RentalUnitFilterInput = {\n search?: string;\n status?: string;\n paymentStatus?: string;\n propertyId?: string;\n};\n\nexport type AssetFilterInput = {\n search?: string;\n status?: string;\n type?: string;\n category?: string;\n};\n\nexport type AmcContractFilterInput = {\n search?: string;\n status?: string;\n propertyId?: string;\n};\n\nexport type MarketplaceServiceFilterInput = {\n search?: string;\n category?: string;\n verified?: boolean;\n};\n\nexport type LegalServiceFilterInput = {\n search?: string;\n status?: string;\n category?: string;\n};\n\nexport type VerificationItemFilterInput = {\n search?: string;\n status?: string;\n priority?: string;\n entityType?: string;\n};\n\nexport type CreateVerificationItemInput = {\n entityLabel: string;\n entityType: string;\n entityId?: string;\n priority: string;\n notes?: string;\n documentFileIds?: string[];\n};\n\nexport type ViewingFilterInput = {\n search?: string;\n status?: string;\n type?: string;\n propertyId?: string;\n};\n\nexport type OfferFilterInput = {\n status?: string;\n propertyId?: string;\n};\n\nexport type RentalApplicationFilterInput = {\n search?: string;\n status?: string;\n rentalUnitId?: string;\n};\n\nexport type MaintenanceRequestFilterInput = {\n search?: string;\n status?: string;\n priority?: 'low' | 'medium' | 'high';\n category?: string;\n propertyId?: string;\n rentalUnitId?: string;\n};\n\n/** Options accepted by every server-filtered list hook. */\nexport interface ListOptions<TFilter> {\n filter?: TFilter;\n pagination?: PaginationInput;\n}\n\nconst DEFAULT_LIST_PAGINATION: Required<PaginationInput> = { limit: 50, offset: 0 };\n\nconst getPaginationVariables = (pagination: PaginationInput = DEFAULT_LIST_PAGINATION) => ({\n pagination: {\n limit: pagination.limit ?? DEFAULT_LIST_PAGINATION.limit,\n offset: pagination.offset ?? DEFAULT_LIST_PAGINATION.offset,\n },\n});\n\n// ---------------------------------------------------------------------------\n// Query documents\n// ---------------------------------------------------------------------------\n\nconst GET_DASHBOARD_STATS = gql`\n query GetDashboardStats {\n housingvistaDashboardStats {\n totalProperties\n totalValue\n occupancyRate\n monthlyRevenue\n activeTransactions\n pendingVerifications\n totalInvestments\n totalPortfolioValue\n investmentReturns\n totalTenants\n maintenanceRequests\n unreadMessages\n upcomingViewings\n trends {\n totalProperties {\n label\n value\n }\n monthlyRevenue {\n label\n value\n }\n occupancyRate {\n label\n value\n }\n activeTransactions {\n label\n value\n }\n }\n }\n }\n`;\n\nconst PROPERTY_FIELDS = gql`\n fragment PropertyFields on HousingVistaProperty {\n id\n title\n description\n type\n status\n category\n verificationStatus\n reraRegistrationNo\n reraAuthority\n reraApprovalDate\n reraUrl\n reraVerificationStatus\n imageUrl\n createdAt\n updatedAt\n price {\n amount\n currency\n type\n period\n negotiable\n pricePerSqft\n }\n location {\n address\n city\n state\n country\n pincode\n coordinates {\n latitude\n longitude\n }\n neighborhood\n landmarks\n }\n specifications {\n totalArea\n carpetArea\n builtUpArea\n bedrooms\n bathrooms\n floors\n totalFloors\n parking\n balconies\n furnishingStatus\n ageOfProperty\n facing\n }\n amenities {\n id\n name\n category\n available\n }\n images {\n id\n url\n title\n type\n order\n isPrimary\n }\n }\n`;\n\n// Trust-layer evidence (BOFF-8674) — DETAIL-ONLY. Kept out of the shared\n// PROPERTY_FIELDS on purpose: list/map queries (up to 200 listings) must not\n// resolve evidence files + signed downloadUrls they never render (Codex P2,\n// mfe#19). Only GetProperty spreads this fragment.\nconst PROPERTY_VERIFICATION_FIELDS = gql`\n fragment PropertyVerificationFields on HousingVistaProperty {\n verificationItems {\n id\n entityLabel\n entityType\n status\n submittedAt\n documentFiles {\n id\n name\n downloadUrl\n createdAt\n }\n }\n }\n`;\n\nconst GET_PROPERTIES = gql`\n ${PROPERTY_FIELDS}\n query GetProperties($filter: HousingVistaPropertyFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaProperties(filter: $filter, pagination: $pagination) {\n ...PropertyFields\n }\n }\n`;\n\nconst GET_PROPERTY = gql`\n ${PROPERTY_FIELDS}\n ${PROPERTY_VERIFICATION_FIELDS}\n query GetProperty($id: ID!) {\n housingvistaProperty(id: $id) {\n ...PropertyFields\n ...PropertyVerificationFields\n }\n }\n`;\n\nconst TRANSACTION_FIELDS = gql`\n fragment TransactionFields on HousingVistaTransaction {\n id\n title\n type\n status\n amount\n currency\n documents\n milestones\n parties\n escrow\n # Origin offer this deal was converted from (TXN-01 / BOFF-9171); null for\n # transactions not born from an accepted offer.\n offerId\n createdAt\n updatedAt\n property {\n id\n title\n location {\n city\n state\n }\n images {\n id\n url\n isPrimary\n }\n }\n buyer {\n id\n firstName\n lastName\n avatar\n }\n seller {\n id\n firstName\n lastName\n avatar\n }\n tenant {\n id\n firstName\n lastName\n avatar\n }\n landlord {\n id\n firstName\n lastName\n avatar\n }\n }\n`;\n\nconst GET_TRANSACTIONS = gql`\n ${TRANSACTION_FIELDS}\n query GetTransactions($filter: HousingVistaTransactionFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaTransactions(filter: $filter, pagination: $pagination) {\n ...TransactionFields\n }\n }\n`;\n\nconst GET_TRANSACTION = gql`\n ${TRANSACTION_FIELDS}\n query GetTransaction($id: ID!) {\n housingvistaTransaction(id: $id) {\n ...TransactionFields\n }\n }\n`;\n\nconst INVESTMENT_FIELDS = gql`\n fragment InvestmentFields on HousingVistaInvestment {\n id\n title\n investmentType\n totalValue\n status\n startDate\n maturityDate\n riskLevel\n investors\n returns\n property {\n id\n title\n location {\n city\n state\n }\n }\n }\n`;\n\nconst GET_INVESTMENTS = gql`\n ${INVESTMENT_FIELDS}\n query GetInvestments($filter: HousingVistaInvestmentFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaInvestments(filter: $filter, pagination: $pagination) {\n ...InvestmentFields\n }\n }\n`;\n\nconst GET_INVESTMENT = gql`\n ${INVESTMENT_FIELDS}\n query GetInvestment($id: ID!) {\n housingvistaInvestment(id: $id) {\n ...InvestmentFields\n }\n }\n`;\n\nconst GET_RENTAL_UNITS = gql`\n query GetRentalUnits($filter: HousingVistaRentalUnitFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaRentalUnits(filter: $filter, pagination: $pagination) {\n id\n propertyId\n propertyTitle\n unitNumber\n tenantName\n tenantEmail\n tenantPhone\n monthlyRent\n leaseStart\n leaseEnd\n status\n lastPaymentDate\n paymentStatus\n securityDeposit\n }\n }\n`;\n\nconst ASSET_FIELDS = gql`\n fragment AssetFields on HousingVistaAsset {\n id\n title\n type\n category\n location\n currentValue\n purchasePrice\n purchaseDate\n appreciationPercent\n rentalYield\n status\n imageUrl\n lastValuationDate\n }\n`;\n\nconst GET_ASSETS = gql`\n ${ASSET_FIELDS}\n query GetAssets($filter: HousingVistaAssetFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaAssets(filter: $filter, pagination: $pagination) {\n ...AssetFields\n }\n }\n`;\n\nconst GET_ASSET = gql`\n ${ASSET_FIELDS}\n query GetAsset($id: ID!) {\n housingvistaAsset(id: $id) {\n ...AssetFields\n }\n }\n`;\n\nconst GET_AMC_CONTRACTS = gql`\n query GetAmcContracts($filter: HousingVistaAmcContractFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaAmcContracts(filter: $filter, pagination: $pagination) {\n id\n propertyId\n propertyTitle\n packageName\n providerName\n status\n startDate\n endDate\n monthlyCost\n nextServiceDate\n servicesIncluded\n }\n }\n`;\n\nconst MARKETPLACE_SERVICE_FIELDS = gql`\n fragment MarketplaceServiceFields on HousingVistaMarketplaceService {\n id\n name\n providerName\n category\n description\n rating\n reviewCount\n priceRange\n availableAreas\n responseTime\n verified\n imageUrl\n featured\n }\n`;\n\nconst GET_MARKETPLACE_SERVICES = gql`\n ${MARKETPLACE_SERVICE_FIELDS}\n query GetMarketplaceServices(\n $filter: HousingVistaMarketplaceServiceFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaMarketplaceServices(filter: $filter, pagination: $pagination) {\n ...MarketplaceServiceFields\n }\n }\n`;\n\nconst GET_MARKETPLACE_SERVICE = gql`\n ${MARKETPLACE_SERVICE_FIELDS}\n query GetMarketplaceService($id: ID!) {\n housingvistaMarketplaceService(id: $id) {\n ...MarketplaceServiceFields\n }\n }\n`;\n\nconst VERIFICATION_FIELDS = gql`\n fragment VerificationFields on HousingVistaVerificationItem {\n id\n entityType\n entityId\n entityLabel\n status\n submittedDate\n reviewerName\n priority\n notes\n createdAt\n updatedAt\n }\n`;\n\nconst GET_VERIFICATIONS = gql`\n ${VERIFICATION_FIELDS}\n query GetVerifications($filter: HousingVistaVerificationItemFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaVerificationItems(filter: $filter, pagination: $pagination) {\n ...VerificationFields\n }\n }\n`;\n\nconst GET_VERIFICATION = gql`\n ${VERIFICATION_FIELDS}\n query GetVerification($id: ID!) {\n housingvistaVerificationItem(id: $id) {\n ...VerificationFields\n }\n }\n`;\n\nconst LEGAL_SERVICE_FIELDS = gql`\n fragment LegalServiceFields on HousingVistaLegalService {\n id\n title\n category\n description\n providerName\n providerRating\n estimatedDuration\n priceRange\n status\n consultationFee\n documentsRequired\n }\n`;\n\nconst GET_LEGAL_SERVICES = gql`\n ${LEGAL_SERVICE_FIELDS}\n query GetLegalServices($filter: HousingVistaLegalServiceFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaLegalServices(filter: $filter, pagination: $pagination) {\n ...LegalServiceFields\n }\n }\n`;\n\nconst GET_LEGAL_SERVICE = gql`\n ${LEGAL_SERVICE_FIELDS}\n query GetLegalService($id: ID!) {\n housingvistaLegalService(id: $id) {\n ...LegalServiceFields\n }\n }\n`;\n\nconst HOME_LOAN_FIELDS = gql`\n fragment HomeLoanFields on HousingVistaHomeLoanOffer {\n id\n bankName\n bankLogo\n interestRate\n maxTenure\n maxAmount\n processingFee\n emiPerLakh\n features\n rating\n specialOffer\n prepaymentCharges\n }\n`;\n\nconst GET_HOME_LOANS = gql`\n ${HOME_LOAN_FIELDS}\n query GetHomeLoans($pagination: HousingVistaPaginationInput) {\n housingvistaHomeLoanOffers(pagination: $pagination) {\n ...HomeLoanFields\n }\n }\n`;\n\nconst GET_HOME_LOAN = gql`\n ${HOME_LOAN_FIELDS}\n query GetHomeLoan($id: ID!) {\n housingvistaHomeLoanOffer(id: $id) {\n ...HomeLoanFields\n }\n }\n`;\n\nconst GET_MARKET_TRENDS = gql`\n query GetMarketTrends($pagination: HousingVistaPaginationInput) {\n housingvistaMarketTrends(pagination: $pagination) {\n month\n avgPrice\n avgRent\n demandIndex\n supplyIndex\n priceChangePercent\n }\n }\n`;\n\nconst GET_AREA_INSIGHTS = gql`\n query GetAreaInsights($pagination: HousingVistaPaginationInput) {\n housingvistaAreaInsights(pagination: $pagination) {\n id\n areaName\n city\n avgPropertyPrice\n avgRentalYield\n appreciationRate\n safetyScore\n connectivityScore\n amenitiesScore\n schoolsNearby\n hospitalsNearby\n population\n greenCoverPercent\n upcomingProjects\n avg2BhkPrice\n avg3BhkPrice\n amenitiesRating\n priceTrend {\n period\n avgPrice\n }\n futureProjects {\n name\n type\n expectedCompletion\n description\n }\n nearbyHubs\n transportLinks\n schools\n hospitals\n malls\n }\n }\n`;\n\nconst GET_ANALYTICS = gql`\n query GetHousingvistaAnalytics($period: HousingVistaAnalyticsPeriod) {\n housingvistaAnalytics(period: $period) {\n kpis {\n id\n label\n value\n previousValue\n unit\n trend\n changePercent\n }\n revenueByMonth {\n month\n revenue\n expenses\n }\n propertyTypeDistribution {\n type\n count\n value\n }\n occupancyRate {\n month\n rate\n }\n period\n }\n }\n`;\n\nconst SHORTLIST_FIELDS = gql`\n ${PROPERTY_FIELDS}\n fragment ShortlistFields on HousingVistaShortlist {\n id\n propertyId\n notes\n createdAt\n property {\n ...PropertyFields\n }\n }\n`;\n\nconst GET_SHORTLISTS = gql`\n ${SHORTLIST_FIELDS}\n query GetShortlists($pagination: HousingVistaPaginationInput) {\n housingvistaShortlists(pagination: $pagination) {\n ...ShortlistFields\n }\n }\n`;\n\nconst OFFER_FIELDS = gql`\n fragment OfferFields on HousingVistaOffer {\n id\n propertyId\n amount\n counterAmount\n currency\n status\n notes\n respondedAt\n expiresAt\n createdAt\n updatedAt\n property {\n id\n title\n location {\n city\n state\n }\n images {\n id\n url\n isPrimary\n }\n price {\n amount\n currency\n # sale | rent — drives the deal type when converting to a transaction.\n type\n }\n }\n }\n`;\n\nconst GET_OFFERS = gql`\n ${OFFER_FIELDS}\n query GetOffers($filter: HousingVistaOfferFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaOffers(filter: $filter, pagination: $pagination) {\n ...OfferFields\n }\n }\n`;\n\nconst GET_OFFER = gql`\n ${OFFER_FIELDS}\n query GetOffer($id: ID!) {\n housingvistaOffer(id: $id) {\n ...OfferFields\n }\n }\n`;\n\nconst VIEWING_FIELDS = gql`\n fragment ViewingFields on HousingVistaViewing {\n id\n propertyId\n scheduledAt\n type\n status\n attendeeName\n attendeeEmail\n notes\n createdAt\n updatedAt\n property {\n id\n title\n location {\n city\n state\n }\n images {\n id\n url\n isPrimary\n }\n }\n }\n`;\n\nconst GET_VIEWINGS = gql`\n ${VIEWING_FIELDS}\n query GetViewings($filter: HousingVistaViewingFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaViewings(filter: $filter, pagination: $pagination) {\n ...ViewingFields\n }\n }\n`;\n\nconst GET_VIEWING = gql`\n ${VIEWING_FIELDS}\n query GetViewing($id: ID!) {\n housingvistaViewing(id: $id) {\n ...ViewingFields\n }\n }\n`;\n\nconst RENTAL_APPLICATION_FIELDS = gql`\n fragment RentalApplicationFields on HousingVistaRentalApplication {\n id\n rentalUnitId\n applicantName\n applicantEmail\n applicantPhone\n monthlyIncome\n moveInDate\n status\n reviewNotes\n reviewedAt\n createdAt\n updatedAt\n rentalUnit {\n id\n unitNumber\n propertyTitle\n monthlyRent\n }\n }\n`;\n\nconst GET_RENTAL_APPLICATIONS = gql`\n ${RENTAL_APPLICATION_FIELDS}\n query GetRentalApplications(\n $filter: HousingVistaRentalApplicationFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaRentalApplications(filter: $filter, pagination: $pagination) {\n ...RentalApplicationFields\n }\n }\n`;\n\nconst MAINTENANCE_FIELDS = gql`\n fragment MaintenanceFields on HousingVistaMaintenanceRequest {\n id\n propertyId\n rentalUnitId\n title\n description\n category\n priority\n status\n resolutionNotes\n resolvedAt\n createdAt\n updatedAt\n }\n`;\n\nconst GET_MAINTENANCE_REQUESTS = gql`\n ${MAINTENANCE_FIELDS}\n query GetMaintenanceRequests(\n $filter: HousingVistaMaintenanceRequestFilterInput\n $pagination: HousingVistaPaginationInput\n ) {\n housingvistaMaintenanceRequests(filter: $filter, pagination: $pagination) {\n ...MaintenanceFields\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Mutation documents\n// ---------------------------------------------------------------------------\n\nconst CREATE_PROPERTY = gql`\n ${PROPERTY_FIELDS}\n mutation CreateHousingvistaProperty($input: HousingVistaCreatePropertyInput!) {\n createHousingvistaProperty(input: $input) {\n ...PropertyFields\n }\n }\n`;\n\nconst UPDATE_PROPERTY = gql`\n ${PROPERTY_FIELDS}\n mutation UpdateHousingvistaProperty($id: ID!, $input: HousingVistaUpdatePropertyInput!) {\n updateHousingvistaProperty(id: $id, input: $input) {\n ...PropertyFields\n }\n }\n`;\n\nconst DELETE_PROPERTY = gql`\n mutation DeleteHousingvistaProperty($id: ID!) {\n deleteHousingvistaProperty(id: $id)\n }\n`;\n\nconst SAVE_SHORTLIST = gql`\n ${SHORTLIST_FIELDS}\n mutation SaveHousingvistaShortlist($input: HousingVistaSaveShortlistInput!) {\n saveHousingvistaShortlist(input: $input) {\n ...ShortlistFields\n }\n }\n`;\n\nconst REMOVE_SHORTLIST = gql`\n mutation RemoveHousingvistaShortlist($propertyId: ID!) {\n removeHousingvistaShortlist(propertyId: $propertyId)\n }\n`;\n\nconst BOOK_VIEWING = gql`\n mutation BookHousingvistaViewing($input: HousingVistaBookViewingInput!) {\n bookHousingvistaViewing(input: $input) {\n id\n propertyId\n scheduledAt\n type\n status\n attendeeName\n attendeeEmail\n notes\n }\n }\n`;\n\nconst CANCEL_VIEWING = gql`\n mutation CancelHousingvistaViewing($id: ID!) {\n cancelHousingvistaViewing(id: $id) {\n id\n status\n }\n }\n`;\n\nconst SUBMIT_OFFER = gql`\n mutation SubmitHousingvistaOffer($input: HousingVistaSubmitOfferInput!) {\n submitHousingvistaOffer(input: $input) {\n id\n propertyId\n amount\n currency\n status\n notes\n expiresAt\n createdAt\n }\n }\n`;\n\nconst RESPOND_OFFER = gql`\n mutation RespondHousingvistaOffer($id: ID!, $input: HousingVistaRespondOfferInput!) {\n respondHousingvistaOffer(id: $id, input: $input) {\n id\n status\n counterAmount\n respondedAt\n }\n }\n`;\n\nconst CREATE_TRANSACTION = gql`\n ${TRANSACTION_FIELDS}\n mutation CreateHousingvistaTransaction($input: HousingVistaCreateTransactionInput!) {\n createHousingvistaTransaction(input: $input) {\n ...TransactionFields\n }\n }\n`;\n\nconst CREATE_INVESTMENT = gql`\n ${INVESTMENT_FIELDS}\n mutation CreateHousingvistaInvestment($input: HousingVistaCreateInvestmentInput!) {\n createHousingvistaInvestment(input: $input) {\n ...InvestmentFields\n }\n }\n`;\n\nconst CREATE_RENTAL_UNIT = gql`\n mutation CreateHousingvistaRentalUnit($input: HousingVistaCreateRentalUnitInput!) {\n createHousingvistaRentalUnit(input: $input) {\n id\n propertyTitle\n unitNumber\n tenantName\n monthlyRent\n status\n }\n }\n`;\n\nconst SUBMIT_RENTAL_APPLICATION = gql`\n mutation SubmitHousingvistaRentalApplication($input: HousingVistaSubmitRentalApplicationInput!) {\n submitHousingvistaRentalApplication(input: $input) {\n id\n rentalUnitId\n applicantName\n status\n }\n }\n`;\n\nconst CREATE_AMC_CONTRACT = gql`\n mutation CreateHousingvistaAmcContract($input: HousingVistaCreateAmcContractInput!) {\n createHousingvistaAmcContract(input: $input) {\n id\n propertyTitle\n packageName\n providerName\n monthlyCost\n status\n }\n }\n`;\n\nconst CREATE_MAINTENANCE_REQUEST = gql`\n mutation CreateHousingvistaMaintenanceRequest($input: HousingVistaCreateMaintenanceRequestInput!) {\n createHousingvistaMaintenanceRequest(input: $input) {\n id\n title\n category\n priority\n status\n }\n }\n`;\n\nconst CREATE_VERIFICATION_ITEM = gql`\n mutation CreateHousingvistaVerificationItem($input: HousingVistaCreateVerificationItemInput!) {\n createHousingvistaVerificationItem(input: $input) {\n id\n status\n entityLabel\n }\n }\n`;\n\nconst APPROVE_VERIFICATION = gql`\n mutation ApproveHousingvistaVerificationItem($id: ID!, $notes: String) {\n approveHousingvistaVerificationItem(id: $id, notes: $notes) {\n id\n status\n reviewerName\n notes\n # Needed to sync the normalized listing record (badge) in the cache\n # after a decision (reviewer P2, mfe#19).\n entityType\n entityId\n }\n }\n`;\n\nconst REJECT_VERIFICATION = gql`\n mutation RejectHousingvistaVerificationItem($id: ID!, $notes: String) {\n rejectHousingvistaVerificationItem(id: $id, notes: $notes) {\n id\n status\n reviewerName\n notes\n entityType\n entityId\n }\n }\n`;\n\nconst UPDATE_PROPERTY_RERA_STATUS = gql`\n mutation UpdateHousingvistaPropertyReraStatus(\n $id: ID!\n $status: HousingVistaReraVerificationStatus!\n $notes: String\n ) {\n updateHousingvistaPropertyReraStatus(id: $id, status: $status, notes: $notes) {\n id\n reraVerificationStatus\n reraApprovalDate\n }\n }\n`;\n\nconst WITHDRAW_OFFER = gql`\n mutation WithdrawHousingvistaOffer($id: ID!) {\n withdrawHousingvistaOffer(id: $id) {\n id\n status\n }\n }\n`;\n\nconst UPDATE_VIEWING = gql`\n mutation UpdateHousingvistaViewing($id: ID!, $input: HousingVistaUpdateViewingInput!) {\n updateHousingvistaViewing(id: $id, input: $input) {\n id\n scheduledAt\n status\n type\n notes\n }\n }\n`;\n\nconst UPDATE_INVESTMENT = gql`\n ${INVESTMENT_FIELDS}\n mutation UpdateHousingvistaInvestment($id: ID!, $input: HousingVistaUpdateInvestmentInput!) {\n updateHousingvistaInvestment(id: $id, input: $input) {\n ...InvestmentFields\n }\n }\n`;\n\nconst DELETE_INVESTMENT = gql`\n mutation DeleteHousingvistaInvestment($id: ID!) {\n deleteHousingvistaInvestment(id: $id)\n }\n`;\n\nconst CREATE_ASSET = gql`\n ${ASSET_FIELDS}\n mutation CreateHousingvistaAsset($input: HousingVistaCreateAssetInput!) {\n createHousingvistaAsset(input: $input) {\n ...AssetFields\n }\n }\n`;\n\nconst UPDATE_ASSET = gql`\n ${ASSET_FIELDS}\n mutation UpdateHousingvistaAsset($id: ID!, $input: HousingVistaUpdateAssetInput!) {\n updateHousingvistaAsset(id: $id, input: $input) {\n ...AssetFields\n }\n }\n`;\n\nconst DELETE_ASSET = gql`\n mutation DeleteHousingvistaAsset($id: ID!) {\n deleteHousingvistaAsset(id: $id)\n }\n`;\n\nconst UPDATE_AMC_CONTRACT = gql`\n mutation UpdateHousingvistaAmcContract($id: ID!, $input: HousingVistaUpdateAmcContractInput!) {\n updateHousingvistaAmcContract(id: $id, input: $input) {\n id\n status\n packageName\n providerName\n monthlyCost\n }\n }\n`;\n\nconst DELETE_AMC_CONTRACT = gql`\n mutation DeleteHousingvistaAmcContract($id: ID!) {\n deleteHousingvistaAmcContract(id: $id)\n }\n`;\n\nconst UPDATE_TRANSACTION = gql`\n ${TRANSACTION_FIELDS}\n mutation UpdateHousingvistaTransaction($id: ID!, $input: HousingVistaUpdateTransactionInput!) {\n updateHousingvistaTransaction(id: $id, input: $input) {\n ...TransactionFields\n }\n }\n`;\n\nconst DELETE_TRANSACTION = gql`\n mutation DeleteHousingvistaTransaction($id: ID!) {\n deleteHousingvistaTransaction(id: $id)\n }\n`;\n\nconst RESOLVE_MAINTENANCE = gql`\n ${MAINTENANCE_FIELDS}\n mutation ResolveHousingvistaMaintenanceRequest($id: ID!, $resolutionNotes: String) {\n resolveHousingvistaMaintenanceRequest(id: $id, resolutionNotes: $resolutionNotes) {\n ...MaintenanceFields\n }\n }\n`;\n\nconst REVIEW_RENTAL_APPLICATION = gql`\n ${RENTAL_APPLICATION_FIELDS}\n mutation ReviewHousingvistaRentalApplication($id: ID!, $input: HousingVistaReviewRentalApplicationInput!) {\n reviewHousingvistaRentalApplication(id: $id, input: $input) {\n ...RentalApplicationFields\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Query-result row shapes (as selected above)\n// ---------------------------------------------------------------------------\n\ninterface PropertyVerificationItemRow {\n id: string;\n entityLabel: string;\n entityType: string;\n status: string;\n submittedAt: string;\n documentFiles: {\n id: string;\n name: string;\n downloadUrl: string | null;\n createdAt: string;\n }[];\n}\n\ninterface PropertyRow {\n id: string;\n title: string;\n description: string | null;\n type: Property['type'];\n status: Property['status'];\n category: string;\n verificationStatus: string;\n reraRegistrationNo: string | null;\n reraAuthority: string | null;\n reraApprovalDate: string | null;\n reraUrl: string | null;\n reraVerificationStatus: ReraVerificationStatus;\n imageUrl: string | null;\n createdAt: string;\n updatedAt: string;\n price: Property['price'];\n location: Omit<Property['location'], 'coordinates'> & {\n coordinates: { latitude: number; longitude: number } | null;\n };\n specifications: Property['specifications'];\n amenities: Property['amenities'];\n images: Property['images'];\n // Trust layer (BOFF-8674): verification checks filed against the listing.\n // Detail-only (see PROPERTY_VERIFICATION_FIELDS) — absent on list rows.\n verificationItems?: PropertyVerificationItemRow[];\n}\n\ninterface TransactionRow {\n id: string;\n title: string;\n type: string;\n status: string;\n amount: number;\n currency: string;\n documents: unknown;\n milestones: unknown;\n parties: unknown;\n escrow: unknown;\n /** Origin offer id when this deal was converted from an accepted offer (TXN-01). */\n offerId: string | null;\n createdAt: string;\n updatedAt: string;\n property: PropertyRow | null;\n buyer: TxParty | null;\n seller: TxParty | null;\n tenant: TxParty | null;\n landlord: TxParty | null;\n}\n\ninterface TxParty {\n id: string | null;\n firstName: string | null;\n lastName: string | null;\n avatar: string | null;\n}\n\ninterface InvestmentRow {\n id: string;\n title: string;\n investmentType: string;\n totalValue: number;\n status: string;\n startDate: string;\n maturityDate: string | null;\n riskLevel: string;\n investors: unknown;\n returns: unknown;\n property: PropertyRow | null;\n}\n\ninterface ShortlistRow {\n id: string;\n propertyId: string;\n notes: string | null;\n createdAt: string;\n property: PropertyRow;\n}\n\n// ---------------------------------------------------------------------------\n// Mappers: GraphQL row → MFE domain type\n// ---------------------------------------------------------------------------\n\n/**\n * The domain `Property` carries display-only fields the subgraph does not\n * resolve (owner/documents/features/virtualTours/availability). We fill the\n * present fields from the query and default the rest to empty so consumers can\n * render honest empty-states rather than crashing on `undefined`.\n */\nconst mapProperty = (row: PropertyRow): Property => ({\n id: row.id,\n title: row.title,\n description: row.description ?? '',\n type: row.type,\n status: row.status,\n category: row.category as Property['category'],\n price: row.price,\n location: {\n ...row.location,\n coordinates: row.location.coordinates ?? { latitude: 0, longitude: 0 },\n },\n specifications: row.specifications,\n amenities: row.amenities ?? [],\n images: row.images ?? [],\n // Trust layer (BOFF-8674): flatten each verification check's evidence\n // files into the existing PropertyDocument shape so any consumer of\n // property.documents sees per-document verification. The check's status\n // covers its whole document set (batch-level truth; the item IS the\n // document batch here) — 'approved' maps to the 'verified' signal the\n // badge/filter already use.\n documents: (row.verificationItems ?? []).flatMap((item) =>\n (item.documentFiles ?? []).map((file) => ({\n id: file.id,\n name: file.name,\n type: 'verification',\n url: file.downloadUrl ?? '',\n verificationStatus: (item.status === 'approved' ? 'verified' : item.status) as VerificationStatus,\n // The File's own createdAt is the upload time — the item's submittedAt\n // can be later than the actual upload if the agent drafted first\n // (Codex P2, mfe#19).\n uploadedAt: new Date(file.createdAt),\n }))\n ),\n virtualTours: [],\n owner: { id: '', name: '', email: '', phone: '', verified: false },\n features: [],\n verificationStatus: (row.verificationStatus as Property['verificationStatus']) ?? 'pending',\n availability: { available: true },\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n reraRegistrationNo: row.reraRegistrationNo,\n reraAuthority: row.reraAuthority,\n reraApprovalDate: row.reraApprovalDate ? new Date(row.reraApprovalDate) : null,\n reraUrl: row.reraUrl,\n reraVerificationStatus: row.reraVerificationStatus ?? 'not_applicable',\n});\n\n// ---------------------------------------------------------------------------\n// Query hooks\n// ---------------------------------------------------------------------------\n\nconst emptyTrends: DashboardTrends = {\n totalProperties: [],\n monthlyRevenue: [],\n occupancyRate: [],\n activeTransactions: [],\n};\n\nexport const useDashboardStats = () => {\n const { data, loading, error } = useQuery<{ housingvistaDashboardStats: DashboardStats }>(GET_DASHBOARD_STATS);\n const empty: DashboardStats = {\n totalProperties: 0,\n totalValue: 0,\n occupancyRate: 0,\n monthlyRevenue: 0,\n activeTransactions: 0,\n pendingVerifications: 0,\n totalInvestments: 0,\n investmentReturns: 0,\n totalTenants: 0,\n maintenanceRequests: 0,\n unreadMessages: 0,\n upcomingViewings: 0,\n trends: emptyTrends,\n };\n return { data: data?.housingvistaDashboardStats ?? empty, loading, error };\n};\n\nexport const useRecentActivities = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaTransactions: TransactionRow[] }>(GET_TRANSACTIONS, {\n variables: getPaginationVariables(pagination),\n });\n const activities: RecentActivity[] = (data?.housingvistaTransactions ?? []).map((txn) => ({\n id: `act-${txn.id}`,\n type: 'transaction_update',\n title: `Transaction: ${txn.type}`,\n description: `${txn.property?.title ?? 'Property'} - ${txn.status}`,\n timestamp: txn.updatedAt || txn.createdAt,\n entityId: txn.id,\n entityType: 'transaction',\n actorName: txn.buyer\n ? `${txn.buyer.firstName ?? ''} ${txn.buyer.lastName ?? ''}`.trim()\n : txn.tenant\n ? `${txn.tenant.firstName ?? ''} ${txn.tenant.lastName ?? ''}`.trim()\n : 'System',\n actorAvatar: txn.buyer?.avatar ?? txn.tenant?.avatar ?? undefined,\n }));\n return { data: activities, loading, error };\n};\n\nexport const useProperties = (options?: {\n filter?: PropertyFilterInput;\n pagination?: PaginationInput;\n skip?: boolean;\n}) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaProperties: PropertyRow[] }>(GET_PROPERTIES, {\n variables: {\n filter: options?.filter,\n ...getPaginationVariables(options?.pagination),\n },\n skip: options?.skip,\n });\n return {\n data: (data?.housingvistaProperties ?? []).map(mapProperty),\n loading,\n error,\n refetch,\n };\n};\n\nexport const useProperty = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaProperty: PropertyRow | null }>(GET_PROPERTY, {\n variables: { id: id ?? '' },\n skip: !id,\n // cache-and-network: the Documents tab's evidence can change from the\n // Verification Center (or another reviewer) between visits — serve the\n // cache instantly but always reconcile against the network on mount\n // (Codex P2, mfe#19).\n fetchPolicy: 'cache-and-network',\n });\n return {\n data: data?.housingvistaProperty ? mapProperty(data.housingvistaProperty) : null,\n loading,\n error,\n };\n};\n\n// BOFF-4129 — natural-language property search. `method` tells the caller\n// whether the filter shown was extracted by an LLM ('ai') or the\n// deterministic keyword baseline ('keyword'); `fallbackReason` is set when\n// an AI attempt was made and failed. `results` are always a real\n// `listProperties` query result — never LLM-generated listing data.\nexport interface NlSearchFilter {\n city?: string | null;\n type?: PropertyType | null;\n status?: PropertyStatus | null;\n category?: string | null;\n priceMin?: number | null;\n priceMax?: number | null;\n bedroomsMin?: number | null;\n amenities?: string[] | null;\n reraVerificationStatus?: string | null;\n}\n\ninterface NlSearchResultRow {\n query: string;\n method: 'ai' | 'keyword';\n fallbackReason: string | null;\n filter: NlSearchFilter;\n properties: PropertyRow[];\n}\n\nconst NL_SEARCH_PROPERTIES = gql`\n ${PROPERTY_FIELDS}\n query HousingVistaNaturalLanguageSearch($query: String!, $pagination: HousingVistaPaginationInput) {\n housingvistaNaturalLanguageSearch(query: $query, pagination: $pagination) {\n query\n method\n fallbackReason\n filter {\n city\n type\n status\n category\n priceMin\n priceMax\n bedroomsMin\n amenities\n reraVerificationStatus\n }\n properties {\n ...PropertyFields\n }\n }\n }\n`;\n\nexport const useNaturalLanguageSearch = () => {\n const [run, { data, loading, error }] = useLazyQuery<\n { housingvistaNaturalLanguageSearch: NlSearchResultRow },\n { query: string; pagination?: PaginationInput }\n >(NL_SEARCH_PROPERTIES);\n\n const search = (query: string, pagination?: PaginationInput) => run({ variables: { query, pagination } });\n\n const result = data?.housingvistaNaturalLanguageSearch;\n return {\n search,\n loading,\n error,\n method: result?.method ?? null,\n fallbackReason: result?.fallbackReason ?? null,\n filter: result?.filter ?? null,\n properties: (result?.properties ?? []).map(mapProperty),\n };\n};\n\nexport const useTransactions = (options?: ListOptions<TransactionFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaTransactions: TransactionRow[] }>(GET_TRANSACTIONS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n // Transaction JSON columns (documents/milestones/parties/escrow) are opaque to\n // the schema; the page guards their runtime shape. Cast is localized here.\n return { data: (data?.housingvistaTransactions ?? []) as unknown as Transaction[], loading, error, refetch };\n};\n\n/**\n * Generic paged-to-completion reader: the svc caps a page at 100, so crawl\n * until a short page (50-page safety bound = 5,000 rows). Pure crawl: state\n * is written only behind the caller's cancellation guard, so a stopped crawl\n * never publishes partial results. Exposes error + refetch so callers can\n * tell \"no rows\" apart from \"we don't know\" and refresh after a mutation.\n */\nfunction useAllPages<TRow>(query: DocumentNode, listField: string, baseVariables?: Record<string, unknown>) {\n const client = useApolloClient();\n const [data, setData] = useState<TRow[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n // Ref indirection so an inline baseVariables object (new ref every render)\n // cannot re-trigger the crawl effect on every render.\n const baseVariablesRef = useRef(baseVariables);\n useEffect(() => {\n baseVariablesRef.current = baseVariables;\n }, [baseVariables]);\n\n const fetchAll = useCallback(\n async (shouldStop?: () => boolean): Promise<TRow[]> => {\n const all: TRow[] = [];\n let offset = 0;\n const MAX_PAGES = 50;\n for (let pageIndex = 0; pageIndex < MAX_PAGES; pageIndex += 1) {\n if (shouldStop?.()) break;\n const result = await client.query<{ [key: string]: TRow[] | undefined }>({\n query,\n variables: { ...baseVariablesRef.current, pagination: { limit: 100, offset } },\n fetchPolicy: 'network-only',\n });\n const page = result.data?.[listField] ?? [];\n all.push(...page);\n if (page.length < 100) break;\n offset += page.length;\n }\n return all;\n },\n [client, query, listField]\n );\n\n // Monotonic generation: a crawl superseded by a newer one (e.g. refetch()\n // racing an in-flight initial crawl) must never write state — only the\n // latest generation publishes.\n const generationRef = useRef(0);\n\n const refetch = useCallback(async () => {\n const generation = ++generationRef.current;\n setLoading(true);\n setError(null);\n try {\n const all = await fetchAll();\n if (generation !== generationRef.current) return;\n setData(all);\n } catch (err) {\n if (generation === generationRef.current) setError(err as Error);\n } finally {\n if (generation === generationRef.current) setLoading(false);\n }\n }, [fetchAll]);\n\n useEffect(() => {\n let cancelled = false;\n const generation = ++generationRef.current;\n setLoading(true);\n setError(null);\n fetchAll(() => cancelled)\n .then((all) => {\n if (!cancelled && generation === generationRef.current) setData(all);\n })\n .catch((err) => {\n if (!cancelled) setError(err as Error);\n })\n .finally(() => {\n if (!cancelled) setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [fetchAll]);\n\n return { data, loading, error, refetch };\n}\n\n/**\n * Every transaction in the workspace, paged to completion. Used where the UI\n * must match rows across the full set — e.g. the OffersPage \"Create deal\"\n * gate, which must see a deal converted from any accepted offer no matter\n * where it falls in the list.\n */\nexport const useAllTransactions = () => {\n const { data, loading, error, refetch } = useAllPages<TransactionRow>(GET_TRANSACTIONS, 'housingvistaTransactions');\n // Transaction JSON columns are opaque to the schema; pages guard their\n // runtime shape. Cast is localized here.\n return {\n data: data as unknown as Transaction[],\n loading,\n error,\n refetch,\n };\n};\n\nexport const useTransaction = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaTransaction: TransactionRow | null }>(GET_TRANSACTION, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return {\n data: (data?.housingvistaTransaction ?? null) as unknown as Transaction | null,\n loading,\n error,\n };\n};\n\nexport const useInvestments = (options?: ListOptions<InvestmentFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaInvestments: InvestmentRow[] }>(GET_INVESTMENTS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: (data?.housingvistaInvestments ?? []) as unknown as Investment[], loading, error, refetch };\n};\n\nexport const useInvestment = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaInvestment: InvestmentRow | null }>(GET_INVESTMENT, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: (data?.housingvistaInvestment ?? null) as unknown as Investment | null, loading, error };\n};\n\nexport const useRentalUnits = (options?: ListOptions<RentalUnitFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaRentalUnits: RentalUnit[] }>(GET_RENTAL_UNITS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaRentalUnits ?? [], loading, error, refetch };\n};\n\nexport const useAssets = (options?: ListOptions<AssetFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaAssets: Asset[] }>(GET_ASSETS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaAssets ?? [], loading, error, refetch };\n};\n\nexport const useAsset = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaAsset: Asset | null }>(GET_ASSET, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaAsset ?? null, loading, error };\n};\n\nexport const useAMCContracts = (options?: ListOptions<AmcContractFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaAmcContracts: AMCContract[] }>(GET_AMC_CONTRACTS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n // servicesIncluded is a JSON column: a contract created without services reads back null.\n const contracts = useMemo(\n () =>\n (data?.housingvistaAmcContracts ?? []).map((contract) => ({\n ...contract,\n servicesIncluded: Array.isArray(contract.servicesIncluded) ? contract.servicesIncluded : [],\n })),\n [data]\n );\n return { data: contracts, loading, error, refetch };\n};\n\nexport const useMarketplaceServices = (options?: ListOptions<MarketplaceServiceFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaMarketplaceServices: MarketplaceService[] }>(\n GET_MARKETPLACE_SERVICES,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaMarketplaceServices ?? [], loading, error, refetch };\n};\n\nexport const useMarketplaceService = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaMarketplaceService: MarketplaceService | null }>(\n GET_MARKETPLACE_SERVICE,\n { variables: { id: id ?? '' }, skip: !id }\n );\n return { data: data?.housingvistaMarketplaceService ?? null, loading, error };\n};\n\nexport const useVerifications = (options?: ListOptions<VerificationItemFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaVerificationItems: VerificationItem[] }>(\n GET_VERIFICATIONS,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaVerificationItems ?? [], loading, error, refetch };\n};\n\n/**\n * Single verification item. The detail view needs the audit timestamps\n * (`createdAt`/`updatedAt`) that the list type omits, so the result is typed as\n * `VerificationItem` extended with those ISO-string fields.\n */\nexport type VerificationItemDetail = VerificationItem & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport const useVerificationItem = (id: string | undefined) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaVerificationItem: VerificationItemDetail | null }>(\n GET_VERIFICATION,\n { variables: { id: id ?? '' }, skip: !id }\n );\n return { data: data?.housingvistaVerificationItem ?? null, loading, error, refetch };\n};\n\nexport const useLegalServices = (options?: ListOptions<LegalServiceFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaLegalServices: LegalService[] }>(\n GET_LEGAL_SERVICES,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaLegalServices ?? [], loading, error, refetch };\n};\n\nexport const useLegalService = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaLegalService: LegalService | null }>(GET_LEGAL_SERVICE, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaLegalService ?? null, loading, error };\n};\n\nexport const useHomeLoans = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaHomeLoanOffers: HomeLoan[] }>(GET_HOME_LOANS, {\n variables: getPaginationVariables(pagination),\n });\n return { data: data?.housingvistaHomeLoanOffers ?? [], loading, error };\n};\n\nexport const useHomeLoanOffer = (id: string | undefined) => {\n const { data, loading, error } = useQuery<{ housingvistaHomeLoanOffer: HomeLoan | null }>(GET_HOME_LOAN, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaHomeLoanOffer ?? null, loading, error };\n};\n\nexport const useMarketTrends = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaMarketTrends: MarketTrend[] }>(GET_MARKET_TRENDS, {\n variables: getPaginationVariables(pagination),\n });\n return { data: data?.housingvistaMarketTrends ?? [], loading, error };\n};\n\nexport const useAreaInsights = (pagination?: PaginationInput) => {\n const { data, loading, error } = useQuery<{ housingvistaAreaInsights: AreaInsight[] }>(GET_AREA_INSIGHTS, {\n variables: getPaginationVariables(pagination),\n });\n return { data: data?.housingvistaAreaInsights ?? [], loading, error };\n};\n\nexport const useShortlists = (pagination?: PaginationInput) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaShortlists: ShortlistRow[] }>(GET_SHORTLISTS, {\n variables: getPaginationVariables(pagination),\n });\n const shortlists = (data?.housingvistaShortlists ?? []).map((row) => ({\n id: row.id,\n propertyId: row.propertyId,\n notes: row.notes ?? undefined,\n createdAt: row.createdAt,\n property: mapProperty(row.property),\n }));\n return { data: shortlists, loading, error, refetch };\n};\n\nexport const useAnalyticsData = (period: AnalyticsPeriod = 'month') => {\n const { data, loading, error } = useQuery<{ housingvistaAnalytics: AnalyticsChartData }>(GET_ANALYTICS, {\n variables: { period },\n });\n return { data: data?.housingvistaAnalytics ?? null, loading, error };\n};\n\n// ---------------------------------------------------------------------------\n// Offers / Viewings / Rental applications / Maintenance — query hooks\n// ---------------------------------------------------------------------------\n\nexport interface OfferRow {\n id: string;\n propertyId: string;\n amount: number;\n counterAmount: number | null;\n currency: string;\n status: 'submitted' | 'countered' | 'accepted' | 'rejected' | 'withdrawn' | 'expired';\n notes: string | null;\n respondedAt: string | null;\n /** Optional deadline; open offers flip to 'expired' past it (backend lazy sweep). */\n expiresAt: string | null;\n createdAt: string;\n updatedAt: string;\n property: {\n id: string;\n title: string;\n location: { city: string; state: string };\n images: { id: string; url: string; isPrimary: boolean }[];\n price: { amount: number; currency: string; type?: string | null };\n } | null;\n}\n\nexport const useOffers = (options?: ListOptions<OfferFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaOffers: OfferRow[] }>(GET_OFFERS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaOffers ?? [], loading, error, refetch };\n};\n\nexport const useOffer = (id: string | undefined) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaOffer: OfferRow | null }>(GET_OFFER, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaOffer ?? null, loading, error, refetch };\n};\n\nexport interface ViewingRow {\n id: string;\n propertyId: string;\n scheduledAt: string;\n type: 'in_person' | 'virtual';\n status: 'requested' | 'confirmed' | 'completed' | 'cancelled';\n attendeeName: string | null;\n attendeeEmail: string | null;\n notes: string | null;\n createdAt: string;\n updatedAt: string;\n property: {\n id: string;\n title: string;\n location: { city: string; state: string };\n images: { id: string; url: string; isPrimary: boolean }[];\n } | null;\n}\n\nexport const useViewings = (options?: ListOptions<ViewingFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaViewings: ViewingRow[] }>(GET_VIEWINGS, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaViewings ?? [], loading, error, refetch };\n};\n\nexport const useViewing = (id: string | undefined) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaViewing: ViewingRow | null }>(GET_VIEWING, {\n variables: { id: id ?? '' },\n skip: !id,\n });\n return { data: data?.housingvistaViewing ?? null, loading, error, refetch };\n};\n\nexport interface RentalApplicationRow {\n id: string;\n rentalUnitId: string;\n applicantName: string;\n applicantEmail: string;\n applicantPhone: string | null;\n monthlyIncome: number | null;\n moveInDate: string | null;\n status: 'submitted' | 'screening' | 'approved' | 'rejected';\n reviewNotes: string | null;\n reviewedAt: string | null;\n createdAt: string;\n updatedAt: string;\n rentalUnit: {\n id: string;\n unitNumber: string;\n propertyTitle: string;\n monthlyRent: number;\n } | null;\n}\n\nexport const useRentalApplications = (options?: ListOptions<RentalApplicationFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaRentalApplications: RentalApplicationRow[] }>(\n GET_RENTAL_APPLICATIONS,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaRentalApplications ?? [], loading, error, refetch };\n};\n\n// ── Leases (TXN-02 / BOFF-9330) ──────────────────────────────────────────\n\nconst LEASE_FIELDS = gql`\n fragment LeaseFields on HousingVistaLease {\n id\n rentalUnitId\n rentalApplicationId\n tenantName\n tenantEmail\n tenantPhone\n monthlyRent\n securityDeposit\n leaseStart\n leaseEnd\n type\n status\n createdAt\n updatedAt\n rentalUnit {\n id\n unitNumber\n propertyTitle\n }\n }\n`;\n\nconst GET_LEASES = gql`\n ${LEASE_FIELDS}\n query GetLeases($filter: HousingVistaLeaseFilterInput, $pagination: HousingVistaPaginationInput) {\n housingvistaLeases(filter: $filter, pagination: $pagination) {\n ...LeaseFields\n }\n }\n`;\n\nexport interface LeaseRow {\n id: string;\n rentalUnitId: string;\n rentalApplicationId: string | null;\n tenantName: string;\n tenantEmail: string;\n tenantPhone: string | null;\n monthlyRent: number;\n securityDeposit: number | null;\n leaseStart: string;\n leaseEnd: string;\n type: string;\n status: 'draft' | 'active' | 'renewed' | 'terminated';\n createdAt: string;\n updatedAt: string;\n rentalUnit: {\n id: string;\n unitNumber: string;\n propertyTitle: string;\n } | null;\n}\n\nexport const useLeases = (options?: ListOptions<LeaseFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaLeases: LeaseRow[] }>(GET_LEASES, {\n variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) },\n });\n return { data: data?.housingvistaLeases ?? [], loading, error, refetch };\n};\n\n/** Every lease in the workspace, paged to completion (see useAllPages). */\nexport const useAllLeases = () => useAllPages<LeaseRow>(GET_LEASES, 'housingvistaLeases');\n\nexport interface CreateLeaseInput {\n rentalUnitId: string;\n rentalApplicationId?: string;\n tenantName: string;\n tenantEmail: string;\n tenantPhone?: string;\n monthlyRent: number;\n securityDeposit?: number;\n leaseStart: string;\n leaseEnd: string;\n type?: string;\n status?: string;\n}\n\nexport const useCreateLease = () => {\n const [mutate, { loading }] = useMutation<{ createHousingvistaLease: LeaseRow }, { input: CreateLeaseInput }>(\n gql`\n ${LEASE_FIELDS}\n mutation CreateHousingvistaLease($input: HousingVistaCreateLeaseInput!) {\n createHousingvistaLease(input: $input) {\n ...LeaseFields\n }\n }\n `,\n { refetchQueries: ['GetLeases', 'GetRentalUnits', 'GetRentalApplications'], awaitRefetchQueries: true }\n );\n const createLease = async (input: CreateLeaseInput) => {\n await mutate({ variables: { input } });\n };\n return { createLease, loading };\n};\n\nexport const useRenewLease = () => {\n const [mutate, { loading }] = useMutation<\n { renewHousingvistaLease: LeaseRow },\n { id: string; input: { leaseEnd: string } }\n >(\n gql`\n ${LEASE_FIELDS}\n mutation RenewHousingvistaLease($id: ID!, $input: HousingVistaRenewLeaseInput!) {\n renewHousingvistaLease(id: $id, input: $input) {\n ...LeaseFields\n }\n }\n `,\n { refetchQueries: ['GetLeases', 'GetRentalUnits'], awaitRefetchQueries: true }\n );\n const renewLease = async (id: string, leaseEnd: string) => {\n await mutate({ variables: { id, input: { leaseEnd } } });\n };\n return { renewLease, loading };\n};\n\nexport const useTerminateLease = () => {\n const [mutate, { loading }] = useMutation<\n { terminateHousingvistaLease: LeaseRow },\n { id: string; input: { notes?: string } }\n >(\n gql`\n ${LEASE_FIELDS}\n mutation TerminateHousingvistaLease($id: ID!, $input: HousingVistaTerminateLeaseInput!) {\n terminateHousingvistaLease(id: $id, input: $input) {\n ...LeaseFields\n }\n }\n `,\n { refetchQueries: ['GetLeases', 'GetRentalUnits'], awaitRefetchQueries: true }\n );\n const terminateLease = async (id: string, notes?: string) => {\n await mutate({ variables: { id, input: { notes } } });\n };\n return { terminateLease, loading };\n};\n\nexport interface MaintenanceRequestRow {\n id: string;\n propertyId: string | null;\n rentalUnitId: string | null;\n title: string;\n description: string | null;\n category: string;\n priority: 'low' | 'medium' | 'high';\n status: 'open' | 'in_progress' | 'resolved';\n resolutionNotes: string | null;\n resolvedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const useMaintenanceRequests = (options?: ListOptions<MaintenanceRequestFilterInput>) => {\n const { data, loading, error, refetch } = useQuery<{ housingvistaMaintenanceRequests: MaintenanceRequestRow[] }>(\n GET_MAINTENANCE_REQUESTS,\n { variables: { filter: options?.filter, ...getPaginationVariables(options?.pagination) } }\n );\n return { data: data?.housingvistaMaintenanceRequests ?? [], loading, error, refetch };\n};\n\n// ---------------------------------------------------------------------------\n// Mutation hooks\n// ---------------------------------------------------------------------------\n\nexport interface CreatePropertyInput {\n title: string;\n description?: string;\n status: PropertyStatus;\n type: PropertyType;\n category: string;\n address?: string;\n city: string;\n state: string;\n country?: string;\n pincode?: string;\n neighborhood?: string;\n landmarks?: string[];\n price: number;\n currency?: string;\n priceType?: string;\n /** On update, pass null to clear a stored period; absent/undefined means \"no change\". */\n pricePeriod?: string | null;\n negotiable?: boolean;\n pricePerSqft?: number;\n bedrooms: number;\n bathrooms: number;\n totalArea: number;\n carpetArea?: number;\n builtUpArea?: number;\n floors?: number;\n totalFloors?: number;\n parking?: number;\n balconies?: number;\n furnishingStatus?: string;\n ageOfProperty?: number;\n facing?: string;\n amenities?: { name: string; category: string; available?: boolean }[];\n images?: { url: string; title?: string; type?: string; order?: number; isPrimary?: boolean }[];\n imageUrl?: string;\n /** Optional geo-pin captured in the listing wizard (BOFF-7795). */\n coordinates?: { latitude: number; longitude: number } | null;\n}\n\nexport type UpdatePropertyInput = Partial<CreatePropertyInput>;\n\nexport const useCreateProperty = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaProperty: PropertyRow },\n { input: CreatePropertyInput }\n >(CREATE_PROPERTY, { refetchQueries: ['GetProperties'], awaitRefetchQueries: true });\n const createProperty = async (input: CreatePropertyInput): Promise<Property> => {\n const res = await mutate({ variables: { input } });\n if (!res.data) throw new Error('Property was not created');\n return mapProperty(res.data.createHousingvistaProperty);\n };\n return { createProperty, loading };\n};\n\nexport const useUpdateProperty = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaProperty: PropertyRow },\n { id: string; input: UpdatePropertyInput }\n >(UPDATE_PROPERTY);\n const updateProperty = async (id: string, input: UpdatePropertyInput): Promise<Property> => {\n const res = await mutate({ variables: { id, input } });\n if (!res.data) throw new Error('Property was not updated');\n return mapProperty(res.data.updateHousingvistaProperty);\n };\n return { updateProperty, loading };\n};\n\nexport const useDeleteProperty = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaProperty: boolean }, { id: string }>(DELETE_PROPERTY, {\n refetchQueries: ['GetProperties'],\n awaitRefetchQueries: true,\n });\n const deleteProperty = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaProperty ?? false;\n };\n return { deleteProperty, loading };\n};\n\nexport const useSaveShortlist = () => {\n const [mutate, { loading }] = useMutation<\n { saveHousingvistaShortlist: ShortlistRow },\n { input: { propertyId: string; notes?: string } }\n >(SAVE_SHORTLIST, { refetchQueries: ['GetShortlists'], awaitRefetchQueries: true });\n const saveShortlist = async (propertyId: string, notes?: string) => {\n await mutate({ variables: { input: { propertyId, notes } } });\n };\n return { saveShortlist, loading };\n};\n\nexport const useRemoveShortlist = () => {\n const [mutate, { loading }] = useMutation<{ removeHousingvistaShortlist: boolean }, { propertyId: string }>(\n REMOVE_SHORTLIST,\n { refetchQueries: ['GetShortlists'], awaitRefetchQueries: true }\n );\n const removeShortlist = async (propertyId: string) => {\n await mutate({ variables: { propertyId } });\n };\n return { removeShortlist, loading };\n};\n\nexport interface BookViewingInput {\n propertyId: string;\n scheduledAt: string;\n type?: 'in_person' | 'virtual';\n attendeeName?: string;\n attendeeEmail?: string;\n notes?: string;\n}\n\nexport const useBookViewing = () => {\n const [mutate, { loading }] = useMutation<{ bookHousingvistaViewing: { id: string } }, { input: BookViewingInput }>(\n BOOK_VIEWING\n );\n const bookViewing = async (input: BookViewingInput) => {\n await mutate({ variables: { input } });\n };\n return { bookViewing, loading };\n};\n\nexport const useCancelViewing = () => {\n const [mutate, { loading }] = useMutation<{ cancelHousingvistaViewing: { id: string } }, { id: string }>(\n CANCEL_VIEWING\n );\n const cancelViewing = async (id: string) => {\n await mutate({ variables: { id } });\n };\n return { cancelViewing, loading };\n};\n\nexport interface SubmitOfferInput {\n propertyId: string;\n amount: number;\n currency?: string;\n notes?: string;\n /** ISO deadline; omit for an offer that never expires. */\n expiresAt?: string;\n}\n\nexport const useSubmitOffer = () => {\n const [mutate, { loading }] = useMutation<{ submitHousingvistaOffer: { id: string } }, { input: SubmitOfferInput }>(\n SUBMIT_OFFER\n );\n const submitOffer = async (input: SubmitOfferInput) => {\n await mutate({ variables: { input } });\n };\n return { submitOffer, loading };\n};\n\nexport const useRespondOffer = () => {\n const [mutate, { loading }] = useMutation<\n { respondHousingvistaOffer: { id: string } },\n { id: string; input: { action: 'accept' | 'reject' | 'counter'; counterAmount?: number; notes?: string } }\n >(RESPOND_OFFER);\n const respondOffer = async (\n id: string,\n input: { action: 'accept' | 'reject' | 'counter'; counterAmount?: number; notes?: string }\n ) => {\n await mutate({ variables: { id, input } });\n };\n return { respondOffer, loading };\n};\n\nexport interface CreateTransactionInput {\n propertyId: string;\n title: string;\n type: string;\n status: string;\n amount: number;\n currency?: string;\n /** Accepted offer being converted into this deal (TXN-01 / BOFF-9171). */\n offerId?: string;\n}\n\nexport const useCreateTransaction = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaTransaction: TransactionRow },\n { input: CreateTransactionInput }\n >(CREATE_TRANSACTION, { refetchQueries: ['GetTransactions'], awaitRefetchQueries: true });\n const createTransaction = async (input: CreateTransactionInput) => {\n await mutate({ variables: { input } });\n };\n return { createTransaction, loading };\n};\n\nexport interface CreateInvestmentInput {\n propertyId: string;\n title: string;\n status: string;\n investmentType: string;\n riskLevel: string;\n totalValue: number;\n startDate?: string;\n maturityDate?: string;\n}\n\nexport const useCreateInvestment = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaInvestment: InvestmentRow },\n { input: CreateInvestmentInput }\n >(CREATE_INVESTMENT, { refetchQueries: ['GetInvestments'], awaitRefetchQueries: true });\n const createInvestment = async (input: CreateInvestmentInput) => {\n await mutate({ variables: { input } });\n };\n return { createInvestment, loading };\n};\n\nexport interface CreateRentalUnitInput {\n propertyId?: string;\n propertyTitle: string;\n unitNumber: string;\n tenantName: string;\n tenantEmail: string;\n tenantPhone?: string;\n monthlyRent: number;\n leaseStart: string;\n leaseEnd: string;\n status: string;\n paymentStatus: string;\n securityDeposit?: number;\n}\n\nexport const useCreateRentalUnit = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaRentalUnit: { id: string } },\n { input: CreateRentalUnitInput }\n >(CREATE_RENTAL_UNIT, { refetchQueries: ['GetRentalUnits'], awaitRefetchQueries: true });\n const createRentalUnit = async (input: CreateRentalUnitInput) => {\n await mutate({ variables: { input } });\n };\n return { createRentalUnit, loading };\n};\n\nexport interface SubmitRentalApplicationInput {\n rentalUnitId: string;\n applicantName: string;\n applicantEmail: string;\n applicantPhone?: string;\n monthlyIncome?: number;\n moveInDate?: string;\n}\n\nexport const useSubmitRentalApplication = () => {\n const [mutate, { loading }] = useMutation<\n { submitHousingvistaRentalApplication: { id: string } },\n { input: SubmitRentalApplicationInput }\n >(SUBMIT_RENTAL_APPLICATION);\n const submitRentalApplication = async (input: SubmitRentalApplicationInput) => {\n await mutate({ variables: { input } });\n };\n return { submitRentalApplication, loading };\n};\n\nexport interface CreateAmcContractInput {\n propertyId?: string;\n propertyTitle: string;\n packageName: string;\n providerName: string;\n monthlyCost: number;\n startDate: string;\n endDate: string;\n nextServiceDate?: string;\n status: string;\n servicesIncluded?: string[];\n}\n\nexport const useCreateAmcContract = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaAmcContract: { id: string } },\n { input: CreateAmcContractInput }\n >(CREATE_AMC_CONTRACT, { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true });\n const createAmcContract = async (input: CreateAmcContractInput) => {\n await mutate({ variables: { input } });\n };\n return { createAmcContract, loading };\n};\n\nexport interface CreateMaintenanceRequestInput {\n propertyId?: string;\n rentalUnitId?: string;\n title: string;\n description?: string;\n category: string;\n priority?: 'low' | 'medium' | 'high';\n}\n\nexport const useCreateMaintenanceRequest = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaMaintenanceRequest: { id: string } },\n { input: CreateMaintenanceRequestInput }\n >(CREATE_MAINTENANCE_REQUEST);\n const createMaintenanceRequest = async (input: CreateMaintenanceRequestInput) => {\n await mutate({ variables: { input } });\n };\n return { createMaintenanceRequest, loading };\n};\n\nexport const useCreateVerification = () => {\n const [mutate, { loading }] = useMutation<\n { createHousingvistaVerificationItem: { id: string } },\n { input: CreateVerificationItemInput }\n >(CREATE_VERIFICATION_ITEM, {\n // GetProperty refetch: a new check changes the detail page's Documents\n // evidence (active-query case); cache-and-network on useProperty covers\n // the return-to-listing case (Codex P2, mfe#19). Deliberately NO\n // GetProperties refetch and NO cache.modify here: creating an item does\n // NOT change Property.verificationStatus server-side (the svc write-back\n // is decide-path only, BOFF-8673), so a cached list badge stays truthful\n // — refetching the list would be pure waste.\n refetchQueries: ['GetVerifications', 'GetProperty'],\n awaitRefetchQueries: true,\n });\n const createVerification = async (input: CreateVerificationItemInput) => {\n await mutate({ variables: { input } });\n };\n return { createVerification, loading };\n};\n\nexport const useApproveVerification = () => {\n const [mutate, { loading }] = useMutation<\n {\n approveHousingvistaVerificationItem: {\n id: string;\n status: string;\n entityType: string | null;\n entityId: string | null;\n };\n },\n { id: string; notes?: string }\n >(APPROVE_VERIFICATION, {\n refetchQueries: ['GetVerifications', 'GetProperty'],\n awaitRefetchQueries: true,\n // Sync the normalized listing record so a badge shown by a cached,\n // unmounted list query updates immediately (reviewer P2, mfe#19) —\n // refetchQueries only reaches ACTIVE queries.\n update: (cache, result) => {\n const item = result.data?.approveHousingvistaVerificationItem;\n if (item?.entityType !== 'property' || !item.entityId) return;\n const pid = cache.identify({\n __typename: 'HousingVistaProperty',\n id: item.entityId,\n });\n if (!pid) return;\n cache.modify({\n id: pid,\n fields: {\n // Fail-safe direction: ONLY an explicit rejection writes\n // 'rejected'. The mutation currently returns the raw svc value\n // 'approved' (live-verified on alpha), but the MFE convention is\n // 'verified' — if the API ever normalizes to that, an\n // === 'approved' ternary would write 'rejected' for approvals\n // (Codex P2, mfe#19).\n verificationStatus: () => (item.status === 'rejected' ? 'rejected' : 'verified'),\n },\n });\n },\n });\n const approveVerification = async (id: string, notes?: string) => {\n await mutate({ variables: { id, notes } });\n };\n return { approveVerification, loading };\n};\n\nexport const useRejectVerification = () => {\n const [mutate, { loading }] = useMutation<\n {\n rejectHousingvistaVerificationItem: {\n id: string;\n status: string;\n entityType: string | null;\n entityId: string | null;\n };\n },\n { id: string; notes?: string }\n >(REJECT_VERIFICATION, {\n refetchQueries: ['GetVerifications', 'GetProperty'],\n awaitRefetchQueries: true,\n update: (cache, result) => {\n const item = result.data?.rejectHousingvistaVerificationItem;\n if (item?.entityType !== 'property' || !item.entityId) return;\n const pid = cache.identify({\n __typename: 'HousingVistaProperty',\n id: item.entityId,\n });\n if (!pid) return;\n cache.modify({\n id: pid,\n fields: {\n // Same fail-safe direction as approve: only an explicit\n // 'rejected' writes 'rejected'.\n verificationStatus: () => (item.status === 'rejected' ? 'rejected' : 'verified'),\n },\n });\n },\n });\n const rejectVerification = async (id: string, notes?: string) => {\n await mutate({ variables: { id, notes } });\n };\n return { rejectVerification, loading };\n};\n\n/** RERA review workflow transition (BOFF-4132) — separate from the generic\n * verification review above since RERA is its own regulatory workflow. */\nexport const useUpdatePropertyReraStatus = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaPropertyReraStatus: { id: string; reraVerificationStatus: ReraVerificationStatus } },\n { id: string; status: ReraVerificationStatus; notes?: string }\n >(UPDATE_PROPERTY_RERA_STATUS, { refetchQueries: ['GetProperties', 'GetProperty'], awaitRefetchQueries: true });\n const updatePropertyReraStatus = async (id: string, status: ReraVerificationStatus, notes?: string) => {\n await mutate({ variables: { id, status, notes } });\n };\n return { updatePropertyReraStatus, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Offer / Viewing owner-side + lifecycle mutation hooks\n// ---------------------------------------------------------------------------\n\nexport const useWithdrawOffer = () => {\n const [mutate, { loading }] = useMutation<{ withdrawHousingvistaOffer: { id: string } }, { id: string }>(\n WITHDRAW_OFFER,\n { refetchQueries: ['GetOffers', 'GetOffer'], awaitRefetchQueries: true }\n );\n const withdrawOffer = async (id: string) => {\n await mutate({ variables: { id } });\n };\n return { withdrawOffer, loading };\n};\n\nexport interface UpdateViewingInput {\n scheduledAt?: string;\n status?: 'requested' | 'confirmed' | 'completed' | 'cancelled';\n type?: 'in_person' | 'virtual';\n attendeeName?: string;\n attendeeEmail?: string;\n notes?: string;\n}\n\nexport const useUpdateViewing = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaViewing: { id: string } },\n { id: string; input: UpdateViewingInput }\n >(UPDATE_VIEWING, { refetchQueries: ['GetViewings', 'GetViewing'], awaitRefetchQueries: true });\n const updateViewing = async (id: string, input: UpdateViewingInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateViewing, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Investment update / delete\n// ---------------------------------------------------------------------------\n\nexport interface UpdateInvestmentInput {\n title?: string;\n investmentType?: string;\n status?: string;\n riskLevel?: string;\n totalValue?: number;\n startDate?: string;\n maturityDate?: string;\n}\n\nexport const useUpdateInvestment = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaInvestment: InvestmentRow },\n { id: string; input: UpdateInvestmentInput }\n >(UPDATE_INVESTMENT, { refetchQueries: ['GetInvestments', 'GetInvestment'], awaitRefetchQueries: true });\n const updateInvestment = async (id: string, input: UpdateInvestmentInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateInvestment, loading };\n};\n\nexport const useDeleteInvestment = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaInvestment: boolean }, { id: string }>(\n DELETE_INVESTMENT,\n { refetchQueries: ['GetInvestments'], awaitRefetchQueries: true }\n );\n const deleteInvestment = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaInvestment ?? false;\n };\n return { deleteInvestment, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Asset create / update / delete\n// ---------------------------------------------------------------------------\n\nexport interface CreateAssetInput {\n title: string;\n type: string;\n category: string;\n location: string;\n currentValue: number;\n purchasePrice: number;\n purchaseDate?: string;\n appreciationPercent?: number;\n rentalYield?: number;\n status: string;\n imageUrl?: string;\n lastValuationDate?: string;\n}\n\nexport const useCreateAsset = () => {\n const [mutate, { loading }] = useMutation<{ createHousingvistaAsset: Asset }, { input: CreateAssetInput }>(\n CREATE_ASSET,\n { refetchQueries: ['GetAssets'], awaitRefetchQueries: true }\n );\n const createAsset = async (input: CreateAssetInput) => {\n await mutate({ variables: { input } });\n };\n return { createAsset, loading };\n};\n\nexport type UpdateAssetInput = Partial<CreateAssetInput>;\n\nexport const useUpdateAsset = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaAsset: Asset },\n { id: string; input: UpdateAssetInput }\n >(UPDATE_ASSET, { refetchQueries: ['GetAssets', 'GetAsset'], awaitRefetchQueries: true });\n const updateAsset = async (id: string, input: UpdateAssetInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateAsset, loading };\n};\n\nexport const useDeleteAsset = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaAsset: boolean }, { id: string }>(DELETE_ASSET, {\n refetchQueries: ['GetAssets'],\n awaitRefetchQueries: true,\n });\n const deleteAsset = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaAsset ?? false;\n };\n return { deleteAsset, loading };\n};\n\n// ---------------------------------------------------------------------------\n// AMC update / delete\n// ---------------------------------------------------------------------------\n\n// nextServiceDate: null clears the stored date (the svc treats null as \"no upcoming service\").\nexport type UpdateAmcContractInput = Partial<Omit<CreateAmcContractInput, 'nextServiceDate'>> & {\n nextServiceDate?: string | null;\n};\n\nexport const useUpdateAmcContract = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaAmcContract: { id: string } },\n { id: string; input: UpdateAmcContractInput }\n >(UPDATE_AMC_CONTRACT, { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true });\n const updateAmcContract = async (id: string, input: UpdateAmcContractInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateAmcContract, loading };\n};\n\nexport const useRenewAmcContract = () => {\n const [mutate, { loading }] = useMutation<\n { renewHousingvistaAmcContract: { id: string; status: string; endDate: string } },\n { id: string; input: { endDate: string } }\n >(\n gql`\n mutation RenewHousingvistaAmcContract($id: ID!, $input: HousingVistaRenewAmcContractInput!) {\n renewHousingvistaAmcContract(id: $id, input: $input) {\n id\n status\n endDate\n }\n }\n `,\n { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true }\n );\n const renewAmcContract = async (id: string, endDate: string) => {\n await mutate({ variables: { id, input: { endDate } } });\n };\n return { renewAmcContract, loading };\n};\n\nexport const useDeleteAmcContract = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaAmcContract: boolean }, { id: string }>(\n DELETE_AMC_CONTRACT,\n { refetchQueries: ['GetAmcContracts'], awaitRefetchQueries: true }\n );\n const deleteAmcContract = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaAmcContract ?? false;\n };\n return { deleteAmcContract, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Transaction update / delete\n// ---------------------------------------------------------------------------\n\nexport interface UpdateTransactionInput {\n title?: string;\n type?: string;\n status?: string;\n amount?: number;\n currency?: string;\n documents?: unknown;\n}\n\nexport const useUpdateTransaction = () => {\n const [mutate, { loading }] = useMutation<\n { updateHousingvistaTransaction: TransactionRow },\n { id: string; input: UpdateTransactionInput }\n >(UPDATE_TRANSACTION, { refetchQueries: ['GetTransactions', 'GetTransaction'], awaitRefetchQueries: true });\n const updateTransaction = async (id: string, input: UpdateTransactionInput) => {\n await mutate({ variables: { id, input } });\n };\n return { updateTransaction, loading };\n};\n\nexport const useDeleteTransaction = () => {\n const [mutate, { loading }] = useMutation<{ deleteHousingvistaTransaction: boolean }, { id: string }>(\n DELETE_TRANSACTION,\n { refetchQueries: ['GetTransactions'], awaitRefetchQueries: true }\n );\n const deleteTransaction = async (id: string): Promise<boolean> => {\n const res = await mutate({ variables: { id } });\n return res.data?.deleteHousingvistaTransaction ?? false;\n };\n return { deleteTransaction, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Maintenance resolve + Rental-application review\n// ---------------------------------------------------------------------------\n\nexport const useResolveMaintenanceRequest = () => {\n const [mutate, { loading }] = useMutation<\n { resolveHousingvistaMaintenanceRequest: MaintenanceRequestRow },\n { id: string; resolutionNotes?: string }\n >(RESOLVE_MAINTENANCE, { refetchQueries: ['GetMaintenanceRequests'], awaitRefetchQueries: true });\n const resolveMaintenanceRequest = async (id: string, resolutionNotes?: string) => {\n await mutate({ variables: { id, resolutionNotes } });\n };\n return { resolveMaintenanceRequest, loading };\n};\n\nexport interface ReviewRentalApplicationInput {\n decision: 'approved' | 'rejected' | 'screening' | 'submitted';\n reviewNotes?: string;\n}\n\nexport const useReviewRentalApplication = () => {\n const [mutate, { loading }] = useMutation<\n { reviewHousingvistaRentalApplication: RentalApplicationRow },\n { id: string; input: ReviewRentalApplicationInput }\n >(REVIEW_RENTAL_APPLICATION, { refetchQueries: ['GetRentalApplications'], awaitRefetchQueries: true });\n const reviewRentalApplication = async (id: string, input: ReviewRentalApplicationInput) => {\n await mutate({ variables: { id, input } });\n };\n return { reviewRentalApplication, loading };\n};\n\n// ---------------------------------------------------------------------------\n// Platform-service reuse (conversations / files) — re-exported from ./platform\n// ---------------------------------------------------------------------------\n\nexport {\n useContactConversation,\n useSendMessage,\n useSendContextMessage,\n useConversationMessages,\n useEntityComments,\n useCreateEntityComment,\n useFileUpload,\n} from './platform';\nexport type {\n HvContextTarget,\n HvConversationMessage,\n HvConversationSourceContext,\n HvEntityComment,\n HvMessageAttachment,\n HvUploadedFile,\n} from './platform';\n\n// Analytics\nexport { useHousingVistaAnalytics } from './useHousingVistaAnalytics';\n"],"mappings":";;;;;;AAiLA,IAAM,IAAqD;CAAE,OAAO;CAAI,QAAQ;CAAG,EAE7E,KAA0B,IAA8B,OAA6B,EACzF,YAAY;CACV,OAAO,EAAW,SAAS,EAAwB;CACnD,QAAQ,EAAW,UAAU,EAAwB;CACtD,EACF,GAMK,IAAsB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCzB,IAAkB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyErB,IAA+B,CAAG;;;;;;;;;;;;;;;;GAkBlC,IAAiB,CAAG;IACtB,EAAgB;;;;;;GAQd,IAAe,CAAG;IACpB,EAAgB;IAChB,EAA6B;;;;;;;GAS3B,IAAqB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDxB,IAAmB,CAAG;IACxB,EAAmB;;;;;;GAQjB,IAAkB,CAAG;IACvB,EAAmB;;;;;;GAQjB,IAAoB,CAAG;;;;;;;;;;;;;;;;;;;;;GAuBvB,KAAkB,CAAG;IACvB,EAAkB;;;;;;GAQhB,IAAiB,CAAG;IACtB,EAAkB;;;;;;GAQhB,IAAmB,CAAG;;;;;;;;;;;;;;;;;;;GAqBtB,IAAe,CAAG;;;;;;;;;;;;;;;;GAkBlB,IAAa,CAAG;IAClB,EAAa;;;;;;GAQX,IAAY,CAAG;IACjB,EAAa;;;;;;GAQX,IAAoB,CAAG;;;;;;;;;;;;;;;;GAkBvB,IAA6B,CAAG;;;;;;;;;;;;;;;;GAkBhC,KAA2B,CAAG;IAChC,EAA2B;;;;;;;;;GAWzB,KAA0B,CAAG;IAC/B,EAA2B;;;;;;GAQzB,IAAsB,CAAG;;;;;;;;;;;;;;GAgBzB,KAAoB,CAAG;IACzB,EAAoB;;;;;;GAQlB,KAAmB,CAAG;IACxB,EAAoB;;;;;;GAQlB,IAAuB,CAAG;;;;;;;;;;;;;;GAgB1B,IAAqB,CAAG;IAC1B,EAAqB;;;;;;GAQnB,IAAoB,CAAG;IACzB,EAAqB;;;;;;GAQnB,IAAmB,CAAG;;;;;;;;;;;;;;;GAiBtB,IAAiB,CAAG;IACtB,EAAiB;;;;;;GAQf,IAAgB,CAAG;IACrB,EAAiB;;;;;;GAQf,IAAoB,CAAG;;;;;;;;;;;GAavB,IAAoB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCvB,IAAgB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BnB,IAAmB,CAAG;IACxB,EAAgB;;;;;;;;;;GAYd,IAAiB,CAAG;IACtB,EAAiB;;;;;;GAQf,IAAe,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmClB,IAAa,CAAG;IAClB,EAAa;;;;;;;AAQC,CAAG;IACjB,EAAa;;;;;;;AAQjB,IAAM,IAAiB,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BpB,IAAe,CAAG;IACpB,EAAe;;;;;;;AAQC,CAAG;IACnB,EAAe;;;;;;;AAQnB,IAAM,IAA4B,CAAG;;;;;;;;;;;;;;;;;;;;;GAuB/B,IAA0B,CAAG;IAC/B,EAA0B;;;;;;;;;GAWxB,IAAqB,CAAG;;;;;;;;;;;;;;;GAiBxB,IAA2B,CAAG;IAChC,EAAmB;;;;;;;;;GAejB,IAAkB,CAAG;IACvB,EAAgB;;;;;;GAQd,IAAkB,CAAG;IACvB,EAAgB;;;;;;GAQd,KAAkB,CAAG;;;;GAMrB,KAAiB,CAAG;IACtB,EAAiB;;;;;;GAQf,KAAmB,CAAG;;;;GAMtB,KAAe,CAAG;;;;;;;;;;;;;GAelB,KAAiB,CAAG;;;;;;;GASpB,KAAe,CAAG;;;;;;;;;;;;;GAelB,KAAgB,CAAG;;;;;;;;;GAWnB,KAAqB,CAAG;IAC1B,EAAmB;;;;;;GAQjB,KAAoB,CAAG;IACzB,EAAkB;;;;;;GAQhB,KAAqB,CAAG;;;;;;;;;;;GAaxB,KAA4B,CAAG;;;;;;;;;GAW/B,KAAsB,CAAG;;;;;;;;;;;GAazB,KAA6B,CAAG;;;;;;;;;;GAYhC,KAA2B,CAAG;;;;;;;;GAU9B,KAAuB,CAAG;;;;;;;;;;;;;GAe1B,KAAsB,CAAG;;;;;;;;;;;GAazB,KAA8B,CAAG;;;;;;;;;;;;GAcjC,KAAiB,CAAG;;;;;;;GASpB,KAAiB,CAAG;;;;;;;;;;GAYpB,KAAoB,CAAG;IACzB,EAAkB;;;;;;GAQhB,KAAoB,CAAG;;;;GAMvB,KAAe,CAAG;IACpB,EAAa;;;;;;;AAQI,CAAG;IACpB,EAAa;;;;;;GAQI,CAAG;;;;;AAMxB,IAAM,KAAsB,CAAG;;;;;;;;;;GAYzB,KAAsB,CAAG;;;;GAMzB,KAAqB,CAAG;IAC1B,EAAmB;;;;;;;AAQI,CAAG;;;;;AAM9B,IAAM,KAAsB,CAAG;IAC3B,EAAmB;;;;;;GAQjB,KAA4B,CAAG;IACjC,EAA0B;;;;;;GAmHxB,KAAe,OAAgC;CACnD,IAAI,EAAI;CACR,OAAO,EAAI;CACX,aAAa,EAAI,eAAe;CAChC,MAAM,EAAI;CACV,QAAQ,EAAI;CACZ,UAAU,EAAI;CACd,OAAO,EAAI;CACX,UAAU;EACR,GAAG,EAAI;EACP,aAAa,EAAI,SAAS,eAAe;GAAE,UAAU;GAAG,WAAW;GAAG;EACvE;CACD,gBAAgB,EAAI;CACpB,WAAW,EAAI,aAAa,EAAE;CAC9B,QAAQ,EAAI,UAAU,EAAE;CAOxB,YAAY,EAAI,qBAAqB,EAAE,EAAE,SAAS,OAC/C,EAAK,iBAAiB,EAAE,EAAE,KAAK,OAAU;EACxC,IAAI,EAAK;EACT,MAAM,EAAK;EACX,MAAM;EACN,KAAK,EAAK,eAAe;EACzB,oBAAqB,EAAK,WAAW,aAAa,aAAa,EAAK;EAIpE,YAAY,IAAI,KAAK,EAAK,UAAU;EACrC,EAAE,CACJ;CACD,cAAc,EAAE;CAChB,OAAO;EAAE,IAAI;EAAI,MAAM;EAAI,OAAO;EAAI,OAAO;EAAI,UAAU;EAAO;CAClE,UAAU,EAAE;CACZ,oBAAqB,EAAI,sBAAyD;CAClF,cAAc,EAAE,WAAW,IAAM;CACjC,WAAW,IAAI,KAAK,EAAI,UAAU;CAClC,WAAW,IAAI,KAAK,EAAI,UAAU;CAClC,oBAAoB,EAAI;CACxB,eAAe,EAAI;CACnB,kBAAkB,EAAI,mBAAmB,IAAI,KAAK,EAAI,iBAAiB,GAAG;CAC1E,SAAS,EAAI;CACb,wBAAwB,EAAI,0BAA0B;CACvD,GAMK,KAA+B;CACnC,iBAAiB,EAAE;CACnB,gBAAgB,EAAE;CAClB,eAAe,EAAE;CACjB,oBAAoB,EAAE;CACvB,EAEY,WAA0B;CACrC,IAAM,EAAE,SAAM,YAAS,aAAU,EAAyD,EAAoB,EACxG,IAAwB;EAC5B,iBAAiB;EACjB,YAAY;EACZ,eAAe;EACf,gBAAgB;EAChB,oBAAoB;EACpB,sBAAsB;EACtB,kBAAkB;EAClB,mBAAmB;EACnB,cAAc;EACd,qBAAqB;EACrB,gBAAgB;EAChB,kBAAkB;EAClB,QAAQ;EACT;AACD,QAAO;EAAE,MAAM,GAAM,8BAA8B;EAAO;EAAS;EAAO;GAG/D,MAAuB,MAAiC;CACnE,IAAM,EAAE,SAAM,YAAS,aAAU,EAAyD,GAAkB,EAC1G,WAAW,EAAuB,EAAW,EAC9C,CAAC;AAgBF,QAAO;EAAE,OAf6B,GAAM,4BAA4B,EAAE,EAAE,KAAK,OAAS;GACxF,IAAI,OAAO,EAAI;GACf,MAAM;GACN,OAAO,gBAAgB,EAAI;GAC3B,aAAa,GAAG,EAAI,UAAU,SAAS,WAAW,KAAK,EAAI;GAC3D,WAAW,EAAI,aAAa,EAAI;GAChC,UAAU,EAAI;GACd,YAAY;GACZ,WAAW,EAAI,QACX,GAAG,EAAI,MAAM,aAAa,GAAG,GAAG,EAAI,MAAM,YAAY,KAAK,MAAM,GACjE,EAAI,SACF,GAAG,EAAI,OAAO,aAAa,GAAG,GAAG,EAAI,OAAO,YAAY,KAAK,MAAM,GACnE;GACN,aAAa,EAAI,OAAO,UAAU,EAAI,QAAQ,UAAU,KAAA;GACzD,EAAE;EACwB;EAAS;EAAO;GAGhC,MAAiB,MAIxB;CACJ,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAoD,GAAgB;EAC5G,WAAW;GACT,QAAQ,GAAS;GACjB,GAAG,EAAuB,GAAS,WAAW;GAC/C;EACD,MAAM,GAAS;EAChB,CAAC;AACF,QAAO;EACL,OAAO,GAAM,0BAA0B,EAAE,EAAE,IAAI,EAAY;EAC3D;EACA;EACA;EACD;GAGU,MAAe,MAA2B;CACrD,IAAM,EAAE,SAAM,YAAS,aAAU,EAAuD,GAAc;EACpG,WAAW,EAAE,IAAI,KAAM,IAAI;EAC3B,MAAM,CAAC;EAKP,aAAa;EACd,CAAC;AACF,QAAO;EACL,MAAM,GAAM,uBAAuB,EAAY,EAAK,qBAAqB,GAAG;EAC5E;EACA;EACD;GA4BG,KAAuB,CAAG;IAC5B,EAAgB;;;;;;;;;;;;;;;;;;;;;;GAwBP,WAAiC;CAC5C,IAAM,CAAC,GAAK,EAAE,SAAM,YAAS,cAAW,EAGtC,GAAqB,EAEjB,KAAU,GAAe,MAAiC,EAAI,EAAE,WAAW;EAAE;EAAO;EAAY,EAAE,CAAC,EAEnG,IAAS,GAAM;AACrB,QAAO;EACL;EACA;EACA;EACA,QAAQ,GAAQ,UAAU;EAC1B,gBAAgB,GAAQ,kBAAkB;EAC1C,QAAQ,GAAQ,UAAU;EAC1B,aAAa,GAAQ,cAAc,EAAE,EAAE,IAAI,EAAY;EACxD;GAGU,MAAmB,MAAkD;CAChF,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAyD,GAAkB,EACnH,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EACvF,CAAC;AAGF,QAAO;EAAE,MAAO,GAAM,4BAA4B,EAAE;EAA+B;EAAS;EAAO;EAAS;;AAU9G,SAAS,EAAkB,GAAqB,GAAmB,GAAyC;CAC1G,IAAM,IAAS,GAAiB,EAC1B,CAAC,GAAM,KAAW,EAAiB,EAAE,CAAC,EACtC,CAAC,GAAS,KAAc,EAAS,GAAK,EACtC,CAAC,GAAO,KAAY,EAAuB,KAAK,EAGhD,IAAmB,EAAO,EAAc;AAC9C,SAAgB;AACd,IAAiB,UAAU;IAC1B,CAAC,EAAc,CAAC;CAEnB,IAAM,IAAW,EACf,OAAO,MAAgD;EACrD,IAAM,IAAc,EAAE,EAClB,IAAS;AAEb,OAAK,IAAI,IAAY,GAAG,IAAY,MAC9B,MAAc,EAD2B,KAAa,GAAG;GAO7D,IAAM,KALS,MAAM,EAAO,MAA6C;IACvE;IACA,WAAW;KAAE,GAAG,EAAiB;KAAS,YAAY;MAAE,OAAO;MAAK;MAAQ;KAAE;IAC9E,aAAa;IACd,CAAC,EACkB,OAAO,MAAc,EAAE;AAE3C,OADA,EAAI,KAAK,GAAG,EAAK,EACb,EAAK,SAAS,IAAK;AACvB,QAAU,EAAK;;AAEjB,SAAO;IAET;EAAC;EAAQ;EAAO;EAAU,CAC3B,EAKK,IAAgB,EAAO,EAAE,EAEzB,IAAU,EAAY,YAAY;EACtC,IAAM,IAAa,EAAE,EAAc;AAEnC,EADA,EAAW,GAAK,EAChB,EAAS,KAAK;AACd,MAAI;GACF,IAAM,IAAM,MAAM,GAAU;AAC5B,OAAI,MAAe,EAAc,QAAS;AAC1C,KAAQ,EAAI;WACL,GAAK;AACZ,GAAI,MAAe,EAAc,WAAS,EAAS,EAAa;YACxD;AACR,GAAI,MAAe,EAAc,WAAS,EAAW,GAAM;;IAE5D,CAAC,EAAS,CAAC;AAsBd,QApBA,QAAgB;EACd,IAAI,IAAY,IACV,IAAa,EAAE,EAAc;AAanC,SAZA,EAAW,GAAK,EAChB,EAAS,KAAK,EACd,QAAe,EAAU,CACtB,MAAM,MAAQ;AACb,GAAI,CAAC,KAAa,MAAe,EAAc,WAAS,EAAQ,EAAI;IACpE,CACD,OAAO,MAAQ;AACd,GAAK,KAAW,EAAS,EAAa;IACtC,CACD,cAAc;AACb,GAAK,KAAW,EAAW,GAAM;IACjC,QACS;AACX,OAAY;;IAEb,CAAC,EAAS,CAAC,EAEP;EAAE;EAAM;EAAS;EAAO;EAAS;;AAS1C,IAAa,WAA2B;CACtC,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAA4B,GAAkB,2BAA2B;AAGnH,QAAO;EACC;EACN;EACA;EACA;EACD;GAGU,MAAkB,MAA2B;CACxD,IAAM,EAAE,SAAM,YAAS,aAAU,EAA6D,GAAiB;EAC7G,WAAW,EAAE,IAAI,KAAM,IAAI;EAC3B,MAAM,CAAC;EACR,CAAC;AACF,QAAO;EACL,MAAO,GAAM,2BAA2B;EACxC;EACA;EACD;GAGU,MAAkB,MAAiD;CAC9E,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAuD,IAAiB,EAChH,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EACvF,CAAC;AACF,QAAO;EAAE,MAAO,GAAM,2BAA2B,EAAE;EAA8B;EAAS;EAAO;EAAS;GAG/F,MAAiB,MAA2B;CACvD,IAAM,EAAE,SAAM,YAAS,aAAU,EAA2D,GAAgB;EAC1G,WAAW,EAAE,IAAI,KAAM,IAAI;EAC3B,MAAM,CAAC;EACR,CAAC;AACF,QAAO;EAAE,MAAO,GAAM,0BAA0B;EAAuC;EAAS;EAAO;GAG5F,MAAkB,MAAiD;CAC9E,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAoD,GAAkB,EAC9G,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EACvF,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,2BAA2B,EAAE;EAAE;EAAS;EAAO;EAAS;GAGlE,MAAa,MAA4C;CACpE,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAA0C,GAAY,EAC9F,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EACvF,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,sBAAsB,EAAE;EAAE;EAAS;EAAO;EAAS;GAG7D,MAAY,MAA2B;CAClD,IAAM,EAAE,SAAM,YAAS,aAAU,EAA8C,GAAW;EACxF,WAAW,EAAE,IAAI,KAAM,IAAI;EAC3B,MAAM,CAAC;EACR,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,qBAAqB;EAAM;EAAS;EAAO;GAGrD,MAAmB,MAAkD;CAChF,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAsD,GAAmB,EACjH,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EACvF,CAAC;AAUF,QAAO;EAAE,MARS,SAEb,GAAM,4BAA4B,EAAE,EAAE,KAAK,OAAc;GACxD,GAAG;GACH,kBAAkB,MAAM,QAAQ,EAAS,iBAAiB,GAAG,EAAS,mBAAmB,EAAE;GAC5F,EAAE,EACL,CAAC,EAAK,CACP;EACyB;EAAS;EAAO;EAAS;GAGxC,MAA0B,MAAyD;CAC9F,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EACxC,IACA,EAAE,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EAAE,CAC3F;AACD,QAAO;EAAE,MAAM,GAAM,mCAAmC,EAAE;EAAE;EAAS;EAAO;EAAS;GAG1E,MAAyB,MAA2B;CAC/D,IAAM,EAAE,SAAM,YAAS,aAAU,EAC/B,IACA;EAAE,WAAW,EAAE,IAAI,KAAM,IAAI;EAAE,MAAM,CAAC;EAAI,CAC3C;AACD,QAAO;EAAE,MAAM,GAAM,kCAAkC;EAAM;EAAS;EAAO;GAGlE,MAAoB,MAAuD;CACtF,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EACxC,IACA,EAAE,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EAAE,CAC3F;AACD,QAAO;EAAE,MAAM,GAAM,iCAAiC,EAAE;EAAE;EAAS;EAAO;EAAS;GAaxE,MAAuB,MAA2B;CAC7D,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EACxC,IACA;EAAE,WAAW,EAAE,IAAI,KAAM,IAAI;EAAE,MAAM,CAAC;EAAI,CAC3C;AACD,QAAO;EAAE,MAAM,GAAM,gCAAgC;EAAM;EAAS;EAAO;EAAS;GAGzE,MAAoB,MAAmD;CAClF,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EACxC,GACA,EAAE,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EAAE,CAC3F;AACD,QAAO;EAAE,MAAM,GAAM,6BAA6B,EAAE;EAAE;EAAS;EAAO;EAAS;GAGpE,MAAmB,MAA2B;CACzD,IAAM,EAAE,SAAM,YAAS,aAAU,EAA4D,GAAmB;EAC9G,WAAW,EAAE,IAAI,KAAM,IAAI;EAC3B,MAAM,CAAC;EACR,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,4BAA4B;EAAM;EAAS;EAAO;GAG5D,MAAgB,MAAiC;CAC5D,IAAM,EAAE,SAAM,YAAS,aAAU,EAAqD,GAAgB,EACpG,WAAW,EAAuB,EAAW,EAC9C,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,8BAA8B,EAAE;EAAE;EAAS;EAAO;GAG5D,MAAoB,MAA2B;CAC1D,IAAM,EAAE,SAAM,YAAS,aAAU,EAAyD,GAAe;EACvG,WAAW,EAAE,IAAI,KAAM,IAAI;EAC3B,MAAM,CAAC;EACR,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,6BAA6B;EAAM;EAAS;EAAO;GAG7D,MAAmB,MAAiC;CAC/D,IAAM,EAAE,SAAM,YAAS,aAAU,EAAsD,GAAmB,EACxG,WAAW,EAAuB,EAAW,EAC9C,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,4BAA4B,EAAE;EAAE;EAAS;EAAO;GAG1D,MAAmB,MAAiC;CAC/D,IAAM,EAAE,SAAM,YAAS,aAAU,EAAsD,GAAmB,EACxG,WAAW,EAAuB,EAAW,EAC9C,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,4BAA4B,EAAE;EAAE;EAAS;EAAO;GAG1D,MAAiB,MAAiC;CAC7D,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAqD,GAAgB,EAC7G,WAAW,EAAuB,EAAW,EAC9C,CAAC;AAQF,QAAO;EAAE,OAPW,GAAM,0BAA0B,EAAE,EAAE,KAAK,OAAS;GACpE,IAAI,EAAI;GACR,YAAY,EAAI;GAChB,OAAO,EAAI,SAAS,KAAA;GACpB,WAAW,EAAI;GACf,UAAU,EAAY,EAAI,SAAS;GACpC,EAAE;EACwB;EAAS;EAAO;EAAS;GAGzC,MAAoB,IAA0B,YAAY;CACrE,IAAM,EAAE,SAAM,YAAS,aAAU,EAAwD,GAAe,EACtG,WAAW,EAAE,WAAQ,EACtB,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,yBAAyB;EAAM;EAAS;EAAO;GA6BzD,MAAa,MAA4C;CACpE,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAA6C,GAAY,EACjG,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EACvF,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,sBAAsB,EAAE;EAAE;EAAS;EAAO;EAAS;GA8B7D,MAAe,MAA8C;CACxE,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EAAiD,GAAc,EACvG,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EACvF,CAAC;AACF,QAAO;EAAE,MAAM,GAAM,wBAAwB,EAAE;EAAE;EAAS;EAAO;EAAS;GAgC/D,MAAyB,MAAwD;CAC5F,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EACxC,GACA,EAAE,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EAAE,CAC3F;AACD,QAAO;EAAE,MAAM,GAAM,kCAAkC,EAAE;EAAE;EAAS;EAAO;EAAS;GAKhF,IAAe,CAAG;;;;;;;;;;;;;;;;;;;;;;GAwBlB,KAAa,CAAG;IAClB,EAAa;;;;;;GAsCJ,WAAqB,EAAsB,IAAY,qBAAqB,EAgB5E,WAAuB;CAClC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,CAAG;QACC,EAAa;;;;;;OAOjB;EAAE,gBAAgB;GAAC;GAAa;GAAkB;GAAwB;EAAE,qBAAqB;EAAM,CACxG;AAID,QAAO;EAAE,aAHW,OAAO,MAA4B;AACrD,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAElB;EAAS;GAGpB,WAAsB;CACjC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAI5B,CAAG;QACC,EAAa;;;;;;OAOjB;EAAE,gBAAgB,CAAC,aAAa,iBAAiB;EAAE,qBAAqB;EAAM,CAC/E;AAID,QAAO;EAAE,YAHU,OAAO,GAAY,MAAqB;AACzD,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI,OAAO,EAAE,aAAU;IAAE,EAAE,CAAC;;EAErC;EAAS;GAGnB,WAA0B;CACrC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAI5B,CAAG;QACC,EAAa;;;;;;OAOjB;EAAE,gBAAgB,CAAC,aAAa,iBAAiB;EAAE,qBAAqB;EAAM,CAC/E;AAID,QAAO;EAAE,gBAHc,OAAO,GAAY,MAAmB;AAC3D,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI,OAAO,EAAE,UAAO;IAAE,EAAE,CAAC;;EAE9B;EAAS;GAkBvB,MAA0B,MAAyD;CAC9F,IAAM,EAAE,SAAM,YAAS,UAAO,eAAY,EACxC,GACA,EAAE,WAAW;EAAE,QAAQ,GAAS;EAAQ,GAAG,EAAuB,GAAS,WAAW;EAAE,EAAE,CAC3F;AACD,QAAO;EAAE,MAAM,GAAM,mCAAmC,EAAE;EAAE;EAAS;EAAO;EAAS;GAgD1E,WAA0B;CACrC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,GAAiB;EAAE,gBAAgB,CAAC,gBAAgB;EAAE,qBAAqB;EAAM,CAAC;AAMpF,QAAO;EAAE,gBALc,OAAO,MAAkD;GAC9E,IAAM,IAAM,MAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;AAClD,OAAI,CAAC,EAAI,KAAM,OAAU,MAAM,2BAA2B;AAC1D,UAAO,EAAY,EAAI,KAAK,2BAA2B;;EAEhC;EAAS;GAGvB,WAA0B;CACrC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,EAAgB;AAMlB,QAAO;EAAE,gBALc,OAAO,GAAY,MAAkD;GAC1F,IAAM,IAAM,MAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;AACtD,OAAI,CAAC,EAAI,KAAM,OAAU,MAAM,2BAA2B;AAC1D,UAAO,EAAY,EAAI,KAAK,2BAA2B;;EAEhC;EAAS;GAGvB,WAA0B;CACrC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAAqE,IAAiB;EAClH,gBAAgB,CAAC,gBAAgB;EACjC,qBAAqB;EACtB,CAAC;AAKF,QAAO;EAAE,gBAJc,OAAO,OAChB,MAAM,EAAO,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC,EACpC,MAAM,8BAA8B;EAExB;EAAS;GAGvB,WAAyB;CACpC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAgB;EAAE,gBAAgB,CAAC,gBAAgB;EAAE,qBAAqB;EAAM,CAAC;AAInF,QAAO;EAAE,eAHa,OAAO,GAAoB,MAAmB;AAClE,SAAM,EAAO,EAAE,WAAW,EAAE,OAAO;IAAE;IAAY;IAAO,EAAE,EAAE,CAAC;;EAEvC;EAAS;GAGtB,WAA2B;CACtC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,IACA;EAAE,gBAAgB,CAAC,gBAAgB;EAAE,qBAAqB;EAAM,CACjE;AAID,QAAO;EAAE,iBAHe,OAAO,MAAuB;AACpD,SAAM,EAAO,EAAE,WAAW,EAAE,eAAY,EAAE,CAAC;;EAEnB;EAAS;GAYxB,WAAuB;CAClC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,GACD;AAID,QAAO;EAAE,aAHW,OAAO,MAA4B;AACrD,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAElB;EAAS;GAGpB,WAAyB;CACpC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,GACD;AAID,QAAO;EAAE,eAHa,OAAO,MAAe;AAC1C,SAAM,EAAO,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC;;EAEb;EAAS;GAYtB,WAAuB;CAClC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,GACD;AAID,QAAO;EAAE,aAHW,OAAO,MAA4B;AACrD,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAElB;EAAS;GAGpB,WAAwB;CACnC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,GAAc;AAOhB,QAAO;EAAE,cANY,OACnB,GACA,MACG;AACH,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAErB;EAAS;GAcrB,WAA6B;CACxC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAoB;EAAE,gBAAgB,CAAC,kBAAkB;EAAE,qBAAqB;EAAM,CAAC;AAIzF,QAAO;EAAE,mBAHiB,OAAO,MAAkC;AACjE,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAEZ;EAAS;GAc1B,WAA4B;CACvC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAmB;EAAE,gBAAgB,CAAC,iBAAiB;EAAE,qBAAqB;EAAM,CAAC;AAIvF,QAAO;EAAE,kBAHgB,OAAO,MAAiC;AAC/D,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAEb;EAAS;GAkBzB,WAA4B;CACvC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAoB;EAAE,gBAAgB,CAAC,iBAAiB;EAAE,qBAAqB;EAAM,CAAC;AAIxF,QAAO;EAAE,kBAHgB,OAAO,MAAiC;AAC/D,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAEb;EAAS;GAYzB,WAAmC;CAC9C,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,GAA0B;AAI5B,QAAO;EAAE,yBAHuB,OAAO,MAAwC;AAC7E,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAEN;EAAS;GAgBhC,WAA6B;CACxC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAqB;EAAE,gBAAgB,CAAC,kBAAkB;EAAE,qBAAqB;EAAM,CAAC;AAI1F,QAAO;EAAE,mBAHiB,OAAO,MAAkC;AACjE,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAEZ;EAAS;GAY1B,WAAoC;CAC/C,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,GAA2B;AAI7B,QAAO;EAAE,0BAHwB,OAAO,MAAyC;AAC/E,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAEL;EAAS;GAGjC,WAA8B;CACzC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAA0B;EAQ1B,gBAAgB,CAAC,oBAAoB,cAAc;EACnD,qBAAqB;EACtB,CAAC;AAIF,QAAO;EAAE,oBAHkB,OAAO,MAAuC;AACvE,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAEX;EAAS;GAG3B,WAA+B;CAC1C,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAU5B,IAAsB;EACtB,gBAAgB,CAAC,oBAAoB,cAAc;EACnD,qBAAqB;EAIrB,SAAS,GAAO,MAAW;GACzB,IAAM,IAAO,EAAO,MAAM;AAC1B,OAAI,GAAM,eAAe,cAAc,CAAC,EAAK,SAAU;GACvD,IAAM,IAAM,EAAM,SAAS;IACzB,YAAY;IACZ,IAAI,EAAK;IACV,CAAC;AACG,QACL,EAAM,OAAO;IACX,IAAI;IACJ,QAAQ,EAON,0BAA2B,EAAK,WAAW,aAAa,aAAa,YACtE;IACF,CAAC;;EAEL,CAAC;AAIF,QAAO;EAAE,qBAHmB,OAAO,GAAY,MAAmB;AAChE,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAEd;EAAS;GAG5B,WAA8B;CACzC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAU5B,IAAqB;EACrB,gBAAgB,CAAC,oBAAoB,cAAc;EACnD,qBAAqB;EACrB,SAAS,GAAO,MAAW;GACzB,IAAM,IAAO,EAAO,MAAM;AAC1B,OAAI,GAAM,eAAe,cAAc,CAAC,EAAK,SAAU;GACvD,IAAM,IAAM,EAAM,SAAS;IACzB,YAAY;IACZ,IAAI,EAAK;IACV,CAAC;AACG,QACL,EAAM,OAAO;IACX,IAAI;IACJ,QAAQ,EAGN,0BAA2B,EAAK,WAAW,aAAa,aAAa,YACtE;IACF,CAAC;;EAEL,CAAC;AAIF,QAAO;EAAE,oBAHkB,OAAO,GAAY,MAAmB;AAC/D,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAEf;EAAS;GAK3B,WAAoC;CAC/C,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAA6B;EAAE,gBAAgB,CAAC,iBAAiB,cAAc;EAAE,qBAAqB;EAAM,CAAC;AAI/G,QAAO;EAAE,0BAHwB,OAAO,GAAY,GAAgC,MAAmB;AACrG,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAQ;IAAO,EAAE,CAAC;;EAEjB;EAAS;GAOjC,UAAyB;CACpC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,IACA;EAAE,gBAAgB,CAAC,aAAa,WAAW;EAAE,qBAAqB;EAAM,CACzE;AAID,QAAO;EAAE,eAHa,OAAO,MAAe;AAC1C,SAAM,EAAO,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC;;EAEb;EAAS;GAYtB,WAAyB;CACpC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAgB;EAAE,gBAAgB,CAAC,eAAe,aAAa;EAAE,qBAAqB;EAAM,CAAC;AAI/F,QAAO;EAAE,eAHa,OAAO,GAAY,MAA8B;AACrE,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAEpB;EAAS;GAiBtB,WAA4B;CACvC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAmB;EAAE,gBAAgB,CAAC,kBAAkB,gBAAgB;EAAE,qBAAqB;EAAM,CAAC;AAIxG,QAAO;EAAE,kBAHgB,OAAO,GAAY,MAAiC;AAC3E,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAEjB;EAAS;GAGzB,WAA4B;CACvC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,IACA;EAAE,gBAAgB,CAAC,iBAAiB;EAAE,qBAAqB;EAAM,CAClE;AAKD,QAAO;EAAE,kBAJgB,OAAO,OAClB,MAAM,EAAO,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC,EACpC,MAAM,gCAAgC;EAExB;EAAS;GAsBzB,WAAuB;CAClC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,IACA;EAAE,gBAAgB,CAAC,YAAY;EAAE,qBAAqB;EAAM,CAC7D;AAID,QAAO;EAAE,aAHW,OAAO,MAA4B;AACrD,SAAM,EAAO,EAAE,WAAW,EAAE,UAAO,EAAE,CAAC;;EAElB;EAAS;GAqCpB,WAA6B;CACxC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAqB;EAAE,gBAAgB,CAAC,kBAAkB;EAAE,qBAAqB;EAAM,CAAC;AAI1F,QAAO;EAAE,mBAHiB,OAAO,GAAY,MAAkC;AAC7E,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAEhB;EAAS;GAG1B,WAA4B;CACvC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAI5B,CAAG;;;;;;;;OASH;EAAE,gBAAgB,CAAC,kBAAkB;EAAE,qBAAqB;EAAM,CACnE;AAID,QAAO;EAAE,kBAHgB,OAAO,GAAY,MAAoB;AAC9D,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI,OAAO,EAAE,YAAS;IAAE,EAAE,CAAC;;EAE9B;EAAS;GAGzB,WAA6B;CACxC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAC5B,IACA;EAAE,gBAAgB,CAAC,kBAAkB;EAAE,qBAAqB;EAAM,CACnE;AAKD,QAAO;EAAE,mBAJiB,OAAO,OACnB,MAAM,EAAO,EAAE,WAAW,EAAE,OAAI,EAAE,CAAC,EACpC,MAAM,iCAAiC;EAExB;EAAS;GAgB1B,WAA6B;CACxC,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAoB;EAAE,gBAAgB,CAAC,mBAAmB,iBAAiB;EAAE,qBAAqB;EAAM,CAAC;AAI3G,QAAO;EAAE,mBAHiB,OAAO,GAAY,MAAkC;AAC7E,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAEhB;EAAS;GAmB1B,WAAqC;CAChD,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAAqB;EAAE,gBAAgB,CAAC,yBAAyB;EAAE,qBAAqB;EAAM,CAAC;AAIjG,QAAO;EAAE,2BAHyB,OAAO,GAAY,MAA6B;AAChF,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAiB,EAAE,CAAC;;EAElB;EAAS;GAQlC,WAAmC;CAC9C,IAAM,CAAC,GAAQ,EAAE,gBAAa,EAG5B,IAA2B;EAAE,gBAAgB,CAAC,wBAAwB;EAAE,qBAAqB;EAAM,CAAC;AAItG,QAAO;EAAE,yBAHuB,OAAO,GAAY,MAAwC;AACzF,SAAM,EAAO,EAAE,WAAW;IAAE;IAAI;IAAO,EAAE,CAAC;;EAEV;EAAS"}
|