@local-logic/sdks-app 1.24.43 → 1.24.44
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/assets/{Attribution-DnmiY-id.js → Attribution-D012fWNs.js} +2 -2
- package/dist/assets/{Attribution-DnmiY-id.js.map → Attribution-D012fWNs.js.map} +1 -1
- package/dist/assets/{Attribution-legacy-Da4FA00m.js → Attribution-legacy-DSXG-3Q0.js} +2 -2
- package/dist/assets/{Attribution-legacy-Da4FA00m.js.map → Attribution-legacy-DSXG-3Q0.js.map} +1 -1
- package/dist/assets/{Cluster-BHQcO6iC-Do1P9Ia2.js → Cluster-BHQcO6iC-_jL_0N39.js} +2 -2
- package/dist/assets/{Cluster-BHQcO6iC-Do1P9Ia2.js.map → Cluster-BHQcO6iC-_jL_0N39.js.map} +1 -1
- package/dist/assets/{Cluster-BHQcO6iC-legacy-B3k4OIlu.js → Cluster-BHQcO6iC-legacy-3UMx26D5.js} +2 -2
- package/dist/assets/{Cluster-BHQcO6iC-legacy-B3k4OIlu.js.map → Cluster-BHQcO6iC-legacy-3UMx26D5.js.map} +1 -1
- package/dist/assets/{Google-BFAJ84CT-DhLE7SMg.js → Google-BFAJ84CT-Dh97X1sB.js} +2 -2
- package/dist/assets/{Google-BFAJ84CT-DhLE7SMg.js.map → Google-BFAJ84CT-Dh97X1sB.js.map} +1 -1
- package/dist/assets/{Google-BFAJ84CT-legacy-BXfoTpXf.js → Google-BFAJ84CT-legacy-D0OGURqq.js} +2 -2
- package/dist/assets/{Google-BFAJ84CT-legacy-BXfoTpXf.js.map → Google-BFAJ84CT-legacy-D0OGURqq.js.map} +1 -1
- package/dist/assets/{Google-BS41ufih-i8xQrE_C.js → Google-BS41ufih-Cc3f5UsV.js} +2 -2
- package/dist/assets/{Google-BS41ufih-i8xQrE_C.js.map → Google-BS41ufih-Cc3f5UsV.js.map} +1 -1
- package/dist/assets/{Google-BS41ufih-legacy-BdzBlyLB.js → Google-BS41ufih-legacy-BnojXQoy.js} +2 -2
- package/dist/assets/{Google-BS41ufih-legacy-BdzBlyLB.js.map → Google-BS41ufih-legacy-BnojXQoy.js.map} +1 -1
- package/dist/assets/{Google-CH7a2yx--BBV608XJ.js → Google-CH7a2yx--CBaNUH_8.js} +2 -2
- package/dist/assets/{Google-CH7a2yx--BBV608XJ.js.map → Google-CH7a2yx--CBaNUH_8.js.map} +1 -1
- package/dist/assets/{Google-CH7a2yx--legacy-DK3evKRO.js → Google-CH7a2yx--legacy-C_ip84Oz.js} +2 -2
- package/dist/assets/{Google-CH7a2yx--legacy-DK3evKRO.js.map → Google-CH7a2yx--legacy-C_ip84Oz.js.map} +1 -1
- package/dist/assets/{Google-CXGCn-oJ-5ByomDf2.js → Google-CXGCn-oJ-i9rxhVJh.js} +2 -2
- package/dist/assets/{Google-CXGCn-oJ-5ByomDf2.js.map → Google-CXGCn-oJ-i9rxhVJh.js.map} +1 -1
- package/dist/assets/{Google-CXGCn-oJ-legacy-DA32c0kh.js → Google-CXGCn-oJ-legacy-OuENT3oi.js} +2 -2
- package/dist/assets/{Google-CXGCn-oJ-legacy-DA32c0kh.js.map → Google-CXGCn-oJ-legacy-OuENT3oi.js.map} +1 -1
- package/dist/assets/{Google-DbOLrYJn-IeJcma0o.js → Google-DbOLrYJn-bogicaOo.js} +2 -2
- package/dist/assets/{Google-DbOLrYJn-IeJcma0o.js.map → Google-DbOLrYJn-bogicaOo.js.map} +1 -1
- package/dist/assets/{Google-DbOLrYJn-legacy-gzWCKBCo.js → Google-DbOLrYJn-legacy-B95opCm9.js} +2 -2
- package/dist/assets/{Google-DbOLrYJn-legacy-gzWCKBCo.js.map → Google-DbOLrYJn-legacy-B95opCm9.js.map} +1 -1
- package/dist/assets/{GridGraph-C0PP17kA.js → GridGraph-_rWMkwNI.js} +2 -2
- package/dist/assets/{GridGraph-C0PP17kA.js.map → GridGraph-_rWMkwNI.js.map} +1 -1
- package/dist/assets/{GridGraph-legacy-B1C-2d1Q.js → GridGraph-legacy-CsgF_9Vx.js} +2 -2
- package/dist/assets/{GridGraph-legacy-B1C-2d1Q.js.map → GridGraph-legacy-CsgF_9Vx.js.map} +1 -1
- package/dist/assets/{LeadCapture-e2fi_VKJ.js → LeadCapture-IqeCbA_u.js} +2 -2
- package/dist/assets/{LeadCapture-e2fi_VKJ.js.map → LeadCapture-IqeCbA_u.js.map} +1 -1
- package/dist/assets/{LeadCapture-legacy-wC9F3Dq5.js → LeadCapture-legacy-D_miey0j.js} +2 -2
- package/dist/assets/{LeadCapture-legacy-wC9F3Dq5.js.map → LeadCapture-legacy-D_miey0j.js.map} +1 -1
- package/dist/assets/{LocalContent-Bgf0CDoA.js → LocalContent-DL6Y67Ne.js} +2 -2
- package/dist/assets/{LocalContent-Bgf0CDoA.js.map → LocalContent-DL6Y67Ne.js.map} +1 -1
- package/dist/assets/{LocalContent-legacy-BHBTASYp.js → LocalContent-legacy-BBB-ST51.js} +2 -2
- package/dist/assets/{LocalContent-legacy-BHBTASYp.js.map → LocalContent-legacy-BBB-ST51.js.map} +1 -1
- package/dist/assets/{LocalDemographics-BuWGiqEi.js → LocalDemographics-DcirUh9h.js} +2 -2
- package/dist/assets/{LocalDemographics-BuWGiqEi.js.map → LocalDemographics-DcirUh9h.js.map} +1 -1
- package/dist/assets/{LocalDemographics-legacy-D1k5CRVw.js → LocalDemographics-legacy-rmGYdILu.js} +2 -2
- package/dist/assets/{LocalDemographics-legacy-D1k5CRVw.js.map → LocalDemographics-legacy-rmGYdILu.js.map} +1 -1
- package/dist/assets/{Mapbox-CpLnA607-AeAqR5aH.js → Mapbox-CpLnA607-CKDrFvU5.js} +2 -2
- package/dist/assets/{Mapbox-CpLnA607-AeAqR5aH.js.map → Mapbox-CpLnA607-CKDrFvU5.js.map} +1 -1
- package/dist/assets/{Mapbox-CpLnA607-legacy-CZe3Jz0m.js → Mapbox-CpLnA607-legacy-Bx1JnBMX.js} +2 -2
- package/dist/assets/{Mapbox-CpLnA607-legacy-CZe3Jz0m.js.map → Mapbox-CpLnA607-legacy-Bx1JnBMX.js.map} +1 -1
- package/dist/assets/{Mapbox-DDJ1gHRb-rvf9zFJO.js → Mapbox-DDJ1gHRb-BrLhMxW4.js} +2 -2
- package/dist/assets/{Mapbox-DDJ1gHRb-rvf9zFJO.js.map → Mapbox-DDJ1gHRb-BrLhMxW4.js.map} +1 -1
- package/dist/assets/{Mapbox-DDJ1gHRb-legacy-NAVECUv-.js → Mapbox-DDJ1gHRb-legacy-DtASaFMy.js} +2 -2
- package/dist/assets/{Mapbox-DDJ1gHRb-legacy-NAVECUv-.js.map → Mapbox-DDJ1gHRb-legacy-DtASaFMy.js.map} +1 -1
- package/dist/assets/{Mapbox-DiD9etYJ-zR1EkiNp.js → Mapbox-DiD9etYJ-BMtTiGO7.js} +2 -2
- package/dist/assets/{Mapbox-DiD9etYJ-zR1EkiNp.js.map → Mapbox-DiD9etYJ-BMtTiGO7.js.map} +1 -1
- package/dist/assets/{Mapbox-DiD9etYJ-legacy-pThPPnNQ.js → Mapbox-DiD9etYJ-legacy-WIywO1-w.js} +2 -2
- package/dist/assets/{Mapbox-DiD9etYJ-legacy-pThPPnNQ.js.map → Mapbox-DiD9etYJ-legacy-WIywO1-w.js.map} +1 -1
- package/dist/assets/{Mapbox-DtZmt1D_-DHhJhTo8.js → Mapbox-DtZmt1D_-Dq1UD7au.js} +2 -2
- package/dist/assets/{Mapbox-DtZmt1D_-DHhJhTo8.js.map → Mapbox-DtZmt1D_-Dq1UD7au.js.map} +1 -1
- package/dist/assets/{Mapbox-DtZmt1D_-legacy-ccCiz3Pd.js → Mapbox-DtZmt1D_-legacy-CXP5-C49.js} +2 -2
- package/dist/assets/{Mapbox-DtZmt1D_-legacy-ccCiz3Pd.js.map → Mapbox-DtZmt1D_-legacy-CXP5-C49.js.map} +1 -1
- package/dist/assets/{Mapbox-u11C3LWs-B_yCTqoV.js → Mapbox-u11C3LWs-DuakH8Ji.js} +2 -2
- package/dist/assets/{Mapbox-u11C3LWs-B_yCTqoV.js.map → Mapbox-u11C3LWs-DuakH8Ji.js.map} +1 -1
- package/dist/assets/{Mapbox-u11C3LWs-legacy-D90FQvEN.js → Mapbox-u11C3LWs-legacy-ChrUMjPl.js} +2 -2
- package/dist/assets/{Mapbox-u11C3LWs-legacy-D90FQvEN.js.map → Mapbox-u11C3LWs-legacy-ChrUMjPl.js.map} +1 -1
- package/dist/assets/{Maptiler-C0oTROMk-BwaieRuC.js → Maptiler-C0oTROMk-Dz6Vkl6m.js} +2 -2
- package/dist/assets/{Maptiler-C0oTROMk-BwaieRuC.js.map → Maptiler-C0oTROMk-Dz6Vkl6m.js.map} +1 -1
- package/dist/assets/{Maptiler-C0oTROMk-legacy-Dt8ZGBQ1.js → Maptiler-C0oTROMk-legacy-B6L6FzM1.js} +2 -2
- package/dist/assets/{Maptiler-C0oTROMk-legacy-Dt8ZGBQ1.js.map → Maptiler-C0oTROMk-legacy-B6L6FzM1.js.map} +1 -1
- package/dist/assets/{Maptiler-DJScKW8p-D7sqoIWz.js → Maptiler-DJScKW8p-6YGAe8cE.js} +2 -2
- package/dist/assets/{Maptiler-DJScKW8p-D7sqoIWz.js.map → Maptiler-DJScKW8p-6YGAe8cE.js.map} +1 -1
- package/dist/assets/{Maptiler-DJScKW8p-legacy-BxKgw8sA.js → Maptiler-DJScKW8p-legacy-DEW3rPcZ.js} +2 -2
- package/dist/assets/{Maptiler-DJScKW8p-legacy-BxKgw8sA.js.map → Maptiler-DJScKW8p-legacy-DEW3rPcZ.js.map} +1 -1
- package/dist/assets/{Maptiler-DdeFS4iM-CAX4yO3w.js → Maptiler-DdeFS4iM-Brs-80yb.js} +2 -2
- package/dist/assets/{Maptiler-DdeFS4iM-CAX4yO3w.js.map → Maptiler-DdeFS4iM-Brs-80yb.js.map} +1 -1
- package/dist/assets/{Maptiler-DdeFS4iM-legacy-DsI2My96.js → Maptiler-DdeFS4iM-legacy-Ci9oroQC.js} +2 -2
- package/dist/assets/{Maptiler-DdeFS4iM-legacy-DsI2My96.js.map → Maptiler-DdeFS4iM-legacy-Ci9oroQC.js.map} +1 -1
- package/dist/assets/{Maptiler-DqeshLom-a9LD3O-1.js → Maptiler-DqeshLom-B0jdRE1n.js} +2 -2
- package/dist/assets/{Maptiler-DqeshLom-a9LD3O-1.js.map → Maptiler-DqeshLom-B0jdRE1n.js.map} +1 -1
- package/dist/assets/{Maptiler-DqeshLom-legacy-iao-6Wdy.js → Maptiler-DqeshLom-legacy-CurUmtTs.js} +2 -2
- package/dist/assets/{Maptiler-DqeshLom-legacy-iao-6Wdy.js.map → Maptiler-DqeshLom-legacy-CurUmtTs.js.map} +1 -1
- package/dist/assets/{Maptiler-YjlcPccn-BbfdNZAF.js → Maptiler-YjlcPccn-BeECNaQc.js} +2 -2
- package/dist/assets/{Maptiler-YjlcPccn-BbfdNZAF.js.map → Maptiler-YjlcPccn-BeECNaQc.js.map} +1 -1
- package/dist/assets/{Maptiler-YjlcPccn-legacy-D6AZMug8.js → Maptiler-YjlcPccn-legacy-DUPM1fwa.js} +2 -2
- package/dist/assets/{Maptiler-YjlcPccn-legacy-D6AZMug8.js.map → Maptiler-YjlcPccn-legacy-DUPM1fwa.js.map} +1 -1
- package/dist/assets/{MarkerIcon-Bc3X9WQk-ByrgCntx.js → MarkerIcon-Bc3X9WQk-BuSzLTIC.js} +2 -2
- package/dist/assets/{MarkerIcon-Bc3X9WQk-ByrgCntx.js.map → MarkerIcon-Bc3X9WQk-BuSzLTIC.js.map} +1 -1
- package/dist/assets/{MarkerIcon-Bc3X9WQk-legacy-CIGJvvJR.js → MarkerIcon-Bc3X9WQk-legacy-0n6adFAI.js} +2 -2
- package/dist/assets/{MarkerIcon-Bc3X9WQk-legacy-CIGJvvJR.js.map → MarkerIcon-Bc3X9WQk-legacy-0n6adFAI.js.map} +1 -1
- package/dist/assets/{NeighborhoodCard-CQFgsjdH.js → NeighborhoodCard-ePSiX1h0.js} +2 -2
- package/dist/assets/{NeighborhoodCard-CQFgsjdH.js.map → NeighborhoodCard-ePSiX1h0.js.map} +1 -1
- package/dist/assets/{NeighborhoodCard-legacy-CT-3ylPG.js → NeighborhoodCard-legacy-B7hL1XOX.js} +2 -2
- package/dist/assets/{NeighborhoodCard-legacy-CT-3ylPG.js.map → NeighborhoodCard-legacy-B7hL1XOX.js.map} +1 -1
- package/dist/assets/{NeighborhoodCharacteristics-w5WKGZ2K.js → NeighborhoodCharacteristics-__nE9rKT.js} +2 -2
- package/dist/assets/{NeighborhoodCharacteristics-w5WKGZ2K.js.map → NeighborhoodCharacteristics-__nE9rKT.js.map} +1 -1
- package/dist/assets/{NeighborhoodCharacteristics-legacy-CKYaXDfQ.js → NeighborhoodCharacteristics-legacy-zcamdTX5.js} +2 -2
- package/dist/assets/{NeighborhoodCharacteristics-legacy-CKYaXDfQ.js.map → NeighborhoodCharacteristics-legacy-zcamdTX5.js.map} +1 -1
- package/dist/assets/{NeighborhoodDemographics-BZrhdeYZ.js → NeighborhoodDemographics-5cGgXnRY.js} +2 -2
- package/dist/assets/{NeighborhoodDemographics-BZrhdeYZ.js.map → NeighborhoodDemographics-5cGgXnRY.js.map} +1 -1
- package/dist/assets/{NeighborhoodDemographics-legacy-BHIQ1ER7.js → NeighborhoodDemographics-legacy-c3eDH26X.js} +2 -2
- package/dist/assets/{NeighborhoodDemographics-legacy-BHIQ1ER7.js.map → NeighborhoodDemographics-legacy-c3eDH26X.js.map} +1 -1
- package/dist/assets/{NeighborhoodFeatured-DfjxzlxY.js → NeighborhoodFeatured-DIXhmlRC.js} +2 -2
- package/dist/assets/{NeighborhoodFeatured-DfjxzlxY.js.map → NeighborhoodFeatured-DIXhmlRC.js.map} +1 -1
- package/dist/assets/{NeighborhoodFeatured-legacy-DHTnv4CZ.js → NeighborhoodFeatured-legacy-lDme45yC.js} +2 -2
- package/dist/assets/{NeighborhoodFeatured-legacy-DHTnv4CZ.js.map → NeighborhoodFeatured-legacy-lDme45yC.js.map} +1 -1
- package/dist/assets/{NeighborhoodHero-DrBKD27P.js → NeighborhoodHero-Bj4FlQVV.js} +2 -2
- package/dist/assets/{NeighborhoodHero-DrBKD27P.js.map → NeighborhoodHero-Bj4FlQVV.js.map} +1 -1
- package/dist/assets/{NeighborhoodHero-legacy-BMCiD7gd.js → NeighborhoodHero-legacy-C6T-qgPK.js} +2 -2
- package/dist/assets/{NeighborhoodHero-legacy-BMCiD7gd.js.map → NeighborhoodHero-legacy-C6T-qgPK.js.map} +1 -1
- package/dist/assets/{NeighborhoodHighlights-CwoTHUIb.js → NeighborhoodHighlights-BBmVnaLl.js} +2 -2
- package/dist/assets/{NeighborhoodHighlights-CwoTHUIb.js.map → NeighborhoodHighlights-BBmVnaLl.js.map} +1 -1
- package/dist/assets/{NeighborhoodHighlights-legacy-R316wAs2.js → NeighborhoodHighlights-legacy-B2x36QRC.js} +2 -2
- package/dist/assets/{NeighborhoodHighlights-legacy-R316wAs2.js.map → NeighborhoodHighlights-legacy-B2x36QRC.js.map} +1 -1
- package/dist/assets/{NeighborhoodMap-ChZpBdAe.js → NeighborhoodMap-DwMQLhkw.js} +2 -2
- package/dist/assets/{NeighborhoodMap-ChZpBdAe.js.map → NeighborhoodMap-DwMQLhkw.js.map} +1 -1
- package/dist/assets/{NeighborhoodMap-legacy-D7V_lZQF.js → NeighborhoodMap-legacy-CugKbgSp.js} +2 -2
- package/dist/assets/{NeighborhoodMap-legacy-D7V_lZQF.js.map → NeighborhoodMap-legacy-CugKbgSp.js.map} +1 -1
- package/dist/assets/{NeighborhoodMarketTrends-DpUA8_BA.js → NeighborhoodMarketTrends-COqvs4Fz.js} +3 -3
- package/dist/assets/{NeighborhoodMarketTrends-DpUA8_BA.js.map → NeighborhoodMarketTrends-COqvs4Fz.js.map} +1 -1
- package/dist/assets/{NeighborhoodMarketTrends-legacy-18rcLpS1.js → NeighborhoodMarketTrends-legacy-DSHDUUH_.js} +2 -2
- package/dist/assets/{NeighborhoodMarketTrends-legacy-18rcLpS1.js.map → NeighborhoodMarketTrends-legacy-DSHDUUH_.js.map} +1 -1
- package/dist/assets/{NeighborhoodMatch-BLDNZBRX.js → NeighborhoodMatch-GqzEoreu.js} +2 -2
- package/dist/assets/{NeighborhoodMatch-BLDNZBRX.js.map → NeighborhoodMatch-GqzEoreu.js.map} +1 -1
- package/dist/assets/{NeighborhoodMatch-legacy-C2QyjRPr.js → NeighborhoodMatch-legacy-SGEcOXuf.js} +2 -2
- package/dist/assets/{NeighborhoodMatch-legacy-C2QyjRPr.js.map → NeighborhoodMatch-legacy-SGEcOXuf.js.map} +1 -1
- package/dist/assets/{NeighborhoodPropertyValueDrivers-CQoo-TFM.js → NeighborhoodPropertyValueDrivers-Cz4cawqR.js} +2 -2
- package/dist/assets/{NeighborhoodPropertyValueDrivers-CQoo-TFM.js.map → NeighborhoodPropertyValueDrivers-Cz4cawqR.js.map} +1 -1
- package/dist/assets/{NeighborhoodPropertyValueDrivers-legacy-B-3Ld9XX.js → NeighborhoodPropertyValueDrivers-legacy-7gVUrIgh.js} +2 -2
- package/dist/assets/{NeighborhoodPropertyValueDrivers-legacy-B-3Ld9XX.js.map → NeighborhoodPropertyValueDrivers-legacy-7gVUrIgh.js.map} +1 -1
- package/dist/assets/{NeighborhoodSchools-DMKDCbUv.js → NeighborhoodSchools-D6CPTgGE.js} +2 -2
- package/dist/assets/{NeighborhoodSchools-DMKDCbUv.js.map → NeighborhoodSchools-D6CPTgGE.js.map} +1 -1
- package/dist/assets/{NeighborhoodSchools-legacy-D_MpmqNV.js → NeighborhoodSchools-legacy-0G_dtI8q.js} +2 -2
- package/dist/assets/{NeighborhoodSchools-legacy-D_MpmqNV.js.map → NeighborhoodSchools-legacy-0G_dtI8q.js.map} +1 -1
- package/dist/assets/{NeighborhoodShowcase-CB3_rfxv.js → NeighborhoodShowcase-CRlKc8OL.js} +2 -2
- package/dist/assets/{NeighborhoodShowcase-CB3_rfxv.js.map → NeighborhoodShowcase-CRlKc8OL.js.map} +1 -1
- package/dist/assets/{NeighborhoodShowcase-legacy-B8IQbiVz.js → NeighborhoodShowcase-legacy-Bjz5_C24.js} +2 -2
- package/dist/assets/{NeighborhoodShowcase-legacy-B8IQbiVz.js.map → NeighborhoodShowcase-legacy-Bjz5_C24.js.map} +1 -1
- package/dist/assets/{NoDataContent-CFLl-Rd-.js → NoDataContent-CTxzT718.js} +2 -2
- package/dist/assets/{NoDataContent-CFLl-Rd-.js.map → NoDataContent-CTxzT718.js.map} +1 -1
- package/dist/assets/{NoDataContent-legacy-aWMMhT9c.js → NoDataContent-legacy-BWvHzb0g.js} +2 -2
- package/dist/assets/{NoDataContent-legacy-aWMMhT9c.js.map → NoDataContent-legacy-BWvHzb0g.js.map} +1 -1
- package/dist/assets/{ResizeWrapper-C7vwckhm.js → ResizeWrapper-DbYmMKOU.js} +2 -2
- package/dist/assets/{ResizeWrapper-C7vwckhm.js.map → ResizeWrapper-DbYmMKOU.js.map} +1 -1
- package/dist/assets/{ResizeWrapper-legacy-WwfLyk1y.js → ResizeWrapper-legacy-C0ua6RC5.js} +2 -2
- package/dist/assets/{ResizeWrapper-legacy-WwfLyk1y.js.map → ResizeWrapper-legacy-C0ua6RC5.js.map} +1 -1
- package/dist/assets/{ScoreCardList-PWiDx6Ra.js → ScoreCardList-B4NURGgK.js} +2 -2
- package/dist/assets/{ScoreCardList-PWiDx6Ra.js.map → ScoreCardList-B4NURGgK.js.map} +1 -1
- package/dist/assets/{ScoreCardList-legacy-BK5dq36c.js → ScoreCardList-legacy-BTRPIWUP.js} +2 -2
- package/dist/assets/{ScoreCardList-legacy-BK5dq36c.js.map → ScoreCardList-legacy-BTRPIWUP.js.map} +1 -1
- package/dist/assets/{ScoreIcon-legacy-BwaAs8hW.js → ScoreIcon-legacy-D9igp8MS.js} +2 -2
- package/dist/assets/{ScoreIcon-legacy-BwaAs8hW.js.map → ScoreIcon-legacy-D9igp8MS.js.map} +1 -1
- package/dist/assets/{ScoreIcon-CsB-usG9.js → ScoreIcon-s5-ehfPP.js} +2 -2
- package/dist/assets/{ScoreIcon-CsB-usG9.js.map → ScoreIcon-s5-ehfPP.js.map} +1 -1
- package/dist/assets/{Testing--n5Ro0Ek-B4Vejacz.js → Testing--n5Ro0Ek-Cc3RGltv.js} +2 -2
- package/dist/assets/{Testing--n5Ro0Ek-B4Vejacz.js.map → Testing--n5Ro0Ek-Cc3RGltv.js.map} +1 -1
- package/dist/assets/{Testing--n5Ro0Ek-legacy-Co29YW_f.js → Testing--n5Ro0Ek-legacy-BB0u0086.js} +2 -2
- package/dist/assets/{Testing--n5Ro0Ek-legacy-Co29YW_f.js.map → Testing--n5Ro0Ek-legacy-BB0u0086.js.map} +1 -1
- package/dist/assets/{Testing-BNJwzbRK-hEJFbzQg.js → Testing-BNJwzbRK-C1viHx8M.js} +2 -2
- package/dist/assets/{Testing-BNJwzbRK-hEJFbzQg.js.map → Testing-BNJwzbRK-C1viHx8M.js.map} +1 -1
- package/dist/assets/{Testing-BNJwzbRK-legacy-B1EdPb3k.js → Testing-BNJwzbRK-legacy-XPR_-0Eg.js} +2 -2
- package/dist/assets/{Testing-BNJwzbRK-legacy-B1EdPb3k.js.map → Testing-BNJwzbRK-legacy-XPR_-0Eg.js.map} +1 -1
- package/dist/assets/{Testing-CoRLhmNT-Cqyejow7.js → Testing-CoRLhmNT-B4pOjeZH.js} +2 -2
- package/dist/assets/{Testing-CoRLhmNT-Cqyejow7.js.map → Testing-CoRLhmNT-B4pOjeZH.js.map} +1 -1
- package/dist/assets/{Testing-CoRLhmNT-legacy-BQpWn7Bu.js → Testing-CoRLhmNT-legacy-BFVvx40w.js} +2 -2
- package/dist/assets/{Testing-CoRLhmNT-legacy-BQpWn7Bu.js.map → Testing-CoRLhmNT-legacy-BFVvx40w.js.map} +1 -1
- package/dist/assets/{Testing-DGUeGxdc-g-T4vdVq.js → Testing-DGUeGxdc-CKSlgBDu.js} +2 -2
- package/dist/assets/{Testing-DGUeGxdc-g-T4vdVq.js.map → Testing-DGUeGxdc-CKSlgBDu.js.map} +1 -1
- package/dist/assets/{Testing-DGUeGxdc-legacy-GwpDyiTO.js → Testing-DGUeGxdc-legacy-B2yBRluh.js} +2 -2
- package/dist/assets/{Testing-DGUeGxdc-legacy-GwpDyiTO.js.map → Testing-DGUeGxdc-legacy-B2yBRluh.js.map} +1 -1
- package/dist/assets/{Testing-DzWAcbhL-BJOouF0A.js → Testing-DzWAcbhL-B5JOmJod.js} +2 -2
- package/dist/assets/{Testing-DzWAcbhL-BJOouF0A.js.map → Testing-DzWAcbhL-B5JOmJod.js.map} +1 -1
- package/dist/assets/{Testing-DzWAcbhL-legacy-CYECRHWo.js → Testing-DzWAcbhL-legacy-20VBltE2.js} +2 -2
- package/dist/assets/{Testing-DzWAcbhL-legacy-CYECRHWo.js.map → Testing-DzWAcbhL-legacy-20VBltE2.js.map} +1 -1
- package/dist/assets/{TitleHeader-CepE-7Y-.js → TitleHeader-Be2YRN93.js} +2 -2
- package/dist/assets/{TitleHeader-CepE-7Y-.js.map → TitleHeader-Be2YRN93.js.map} +1 -1
- package/dist/assets/{TitleHeader-legacy-UtQZo396.js → TitleHeader-legacy-CzXSoMFC.js} +2 -2
- package/dist/assets/{TitleHeader-legacy-UtQZo396.js.map → TitleHeader-legacy-CzXSoMFC.js.map} +1 -1
- package/dist/assets/{Trans-B1zRm9WH.js → Trans-DntniXa9.js} +2 -2
- package/dist/assets/{Trans-B1zRm9WH.js.map → Trans-DntniXa9.js.map} +1 -1
- package/dist/assets/{Trans-legacy-B47WOepl.js → Trans-legacy-B9t4MV_C.js} +2 -2
- package/dist/assets/{Trans-legacy-B47WOepl.js.map → Trans-legacy-B9t4MV_C.js.map} +1 -1
- package/dist/assets/{ValidateOptions-DsfMKmBQ.js → ValidateOptions-BqL9iY9R.js} +2 -2
- package/dist/assets/{ValidateOptions-DsfMKmBQ.js.map → ValidateOptions-BqL9iY9R.js.map} +1 -1
- package/dist/assets/{ValidateOptions-legacy-CtRpWaj6.js → ValidateOptions-legacy-BQ69tin-.js} +2 -2
- package/dist/assets/{ValidateOptions-legacy-CtRpWaj6.js.map → ValidateOptions-legacy-BQ69tin-.js.map} +1 -1
- package/dist/assets/{dist-DrX-uh0V.js → dist-C_ktdPsv.js} +2 -2
- package/dist/assets/{dist-DrX-uh0V.js.map → dist-C_ktdPsv.js.map} +1 -1
- package/dist/assets/{dist-legacy-CJvY2ayv.js → dist-legacy-DIwOLBcZ.js} +2 -2
- package/dist/assets/{dist-legacy-CJvY2ayv.js.map → dist-legacy-DIwOLBcZ.js.map} +1 -1
- package/dist/assets/{getMapProviderConfig-DbC8zRUF.js → getMapProviderConfig-D9e8KNYU.js} +3 -3
- package/dist/assets/{getMapProviderConfig-DbC8zRUF.js.map → getMapProviderConfig-D9e8KNYU.js.map} +1 -1
- package/dist/assets/{getMapProviderConfig-legacy-CwpYg6Bq.js → getMapProviderConfig-legacy-DVBUhWqR.js} +2 -2
- package/dist/assets/{getMapProviderConfig-legacy-CwpYg6Bq.js.map → getMapProviderConfig-legacy-DVBUhWqR.js.map} +1 -1
- package/dist/assets/{index-Bi8h_BNl.js → index-PbHyodiU.js} +3 -3
- package/dist/assets/{index-Bi8h_BNl.js.map → index-PbHyodiU.js.map} +1 -1
- package/dist/assets/{index-legacy-DF60d_4Z.js → index-legacy-CYps6nGB.js} +2 -2
- package/dist/assets/{index-legacy-DF60d_4Z.js.map → index-legacy-CYps6nGB.js.map} +1 -1
- package/dist/assets/{index.es-BkZlVTZH.js → index.es-DuM-WVhV.js} +2 -2
- package/dist/assets/{index.es-BkZlVTZH.js.map → index.es-DuM-WVhV.js.map} +1 -1
- package/dist/assets/{index.es-legacy-DdMTxXQK.js → index.es-legacy-Cz2m6e4L.js} +2 -2
- package/dist/assets/{index.es-legacy-DdMTxXQK.js.map → index.es-legacy-Cz2m6e4L.js.map} +1 -1
- package/dist/assets/{mapbox-jb8Zev6T-DbABbE_7.js → mapbox-jb8Zev6T-BgSpiKob.js} +2 -2
- package/dist/assets/{mapbox-jb8Zev6T-DbABbE_7.js.map → mapbox-jb8Zev6T-BgSpiKob.js.map} +1 -1
- package/dist/assets/{mapbox-jb8Zev6T-legacy-DkLTUrvZ.js → mapbox-jb8Zev6T-legacy-hBjjoWXX.js} +2 -2
- package/dist/assets/{mapbox-jb8Zev6T-legacy-DkLTUrvZ.js.map → mapbox-jb8Zev6T-legacy-hBjjoWXX.js.map} +1 -1
- package/dist/assets/{maplibre-CUYkxr-D-DPcOY-Lp.js → maplibre-CUYkxr-D-BJWmGVry.js} +2 -2
- package/dist/assets/{maplibre-CUYkxr-D-DPcOY-Lp.js.map → maplibre-CUYkxr-D-BJWmGVry.js.map} +1 -1
- package/dist/assets/{maplibre-CUYkxr-D-legacy-Ct1K6aaN.js → maplibre-CUYkxr-D-legacy-BNqtRzVB.js} +2 -2
- package/dist/assets/{maplibre-CUYkxr-D-legacy-Ct1K6aaN.js.map → maplibre-CUYkxr-D-legacy-BNqtRzVB.js.map} +1 -1
- package/dist/assets/neighborhood-fallback-CizB5oi9.js.map +1 -1
- package/dist/assets/neighborhood-fallback-legacy-Bu1BwGpC.js.map +1 -1
- package/dist/assets/{sdks-CIuvHxGG.js → sdks-BTkz21XL.js} +2 -2
- package/dist/assets/{sdks-CIuvHxGG.js.map → sdks-BTkz21XL.js.map} +1 -1
- package/dist/assets/{sdks-legacy-3YngGDux.js → sdks-legacy-3sJ2n28B.js} +2 -2
- package/dist/assets/{sdks-legacy-3YngGDux.js.map → sdks-legacy-3sJ2n28B.js.map} +1 -1
- package/dist/assets/{useDemographicsData-Dz3Pu-Ht.js → useDemographicsData-DKScK522.js} +2 -2
- package/dist/assets/{useDemographicsData-Dz3Pu-Ht.js.map → useDemographicsData-DKScK522.js.map} +1 -1
- package/dist/assets/{useDemographicsData-legacy-BD0OVn1e.js → useDemographicsData-legacy-BsoUaI9P.js} +2 -2
- package/dist/assets/{useDemographicsData-legacy-BD0OVn1e.js.map → useDemographicsData-legacy-BsoUaI9P.js.map} +1 -1
- package/dist/assets/{useGeographies-CtCPN011.js → useGeographies-DejQbRC9.js} +2 -2
- package/dist/assets/{useGeographies-CtCPN011.js.map → useGeographies-DejQbRC9.js.map} +1 -1
- package/dist/assets/{useGeographies-legacy-BmNvVGxt.js → useGeographies-legacy-B5ciev2M.js} +2 -2
- package/dist/assets/{useGeographies-legacy-BmNvVGxt.js.map → useGeographies-legacy-B5ciev2M.js.map} +1 -1
- package/dist/assets/{useIsMobile-DqKgF2mC.js → useIsMobile-Co5SddxR.js} +2 -2
- package/dist/assets/{useIsMobile-DqKgF2mC.js.map → useIsMobile-Co5SddxR.js.map} +1 -1
- package/dist/assets/{useIsMobile-legacy-jEoaA3sZ.js → useIsMobile-legacy-B53LlWR8.js} +2 -2
- package/dist/assets/{useIsMobile-legacy-jEoaA3sZ.js.map → useIsMobile-legacy-B53LlWR8.js.map} +1 -1
- package/dist/assets/{useLocation-DnI9ftE5.js → useLocation-DUSQPRn5.js} +2 -2
- package/dist/assets/{useLocation-DnI9ftE5.js.map → useLocation-DUSQPRn5.js.map} +1 -1
- package/dist/assets/{useLocation-legacy-UNiEBLrQ.js → useLocation-legacy-CYzO18ij.js} +2 -2
- package/dist/assets/{useLocation-legacy-UNiEBLrQ.js.map → useLocation-legacy-CYzO18ij.js.map} +1 -1
- package/dist/assets/{useProfiles-DKmVxUf9.js → useProfiles-Dv9s6TWw.js} +2 -2
- package/dist/assets/{useProfiles-DKmVxUf9.js.map → useProfiles-Dv9s6TWw.js.map} +1 -1
- package/dist/assets/{useProfiles-legacy-OVEEk1dZ.js → useProfiles-legacy-DF0NXWwe.js} +2 -2
- package/dist/assets/{useProfiles-legacy-OVEEk1dZ.js.map → useProfiles-legacy-DF0NXWwe.js.map} +1 -1
- package/dist/assets/{useSchools-BC9vy4Xx.js → useSchools-Dqdy1J-D.js} +2 -2
- package/dist/assets/{useSchools-BC9vy4Xx.js.map → useSchools-Dqdy1J-D.js.map} +1 -1
- package/dist/assets/{useSchools-legacy-g8-dezaK.js → useSchools-legacy-CCHNqc2P.js} +2 -2
- package/dist/assets/{useSchools-legacy-g8-dezaK.js.map → useSchools-legacy-CCHNqc2P.js.map} +1 -1
- package/dist/assets/{useScores-BZGEEU4U.js → useScores-C4T2-LUO.js} +2 -2
- package/dist/assets/{useScores-BZGEEU4U.js.map → useScores-C4T2-LUO.js.map} +1 -1
- package/dist/assets/{useScores-legacy-C9icRMIu.js → useScores-legacy-BludORUw.js} +2 -2
- package/dist/assets/{useScores-legacy-C9icRMIu.js.map → useScores-legacy-BludORUw.js.map} +1 -1
- package/dist/index.html +2 -2
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/SurveyTriggerProvider/index.test.js +11 -9
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/SurveyTriggerProvider/index.test.js.map +1 -1
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/index.test.js +19 -5
- package/dist/types/sdks/LocalContent/hooks/useSurveyTrigger/index.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["getState","a","e","n","t","TRIGGER_NAME","CONTENT_NAME","Root","Trigger","Content","CollapsiblePrimitive.Root","CollapsiblePrimitive.Trigger","CollapsiblePrimitive.Content","Item"],"ignoreList":[0,1,5,6,7,8,9,10],"sources":["../../../../node_modules/@radix-ui/react-collapsible/dist/index.mjs","../../../../node_modules/@radix-ui/react-accordion/dist/index.mjs","../../src/sdks/NeighborhoodMarketTrends/components/InfoPopover/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/Gauge/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/Needle/index.tsx","../../../../node_modules/@phosphor-icons/react/dist/defs/ArrowDown.es.js","../../../../node_modules/@phosphor-icons/react/dist/defs/HouseLine.es.js","../../../../node_modules/@phosphor-icons/react/dist/defs/Info.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/ArrowDown.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/HouseLine.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/Info.es.js","../../src/utils/primitives/numberUtils.ts","../../src/sdks/NeighborhoodMarketTrends/types.ts","../../src/features/marketActivity/keyFactory.ts","../../src/sdks/NeighborhoodMarketTrends/context.tsx","../../src/features/clientLibrary/useMarketActivity.ts","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Item/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Content/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Trigger/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Trigger/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/context.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/Tab/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/Tab/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/Content/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/List/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/InfoPopover/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/ChangeIndicator/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/ChangeIndicator/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/context.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/Gauge/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/index.tsx","../../src/components/Graphs/GridGraph/lazy.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/ActiveListings/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianDaysOnMarket/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianSaleVsAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianSalePrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianSalePriceSQFT/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/HomesSold/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/HousingMarketConditions/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/HousingMarketConditions/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/ActiveListings/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MarketType/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MarketType/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianDaysOnMarket/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianSalePrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianSaleVsAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianConstructionYear/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianSalePriceSQFT/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/HomesSold/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/HousingMarketConditions/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/HousingMarketConditions/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Content/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Content/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Footer/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Footer/styles.ts","../../src/sdks/NeighborhoodMarketTrends/schema.ts","../../src/sdks/NeighborhoodMarketTrends/index.tsx","../../src/sdks/NeighborhoodMarketTrends/styles.ts"],"sourcesContent":["\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/accordion.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ACCORDION_NAME = \"Accordion\";\nvar ACCORDION_KEYS = [\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\"];\nvar [Collection, useCollection, createCollectionScope] = createCollection(ACCORDION_NAME);\nvar [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope\n]);\nvar useCollapsibleScope = createCollapsibleScope();\nvar Accordion = React.forwardRef(\n (props, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps;\n const multipleProps = accordionProps;\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeAccordion, children: type === \"multiple\" ? /* @__PURE__ */ jsx(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });\n }\n);\nAccordion.displayName = ACCORDION_NAME;\nvar [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);\nvar [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false }\n);\nvar AccordionImplSingle = React.forwardRef(\n (props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n collapsible = false,\n ...accordionSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemOpen: setValue,\n onItemClose: React.useCallback(() => collapsible && setValue(\"\"), [collapsible, setValue]),\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })\n }\n );\n }\n);\nvar AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...accordionMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n const handleItemOpen = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleItemClose = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value,\n onItemOpen: handleItemOpen,\n onItemClose: handleItemClose,\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })\n }\n );\n});\nvar [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);\nvar AccordionImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = \"vertical\", ...accordionProps } = props;\n const accordionRef = React.useRef(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n if (triggerIndex === -1) return;\n event.preventDefault();\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n switch (event.key) {\n case \"Home\":\n nextIndex = homeIndex;\n break;\n case \"End\":\n nextIndex = endIndex;\n break;\n case \"ArrowRight\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case \"ArrowDown\":\n if (orientation === \"vertical\") {\n moveNext();\n }\n break;\n case \"ArrowLeft\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case \"ArrowUp\":\n if (orientation === \"vertical\") {\n movePrev();\n }\n break;\n }\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex].ref.current?.focus();\n });\n return /* @__PURE__ */ jsx(\n AccordionImplProvider,\n {\n scope: __scopeAccordion,\n disabled,\n direction: dir,\n orientation,\n children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...accordionProps,\n \"data-orientation\": orientation,\n ref: composedRefs,\n onKeyDown: disabled ? void 0 : handleKeyDown\n }\n ) })\n }\n );\n }\n);\nvar ITEM_NAME = \"AccordionItem\";\nvar [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);\nvar AccordionItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = value && valueContext.value.includes(value) || false;\n const disabled = accordionContext.disabled || props.disabled;\n return /* @__PURE__ */ jsx(\n AccordionItemProvider,\n {\n scope: __scopeAccordion,\n open,\n disabled,\n triggerId,\n children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Root,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(open),\n ...collapsibleScope,\n ...accordionItemProps,\n ref: forwardedRef,\n disabled,\n open,\n onOpenChange: (open2) => {\n if (open2) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }\n }\n )\n }\n );\n }\n);\nAccordionItem.displayName = ITEM_NAME;\nvar HEADER_NAME = \"AccordionHeader\";\nvar AccordionHeader = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return /* @__PURE__ */ jsx(\n Primitive.h3,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(itemContext.open),\n \"data-disabled\": itemContext.disabled ? \"\" : void 0,\n ...headerProps,\n ref: forwardedRef\n }\n );\n }\n);\nAccordionHeader.displayName = HEADER_NAME;\nvar TRIGGER_NAME = \"AccordionTrigger\";\nvar AccordionTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Trigger,\n {\n \"aria-disabled\": itemContext.open && !collapsibleContext.collapsible || void 0,\n \"data-orientation\": accordionContext.orientation,\n id: itemContext.triggerId,\n ...collapsibleScope,\n ...triggerProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nAccordionTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"AccordionContent\";\nvar AccordionContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Content,\n {\n role: \"region\",\n \"aria-labelledby\": itemContext.triggerId,\n \"data-orientation\": accordionContext.orientation,\n ...collapsibleScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n [\"--radix-accordion-content-height\"]: \"var(--radix-collapsible-content-height)\",\n [\"--radix-accordion-content-width\"]: \"var(--radix-collapsible-content-width)\",\n ...props.style\n }\n }\n );\n }\n);\nAccordionContent.displayName = CONTENT_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Accordion;\nvar Item = AccordionItem;\nvar Header = AccordionHeader;\nvar Trigger2 = AccordionTrigger;\nvar Content2 = AccordionContent;\nexport {\n Accordion,\n AccordionContent,\n AccordionHeader,\n AccordionItem,\n AccordionTrigger,\n Content2 as Content,\n Header,\n Item,\n Root2 as Root,\n Trigger2 as Trigger,\n createAccordionScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { useMemo } from \"react\";\n\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { InfoIcon, XIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\n\nexport function InfoPopover({\n children,\n change,\n}: {\n children?: React.ReactNode;\n change?: number | null;\n}) {\n const isMobile = useIsMobile();\n\n const side = useMemo(() => (isMobile ? \"bottom\" : \"right\"), [isMobile]);\n\n if (change === null || change === 0) {\n return null;\n }\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <InfoIcon className={styles.icon} />\n </Popover.Trigger>\n <Popover.Content className={styles.content} side={side} sideOffset={4}>\n {children}\n <Popover.Close>\n <XIcon className={styles.close} weight=\"bold\" />\n </Popover.Close>\n </Popover.Content>\n </Popover.Root>\n );\n}\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport function Gauge({\n sellerColor,\n neutralColor,\n buyerColor,\n}: {\n sellerColor?: string;\n neutralColor?: string;\n buyerColor?: string;\n}) {\n return (\n <div className={styles.container}>\n <div\n className={styles.sellerGauge}\n style={{\n backgroundImage: `linear-gradient(to right top, ${sellerColor} 50%, rgba(0, 0, 0, 0) 50%)`,\n }}\n ></div>\n <div\n className={styles.neutralGauge}\n style={{\n backgroundImage: `linear-gradient(to right top, rgba(0, 0, 0, 0) 50%, ${neutralColor} 50%)`,\n }}\n ></div>\n <div\n className={styles.buyerGauge}\n style={{\n backgroundImage: `linear-gradient(to right top, rgba(0, 0, 0, 0) 50%, ${buyerColor} 50%)`,\n }}\n ></div>\n\n <div className={styles.maskWrapper}>\n <div className={styles.mask}></div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nconst color = \"#272525\";\n\nexport function Needle() {\n return (\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 13 93\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.3151 0.683594L11.6802 88.9218H0.949947L3.63252 44.8027L6.3151 0.683594Z\"\n fill={color}\n />\n <path\n d=\"M12.1458 86.9782C12.1458 90.1985 9.53531 92.809 6.3151 92.809C3.09488 92.809 0.484375 90.1985 0.484375 86.9782C0.484375 83.758 3.09488 81.1475 6.3151 81.1475C9.53531 81.1475 12.1458 83.758 12.1458 86.9782Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M208.49,152.49l-72,72a12,12,0,0,1-17,0l-72-72a12,12,0,0,1,17-17L116,187V40a12,12,0,0,1,24,0V187l51.51-51.52a12,12,0,0,1,17,17Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M200,144l-72,72L56,144Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M207.39,140.94A8,8,0,0,0,200,136H136V40a8,8,0,0,0-16,0v96H56a8,8,0,0,0-5.66,13.66l72,72a8,8,0,0,0,11.32,0l72-72A8,8,0,0,0,207.39,140.94ZM128,204.69,75.31,152H180.69Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,149.66l-72,72a8,8,0,0,1-11.32,0l-72-72A8,8,0,0,1,56,136h64V40a8,8,0,0,1,16,0v96h64a8,8,0,0,1,5.66,13.66Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M204.24,148.24l-72,72a6,6,0,0,1-8.48,0l-72-72a6,6,0,0,1,8.48-8.48L122,201.51V40a6,6,0,0,1,12,0V201.51l61.76-61.75a6,6,0,0,1,8.48,8.48Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,149.66l-72,72a8,8,0,0,1-11.32,0l-72-72a8,8,0,0,1,11.32-11.32L120,196.69V40a8,8,0,0,1,16,0V196.69l58.34-58.35a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M202.83,146.83l-72,72a4,4,0,0,1-5.66,0l-72-72a4,4,0,0,1,5.66-5.66L124,206.34V40a4,4,0,0,1,8,0V206.34l65.17-65.17a4,4,0,0,1,5.66,5.66Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,204H228V144a12,12,0,0,0,12.49-19.78L142.14,25.85a20,20,0,0,0-28.28,0L15.51,124.2A12,12,0,0,0,28,144v60H16a12,12,0,0,0,0,24H240a12,12,0,0,0,0-24ZM52,121.65l76-76,76,76V204H164V152a12,12,0,0,0-12-12H104a12,12,0,0,0-12,12v52H52ZM140,204H116V164h24Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M216,116.69V216H152V152H104v64H40V116.69l82.34-82.35a8,8,0,0,1,11.32,0Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,208H224V136l2.34,2.34A8,8,0,0,0,237.66,127L139.31,28.68a16,16,0,0,0-22.62,0L18.34,127a8,8,0,0,0,11.32,11.31L32,136v72H16a8,8,0,0,0,0,16H240a8,8,0,0,0,0-16ZM48,120l80-80,80,80v88H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48Zm96,88H112V160h32Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,208H224V136l2.34,2.34A8,8,0,0,0,237.66,127L139.31,28.68a16,16,0,0,0-22.62,0L18.34,127a8,8,0,0,0,11.32,11.31L32,136v72H16a8,8,0,0,0,0,16H240a8,8,0,0,0,0-16Zm-88,0H104V160a4,4,0,0,1,4-4h40a4,4,0,0,1,4,4Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,210H222V131.17l5.76,5.76a6,6,0,0,0,8.48-8.49L137.9,30.09a14,14,0,0,0-19.8,0L19.76,128.44a6,6,0,0,0,8.48,8.49L34,131.17V210H16a6,6,0,0,0,0,12H240a6,6,0,0,0,0-12ZM46,119.17l80.58-80.59a2,2,0,0,1,2.84,0L210,119.17V210H158V152a6,6,0,0,0-6-6H104a6,6,0,0,0-6,6v58H46ZM146,210H110V158h36Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,208H224V136l2.34,2.34A8,8,0,0,0,237.66,127L139.31,28.68a16,16,0,0,0-22.62,0L18.34,127a8,8,0,0,0,11.32,11.31L32,136v72H16a8,8,0,0,0,0,16H240a8,8,0,0,0,0-16ZM48,120l80-80,80,80v88H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48Zm96,88H112V160h32Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,212H220V126.34l9.17,9.17a4,4,0,1,0,5.66-5.66L136.49,31.51a12,12,0,0,0-17,0L21.17,129.85a4,4,0,1,0,5.66,5.66L36,126.34V212H16a4,4,0,0,0,0,8H240a4,4,0,0,0,0-8ZM44,118.34l81.17-81.17a4,4,0,0,1,5.66,0L212,118.34V212H156V152a4,4,0,0,0-4-4H104a4,4,0,0,0-4,4v60H44ZM148,212H108V156h40Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M108,84a16,16,0,1,1,16,16A16,16,0,0,1,108,84Zm128,44A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Zm-72,36.68V132a20,20,0,0,0-20-20,12,12,0,0,0-4,23.32V168a20,20,0,0,0,20,20,12,12,0,0,0,4-23.32Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M144,176a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176Zm88-48A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM124,96a12,12,0,1,0-12-12A12,12,0,0,0,124,96Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-4,48a12,12,0,1,1-12,12A12,12,0,0,1,124,72Zm12,112a16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40a8,8,0,0,1,0,16Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M142,176a6,6,0,0,1-6,6,14,14,0,0,1-14-14V128a2,2,0,0,0-2-2,6,6,0,0,1,0-12,14,14,0,0,1,14,14v40a2,2,0,0,0,2,2A6,6,0,0,1,142,176ZM124,94a10,10,0,1,0-10-10A10,10,0,0,0,124,94Zm106,34A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-40a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176ZM112,84a12,12,0,1,1,12,12A12,12,0,0,1,112,84Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M140,176a4,4,0,0,1-4,4,12,12,0,0,1-12-12V128a4,4,0,0,0-4-4,4,4,0,0,1,0-8,12,12,0,0,1,12,12v40a4,4,0,0,0,4,4A4,4,0,0,1,140,176ZM124,92a8,8,0,1,0-8-8A8,8,0,0,0,124,92Zm104,36A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport n from \"../lib/IconBase.es.js\";\nimport a from \"../defs/ArrowDown.es.js\";\nconst r = o.forwardRef((e, t) => /* @__PURE__ */ o.createElement(n, { ref: t, ...e, weights: a }));\nr.displayName = \"ArrowDownIcon\";\nconst c = r;\nexport {\n c as ArrowDown,\n r as ArrowDownIcon\n};\n","import * as e from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport n from \"../defs/HouseLine.es.js\";\nconst o = e.forwardRef((r, s) => /* @__PURE__ */ e.createElement(t, { ref: s, ...r, weights: n }));\no.displayName = \"HouseLineIcon\";\nconst m = o;\nexport {\n m as HouseLine,\n o as HouseLineIcon\n};\n","import * as o from \"react\";\nimport n from \"../lib/IconBase.es.js\";\nimport a from \"../defs/Info.es.js\";\nconst e = o.forwardRef((r, t) => /* @__PURE__ */ o.createElement(n, { ref: t, ...r, weights: a }));\ne.displayName = \"InfoIcon\";\nconst c = e;\nexport {\n c as Info,\n e as InfoIcon\n};\n","export const formatCurrency = (\n amount: number,\n locale = \"en-US\",\n currency = \"USD\",\n maximumFractionDigits = 0,\n) =>\n new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n maximumFractionDigits,\n }).format(amount ?? 0);\n","import { SDKOptions } from \"~/types/options\";\n\nexport enum TabIds {\n marketConditions = \"market-conditions\",\n recentTrends = \"recent-trends\",\n currentActivity = \"current-activity\",\n}\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAttribution?: boolean;\n omitTabs?: TabIds[];\n appearance?: {\n colors?: {\n buyerColor?: string;\n sellerColor?: string;\n neutralColor?: string;\n increaseColor?: string;\n decreaseColor?: string;\n };\n };\n};\n\nexport type NeighborhoodMarketTrendsProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-market-trends-Viewed\",\n TAB_CLICKED = \"neighborhood-market-trends-Tab-Clicked\",\n}\n\n// Why are these named differently?\n// https://docs.mixpanel.com/docs/data-structure/events-and-properties#name-events-and-properties-consistently\nexport enum AnalyticsEvents {\n SDK_VIEWED = \"sdk_viewed\",\n CATEGORY_SELECTED = \"category_selected\",\n}\n","import { marketActivityParams } from \"./types\";\n\nexport const marketActivityKeys = {\n all: () => [\"marketActivity\"] as const,\n list: (filters: Partial<marketActivityParams>) =>\n [...marketActivityKeys.all(), filters] as const,\n};\n","import React, { useContext, useMemo } from \"react\";\nimport type { MarketActivity, Geography } from \"@local-logic/client\";\nimport {\n type NeighborhoodMarketTrendsProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useMarketActivity } from \"~/features/clientLibrary/useMarketActivity\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n marketActivity: MarketActivity | null;\n homesSoldPercentage: number;\n appearance?: NeighborhoodMarketTrendsProps[\"options\"][\"appearance\"];\n locale: \"en\" | \"fr\";\n geography?: Geography;\n};\n\nconst NeighborhoodMarketTrendsContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodMarketTrends = () =>\n useContext(NeighborhoodMarketTrendsContext);\n\nconst NeighborhoodMarketTrendsProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodMarketTrendsProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n const pastTwelveMonths = useMemo(() => {\n const months = [];\n const currentDate = new Date();\n\n // Loop through the past 12 months\n for (let index = 0; index <= 12; index += 1) {\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth(); // 0-based, January is 0, December is 11\n\n // Format the month as yyyy-mm\n const formattedDate = `${year}-${String(month + 1).padStart(2, \"0\")}`;\n months.push(formattedDate);\n\n // Decrement the month\n currentDate.setMonth(currentDate.getMonth() - 1);\n }\n\n return months.reverse(); //\n }, []);\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n location: {\n lat:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lat\n : undefined,\n lng:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lng\n : undefined,\n },\n geogID: sdkState.options?.geographyId || undefined,\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const { geographyId, geography } = useMemo(() => {\n const geographiesArray = Object.entries(geographyData || {});\n\n return {\n geographyId: geographiesArray[0]?.[0],\n geography: geographiesArray[0]?.[1],\n };\n }, [isGeographyLoading, geographyData]);\n\n const { data: marketActivity, isFetching: isMarketActivityFetching } =\n useMarketActivity({\n geographyId,\n propertyTypes: [\"all_residential_properties\"],\n intervals: [\"30d\", \"31-60d\", \"12m\", \"13-24m\", ...pastTwelveMonths],\n });\n\n const homesSoldPercentage = useMemo(() => {\n const soldHomesCount =\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.sold_homes_count || 0;\n\n const soldHomesWithPriceCount =\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.sold_homes_with_sold_price_count || 0;\n\n return soldHomesCount > 0 ? soldHomesWithPriceCount / soldHomesCount : 0;\n }, [marketActivity]);\n\n const isLoading = useMemo(\n () => isGeographyLoading || isMarketActivityFetching,\n [isGeographyLoading, isMarketActivityFetching],\n );\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n homesSoldPercentage,\n marketActivity: marketActivity ?? null,\n appearance: sdkState?.options?.appearance,\n locale,\n geography,\n }),\n [\n marketActivity,\n isLoading,\n homesSoldPercentage,\n locale,\n geography,\n geographyId,\n ],\n );\n\n return (\n <NeighborhoodMarketTrendsContext.Provider value={contextValue}>\n {children}\n </NeighborhoodMarketTrendsContext.Provider>\n );\n};\n\nexport { useNeighborhoodMarketTrends, NeighborhoodMarketTrendsProvider };\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useFlags } from \"launchdarkly-react-client-sdk\";\nimport { marketActivityKeys } from \"../marketActivity/keyFactory\";\nimport { useLocalLogic } from \"~/context/LocalLogicProvider\";\n\ntype PropertyTypes =\n | \"single_family\"\n | \"multi_family_under_5_units\"\n | \"condo_townhome\"\n | \"vacant_land\"\n | \"multi_family_5_plus_units\"\n | \"all_residential_properties\";\n\ntype IntervalOption = \"30d\" | \"31-60d\" | \"12m\" | \"13-24m\" | string;\n\ntype MarketActivityParams = {\n geographyId?: string;\n propertyTypes?: PropertyTypes[];\n intervals?: IntervalOption[];\n};\n\nexport function useMarketActivity({\n geographyId,\n propertyTypes,\n intervals,\n}: MarketActivityParams) {\n const { client } = useLocalLogic();\n const flags = useFlags();\n\n const fetchMarketActivity = async () => {\n const response = await client.getMarketActivity({\n geogId: geographyId,\n propertyTypes,\n intervals,\n });\n\n if (typeof response === \"undefined\") {\n // Query data cannot be undefined\n return null;\n }\n\n return response;\n };\n\n return useQuery({\n queryKey: marketActivityKeys.list({ geogId: geographyId }),\n queryFn: fetchMarketActivity,\n enabled: !!(geographyId && flags.marketTrendsSdk),\n });\n}\n","import React from \"react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport * as styles from \"./styles\";\n\ntype ItemProps = {\n value: string;\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Item = ({ value, children, className }: ItemProps) => (\n <Accordion.Item className={`${styles.container} ${className}`} value={value}>\n {children}\n </Accordion.Item>\n);\n","import React from \"react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport * as styles from \"./styles\";\n\ntype ContentProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Content = ({ children, className }: ContentProps) => (\n <Accordion.Content className={`${styles.container} ${className}`}>\n {children}\n </Accordion.Content>\n);\n","import React from \"react\";\nimport { type Icon, CaretDownIcon } from \"@phosphor-icons/react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport * as styles from \"./styles\";\n\nexport const Trigger = ({\n children,\n icon: Icon,\n}: {\n children: React.ReactNode;\n icon: Icon;\n}) => (\n <Accordion.Trigger className={styles.container}>\n {typeof Icon !== \"undefined\" && <Icon className={styles.icon} />}\n <div className={styles.label}> {children}</div>\n <CaretDownIcon className={styles.arrow} />\n </Accordion.Trigger>\n);\n","export const container = `\n flex gap-4 w-full\n group\n text-stone-500\n data-[state=\"open\"]:border-b\n data-[state=\"open\"]:pb-3\n data-[state=\"open\"]:mb-4\n data-[state=\"open\"]:text-ll-primary\n`;\n\nexport const icon = `\n w-6\n`;\n\nexport const arrow = `\n h-3\n transition-transform duration-300 ease-[cubic-bezier(0.87,_0,_0.13,_1)]\n group-data-[state=\"open\"]:rotate-180\n`;\n\nexport const label = `\n grow\n text-left\n`;\n","import React from \"react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport { RootProps } from \"./types\";\nimport * as styles from \"./styles\";\n\nexport const Root = ({ defaultValue, children }: RootProps) => (\n <Accordion.Root\n defaultValue={defaultValue}\n collapsible\n type=\"single\"\n className={styles.container}\n >\n {children}\n </Accordion.Root>\n);\n\n// Export children\nexport { Item } from \"./Item\";\nexport { Content } from \"./Content\";\nexport { Trigger } from \"./Trigger\";\n","export const container = `\n flex\n flex-col\n gap-2\n`;\n","import React, { useContext } from \"react\";\nimport { RootProps } from \"./types\";\n\nexport type DefaultContext = RootProps;\n\nconst RootElementContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\nconst useRootElement = () => useContext(RootElementContext);\n\nexport { useRootElement, RootElementContext };\n","import React from \"react\";\nimport { type Icon } from \"@phosphor-icons/react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\nimport * as styles from \"./styles\";\n\ntype TabProps = {\n tabId: string;\n icon?: Icon;\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Tab = ({ tabId, icon: Icon, children, className }: TabProps) => (\n <Tabs.Trigger className={`${styles.container} ${className}`} value={tabId}>\n {typeof Icon !== \"undefined\" && <Icon className={styles.icon} />}\n {children}\n </Tabs.Trigger>\n);\n","export const container = `\n flex\n gap-2\n text-stone-500\n justify-center\n w-full\n py-4\n border-b-4\n cursor-pointer\n select-none\n data-[state=\"active\"]:border-b-ll-primary\n data-[state=\"active\"]:text-ll-primary\n`;\n\nexport const icon = `\n w-6 h-6\n`;\n","import React from \"react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\n\ntype ContentProps = {\n tabId: string;\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Content = ({ tabId, children, className }: ContentProps) => (\n <Tabs.Content value={tabId} className={className}>\n {children}\n </Tabs.Content>\n);\n","import React from \"react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\nimport * as styles from \"./styles\";\n\nexport const List = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Tabs.List className={`${styles.container} ${className}`}>\n {children}\n </Tabs.List>\n);\n","import React from \"react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\nimport { RootProps } from \"./types\";\nimport { RootElementContext } from \"./context\";\n\nexport const Root = ({ defaultValue, onChange, children }: RootProps) => {\n const handleOnChange = (value: string) => {\n if (onChange) {\n onChange(value);\n }\n };\n\n return (\n <RootElementContext.Provider\n value={{\n defaultValue,\n onChange,\n children,\n }}\n >\n <Tabs.Root defaultValue={defaultValue} onValueChange={handleOnChange}>\n {children}\n </Tabs.Root>\n </RootElementContext.Provider>\n );\n};\n\n// Export children\nexport { Tab } from \"./Tab\";\nexport { Content } from \"./Content\";\nexport { List } from \"./List\";\n","export const wrapper = `\n flex flex-col w-full justify-between gap-2\n`;\n\nexport const container = `\n border border-gray-100 md:border-ll-border rounded-md md:min-h-40 w-full flex flex-col md:flex-row\n`;\n\nexport const smallContainer = `\n border border-gray-100 md:border-ll-border rounded-md\n p-2 md:p-4 w-fit\n`;\n\nexport const graphOnlyContainer = `\n md:border border-gray-100 md:border-ll-border rounded-md md:min-h-40 w-full flex flex-col md:p-6\n`;\n\nexport const summary = `\n flex flex-col justify-between min-w-60 p-2 md:p-4 border border-transparent border-b-gray-100 md:border-r-gray-300 md:w-5/12\n`;\n\nexport const title = `\n font-semibold text-ll-font-size-caption-1 text-ll-placeholder flex gap-x-1 items-center\n`;\n\nexport const disclaimer = `\n text-xxs\n text-ll-placeholder\n md:mb-4\n italic\n`;\n\nexport const header = `md:h-22 lg:h-11`;\n\nexport const subtitle = `\n text-xxs text-ll-placeholder\n`;\n\nexport const amount = `\n text-ll-font-size-h4 font-semibold text-ll-on-surface\n leading-7 mt-6 mb-2\n`;\n\nexport const unit = `\n text-ll-font-size-caption-1 font-medium\n`;\n\nexport const titleBold = `\n text-sm\n text-ll-on-surface\n`;\n\nexport const legend = `\n flex items-center justify-center mt-8 md:mt-2\n`;\n\nexport const legendItem = `\n flex items-center mr-4\n`;\n","export const icon = `w-4 h-4 cursor-pointer`;\nexport const content = `bg-white py-2 pl-3 pr-8 relative shadow z-10 text-black max-w-80 font-normal text-xs rounded-lg`;\nexport const close = `absolute right-2 top-1/2 transform -translate-y-1/2 cursor-pointer w-4 h-4`;\n","import React, { useMemo } from \"react\";\n\nimport { ArrowDownIcon } from \"@phosphor-icons/react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\nimport { defaultColors } from \"~/sdks/NeighborhoodMarketTrends/defaultState\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nexport const ChangeIndicator = ({\n yearlyChange,\n disclaimer,\n fieldTitle,\n}: {\n yearlyChange?: number | null;\n disclaimer?: string;\n fieldTitle?: string;\n}) => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { appearance } = useNeighborhoodMarketTrends();\n\n const isIncrease = yearlyChange && yearlyChange >= 0;\n\n const color = useMemo(() => {\n if (isIncrease) {\n return appearance?.colors?.increaseColor || defaultColors.increaseColor;\n }\n\n return appearance?.colors?.decreaseColor || defaultColors.decreaseColor;\n }, [appearance, isIncrease]);\n\n return (\n <>\n {yearlyChange ? (\n <div className={styles.changeContainer}>\n <ArrowDownIcon\n className={styles.indicatorIcon}\n style={{ color }}\n weight=\"bold\"\n data-is-increase={isIncrease}\n />\n <div className={styles.disclaimer} style={{ color }}>\n <p className={styles.changeText}>\n {(yearlyChange * 100).toFixed(2)}%{\" \"}\n {t(`marketIndicator.${isIncrease ? \"increase\" : \"decrease\"}`)}\n </p>\n {disclaimer && <InfoPopover>{disclaimer}</InfoPopover>}\n </div>\n </div>\n ) : (\n <p className={styles.noDataText}>\n {fieldTitle &&\n t(\"marketIndicator.noChangeDisclaimer\", {\n fieldTitle: fieldTitle.toLocaleLowerCase(),\n })}\n </p>\n )}\n </>\n );\n};\n","export const changeContainer = `\n flex flex-wrap items-center\n`;\n\nexport const changeText = `\n text-ll-font-size-caption-1 leading-4\n`;\n\nexport const indicatorIcon = `\n w-3 h-3 mr-1 data-[is-increase=true]:rotate-180\n`;\n\nexport const disclaimer = `\n flex gap-x-1 items-center\n`;\n\nexport const noDataText = `\n text-ll-font-size-caption-1 leading-4\n text-ll-placeholder\n`;\n","import React, { useContext } from \"react\";\n\nexport type DefaultContext = {\n buyerColor?: string;\n sellerColor?: string;\n decreaseColor?: string;\n neutralColor?: string;\n increaseColor?: string;\n};\n\nconst RootElementContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\nconst useRootElement = () => useContext(RootElementContext);\n\nexport { useRootElement, RootElementContext };\n","export const container = `relative flex aspect-[2] items-center justify-center overflow-hidden rounded-t-full w-[218px] h-[109px]`;\nexport const maskWrapper = `absolute inset-7 flex aspect-[2] items-center justify-center overflow-hidden rounded-t-full`;\nexport const mask = `absolute top-0 flex aspect-square w-full justify-center rounded-full bg-white`;\n\nexport const sellerGauge = `absolute aspect-square top-0 w-full rotate-[17deg] transition-transform duration-500`;\nexport const neutralGauge = `absolute aspect-square top-0 w-full rotate-[17deg] transition-transform duration-500 opacity-30`;\nexport const buyerGauge = `absolute aspect-square top-0 w-full rotate-[73deg] transition-transform duration-500`;\n","export const container = `\n flex\n flex-col\n items-center\n gap-2.5\n max-w-80\n`;\n\nexport const wrapper = `\n flex\n items-end\n gap-2.5\n`;\n\nexport const label = `\n text-stone-400\n text-sm\n w-11\n`;\n\nexport const gauge = `\n relative\n`;\n\nexport const needle = `\n absolute\n left-1/2\n w-5/6\n h-5/6\n -translate-x-1/2\n bottom-1\n`;\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\n\nimport { Gauge } from \"./Gauge\";\nimport { Needle } from \"./Needle\";\n\nimport * as styles from \"./styles\";\n\ntype BuyerSellerMarketProps = {\n buyerSellerPercentage: number;\n labels: {\n buyer: string;\n seller: string;\n neutral: string;\n };\n};\n\nexport const BuyerSellerMarket = ({\n buyerSellerPercentage,\n labels,\n}: BuyerSellerMarketProps) => {\n const { sellerColor, neutralColor, buyerColor } = useRootElement();\n\n const needleStyle = useMemo(\n () => ({\n transform: `translate(-50%, 0) rotate(${buyerSellerPercentage * 1.8 - 90}deg)`,\n transformOrigin: \"50% 100%\",\n }),\n [buyerSellerPercentage],\n );\n\n return (\n <div className={styles.container}>\n <span className={styles.label}>{labels.neutral}</span>\n <div className={styles.wrapper}>\n <span className={styles.label}>{labels.seller}</span>\n <div className={styles.gauge}>\n <Gauge\n sellerColor={sellerColor}\n neutralColor={neutralColor}\n buyerColor={buyerColor}\n />\n <div className={styles.needle} style={needleStyle}>\n <Needle />\n </div>\n </div>\n <span className={styles.label}>{labels.buyer}</span>\n </div>\n </div>\n );\n};\n","import React, { lazy, Suspense } from \"react\";\nimport type { GridGraphProps } from \"./index\";\n\nconst GridGraphComponent = lazy(() =>\n import(\"./index\").then((module) => ({ default: module.GridGraph })),\n);\n\nexport const GridGraph = (props: GridGraphProps) => (\n <Suspense fallback={<div style={{ height: \"400px\" }} />}>\n <GridGraphComponent {...props} />\n </Suspense>\n);\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const ActiveListings = ({\n yAxisTitle,\n isIncrease,\n}: {\n yAxisTitle: string;\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n const validIntervals = intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_at_period_end?.active_listings_count ??\n null,\n )\n .reverse();\n\n return validIntervals.filter((value) => value !== null);\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n const roundedMaxListingCount = useMemo(() => {\n const maxListingCount = Math.max(...series);\n const minListingCount = Math.min(...series);\n\n return (\n Math.ceil(\n (maxListingCount + 0.2 * (maxListingCount - minListingCount)) / 100,\n ) * 100\n );\n }, [series]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Active Listings\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"homes\"\n yaxis={{\n title: {\n text: yAxisTitle,\n },\n max: roundedMaxListingCount,\n }}\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianAskingPrice = ({ isIncrease }: { isIncrease: boolean }) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_at_period_end?.home_asking_prices\n ?.median_price ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median asking price\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"price\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianDaysOnMarket = ({\n yAxisTitle,\n isIncrease,\n}: {\n yAxisTitle: string;\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.market_speed\n ?.median_days_on_market ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n const roundedMedianDays = useMemo(() => {\n const filteredSeries = series.filter((value) => value !== undefined);\n const maxDays = Math.max(...filteredSeries);\n const minDays = Math.min(...filteredSeries);\n\n return {\n max: Math.ceil((maxDays + 0.2 * (maxDays - minDays)) / 10) * 10,\n min: Math.max(\n 0,\n Math.floor((minDays - 0.2 * (maxDays - minDays)) / 10) * 10,\n ),\n };\n }, [series]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median Days On Market\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"homes\"\n yaxis={{\n title: {\n text: yAxisTitle,\n },\n max: roundedMedianDays.max,\n min: roundedMedianDays.min,\n }}\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianSaleVsAskingPrice = ({\n isIncrease,\n}: {\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(([_, value]) => {\n const raw =\n value.market_activity?.stats_over_period?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent ?? null;\n return raw !== null ? (raw > 0 ? raw - 100 : 0) : null;\n })\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median Sale vs Asking Price\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"percentage\"\n chartType=\"bar\"\n showGrid={true}\n showYAxisAnnotation={true}\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianSalePrice = ({ isIncrease }: { isIncrease: boolean }) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.home_selling_prices\n .median_price ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median sales price\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"price\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianSalePriceSQFT = ({\n isIncrease,\n}: {\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.home_selling_prices\n .median_price_per_square_foot ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median sales price per square foot\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"price\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const HomesSold = ({ isIncrease }: { isIncrease: boolean }) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.sold_homes_count ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Homes Sold\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"homes\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\n\nexport const HousingMarketConditions = () => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { sellerColor, neutralColor, buyerColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1)\n return {\n numericValues: [],\n stringValues: [],\n };\n\n const rawNumericValues = intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period\n ?.market_conditions_indicator_MOI_12month ?? null,\n )\n .reverse();\n\n return {\n // Per product, capping sellers market values to 100\n // This is for the presentation of the graph\n numericValues: rawNumericValues.map((value) =>\n value !== null && value > 100 ? 100 : value,\n ),\n\n stringValues: intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period\n ?.market_conditions_assessment ?? 0,\n )\n .reverse(),\n };\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <GridGraph\n series={[\n {\n name: \"Housing Market Conditions\",\n data: series.numericValues,\n },\n ]}\n categories={categories}\n type=\"homes\"\n chartType=\"bar\"\n showGrid={false}\n yaxis={{\n min: 0,\n labels: {\n show: false,\n },\n }}\n height=\"150%\"\n colorAssignmentRule={({ dataPointIndex }) => {\n const marketConditionsIndicatorStrings = series.stringValues;\n\n if (\n marketConditionsIndicatorStrings[dataPointIndex] ===\n \"sellers_market\"\n ) {\n return sellerColor as string;\n }\n\n if (\n marketConditionsIndicatorStrings[dataPointIndex] ===\n \"neutral_market\"\n ) {\n return neutralColor as string;\n }\n\n // buyers_market\n return buyerColor as string;\n }}\n />\n </div>\n );\n};\n","export const container = `-mr-2`;\n","import React from \"react\";\n\nimport { RootElementContext, DefaultContext } from \"./context\";\n\nimport * as styles from \"./styles\";\nimport { defaultColors } from \"~/sdks/NeighborhoodMarketTrends/defaultState\";\n\nexport type RootProps = {\n children?: React.ReactNode;\n className?: string;\n colors?: {\n buyerColor?: DefaultContext[\"buyerColor\"];\n sellerColor?: DefaultContext[\"sellerColor\"];\n decreaseColor?: DefaultContext[\"decreaseColor\"];\n neutralColor?: DefaultContext[\"neutralColor\"];\n increaseColor?: DefaultContext[\"increaseColor\"];\n };\n};\n\nexport const Root = ({ className, children, colors = {} }: RootProps) => {\n const {\n buyerColor = defaultColors.buyerColor,\n sellerColor = defaultColors.sellerColor,\n decreaseColor = defaultColors.decreaseColor,\n neutralColor = defaultColors.neutralColor,\n increaseColor = defaultColors.increaseColor,\n } = colors;\n\n return (\n <RootElementContext.Provider\n value={{\n buyerColor,\n sellerColor,\n decreaseColor,\n neutralColor,\n increaseColor,\n }}\n >\n <div className={`${styles.wrapper} ${className || \"\"}`}>{children}</div>\n </RootElementContext.Provider>\n );\n};\n\n// Export children\nexport { BuyerSellerMarket } from \"./BuyerSellerMarket\";\nexport { ActiveListings } from \"./ActiveListings\";\nexport { MedianAskingPrice } from \"./MedianAskingPrice\";\nexport { MedianDaysOnMarket } from \"./MedianDaysOnMarket\";\nexport { MedianSaleVsAskingPrice } from \"./MedianSaleVsAskingPrice\";\nexport { MedianSalePrice } from \"./MedianSalePrice\";\nexport { MedianSalePriceSQFT } from \"./MedianSalePriceSQFT\";\nexport { HomesSold } from \"./HomesSold\";\nexport { HousingMarketConditions } from \"./HousingMarketConditions\";\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const ActiveListings = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const activeListingsCount = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_at_period_end?.active_listings_count,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_at_period_end?.active_listings_count,\n };\n }, [marketActivity]);\n\n const monthlyChange = useMemo(() => {\n if (!activeListingsCount || activeListingsCount.previous === 0) {\n return 0;\n }\n\n return (\n (activeListingsCount.current - activeListingsCount.previous) /\n activeListingsCount.previous\n );\n }, [activeListingsCount]);\n\n if (!activeListingsCount) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>{t(\"graphs.activeListings.title\")}</h3>\n <h4 className={styles.amount}>{activeListingsCount.current}</h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.activeListings.title\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.ActiveListings\n yAxisTitle={t(\"graphs.activeListings.yAxisTitle\")}\n isIncrease={monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as commonStyles from \"../styles\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MarketType = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const buyerSellerPercentage = useMemo(() => {\n const indicator =\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n .stats_over_period?.market_conditions_indicator_MOI_12month;\n\n if (typeof indicator !== \"number\") {\n return null;\n }\n\n if (indicator >= 9) {\n return 100;\n }\n\n return (indicator / 9) * 100;\n }, [\n marketActivity?.market_activity_by_property_type?.all_residential_properties\n .intervals[\"30d\"]?.market_activity.stats_over_period\n ?.market_conditions_indicator_MOI_12month,\n ]);\n\n if (!buyerSellerPercentage) {\n return null;\n }\n\n return (\n <div className={commonStyles.graphOnlyContainer}>\n <h3 className={commonStyles.title}>{t(\"graphs.marketType.title\")}</h3>\n <h4 className={commonStyles.subtitle}>\n {t(\"graphs.marketType.disclaimer\")}\n </h4>\n <div className={styles.content}>\n <Graphs.Root colors={appearance?.colors} className={styles.graph}>\n <Graphs.BuyerSellerMarket\n buyerSellerPercentage={buyerSellerPercentage as number}\n labels={{\n buyer: t(\"graphs.marketType.marketTypes.buyer\"),\n seller: t(\"graphs.marketType.marketTypes.seller\"),\n neutral: t(\"graphs.marketType.marketTypes.neutral\"),\n }}\n />\n </Graphs.Root>\n </div>\n </div>\n );\n};\n","export const content = `\n w-full\n flex\n justify-center\n mt-2\n`;\n\nexport const graph = `items-center !p-0 !m-0`;\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { primitiveUtils } from \"~/utils\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianAskingPrice = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianAskingPrices = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_at_period_end?.home_asking_prices?.median_price,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_at_period_end?.home_asking_prices?.median_price,\n };\n }, [marketActivity]);\n\n const monthlyChange = useMemo(() => {\n if (\n !medianAskingPrices ||\n !medianAskingPrices.current ||\n !medianAskingPrices.previous\n ) {\n return null;\n }\n\n return (\n (medianAskingPrices.current - medianAskingPrices.previous) /\n medianAskingPrices.previous\n );\n }, [medianAskingPrices]);\n\n if (!medianAskingPrices) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianAskingPrice.title\")}\n <InfoPopover change={monthlyChange}>\n {t(\"graphs.medianAskingPrice.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianAskingPrices.current &&\n primitiveUtils.number.formatCurrency(\n medianAskingPrices.current,\n )}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.medianAskingPrice.title\")}\n disclaimer={t(\"graphs.medianAskingPrice.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianAskingPrice\n isIncrease={!monthlyChange || monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianDaysOnMarket = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianDaysOnMarket = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_over_period?.market_speed?.median_days_on_market,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_over_period?.market_speed?.median_days_on_market,\n };\n }, [marketActivity]);\n\n const monthlyChange = useMemo(() => {\n if (\n !medianDaysOnMarket ||\n !medianDaysOnMarket.current ||\n !medianDaysOnMarket.previous\n ) {\n return null;\n }\n\n return (\n (medianDaysOnMarket.current - medianDaysOnMarket.previous) /\n medianDaysOnMarket.previous\n );\n }, [medianDaysOnMarket]);\n\n if (!medianDaysOnMarket) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianDaysOnMarket.title\")}\n <InfoPopover change={monthlyChange}>\n {t(\"graphs.medianDaysOnMarket.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>{medianDaysOnMarket.current}</h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.medianDaysOnMarket.title\")}\n disclaimer={t(\"graphs.medianDaysOnMarket.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianDaysOnMarket\n yAxisTitle={t(\"graphs.medianDaysOnMarket.yAxisTitle\")}\n isIncrease={!monthlyChange || monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { primitiveUtils } from \"~/utils\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianSalePrice = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianSalesPrice = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices?.median_price,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"13-24m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices?.median_price,\n };\n }, [marketActivity]);\n\n const yearlyChange = useMemo(() => {\n if (\n !medianSalesPrice ||\n !medianSalesPrice.current ||\n !medianSalesPrice.previous\n ) {\n return null;\n }\n\n return (\n (medianSalesPrice.current - medianSalesPrice.previous) /\n medianSalesPrice.previous\n );\n }, [medianSalesPrice]);\n\n if (!medianSalesPrice) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianSalePrice.title\")}\n <InfoPopover change={yearlyChange}>\n {t(\"graphs.medianSalePrice.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianSalesPrice.current &&\n primitiveUtils.number.formatCurrency(medianSalesPrice.current)}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={yearlyChange}\n fieldTitle={t(\"graphs.medianSalePrice.title\")}\n disclaimer={t(\"graphs.medianSalePrice.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianSalePrice\n isIncrease={!yearlyChange || yearlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianSaleVsAskingPrice = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianSaleVsAskingPrice = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n const current =\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent;\n\n const getPercentChangeText = () => {\n if (!current) return null;\n const percentDiff = Math.abs(Math.round((current - 100) * 10) / 10);\n if (percentDiff === 0) {\n return t(\"valueComparison.equal\");\n }\n return `${percentDiff}% ${current > 100 ? t(\"valueComparison.higher\") : t(\"valueComparison.lower\")}`;\n };\n\n return {\n current,\n currentInPercentChange: getPercentChangeText(),\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent,\n };\n }, [marketActivity, t]);\n\n const monthlyChange = useMemo(() => {\n if (\n !medianSaleVsAskingPrice ||\n !medianSaleVsAskingPrice.current ||\n !medianSaleVsAskingPrice.previous\n ) {\n return null;\n }\n\n return (\n (medianSaleVsAskingPrice.current - medianSaleVsAskingPrice.previous) /\n medianSaleVsAskingPrice.previous\n );\n }, [medianSaleVsAskingPrice]);\n\n if (!medianSaleVsAskingPrice) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianSaleVsAskingPrice.title\")}\n <InfoPopover change={monthlyChange}>\n {t(\"graphs.medianSaleVsAskingPrice.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianSaleVsAskingPrice.currentInPercentChange}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.medianSaleVsAskingPrice.title\")}\n disclaimer={t(\"graphs.medianSaleVsAskingPrice.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianSaleVsAskingPrice\n isIncrease={!monthlyChange || monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"../styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianConstructionYear = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity } = useNeighborhoodMarketTrends();\n\n const medianConstructionYear = useMemo(\n () =>\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.median_construction_year_sold_homes,\n [marketActivity],\n );\n\n if (!medianConstructionYear) {\n return null;\n }\n\n return (\n <div className={styles.smallContainer}>\n <h3 className={styles.title}>\n {t(\"graphs.medianConstructionYear.title\")}\n <span className={styles.titleBold}>{medianConstructionYear}</span>.\n </h3>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { primitiveUtils } from \"~/utils\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianSalePriceSQFT = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianSalesPriceSQFT = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_price_per_square_foot,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"13-24m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_price_per_square_foot,\n };\n }, [marketActivity]);\n\n const yearlyChange = useMemo(() => {\n if (\n !medianSalesPriceSQFT ||\n !medianSalesPriceSQFT.previous ||\n !medianSalesPriceSQFT.current\n ) {\n return null;\n }\n\n return (\n (medianSalesPriceSQFT.current - medianSalesPriceSQFT.previous) /\n medianSalesPriceSQFT.previous\n );\n }, [medianSalesPriceSQFT]);\n\n if (!medianSalesPriceSQFT) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianSalePricePerSqft.title\")}\n <InfoPopover change={yearlyChange}>\n {t(\"graphs.medianSalePricePerSqft.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianSalesPriceSQFT.current &&\n primitiveUtils.number.formatCurrency(\n medianSalesPriceSQFT.current,\n )}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={yearlyChange}\n fieldTitle={t(\"graphs.medianSalePricePerSqft.title\")}\n disclaimer={t(\"graphs.medianSalePricePerSqft.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianSalePriceSQFT\n isIncrease={!yearlyChange || yearlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const HomesSold = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const homesSold = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.sold_homes_count,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"13-24m\"]?.market_activity\n ?.stats_over_period?.sold_homes_count,\n };\n }, [marketActivity]);\n\n const yearlyChange = useMemo(() => {\n if (!homesSold || !homesSold.current || !homesSold.previous) {\n return null;\n }\n\n return (homesSold.current - homesSold.previous) / homesSold.previous;\n }, [homesSold]);\n\n if (!homesSold) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.homesSold.title\")}\n <InfoPopover change={yearlyChange}>\n {t(\"graphs.homesSold.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>{homesSold.current}</h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={yearlyChange}\n fieldTitle={t(\"graphs.homesSold.title\")}\n disclaimer={t(\"graphs.homesSold.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.HomesSold isIncrease={!yearlyChange || yearlyChange >= 0} />\n </Graphs.Root>\n </div>\n );\n};\n","export const legend = `\n flex items-center justify-start mt-8 md:mt-2 ml-14\n`;\n\nexport const legendColor = `w-2 h-2 rounded-full mr-1.5`;\n\nexport const legendItem = `\n flex items-center mr-4\n`;\n\nexport const barChart = `\n flex-1\n`;\n\nexport const yAxis = `\n flex flex-col justify-between py-12 items-center w-10 -mr-4 md:-mr-2\n`;\n\nexport const subContainer = `\n flex\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as commonCardStyles from \"../styles\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\nimport { defaultColors } from \"~/sdks/NeighborhoodMarketTrends/defaultState\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const HousingMarketConditions = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div className={commonCardStyles.graphOnlyContainer}>\n <h3 className={commonCardStyles.title}>\n {t(\"graphs.housingMarketConditions.title\")}\n </h3>\n <h4 className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.subtitle\")}\n </h4>\n <div className={styles.subContainer}>\n <div className={styles.yAxis}>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.buyer\")}\n </p>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.neutral\")}\n </p>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.seller\")}\n </p>\n </div>\n <div className={styles.barChart}>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.HousingMarketConditions />\n </Graphs.Root>\n </div>\n </div>\n <div className={styles.legend}>\n <div className={styles.legendItem}>\n <div\n className={styles.legendColor}\n style={{\n backgroundColor:\n appearance?.colors?.sellerColor || defaultColors.sellerColor,\n }}\n ></div>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.seller\")}\n </p>\n </div>\n <div className={styles.legendItem}>\n <div\n className={styles.legendColor}\n style={{\n backgroundColor:\n appearance?.colors?.neutralColor || defaultColors.neutralColor,\n }}\n ></div>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.neutral\")}\n </p>\n </div>\n <div className={styles.legendItem}>\n <div\n className={styles.legendColor}\n style={{\n backgroundColor:\n appearance?.colors?.buyerColor || defaultColors.buyerColor,\n }}\n ></div>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.buyer\")}\n </p>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Root = ({\n className,\n children,\n}: {\n className?: string;\n children: React.ReactNode;\n}) => <div className={`${styles.wrapper} ${className || \"\"}`}>{children}</div>;\n\n// Export children\nexport { ActiveListings } from \"./ActiveListings\";\nexport { MarketType } from \"./MarketType\";\nexport { MedianAskingPrice } from \"./MedianAskingPrice\";\nexport { MedianDaysOnMarket } from \"./MedianDaysOnMarket\";\nexport { MedianSalePrice } from \"./MedianSalePrice\";\nexport { MedianSaleVsAskingPrice } from \"./MedianSaleVsAskingPrice\";\nexport { MedianConstructionYear } from \"./MedianConstructionYear\";\nexport { MedianSalePriceSQFT } from \"./MedianSalePriceSQFT\";\nexport { HomesSold } from \"./HomesSold\";\nexport { HousingMarketConditions } from \"./HousingMarketConditions\";\n","export const loadingContent = `w-full h-full flex justify-center align-cennter`;\n\nexport const desktopContainer = `\n border\n rounded-md\n hidden\n md:block\n`;\n\nexport const content = `\n py-8\n px-4\n`;\n\nexport const tab = `\n border-r-2\n last:border-r-0\n`;\n\nexport const mobileContainer = `\n md:hidden\n`;\n\nexport const sectionContent = `\n flex\n flex-col\n gap-4\n`;\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport {\n type Icon,\n HandCoinsIcon,\n ChartBarIcon,\n HouseLineIcon,\n} from \"@phosphor-icons/react\";\nimport * as Accordion from \"../Accordion\";\nimport * as Tabs from \"../Tabs\";\nimport * as Cards from \"../Cards\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport { LoadingSpinner } from \"~/components/deprecated\";\nimport { useTracking } from \"~/tracking\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n TabIds,\n} from \"~/sdks/NeighborhoodMarketTrends/types\";\n\nimport { NoDataContentDeprecated } from \"~/components/NoDataContent\";\n\ntype Content = {\n id: TabIds;\n icon: Icon;\n label: string;\n content: React.ReactNode;\n}[];\n\ntype ContentProps = {\n omitTabs?: TabIds[];\n};\n\nexport const Content = ({ omitTabs }: ContentProps) => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const tracking = useTracking();\n const { isLoading, marketActivity, homesSoldPercentage } =\n useNeighborhoodMarketTrends();\n\n const intervals =\n marketActivity?.market_activity_by_property_type?.all_residential_properties\n .intervals;\n\n const content = useMemo<Content>(() => {\n const statsOverYear = intervals?.[\"12m\"]?.market_activity.stats_over_period;\n const statsAtYearEnd =\n intervals?.[\"12m\"]?.market_activity.stats_at_period_end;\n const statsOverMonth =\n intervals?.[\"30d\"]?.market_activity.stats_over_period;\n\n const monthlyIntervals = Object.entries(intervals ?? {}).filter(([key]) =>\n key.match(/^\\d{4}-\\d{2}$/),\n );\n const hasNoMarketConditionsData =\n monthlyIntervals.length === 0 ||\n monthlyIntervals.every(\n ([_, value]) =>\n (value.market_activity?.stats_over_period\n ?.market_conditions_indicator_MOI_12month ?? 0) === 0,\n ) ||\n monthlyIntervals.every(\n ([_, value]) =>\n !value.market_activity?.stats_over_period\n ?.market_conditions_assessment,\n );\n\n const tabsConfig = [\n {\n id: TabIds.marketConditions,\n icon: HandCoinsIcon,\n label: t(\"tabs.marketConditions.title\"),\n content: [\n ...(!hasNoMarketConditionsData &&\n typeof statsOverMonth?.market_conditions_indicator_MOI_12month !==\n \"undefined\"\n ? [\n <Cards.MarketType key=\"market-type\" />,\n <Cards.HousingMarketConditions key=\"market-conditions\" />,\n ]\n : []),\n ],\n },\n {\n id: TabIds.currentActivity,\n icon: HouseLineIcon,\n label: t(\"tabs.currentActivity.title\"),\n content: [\n ...(typeof statsAtYearEnd?.home_asking_prices.median_price !==\n \"undefined\"\n ? [<Cards.MedianAskingPrice key=\"median-asking-price\" />]\n : []),\n ...(typeof statsOverYear?.market_speed.median_days_on_market !==\n \"undefined\"\n ? [<Cards.MedianDaysOnMarket key=\"median-days-on-market\" />]\n : []),\n ...(typeof intervals?.[\"30d\"]?.market_activity?.stats_at_period_end\n ?.active_listings_count !== \"undefined\"\n ? [<Cards.ActiveListings key=\"active-listings\" />]\n : []),\n ...(typeof statsOverYear?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent !== \"undefined\" &&\n homesSoldPercentage >= 0.75\n ? [\n <Cards.MedianSaleVsAskingPrice key=\"median-sales-vs-asking-price\" />,\n ]\n : []),\n ],\n },\n {\n id: TabIds.recentTrends,\n icon: ChartBarIcon,\n label: t(\"tabs.recentTrends.title\"),\n content: [\n ...(typeof statsOverYear?.median_construction_year_sold_homes !==\n \"undefined\"\n ? [<Cards.MedianConstructionYear key=\"median-construction-year\" />]\n : []),\n ...(typeof statsOverYear?.sold_homes_count !== \"undefined\" &&\n homesSoldPercentage >= 0.75\n ? [<Cards.MedianSalePrice key=\"median-sale-price\" />]\n : []),\n ...(typeof statsOverYear?.home_selling_prices\n .median_price_per_square_foot !== \"undefined\" &&\n homesSoldPercentage >= 0.75\n ? [<Cards.MedianSalePriceSQFT key=\"median-sale-price-sq-ft\" />]\n : []),\n ...(typeof statsOverYear?.sold_homes_count !== \"undefined\"\n ? [<Cards.HomesSold key=\"homes-sold\" />]\n : []),\n ],\n },\n ];\n\n return tabsConfig.filter(\n (tab) => !omitTabs?.includes(tab.id) && tab.content.length > 0,\n );\n }, [intervals]);\n\n const handleTabChange = (tabId: string) => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.TAB_CLICKED,\n eventAttributes: [\n {\n label: \"activeCategory\",\n data: tabId,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.CATEGORY_SELECTED,\n eventAttributes: {\n ll_selected_category: tabId,\n },\n });\n };\n\n if (isLoading) {\n return (\n <div className={styles.loadingContent}>\n <LoadingSpinner image />\n </div>\n );\n }\n\n if (\n !marketActivity ||\n !intervals ||\n (intervals && Object.keys(intervals).length === 0)\n ) {\n return <NoDataContentDeprecated text={t(\"noData\")} />;\n }\n\n return (\n <>\n <div className={styles.desktopContainer}>\n <Tabs.Root defaultValue={content[0]?.id} onChange={handleTabChange}>\n <Tabs.List>\n {content.map((item) => (\n <Tabs.Tab\n key={item.id}\n icon={item.icon}\n tabId={item.id}\n className={styles.tab}\n >\n {item.label}\n </Tabs.Tab>\n ))}\n </Tabs.List>\n <div className={styles.content}>\n <Cards.Root>\n {content.map((item) => (\n <Tabs.Content\n key={`tab-content-${item.id}`}\n tabId={item.id}\n className={styles.sectionContent}\n >\n {item.content}\n </Tabs.Content>\n ))}\n </Cards.Root>\n </div>\n </Tabs.Root>\n </div>\n <div className={styles.mobileContainer}>\n <Accordion.Root defaultValue={content[0]?.id}>\n {content.map((item) => (\n <Accordion.Item key={item.id} value={item.id}>\n <Accordion.Trigger icon={item.icon}>\n {item.label}\n </Accordion.Trigger>\n <Accordion.Content className={styles.sectionContent}>\n {item.content}\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Accordion.Root>\n </div>\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { AttributionDeprecated as Attribution } from \"~/components/Attribution\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const Footer = ({ hideAttribution }: { hideAttribution?: boolean }) => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { locale, geography } = useNeighborhoodMarketTrends();\n\n return (\n <div className={styles.container}>\n <p className={styles.dataDisclaimer}>\n {t(\"disclaimer.footer\", {\n context: (geography?.level || 10) >= 30 ? \"large\" : undefined,\n })}\n </p>\n {!hideAttribution && (\n <Attribution sdkName=\"neighborhood-market-trends\" locale={locale} />\n )}\n </div>\n );\n};\n","export const container = `mt-2 md:mt-0 md:flex items-center bg-ll-background [&>a]:justify-end`;\n\nexport const dataDisclaimer = `flex-1 text-sm p-3 text-ll-placeholder`;\n","import { ObjectSchema, string, boolean, number, object, mixed } from \"yup\";\nimport { Options, TabIds } from \"./types\";\n\nexport const schema: ObjectSchema<Options> = object({\n lat: number()\n .min(-90, \"Must be a valid latitude.\")\n .max(90, \"Must be a valid latitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n lng: number()\n .min(-180, \"Must be a valid longitude.\")\n .max(180, \"Must be a valid longitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n geographyId: string().optional(),\n title: mixed<string | boolean>().optional(),\n hideAttribution: boolean().optional(),\n omitTabs: mixed<TabIds[]>().optional(),\n appearance: object({\n colors: object({\n buyerColor: string().optional(),\n sellerColor: string().optional(),\n decreaseColor: string().optional(),\n neutralColor: string().optional(),\n increaseColor: string().optional(),\n }).optional(),\n }).optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport \"~/assets/styles/old-tailwind.css\";\nimport { useTranslation } from \"react-i18next\";\nimport { NeighborhoodMarketTrendsProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { Footer } from \"./components/Footer\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodMarketTrendsProps } from \"./types\";\nimport * as styles from \"./styles\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodMarketTrends = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { sdkState } = useStateManagerContext<NeighborhoodMarketTrendsProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Market Trends\"\n schema={schema}\n options={sdkState.options!}\n >\n <LocalLogicProvider\n environment={sdkState.globalOptions?.environment?.api}\n apiKey={sdkState.apiKey}\n appearance={sdkState.globalOptions?.appearance}\n locale={sdkState.globalOptions?.locale}\n product={ProductNames.NEIGHBORHOOD_MARKET_TRENDS}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_MARKET_TRENDS,\n productVersion: FULL_APP_VERSION,\n }}\n attributes={{\n location,\n host: sdkState.location,\n host_url: document.referrer,\n locale,\n isMobile,\n }}\n flags={{\n isDebugMode:\n import.meta.env.VITE_TRACKING_PIPELINE_DEBUG === \"true\",\n }}\n >\n <NeighborhoodMarketTrendsProvider>\n <TitleHeader\n title={\n typeof sdkState.options?.title === \"string\" ||\n sdkState.options?.title === false\n ? sdkState.options.title\n : t(\"title\")\n }\n />\n <p className={styles.disclaimer}>{t(\"disclaimer.header\")}</p>\n <Content omitTabs={sdkState.options?.omitTabs} />\n <Footer hideAttribution={sdkState.options?.hideAttribution} />\n </NeighborhoodMarketTrendsProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodMarketTrends;\n","export const disclaimer = `\n mb-6\n text-xs\n text-neutral-800\n`;\n"],"file":"NeighborhoodMarketTrends-legacy-18rcLpS1.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":["getState","a","e","n","t","TRIGGER_NAME","CONTENT_NAME","Root","Trigger","Content","CollapsiblePrimitive.Root","CollapsiblePrimitive.Trigger","CollapsiblePrimitive.Content","Item"],"ignoreList":[0,1,5,6,7,8,9,10],"sources":["../../../../node_modules/@radix-ui/react-collapsible/dist/index.mjs","../../../../node_modules/@radix-ui/react-accordion/dist/index.mjs","../../src/sdks/NeighborhoodMarketTrends/components/InfoPopover/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/Gauge/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/Needle/index.tsx","../../../../node_modules/@phosphor-icons/react/dist/defs/ArrowDown.es.js","../../../../node_modules/@phosphor-icons/react/dist/defs/HouseLine.es.js","../../../../node_modules/@phosphor-icons/react/dist/defs/Info.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/ArrowDown.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/HouseLine.es.js","../../../../node_modules/@phosphor-icons/react/dist/csr/Info.es.js","../../src/utils/primitives/numberUtils.ts","../../src/sdks/NeighborhoodMarketTrends/types.ts","../../src/features/marketActivity/keyFactory.ts","../../src/sdks/NeighborhoodMarketTrends/context.tsx","../../src/features/clientLibrary/useMarketActivity.ts","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Item/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Content/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Trigger/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/Trigger/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Accordion/Root/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/context.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/Tab/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/Tab/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/Content/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/List/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Tabs/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/InfoPopover/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/ChangeIndicator/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/ChangeIndicator/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/context.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/Gauge/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/BuyerSellerMarket/index.tsx","../../src/components/Graphs/GridGraph/lazy.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/ActiveListings/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianDaysOnMarket/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianSaleVsAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianSalePrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/MedianSalePriceSQFT/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/HomesSold/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/HousingMarketConditions/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/HousingMarketConditions/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Graphs/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/ActiveListings/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MarketType/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MarketType/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianDaysOnMarket/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianSalePrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianSaleVsAskingPrice/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianConstructionYear/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/MedianSalePriceSQFT/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/HomesSold/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/HousingMarketConditions/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/HousingMarketConditions/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Cards/Root/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Content/styles.ts","../../src/sdks/NeighborhoodMarketTrends/components/Content/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Footer/index.tsx","../../src/sdks/NeighborhoodMarketTrends/components/Footer/styles.ts","../../src/sdks/NeighborhoodMarketTrends/schema.ts","../../src/sdks/NeighborhoodMarketTrends/index.tsx","../../src/sdks/NeighborhoodMarketTrends/styles.ts"],"sourcesContent":["\"use client\";\n\n// src/collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCollapsible,\n open: openProp,\n defaultOpen,\n disabled,\n onOpenChange,\n ...collapsibleProps\n } = props;\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: COLLAPSIBLE_NAME\n });\n return /* @__PURE__ */ jsx(\n CollapsibleProvider,\n {\n scope: __scopeCollapsible,\n disabled,\n contentId: useId(),\n open,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(open),\n \"data-disabled\": disabled ? \"\" : void 0,\n ...collapsibleProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCollapsible, ...triggerProps } = props;\n const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open || false,\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n disabled: context.disabled,\n ...triggerProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n (props, forwardedRef) => {\n const { forceMount, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeCollapsible, present, children, ...contentProps } = props;\n const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n const [isPresent, setIsPresent] = React.useState(present);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const heightRef = React.useRef(0);\n const height = heightRef.current;\n const widthRef = React.useRef(0);\n const width = widthRef.current;\n const isOpen = context.open || isPresent;\n const isMountAnimationPreventedRef = React.useRef(isOpen);\n const originalStylesRef = React.useRef(void 0);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n useLayoutEffect(() => {\n const node = ref.current;\n if (node) {\n originalStylesRef.current = originalStylesRef.current || {\n transitionDuration: node.style.transitionDuration,\n animationName: node.style.animationName\n };\n node.style.transitionDuration = \"0s\";\n node.style.animationName = \"none\";\n const rect = node.getBoundingClientRect();\n heightRef.current = rect.height;\n widthRef.current = rect.width;\n if (!isMountAnimationPreventedRef.current) {\n node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n node.style.animationName = originalStylesRef.current.animationName;\n }\n setIsPresent(present);\n }\n }, [context.open, present]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n id: context.contentId,\n hidden: !isOpen,\n ...contentProps,\n ref: composedRefs,\n style: {\n [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n ...props.style\n },\n children: isOpen && children\n }\n );\n});\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Content,\n Root,\n Trigger,\n createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/accordion.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ACCORDION_NAME = \"Accordion\";\nvar ACCORDION_KEYS = [\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\"];\nvar [Collection, useCollection, createCollectionScope] = createCollection(ACCORDION_NAME);\nvar [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n createCollectionScope,\n createCollapsibleScope\n]);\nvar useCollapsibleScope = createCollapsibleScope();\nvar Accordion = React.forwardRef(\n (props, forwardedRef) => {\n const { type, ...accordionProps } = props;\n const singleProps = accordionProps;\n const multipleProps = accordionProps;\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeAccordion, children: type === \"multiple\" ? /* @__PURE__ */ jsx(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });\n }\n);\nAccordion.displayName = ACCORDION_NAME;\nvar [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);\nvar [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n ACCORDION_NAME,\n { collapsible: false }\n);\nvar AccordionImplSingle = React.forwardRef(\n (props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n collapsible = false,\n ...accordionSingleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? \"\",\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value: React.useMemo(() => value ? [value] : [], [value]),\n onItemOpen: setValue,\n onItemClose: React.useCallback(() => collapsible && setValue(\"\"), [collapsible, setValue]),\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })\n }\n );\n }\n);\nvar AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {\n const {\n value: valueProp,\n defaultValue,\n onValueChange = () => {\n },\n ...accordionMultipleProps\n } = props;\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue ?? [],\n onChange: onValueChange,\n caller: ACCORDION_NAME\n });\n const handleItemOpen = React.useCallback(\n (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n [setValue]\n );\n const handleItemClose = React.useCallback(\n (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n [setValue]\n );\n return /* @__PURE__ */ jsx(\n AccordionValueProvider,\n {\n scope: props.__scopeAccordion,\n value,\n onItemOpen: handleItemOpen,\n onItemClose: handleItemClose,\n children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })\n }\n );\n});\nvar [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);\nvar AccordionImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, disabled, dir, orientation = \"vertical\", ...accordionProps } = props;\n const accordionRef = React.useRef(null);\n const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n const getItems = useCollection(__scopeAccordion);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n if (!ACCORDION_KEYS.includes(event.key)) return;\n const target = event.target;\n const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n const triggerCount = triggerCollection.length;\n if (triggerIndex === -1) return;\n event.preventDefault();\n let nextIndex = triggerIndex;\n const homeIndex = 0;\n const endIndex = triggerCount - 1;\n const moveNext = () => {\n nextIndex = triggerIndex + 1;\n if (nextIndex > endIndex) {\n nextIndex = homeIndex;\n }\n };\n const movePrev = () => {\n nextIndex = triggerIndex - 1;\n if (nextIndex < homeIndex) {\n nextIndex = endIndex;\n }\n };\n switch (event.key) {\n case \"Home\":\n nextIndex = homeIndex;\n break;\n case \"End\":\n nextIndex = endIndex;\n break;\n case \"ArrowRight\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n moveNext();\n } else {\n movePrev();\n }\n }\n break;\n case \"ArrowDown\":\n if (orientation === \"vertical\") {\n moveNext();\n }\n break;\n case \"ArrowLeft\":\n if (orientation === \"horizontal\") {\n if (isDirectionLTR) {\n movePrev();\n } else {\n moveNext();\n }\n }\n break;\n case \"ArrowUp\":\n if (orientation === \"vertical\") {\n movePrev();\n }\n break;\n }\n const clampedIndex = nextIndex % triggerCount;\n triggerCollection[clampedIndex].ref.current?.focus();\n });\n return /* @__PURE__ */ jsx(\n AccordionImplProvider,\n {\n scope: __scopeAccordion,\n disabled,\n direction: dir,\n orientation,\n children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...accordionProps,\n \"data-orientation\": orientation,\n ref: composedRefs,\n onKeyDown: disabled ? void 0 : handleKeyDown\n }\n ) })\n }\n );\n }\n);\nvar ITEM_NAME = \"AccordionItem\";\nvar [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);\nvar AccordionItem = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, value, ...accordionItemProps } = props;\n const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n const triggerId = useId();\n const open = value && valueContext.value.includes(value) || false;\n const disabled = accordionContext.disabled || props.disabled;\n return /* @__PURE__ */ jsx(\n AccordionItemProvider,\n {\n scope: __scopeAccordion,\n open,\n disabled,\n triggerId,\n children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Root,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(open),\n ...collapsibleScope,\n ...accordionItemProps,\n ref: forwardedRef,\n disabled,\n open,\n onOpenChange: (open2) => {\n if (open2) {\n valueContext.onItemOpen(value);\n } else {\n valueContext.onItemClose(value);\n }\n }\n }\n )\n }\n );\n }\n);\nAccordionItem.displayName = ITEM_NAME;\nvar HEADER_NAME = \"AccordionHeader\";\nvar AccordionHeader = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...headerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n return /* @__PURE__ */ jsx(\n Primitive.h3,\n {\n \"data-orientation\": accordionContext.orientation,\n \"data-state\": getState(itemContext.open),\n \"data-disabled\": itemContext.disabled ? \"\" : void 0,\n ...headerProps,\n ref: forwardedRef\n }\n );\n }\n);\nAccordionHeader.displayName = HEADER_NAME;\nvar TRIGGER_NAME = \"AccordionTrigger\";\nvar AccordionTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...triggerProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Trigger,\n {\n \"aria-disabled\": itemContext.open && !collapsibleContext.collapsible || void 0,\n \"data-orientation\": accordionContext.orientation,\n id: itemContext.triggerId,\n ...collapsibleScope,\n ...triggerProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nAccordionTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"AccordionContent\";\nvar AccordionContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeAccordion, ...contentProps } = props;\n const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n return /* @__PURE__ */ jsx(\n CollapsiblePrimitive.Content,\n {\n role: \"region\",\n \"aria-labelledby\": itemContext.triggerId,\n \"data-orientation\": accordionContext.orientation,\n ...collapsibleScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n [\"--radix-accordion-content-height\"]: \"var(--radix-collapsible-content-height)\",\n [\"--radix-accordion-content-width\"]: \"var(--radix-collapsible-content-width)\",\n ...props.style\n }\n }\n );\n }\n);\nAccordionContent.displayName = CONTENT_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Accordion;\nvar Item = AccordionItem;\nvar Header = AccordionHeader;\nvar Trigger2 = AccordionTrigger;\nvar Content2 = AccordionContent;\nexport {\n Accordion,\n AccordionContent,\n AccordionHeader,\n AccordionItem,\n AccordionTrigger,\n Content2 as Content,\n Header,\n Item,\n Root2 as Root,\n Trigger2 as Trigger,\n createAccordionScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { useMemo } from \"react\";\n\nimport * as Popover from \"@radix-ui/react-popover\";\nimport { InfoIcon, XIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\n\nexport function InfoPopover({\n children,\n change,\n}: {\n children?: React.ReactNode;\n change?: number | null;\n}) {\n const isMobile = useIsMobile();\n\n const side = useMemo(() => (isMobile ? \"bottom\" : \"right\"), [isMobile]);\n\n if (change === null || change === 0) {\n return null;\n }\n\n return (\n <Popover.Root>\n <Popover.Trigger>\n <InfoIcon className={styles.icon} />\n </Popover.Trigger>\n <Popover.Content className={styles.content} side={side} sideOffset={4}>\n {children}\n <Popover.Close>\n <XIcon className={styles.close} weight=\"bold\" />\n </Popover.Close>\n </Popover.Content>\n </Popover.Root>\n );\n}\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport function Gauge({\n sellerColor,\n neutralColor,\n buyerColor,\n}: {\n sellerColor?: string;\n neutralColor?: string;\n buyerColor?: string;\n}) {\n return (\n <div className={styles.container}>\n <div\n className={styles.sellerGauge}\n style={{\n backgroundImage: `linear-gradient(to right top, ${sellerColor} 50%, rgba(0, 0, 0, 0) 50%)`,\n }}\n ></div>\n <div\n className={styles.neutralGauge}\n style={{\n backgroundImage: `linear-gradient(to right top, rgba(0, 0, 0, 0) 50%, ${neutralColor} 50%)`,\n }}\n ></div>\n <div\n className={styles.buyerGauge}\n style={{\n backgroundImage: `linear-gradient(to right top, rgba(0, 0, 0, 0) 50%, ${buyerColor} 50%)`,\n }}\n ></div>\n\n <div className={styles.maskWrapper}>\n <div className={styles.mask}></div>\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nconst color = \"#272525\";\n\nexport function Needle() {\n return (\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 13 93\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6.3151 0.683594L11.6802 88.9218H0.949947L3.63252 44.8027L6.3151 0.683594Z\"\n fill={color}\n />\n <path\n d=\"M12.1458 86.9782C12.1458 90.1985 9.53531 92.809 6.3151 92.809C3.09488 92.809 0.484375 90.1985 0.484375 86.9782C0.484375 83.758 3.09488 81.1475 6.3151 81.1475C9.53531 81.1475 12.1458 83.758 12.1458 86.9782Z\"\n fill={color}\n />\n </svg>\n );\n}\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M208.49,152.49l-72,72a12,12,0,0,1-17,0l-72-72a12,12,0,0,1,17-17L116,187V40a12,12,0,0,1,24,0V187l51.51-51.52a12,12,0,0,1,17,17Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M200,144l-72,72L56,144Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M207.39,140.94A8,8,0,0,0,200,136H136V40a8,8,0,0,0-16,0v96H56a8,8,0,0,0-5.66,13.66l72,72a8,8,0,0,0,11.32,0l72-72A8,8,0,0,0,207.39,140.94ZM128,204.69,75.31,152H180.69Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,149.66l-72,72a8,8,0,0,1-11.32,0l-72-72A8,8,0,0,1,56,136h64V40a8,8,0,0,1,16,0v96h64a8,8,0,0,1,5.66,13.66Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M204.24,148.24l-72,72a6,6,0,0,1-8.48,0l-72-72a6,6,0,0,1,8.48-8.48L122,201.51V40a6,6,0,0,1,12,0V201.51l61.76-61.75a6,6,0,0,1,8.48,8.48Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,149.66l-72,72a8,8,0,0,1-11.32,0l-72-72a8,8,0,0,1,11.32-11.32L120,196.69V40a8,8,0,0,1,16,0V196.69l58.34-58.35a8,8,0,0,1,11.32,11.32Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M202.83,146.83l-72,72a4,4,0,0,1-5.66,0l-72-72a4,4,0,0,1,5.66-5.66L124,206.34V40a4,4,0,0,1,8,0V206.34l65.17-65.17a4,4,0,0,1,5.66,5.66Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,204H228V144a12,12,0,0,0,12.49-19.78L142.14,25.85a20,20,0,0,0-28.28,0L15.51,124.2A12,12,0,0,0,28,144v60H16a12,12,0,0,0,0,24H240a12,12,0,0,0,0-24ZM52,121.65l76-76,76,76V204H164V152a12,12,0,0,0-12-12H104a12,12,0,0,0-12,12v52H52ZM140,204H116V164h24Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M216,116.69V216H152V152H104v64H40V116.69l82.34-82.35a8,8,0,0,1,11.32,0Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,208H224V136l2.34,2.34A8,8,0,0,0,237.66,127L139.31,28.68a16,16,0,0,0-22.62,0L18.34,127a8,8,0,0,0,11.32,11.31L32,136v72H16a8,8,0,0,0,0,16H240a8,8,0,0,0,0-16ZM48,120l80-80,80,80v88H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48Zm96,88H112V160h32Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,208H224V136l2.34,2.34A8,8,0,0,0,237.66,127L139.31,28.68a16,16,0,0,0-22.62,0L18.34,127a8,8,0,0,0,11.32,11.31L32,136v72H16a8,8,0,0,0,0,16H240a8,8,0,0,0,0-16Zm-88,0H104V160a4,4,0,0,1,4-4h40a4,4,0,0,1,4,4Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,210H222V131.17l5.76,5.76a6,6,0,0,0,8.48-8.49L137.9,30.09a14,14,0,0,0-19.8,0L19.76,128.44a6,6,0,0,0,8.48,8.49L34,131.17V210H16a6,6,0,0,0,0,12H240a6,6,0,0,0,0-12ZM46,119.17l80.58-80.59a2,2,0,0,1,2.84,0L210,119.17V210H158V152a6,6,0,0,0-6-6H104a6,6,0,0,0-6,6v58H46ZM146,210H110V158h36Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,208H224V136l2.34,2.34A8,8,0,0,0,237.66,127L139.31,28.68a16,16,0,0,0-22.62,0L18.34,127a8,8,0,0,0,11.32,11.31L32,136v72H16a8,8,0,0,0,0,16H240a8,8,0,0,0,0-16ZM48,120l80-80,80,80v88H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48Zm96,88H112V160h32Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M240,212H220V126.34l9.17,9.17a4,4,0,1,0,5.66-5.66L136.49,31.51a12,12,0,0,0-17,0L21.17,129.85a4,4,0,1,0,5.66,5.66L36,126.34V212H16a4,4,0,0,0,0,8H240a4,4,0,0,0,0-8ZM44,118.34l81.17-81.17a4,4,0,0,1,5.66,0L212,118.34V212H156V152a4,4,0,0,0-4-4H104a4,4,0,0,0-4,4v60H44ZM148,212H108V156h40Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M108,84a16,16,0,1,1,16,16A16,16,0,0,1,108,84Zm128,44A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Zm-72,36.68V132a20,20,0,0,0-20-20,12,12,0,0,0-4,23.32V168a20,20,0,0,0,20,20,12,12,0,0,0,4-23.32Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M144,176a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176Zm88-48A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM124,96a12,12,0,1,0-12-12A12,12,0,0,0,124,96Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-4,48a12,12,0,1,1-12,12A12,12,0,0,1,124,72Zm12,112a16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40a8,8,0,0,1,0,16Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M142,176a6,6,0,0,1-6,6,14,14,0,0,1-14-14V128a2,2,0,0,0-2-2,6,6,0,0,1,0-12,14,14,0,0,1,14,14v40a2,2,0,0,0,2,2A6,6,0,0,1,142,176ZM124,94a10,10,0,1,0-10-10A10,10,0,0,0,124,94Zm106,34A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-40a8,8,0,0,1-8,8,16,16,0,0,1-16-16V128a8,8,0,0,1,0-16,16,16,0,0,1,16,16v40A8,8,0,0,1,144,176ZM112,84a12,12,0,1,1,12,12A12,12,0,0,1,112,84Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M140,176a4,4,0,0,1-4,4,12,12,0,0,1-12-12V128a4,4,0,0,0-4-4,4,4,0,0,1,0-8,12,12,0,0,1,12,12v40a4,4,0,0,0,4,4A4,4,0,0,1,140,176ZM124,92a8,8,0,1,0-8-8A8,8,0,0,0,124,92Zm104,36A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport n from \"../lib/IconBase.es.js\";\nimport a from \"../defs/ArrowDown.es.js\";\nconst r = o.forwardRef((e, t) => /* @__PURE__ */ o.createElement(n, { ref: t, ...e, weights: a }));\nr.displayName = \"ArrowDownIcon\";\nconst c = r;\nexport {\n c as ArrowDown,\n r as ArrowDownIcon\n};\n","import * as e from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport n from \"../defs/HouseLine.es.js\";\nconst o = e.forwardRef((r, s) => /* @__PURE__ */ e.createElement(t, { ref: s, ...r, weights: n }));\no.displayName = \"HouseLineIcon\";\nconst m = o;\nexport {\n m as HouseLine,\n o as HouseLineIcon\n};\n","import * as o from \"react\";\nimport n from \"../lib/IconBase.es.js\";\nimport a from \"../defs/Info.es.js\";\nconst e = o.forwardRef((r, t) => /* @__PURE__ */ o.createElement(n, { ref: t, ...r, weights: a }));\ne.displayName = \"InfoIcon\";\nconst c = e;\nexport {\n c as Info,\n e as InfoIcon\n};\n","export const formatCurrency = (\n amount: number,\n locale = \"en-US\",\n currency = \"USD\",\n maximumFractionDigits = 0,\n) =>\n new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n maximumFractionDigits,\n }).format(amount ?? 0);\n","import { SDKOptions } from \"~/types/options\";\n\nexport enum TabIds {\n marketConditions = \"market-conditions\",\n recentTrends = \"recent-trends\",\n currentActivity = \"current-activity\",\n}\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAttribution?: boolean;\n omitTabs?: TabIds[];\n appearance?: {\n colors?: {\n buyerColor?: string;\n sellerColor?: string;\n neutralColor?: string;\n increaseColor?: string;\n decreaseColor?: string;\n };\n };\n};\n\nexport type NeighborhoodMarketTrendsProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-market-trends-Viewed\",\n TAB_CLICKED = \"neighborhood-market-trends-Tab-Clicked\",\n}\n\n// Why are these named differently?\n// https://docs.mixpanel.com/docs/data-structure/events-and-properties#name-events-and-properties-consistently\nexport enum AnalyticsEvents {\n SDK_VIEWED = \"sdk_viewed\",\n CATEGORY_SELECTED = \"category_selected\",\n}\n","import { marketActivityParams } from \"./types\";\n\nexport const marketActivityKeys = {\n all: () => [\"marketActivity\"] as const,\n list: (filters: Partial<marketActivityParams>) =>\n [...marketActivityKeys.all(), filters] as const,\n};\n","import React, { useContext, useMemo } from \"react\";\nimport type { MarketActivity, Geography } from \"@local-logic/client\";\nimport {\n type NeighborhoodMarketTrendsProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useMarketActivity } from \"~/features/clientLibrary/useMarketActivity\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n marketActivity: MarketActivity | null;\n homesSoldPercentage: number;\n appearance?: NeighborhoodMarketTrendsProps[\"options\"][\"appearance\"];\n locale: \"en\" | \"fr\";\n geography?: Geography;\n};\n\nconst NeighborhoodMarketTrendsContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodMarketTrends = () =>\n useContext(NeighborhoodMarketTrendsContext);\n\nconst NeighborhoodMarketTrendsProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodMarketTrendsProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n const pastTwelveMonths = useMemo(() => {\n const months = [];\n const currentDate = new Date();\n\n // Loop through the past 12 months\n for (let index = 0; index <= 12; index += 1) {\n const year = currentDate.getFullYear();\n const month = currentDate.getMonth(); // 0-based, January is 0, December is 11\n\n // Format the month as yyyy-mm\n const formattedDate = `${year}-${String(month + 1).padStart(2, \"0\")}`;\n months.push(formattedDate);\n\n // Decrement the month\n currentDate.setMonth(currentDate.getMonth() - 1);\n }\n\n return months.reverse(); //\n }, []);\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n location: {\n lat:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lat\n : undefined,\n lng:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lng\n : undefined,\n },\n geogID: sdkState.options?.geographyId || undefined,\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const { geographyId, geography } = useMemo(() => {\n const geographiesArray = Object.entries(geographyData || {});\n\n return {\n geographyId: geographiesArray[0]?.[0],\n geography: geographiesArray[0]?.[1],\n };\n }, [isGeographyLoading, geographyData]);\n\n const { data: marketActivity, isFetching: isMarketActivityFetching } =\n useMarketActivity({\n geographyId,\n propertyTypes: [\"all_residential_properties\"],\n intervals: [\"30d\", \"31-60d\", \"12m\", \"13-24m\", ...pastTwelveMonths],\n });\n\n const homesSoldPercentage = useMemo(() => {\n const soldHomesCount =\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.sold_homes_count || 0;\n\n const soldHomesWithPriceCount =\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.sold_homes_with_sold_price_count || 0;\n\n return soldHomesCount > 0 ? soldHomesWithPriceCount / soldHomesCount : 0;\n }, [marketActivity]);\n\n const isLoading = useMemo(\n () => isGeographyLoading || isMarketActivityFetching,\n [isGeographyLoading, isMarketActivityFetching],\n );\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n homesSoldPercentage,\n marketActivity: marketActivity ?? null,\n appearance: sdkState?.options?.appearance,\n locale,\n geography,\n }),\n [\n marketActivity,\n isLoading,\n homesSoldPercentage,\n locale,\n geography,\n geographyId,\n ],\n );\n\n return (\n <NeighborhoodMarketTrendsContext.Provider value={contextValue}>\n {children}\n </NeighborhoodMarketTrendsContext.Provider>\n );\n};\n\nexport { useNeighborhoodMarketTrends, NeighborhoodMarketTrendsProvider };\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useFlags } from \"launchdarkly-react-client-sdk\";\nimport { marketActivityKeys } from \"../marketActivity/keyFactory\";\nimport { useLocalLogic } from \"~/context/LocalLogicProvider\";\n\ntype PropertyTypes =\n | \"single_family\"\n | \"multi_family_under_5_units\"\n | \"condo_townhome\"\n | \"vacant_land\"\n | \"multi_family_5_plus_units\"\n | \"all_residential_properties\";\n\ntype IntervalOption = \"30d\" | \"31-60d\" | \"12m\" | \"13-24m\" | string;\n\ntype MarketActivityParams = {\n geographyId?: string;\n propertyTypes?: PropertyTypes[];\n intervals?: IntervalOption[];\n};\n\nexport function useMarketActivity({\n geographyId,\n propertyTypes,\n intervals,\n}: MarketActivityParams) {\n const { client } = useLocalLogic();\n const flags = useFlags();\n\n const fetchMarketActivity = async () => {\n const response = await client.getMarketActivity({\n geogId: geographyId,\n propertyTypes,\n intervals,\n });\n\n if (typeof response === \"undefined\") {\n // Query data cannot be undefined\n return null;\n }\n\n return response;\n };\n\n return useQuery({\n queryKey: marketActivityKeys.list({ geogId: geographyId }),\n queryFn: fetchMarketActivity,\n enabled: !!(geographyId && flags.marketTrendsSdk),\n });\n}\n","import React from \"react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport * as styles from \"./styles\";\n\ntype ItemProps = {\n value: string;\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Item = ({ value, children, className }: ItemProps) => (\n <Accordion.Item className={`${styles.container} ${className}`} value={value}>\n {children}\n </Accordion.Item>\n);\n","import React from \"react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport * as styles from \"./styles\";\n\ntype ContentProps = {\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Content = ({ children, className }: ContentProps) => (\n <Accordion.Content className={`${styles.container} ${className}`}>\n {children}\n </Accordion.Content>\n);\n","import React from \"react\";\nimport { type Icon, CaretDownIcon } from \"@phosphor-icons/react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport * as styles from \"./styles\";\n\nexport const Trigger = ({\n children,\n icon: Icon,\n}: {\n children: React.ReactNode;\n icon: Icon;\n}) => (\n <Accordion.Trigger className={styles.container}>\n {typeof Icon !== \"undefined\" && <Icon className={styles.icon} />}\n <div className={styles.label}> {children}</div>\n <CaretDownIcon className={styles.arrow} />\n </Accordion.Trigger>\n);\n","export const container = `\n flex gap-4 w-full\n group\n text-stone-500\n data-[state=\"open\"]:border-b\n data-[state=\"open\"]:pb-3\n data-[state=\"open\"]:mb-4\n data-[state=\"open\"]:text-ll-primary\n`;\n\nexport const icon = `\n w-6\n`;\n\nexport const arrow = `\n h-3\n transition-transform duration-300 ease-[cubic-bezier(0.87,_0,_0.13,_1)]\n group-data-[state=\"open\"]:rotate-180\n`;\n\nexport const label = `\n grow\n text-left\n`;\n","import React from \"react\";\nimport * as Accordion from \"@radix-ui/react-accordion\";\nimport { RootProps } from \"./types\";\nimport * as styles from \"./styles\";\n\nexport const Root = ({ defaultValue, children }: RootProps) => (\n <Accordion.Root\n defaultValue={defaultValue}\n collapsible\n type=\"single\"\n className={styles.container}\n >\n {children}\n </Accordion.Root>\n);\n\n// Export children\nexport { Item } from \"./Item\";\nexport { Content } from \"./Content\";\nexport { Trigger } from \"./Trigger\";\n","export const container = `\n flex\n flex-col\n gap-2\n`;\n","import React, { useContext } from \"react\";\nimport { RootProps } from \"./types\";\n\nexport type DefaultContext = RootProps;\n\nconst RootElementContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\nconst useRootElement = () => useContext(RootElementContext);\n\nexport { useRootElement, RootElementContext };\n","import React from \"react\";\nimport { type Icon } from \"@phosphor-icons/react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\nimport * as styles from \"./styles\";\n\ntype TabProps = {\n tabId: string;\n icon?: Icon;\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Tab = ({ tabId, icon: Icon, children, className }: TabProps) => (\n <Tabs.Trigger className={`${styles.container} ${className}`} value={tabId}>\n {typeof Icon !== \"undefined\" && <Icon className={styles.icon} />}\n {children}\n </Tabs.Trigger>\n);\n","export const container = `\n flex\n gap-2\n text-stone-500\n justify-center\n w-full\n py-4\n border-b-4\n cursor-pointer\n select-none\n data-[state=\"active\"]:border-b-ll-primary\n data-[state=\"active\"]:text-ll-primary\n`;\n\nexport const icon = `\n w-6 h-6\n`;\n","import React from \"react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\n\ntype ContentProps = {\n tabId: string;\n children: React.ReactNode;\n className?: string;\n};\n\nexport const Content = ({ tabId, children, className }: ContentProps) => (\n <Tabs.Content value={tabId} className={className}>\n {children}\n </Tabs.Content>\n);\n","import React from \"react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\nimport * as styles from \"./styles\";\n\nexport const List = ({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) => (\n <Tabs.List className={`${styles.container} ${className}`}>\n {children}\n </Tabs.List>\n);\n","import React from \"react\";\nimport * as Tabs from \"@radix-ui/react-tabs\";\nimport { RootProps } from \"./types\";\nimport { RootElementContext } from \"./context\";\n\nexport const Root = ({ defaultValue, onChange, children }: RootProps) => {\n const handleOnChange = (value: string) => {\n if (onChange) {\n onChange(value);\n }\n };\n\n return (\n <RootElementContext.Provider\n value={{\n defaultValue,\n onChange,\n children,\n }}\n >\n <Tabs.Root defaultValue={defaultValue} onValueChange={handleOnChange}>\n {children}\n </Tabs.Root>\n </RootElementContext.Provider>\n );\n};\n\n// Export children\nexport { Tab } from \"./Tab\";\nexport { Content } from \"./Content\";\nexport { List } from \"./List\";\n","export const wrapper = `\n flex flex-col w-full justify-between gap-2\n`;\n\nexport const container = `\n border border-gray-100 md:border-ll-border rounded-md md:min-h-40 w-full flex flex-col md:flex-row\n`;\n\nexport const smallContainer = `\n border border-gray-100 md:border-ll-border rounded-md\n p-2 md:p-4 w-fit\n`;\n\nexport const graphOnlyContainer = `\n md:border border-gray-100 md:border-ll-border rounded-md md:min-h-40 w-full flex flex-col md:p-6\n`;\n\nexport const summary = `\n flex flex-col justify-between min-w-60 p-2 md:p-4 border border-transparent border-b-gray-100 md:border-r-gray-300 md:w-5/12\n`;\n\nexport const title = `\n font-semibold text-ll-font-size-caption-1 text-ll-placeholder flex gap-x-1 items-center\n`;\n\nexport const disclaimer = `\n text-xxs\n text-ll-placeholder\n md:mb-4\n italic\n`;\n\nexport const header = `md:h-22 lg:h-11`;\n\nexport const subtitle = `\n text-xxs text-ll-placeholder\n`;\n\nexport const amount = `\n text-ll-font-size-h4 font-semibold text-ll-on-surface\n leading-7 mt-6 mb-2\n`;\n\nexport const unit = `\n text-ll-font-size-caption-1 font-medium\n`;\n\nexport const titleBold = `\n text-sm\n text-ll-on-surface\n`;\n\nexport const legend = `\n flex items-center justify-center mt-8 md:mt-2\n`;\n\nexport const legendItem = `\n flex items-center mr-4\n`;\n","export const icon = `w-4 h-4 cursor-pointer`;\nexport const content = `bg-white py-2 pl-3 pr-8 relative shadow z-10 text-black max-w-80 font-normal text-xs rounded-lg`;\nexport const close = `absolute right-2 top-1/2 transform -translate-y-1/2 cursor-pointer w-4 h-4`;\n","import React, { useMemo } from \"react\";\n\nimport { ArrowDownIcon } from \"@phosphor-icons/react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\nimport { defaultColors } from \"~/sdks/NeighborhoodMarketTrends/defaultState\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nexport const ChangeIndicator = ({\n yearlyChange,\n disclaimer,\n fieldTitle,\n}: {\n yearlyChange?: number | null;\n disclaimer?: string;\n fieldTitle?: string;\n}) => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { appearance } = useNeighborhoodMarketTrends();\n\n const isIncrease = yearlyChange && yearlyChange >= 0;\n\n const color = useMemo(() => {\n if (isIncrease) {\n return appearance?.colors?.increaseColor || defaultColors.increaseColor;\n }\n\n return appearance?.colors?.decreaseColor || defaultColors.decreaseColor;\n }, [appearance, isIncrease]);\n\n return (\n <>\n {yearlyChange ? (\n <div className={styles.changeContainer}>\n <ArrowDownIcon\n className={styles.indicatorIcon}\n style={{ color }}\n weight=\"bold\"\n data-is-increase={isIncrease}\n />\n <div className={styles.disclaimer} style={{ color }}>\n <p className={styles.changeText}>\n {(yearlyChange * 100).toFixed(2)}%{\" \"}\n {t(`marketIndicator.${isIncrease ? \"increase\" : \"decrease\"}`)}\n </p>\n {disclaimer && <InfoPopover>{disclaimer}</InfoPopover>}\n </div>\n </div>\n ) : (\n <p className={styles.noDataText}>\n {fieldTitle &&\n t(\"marketIndicator.noChangeDisclaimer\", {\n fieldTitle: fieldTitle.toLocaleLowerCase(),\n })}\n </p>\n )}\n </>\n );\n};\n","export const changeContainer = `\n flex flex-wrap items-center\n`;\n\nexport const changeText = `\n text-ll-font-size-caption-1 leading-4\n`;\n\nexport const indicatorIcon = `\n w-3 h-3 mr-1 data-[is-increase=true]:rotate-180\n`;\n\nexport const disclaimer = `\n flex gap-x-1 items-center\n`;\n\nexport const noDataText = `\n text-ll-font-size-caption-1 leading-4\n text-ll-placeholder\n`;\n","import React, { useContext } from \"react\";\n\nexport type DefaultContext = {\n buyerColor?: string;\n sellerColor?: string;\n decreaseColor?: string;\n neutralColor?: string;\n increaseColor?: string;\n};\n\nconst RootElementContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\nconst useRootElement = () => useContext(RootElementContext);\n\nexport { useRootElement, RootElementContext };\n","export const container = `relative flex aspect-[2] items-center justify-center overflow-hidden rounded-t-full w-[218px] h-[109px]`;\nexport const maskWrapper = `absolute inset-7 flex aspect-[2] items-center justify-center overflow-hidden rounded-t-full`;\nexport const mask = `absolute top-0 flex aspect-square w-full justify-center rounded-full bg-white`;\n\nexport const sellerGauge = `absolute aspect-square top-0 w-full rotate-[17deg] transition-transform duration-500`;\nexport const neutralGauge = `absolute aspect-square top-0 w-full rotate-[17deg] transition-transform duration-500 opacity-30`;\nexport const buyerGauge = `absolute aspect-square top-0 w-full rotate-[73deg] transition-transform duration-500`;\n","export const container = `\n flex\n flex-col\n items-center\n gap-2.5\n max-w-80\n`;\n\nexport const wrapper = `\n flex\n items-end\n gap-2.5\n`;\n\nexport const label = `\n text-stone-400\n text-sm\n w-11\n`;\n\nexport const gauge = `\n relative\n`;\n\nexport const needle = `\n absolute\n left-1/2\n w-5/6\n h-5/6\n -translate-x-1/2\n bottom-1\n`;\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\n\nimport { Gauge } from \"./Gauge\";\nimport { Needle } from \"./Needle\";\n\nimport * as styles from \"./styles\";\n\ntype BuyerSellerMarketProps = {\n buyerSellerPercentage: number;\n labels: {\n buyer: string;\n seller: string;\n neutral: string;\n };\n};\n\nexport const BuyerSellerMarket = ({\n buyerSellerPercentage,\n labels,\n}: BuyerSellerMarketProps) => {\n const { sellerColor, neutralColor, buyerColor } = useRootElement();\n\n const needleStyle = useMemo(\n () => ({\n transform: `translate(-50%, 0) rotate(${buyerSellerPercentage * 1.8 - 90}deg)`,\n transformOrigin: \"50% 100%\",\n }),\n [buyerSellerPercentage],\n );\n\n return (\n <div className={styles.container}>\n <span className={styles.label}>{labels.neutral}</span>\n <div className={styles.wrapper}>\n <span className={styles.label}>{labels.seller}</span>\n <div className={styles.gauge}>\n <Gauge\n sellerColor={sellerColor}\n neutralColor={neutralColor}\n buyerColor={buyerColor}\n />\n <div className={styles.needle} style={needleStyle}>\n <Needle />\n </div>\n </div>\n <span className={styles.label}>{labels.buyer}</span>\n </div>\n </div>\n );\n};\n","import React, { lazy, Suspense } from \"react\";\nimport type { GridGraphProps } from \"./index\";\n\nconst GridGraphComponent = lazy(() =>\n import(\"./index\").then((module) => ({ default: module.GridGraph })),\n);\n\nexport const GridGraph = (props: GridGraphProps) => (\n <Suspense fallback={<div style={{ height: \"400px\" }} />}>\n <GridGraphComponent {...props} />\n </Suspense>\n);\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const ActiveListings = ({\n yAxisTitle,\n isIncrease,\n}: {\n yAxisTitle: string;\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n const validIntervals = intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_at_period_end?.active_listings_count ??\n null,\n )\n .reverse();\n\n return validIntervals.filter((value) => value !== null);\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n const roundedMaxListingCount = useMemo(() => {\n const maxListingCount = Math.max(...series);\n const minListingCount = Math.min(...series);\n\n return (\n Math.ceil(\n (maxListingCount + 0.2 * (maxListingCount - minListingCount)) / 100,\n ) * 100\n );\n }, [series]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Active Listings\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"homes\"\n yaxis={{\n title: {\n text: yAxisTitle,\n },\n max: roundedMaxListingCount,\n }}\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianAskingPrice = ({ isIncrease }: { isIncrease: boolean }) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_at_period_end?.home_asking_prices\n ?.median_price ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median asking price\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"price\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianDaysOnMarket = ({\n yAxisTitle,\n isIncrease,\n}: {\n yAxisTitle: string;\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.market_speed\n ?.median_days_on_market ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n const roundedMedianDays = useMemo(() => {\n const filteredSeries = series.filter((value) => value !== undefined);\n const maxDays = Math.max(...filteredSeries);\n const minDays = Math.min(...filteredSeries);\n\n return {\n max: Math.ceil((maxDays + 0.2 * (maxDays - minDays)) / 10) * 10,\n min: Math.max(\n 0,\n Math.floor((minDays - 0.2 * (maxDays - minDays)) / 10) * 10,\n ),\n };\n }, [series]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median Days On Market\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"homes\"\n yaxis={{\n title: {\n text: yAxisTitle,\n },\n max: roundedMedianDays.max,\n min: roundedMedianDays.min,\n }}\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianSaleVsAskingPrice = ({\n isIncrease,\n}: {\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(([_, value]) => {\n const raw =\n value.market_activity?.stats_over_period?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent ?? null;\n return raw !== null ? (raw > 0 ? raw - 100 : 0) : null;\n })\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median Sale vs Asking Price\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"percentage\"\n chartType=\"bar\"\n showGrid={true}\n showYAxisAnnotation={true}\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianSalePrice = ({ isIncrease }: { isIncrease: boolean }) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.home_selling_prices\n .median_price ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median sales price\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"price\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianSalePriceSQFT = ({\n isIncrease,\n}: {\n isIncrease: boolean;\n}) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.home_selling_prices\n .median_price_per_square_foot ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Median sales price per square foot\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"price\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const HomesSold = ({ isIncrease }: { isIncrease: boolean }) => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { increaseColor, decreaseColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1) return [];\n\n return intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period?.sold_homes_count ?? null,\n )\n .reverse();\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div>\n <GridGraph\n series={[\n {\n name: \"Homes Sold\",\n data: series,\n },\n ]}\n categories={categories}\n type=\"homes\"\n markerColor={isIncrease ? increaseColor : decreaseColor}\n />\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useRootElement } from \"../context\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\nimport { GridGraph } from \"~/components/Graphs/GridGraph/lazy\";\n\nexport const HousingMarketConditions = () => {\n const { isLoading, marketActivity } = useNeighborhoodMarketTrends();\n const { sellerColor, neutralColor, buyerColor } = useRootElement();\n\n const intervals = useMemo(() => {\n if (isLoading || !marketActivity) {\n return [];\n }\n\n const filteredIntervals = Object.entries(\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals,\n ).filter(([key]) => key.match(/^\\d{4}-\\d{2}$/));\n\n return filteredIntervals;\n }, [marketActivity, isLoading]);\n\n const series = useMemo(() => {\n if (intervals.length < 1)\n return {\n numericValues: [],\n stringValues: [],\n };\n\n const rawNumericValues = intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period\n ?.market_conditions_indicator_MOI_12month ?? null,\n )\n .reverse();\n\n return {\n // Per product, capping sellers market values to 100\n // This is for the presentation of the graph\n numericValues: rawNumericValues.map((value) =>\n value !== null && value > 100 ? 100 : value,\n ),\n\n stringValues: intervals\n .map(\n ([_, value]) =>\n value.market_activity?.stats_over_period\n ?.market_conditions_assessment ?? 0,\n )\n .reverse(),\n };\n }, [intervals]);\n\n const categories = useMemo(() => {\n if (!intervals) return [];\n\n return intervals.map(([key, _]) => key).reverse();\n }, [intervals]);\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <GridGraph\n series={[\n {\n name: \"Housing Market Conditions\",\n data: series.numericValues,\n },\n ]}\n categories={categories}\n type=\"homes\"\n chartType=\"bar\"\n showGrid={false}\n yaxis={{\n min: 0,\n labels: {\n show: false,\n },\n }}\n height=\"150%\"\n colorAssignmentRule={({ dataPointIndex }) => {\n const marketConditionsIndicatorStrings = series.stringValues;\n\n if (\n marketConditionsIndicatorStrings[dataPointIndex] ===\n \"sellers_market\"\n ) {\n return sellerColor as string;\n }\n\n if (\n marketConditionsIndicatorStrings[dataPointIndex] ===\n \"neutral_market\"\n ) {\n return neutralColor as string;\n }\n\n // buyers_market\n return buyerColor as string;\n }}\n />\n </div>\n );\n};\n","export const container = `-mr-2`;\n","import React from \"react\";\n\nimport { RootElementContext, DefaultContext } from \"./context\";\n\nimport * as styles from \"./styles\";\nimport { defaultColors } from \"~/sdks/NeighborhoodMarketTrends/defaultState\";\n\nexport type RootProps = {\n children?: React.ReactNode;\n className?: string;\n colors?: {\n buyerColor?: DefaultContext[\"buyerColor\"];\n sellerColor?: DefaultContext[\"sellerColor\"];\n decreaseColor?: DefaultContext[\"decreaseColor\"];\n neutralColor?: DefaultContext[\"neutralColor\"];\n increaseColor?: DefaultContext[\"increaseColor\"];\n };\n};\n\nexport const Root = ({ className, children, colors = {} }: RootProps) => {\n const {\n buyerColor = defaultColors.buyerColor,\n sellerColor = defaultColors.sellerColor,\n decreaseColor = defaultColors.decreaseColor,\n neutralColor = defaultColors.neutralColor,\n increaseColor = defaultColors.increaseColor,\n } = colors;\n\n return (\n <RootElementContext.Provider\n value={{\n buyerColor,\n sellerColor,\n decreaseColor,\n neutralColor,\n increaseColor,\n }}\n >\n <div className={`${styles.wrapper} ${className || \"\"}`}>{children}</div>\n </RootElementContext.Provider>\n );\n};\n\n// Export children\nexport { BuyerSellerMarket } from \"./BuyerSellerMarket\";\nexport { ActiveListings } from \"./ActiveListings\";\nexport { MedianAskingPrice } from \"./MedianAskingPrice\";\nexport { MedianDaysOnMarket } from \"./MedianDaysOnMarket\";\nexport { MedianSaleVsAskingPrice } from \"./MedianSaleVsAskingPrice\";\nexport { MedianSalePrice } from \"./MedianSalePrice\";\nexport { MedianSalePriceSQFT } from \"./MedianSalePriceSQFT\";\nexport { HomesSold } from \"./HomesSold\";\nexport { HousingMarketConditions } from \"./HousingMarketConditions\";\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const ActiveListings = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const activeListingsCount = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_at_period_end?.active_listings_count,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_at_period_end?.active_listings_count,\n };\n }, [marketActivity]);\n\n const monthlyChange = useMemo(() => {\n if (!activeListingsCount || activeListingsCount.previous === 0) {\n return 0;\n }\n\n return (\n (activeListingsCount.current - activeListingsCount.previous) /\n activeListingsCount.previous\n );\n }, [activeListingsCount]);\n\n if (!activeListingsCount) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>{t(\"graphs.activeListings.title\")}</h3>\n <h4 className={styles.amount}>{activeListingsCount.current}</h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.activeListings.title\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.ActiveListings\n yAxisTitle={t(\"graphs.activeListings.yAxisTitle\")}\n isIncrease={monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as commonStyles from \"../styles\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MarketType = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const buyerSellerPercentage = useMemo(() => {\n const indicator =\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n .stats_over_period?.market_conditions_indicator_MOI_12month;\n\n if (typeof indicator !== \"number\") {\n return null;\n }\n\n if (indicator >= 9) {\n return 100;\n }\n\n return (indicator / 9) * 100;\n }, [\n marketActivity?.market_activity_by_property_type?.all_residential_properties\n .intervals[\"30d\"]?.market_activity.stats_over_period\n ?.market_conditions_indicator_MOI_12month,\n ]);\n\n if (!buyerSellerPercentage) {\n return null;\n }\n\n return (\n <div className={commonStyles.graphOnlyContainer}>\n <h3 className={commonStyles.title}>{t(\"graphs.marketType.title\")}</h3>\n <h4 className={commonStyles.subtitle}>\n {t(\"graphs.marketType.disclaimer\")}\n </h4>\n <div className={styles.content}>\n <Graphs.Root colors={appearance?.colors} className={styles.graph}>\n <Graphs.BuyerSellerMarket\n buyerSellerPercentage={buyerSellerPercentage as number}\n labels={{\n buyer: t(\"graphs.marketType.marketTypes.buyer\"),\n seller: t(\"graphs.marketType.marketTypes.seller\"),\n neutral: t(\"graphs.marketType.marketTypes.neutral\"),\n }}\n />\n </Graphs.Root>\n </div>\n </div>\n );\n};\n","export const content = `\n w-full\n flex\n justify-center\n mt-2\n`;\n\nexport const graph = `items-center !p-0 !m-0`;\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { primitiveUtils } from \"~/utils\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianAskingPrice = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianAskingPrices = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_at_period_end?.home_asking_prices?.median_price,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_at_period_end?.home_asking_prices?.median_price,\n };\n }, [marketActivity]);\n\n const monthlyChange = useMemo(() => {\n if (\n !medianAskingPrices ||\n !medianAskingPrices.current ||\n !medianAskingPrices.previous\n ) {\n return null;\n }\n\n return (\n (medianAskingPrices.current - medianAskingPrices.previous) /\n medianAskingPrices.previous\n );\n }, [medianAskingPrices]);\n\n if (!medianAskingPrices) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianAskingPrice.title\")}\n <InfoPopover change={monthlyChange}>\n {t(\"graphs.medianAskingPrice.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianAskingPrices.current &&\n primitiveUtils.number.formatCurrency(\n medianAskingPrices.current,\n )}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.medianAskingPrice.title\")}\n disclaimer={t(\"graphs.medianAskingPrice.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianAskingPrice\n isIncrease={!monthlyChange || monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianDaysOnMarket = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianDaysOnMarket = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_over_period?.market_speed?.median_days_on_market,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_over_period?.market_speed?.median_days_on_market,\n };\n }, [marketActivity]);\n\n const monthlyChange = useMemo(() => {\n if (\n !medianDaysOnMarket ||\n !medianDaysOnMarket.current ||\n !medianDaysOnMarket.previous\n ) {\n return null;\n }\n\n return (\n (medianDaysOnMarket.current - medianDaysOnMarket.previous) /\n medianDaysOnMarket.previous\n );\n }, [medianDaysOnMarket]);\n\n if (!medianDaysOnMarket) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianDaysOnMarket.title\")}\n <InfoPopover change={monthlyChange}>\n {t(\"graphs.medianDaysOnMarket.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>{medianDaysOnMarket.current}</h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.medianDaysOnMarket.title\")}\n disclaimer={t(\"graphs.medianDaysOnMarket.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianDaysOnMarket\n yAxisTitle={t(\"graphs.medianDaysOnMarket.yAxisTitle\")}\n isIncrease={!monthlyChange || monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { primitiveUtils } from \"~/utils\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianSalePrice = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianSalesPrice = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices?.median_price,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"13-24m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices?.median_price,\n };\n }, [marketActivity]);\n\n const yearlyChange = useMemo(() => {\n if (\n !medianSalesPrice ||\n !medianSalesPrice.current ||\n !medianSalesPrice.previous\n ) {\n return null;\n }\n\n return (\n (medianSalesPrice.current - medianSalesPrice.previous) /\n medianSalesPrice.previous\n );\n }, [medianSalesPrice]);\n\n if (!medianSalesPrice) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianSalePrice.title\")}\n <InfoPopover change={yearlyChange}>\n {t(\"graphs.medianSalePrice.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianSalesPrice.current &&\n primitiveUtils.number.formatCurrency(medianSalesPrice.current)}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={yearlyChange}\n fieldTitle={t(\"graphs.medianSalePrice.title\")}\n disclaimer={t(\"graphs.medianSalePrice.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianSalePrice\n isIncrease={!yearlyChange || yearlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianSaleVsAskingPrice = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianSaleVsAskingPrice = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n const current =\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"30d\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent;\n\n const getPercentChangeText = () => {\n if (!current) return null;\n const percentDiff = Math.abs(Math.round((current - 100) * 10) / 10);\n if (percentDiff === 0) {\n return t(\"valueComparison.equal\");\n }\n return `${percentDiff}% ${current > 100 ? t(\"valueComparison.higher\") : t(\"valueComparison.lower\")}`;\n };\n\n return {\n current,\n currentInPercentChange: getPercentChangeText(),\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"31-60d\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent,\n };\n }, [marketActivity, t]);\n\n const monthlyChange = useMemo(() => {\n if (\n !medianSaleVsAskingPrice ||\n !medianSaleVsAskingPrice.current ||\n !medianSaleVsAskingPrice.previous\n ) {\n return null;\n }\n\n return (\n (medianSaleVsAskingPrice.current - medianSaleVsAskingPrice.previous) /\n medianSaleVsAskingPrice.previous\n );\n }, [medianSaleVsAskingPrice]);\n\n if (!medianSaleVsAskingPrice) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianSaleVsAskingPrice.title\")}\n <InfoPopover change={monthlyChange}>\n {t(\"graphs.medianSaleVsAskingPrice.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianSaleVsAskingPrice.currentInPercentChange}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={monthlyChange}\n fieldTitle={t(\"graphs.medianSaleVsAskingPrice.title\")}\n disclaimer={t(\"graphs.medianSaleVsAskingPrice.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianSaleVsAskingPrice\n isIncrease={!monthlyChange || monthlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"../styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const MedianConstructionYear = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity } = useNeighborhoodMarketTrends();\n\n const medianConstructionYear = useMemo(\n () =>\n marketActivity?.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.median_construction_year_sold_homes,\n [marketActivity],\n );\n\n if (!medianConstructionYear) {\n return null;\n }\n\n return (\n <div className={styles.smallContainer}>\n <h3 className={styles.title}>\n {t(\"graphs.medianConstructionYear.title\")}\n <span className={styles.titleBold}>{medianConstructionYear}</span>.\n </h3>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { primitiveUtils } from \"~/utils\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const MedianSalePriceSQFT = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const medianSalesPriceSQFT = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_price_per_square_foot,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"13-24m\"]?.market_activity\n ?.stats_over_period?.home_selling_prices\n ?.median_price_per_square_foot,\n };\n }, [marketActivity]);\n\n const yearlyChange = useMemo(() => {\n if (\n !medianSalesPriceSQFT ||\n !medianSalesPriceSQFT.previous ||\n !medianSalesPriceSQFT.current\n ) {\n return null;\n }\n\n return (\n (medianSalesPriceSQFT.current - medianSalesPriceSQFT.previous) /\n medianSalesPriceSQFT.previous\n );\n }, [medianSalesPriceSQFT]);\n\n if (!medianSalesPriceSQFT) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.medianSalePricePerSqft.title\")}\n <InfoPopover change={yearlyChange}>\n {t(\"graphs.medianSalePricePerSqft.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>\n {medianSalesPriceSQFT.current &&\n primitiveUtils.number.formatCurrency(\n medianSalesPriceSQFT.current,\n )}\n </h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={yearlyChange}\n fieldTitle={t(\"graphs.medianSalePricePerSqft.title\")}\n disclaimer={t(\"graphs.medianSalePricePerSqft.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.MedianSalePriceSQFT\n isIncrease={!yearlyChange || yearlyChange >= 0}\n />\n </Graphs.Root>\n </div>\n );\n};\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as styles from \"../styles\";\nimport { ChangeIndicator } from \"~/sdks/NeighborhoodMarketTrends/components/ChangeIndicator\";\nimport { InfoPopover } from \"~/sdks/NeighborhoodMarketTrends/components/InfoPopover\";\n\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const HomesSold = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n const homesSold = useMemo(() => {\n if (!marketActivity) {\n return null;\n }\n\n return {\n current:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties.intervals[\"12m\"]?.market_activity\n ?.stats_over_period?.sold_homes_count,\n previous:\n marketActivity.market_activity_by_property_type\n ?.all_residential_properties?.intervals[\"13-24m\"]?.market_activity\n ?.stats_over_period?.sold_homes_count,\n };\n }, [marketActivity]);\n\n const yearlyChange = useMemo(() => {\n if (!homesSold || !homesSold.current || !homesSold.previous) {\n return null;\n }\n\n return (homesSold.current - homesSold.previous) / homesSold.previous;\n }, [homesSold]);\n\n if (!homesSold) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <div className={styles.summary}>\n <div>\n <div className={styles.header}>\n <h3 className={styles.title}>\n {t(\"graphs.homesSold.title\")}\n <InfoPopover change={yearlyChange}>\n {t(\"graphs.homesSold.disclaimer\")}\n </InfoPopover>\n </h3>\n <h4 className={styles.amount}>{homesSold.current}</h4>\n </div>\n </div>\n <ChangeIndicator\n yearlyChange={yearlyChange}\n fieldTitle={t(\"graphs.homesSold.title\")}\n disclaimer={t(\"graphs.homesSold.changeDisclaimer\")}\n />\n </div>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.HomesSold isIncrease={!yearlyChange || yearlyChange >= 0} />\n </Graphs.Root>\n </div>\n );\n};\n","export const legend = `\n flex items-center justify-start mt-8 md:mt-2 ml-14\n`;\n\nexport const legendColor = `w-2 h-2 rounded-full mr-1.5`;\n\nexport const legendItem = `\n flex items-center mr-4\n`;\n\nexport const barChart = `\n flex-1\n`;\n\nexport const yAxis = `\n flex flex-col justify-between py-12 items-center w-10 -mr-4 md:-mr-2\n`;\n\nexport const subContainer = `\n flex\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport * as commonCardStyles from \"../styles\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\nimport { defaultColors } from \"~/sdks/NeighborhoodMarketTrends/defaultState\";\n\nimport * as Graphs from \"~/sdks/NeighborhoodMarketTrends/components/Graphs\";\n\nexport const HousingMarketConditions = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { marketActivity, appearance } = useNeighborhoodMarketTrends();\n\n if (!marketActivity) {\n return null;\n }\n\n return (\n <div className={commonCardStyles.graphOnlyContainer}>\n <h3 className={commonCardStyles.title}>\n {t(\"graphs.housingMarketConditions.title\")}\n </h3>\n <h4 className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.subtitle\")}\n </h4>\n <div className={styles.subContainer}>\n <div className={styles.yAxis}>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.buyer\")}\n </p>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.neutral\")}\n </p>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.seller\")}\n </p>\n </div>\n <div className={styles.barChart}>\n <Graphs.Root colors={appearance?.colors}>\n <Graphs.HousingMarketConditions />\n </Graphs.Root>\n </div>\n </div>\n <div className={styles.legend}>\n <div className={styles.legendItem}>\n <div\n className={styles.legendColor}\n style={{\n backgroundColor:\n appearance?.colors?.sellerColor || defaultColors.sellerColor,\n }}\n ></div>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.seller\")}\n </p>\n </div>\n <div className={styles.legendItem}>\n <div\n className={styles.legendColor}\n style={{\n backgroundColor:\n appearance?.colors?.neutralColor || defaultColors.neutralColor,\n }}\n ></div>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.neutral\")}\n </p>\n </div>\n <div className={styles.legendItem}>\n <div\n className={styles.legendColor}\n style={{\n backgroundColor:\n appearance?.colors?.buyerColor || defaultColors.buyerColor,\n }}\n ></div>\n <p className={commonCardStyles.subtitle}>\n {t(\"graphs.housingMarketConditions.marketTypes.buyer\")}\n </p>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Root = ({\n className,\n children,\n}: {\n className?: string;\n children: React.ReactNode;\n}) => <div className={`${styles.wrapper} ${className || \"\"}`}>{children}</div>;\n\n// Export children\nexport { ActiveListings } from \"./ActiveListings\";\nexport { MarketType } from \"./MarketType\";\nexport { MedianAskingPrice } from \"./MedianAskingPrice\";\nexport { MedianDaysOnMarket } from \"./MedianDaysOnMarket\";\nexport { MedianSalePrice } from \"./MedianSalePrice\";\nexport { MedianSaleVsAskingPrice } from \"./MedianSaleVsAskingPrice\";\nexport { MedianConstructionYear } from \"./MedianConstructionYear\";\nexport { MedianSalePriceSQFT } from \"./MedianSalePriceSQFT\";\nexport { HomesSold } from \"./HomesSold\";\nexport { HousingMarketConditions } from \"./HousingMarketConditions\";\n","export const loadingContent = `w-full h-full flex justify-center align-cennter`;\n\nexport const desktopContainer = `\n border\n rounded-md\n hidden\n md:block\n`;\n\nexport const content = `\n py-8\n px-4\n`;\n\nexport const tab = `\n border-r-2\n last:border-r-0\n`;\n\nexport const mobileContainer = `\n md:hidden\n`;\n\nexport const sectionContent = `\n flex\n flex-col\n gap-4\n`;\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport {\n type Icon,\n HandCoinsIcon,\n ChartBarIcon,\n HouseLineIcon,\n} from \"@phosphor-icons/react\";\nimport * as Accordion from \"../Accordion\";\nimport * as Tabs from \"../Tabs\";\nimport * as Cards from \"../Cards\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nimport { LoadingSpinner } from \"~/components/deprecated\";\nimport { useTracking } from \"~/tracking\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n TabIds,\n} from \"~/sdks/NeighborhoodMarketTrends/types\";\n\nimport { NoDataContentDeprecated } from \"~/components/NoDataContent\";\n\ntype Content = {\n id: TabIds;\n icon: Icon;\n label: string;\n content: React.ReactNode;\n}[];\n\ntype ContentProps = {\n omitTabs?: TabIds[];\n};\n\nexport const Content = ({ omitTabs }: ContentProps) => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const tracking = useTracking();\n const { isLoading, marketActivity, homesSoldPercentage } =\n useNeighborhoodMarketTrends();\n\n const intervals =\n marketActivity?.market_activity_by_property_type?.all_residential_properties\n .intervals;\n\n const content = useMemo<Content>(() => {\n const statsOverYear = intervals?.[\"12m\"]?.market_activity.stats_over_period;\n const statsAtYearEnd =\n intervals?.[\"12m\"]?.market_activity.stats_at_period_end;\n const statsOverMonth =\n intervals?.[\"30d\"]?.market_activity.stats_over_period;\n\n const monthlyIntervals = Object.entries(intervals ?? {}).filter(([key]) =>\n key.match(/^\\d{4}-\\d{2}$/),\n );\n const hasNoMarketConditionsData =\n monthlyIntervals.length === 0 ||\n monthlyIntervals.every(\n ([_, value]) =>\n (value.market_activity?.stats_over_period\n ?.market_conditions_indicator_MOI_12month ?? 0) === 0,\n ) ||\n monthlyIntervals.every(\n ([_, value]) =>\n !value.market_activity?.stats_over_period\n ?.market_conditions_assessment,\n );\n\n const tabsConfig = [\n {\n id: TabIds.marketConditions,\n icon: HandCoinsIcon,\n label: t(\"tabs.marketConditions.title\"),\n content: [\n ...(!hasNoMarketConditionsData &&\n typeof statsOverMonth?.market_conditions_indicator_MOI_12month !==\n \"undefined\"\n ? [\n <Cards.MarketType key=\"market-type\" />,\n <Cards.HousingMarketConditions key=\"market-conditions\" />,\n ]\n : []),\n ],\n },\n {\n id: TabIds.currentActivity,\n icon: HouseLineIcon,\n label: t(\"tabs.currentActivity.title\"),\n content: [\n ...(typeof statsAtYearEnd?.home_asking_prices.median_price !==\n \"undefined\"\n ? [<Cards.MedianAskingPrice key=\"median-asking-price\" />]\n : []),\n ...(typeof statsOverYear?.market_speed.median_days_on_market !==\n \"undefined\"\n ? [<Cards.MedianDaysOnMarket key=\"median-days-on-market\" />]\n : []),\n ...(typeof intervals?.[\"30d\"]?.market_activity?.stats_at_period_end\n ?.active_listings_count !== \"undefined\"\n ? [<Cards.ActiveListings key=\"active-listings\" />]\n : []),\n ...(typeof statsOverYear?.home_selling_prices\n ?.median_ratio_of_sold_to_asking_price_percent !== \"undefined\" &&\n homesSoldPercentage >= 0.75\n ? [\n <Cards.MedianSaleVsAskingPrice key=\"median-sales-vs-asking-price\" />,\n ]\n : []),\n ],\n },\n {\n id: TabIds.recentTrends,\n icon: ChartBarIcon,\n label: t(\"tabs.recentTrends.title\"),\n content: [\n ...(typeof statsOverYear?.median_construction_year_sold_homes !==\n \"undefined\"\n ? [<Cards.MedianConstructionYear key=\"median-construction-year\" />]\n : []),\n ...(typeof statsOverYear?.sold_homes_count !== \"undefined\" &&\n homesSoldPercentage >= 0.75\n ? [<Cards.MedianSalePrice key=\"median-sale-price\" />]\n : []),\n ...(typeof statsOverYear?.home_selling_prices\n .median_price_per_square_foot !== \"undefined\" &&\n homesSoldPercentage >= 0.75\n ? [<Cards.MedianSalePriceSQFT key=\"median-sale-price-sq-ft\" />]\n : []),\n ...(typeof statsOverYear?.sold_homes_count !== \"undefined\"\n ? [<Cards.HomesSold key=\"homes-sold\" />]\n : []),\n ],\n },\n ];\n\n return tabsConfig.filter(\n (tab) => !omitTabs?.includes(tab.id) && tab.content.length > 0,\n );\n }, [intervals]);\n\n const handleTabChange = (tabId: string) => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.TAB_CLICKED,\n eventAttributes: [\n {\n label: \"activeCategory\",\n data: tabId,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.CATEGORY_SELECTED,\n eventAttributes: {\n ll_selected_category: tabId,\n },\n });\n };\n\n if (isLoading) {\n return (\n <div className={styles.loadingContent}>\n <LoadingSpinner image />\n </div>\n );\n }\n\n if (\n !marketActivity ||\n !intervals ||\n (intervals && Object.keys(intervals).length === 0)\n ) {\n return <NoDataContentDeprecated text={t(\"noData\")} />;\n }\n\n return (\n <>\n <div className={styles.desktopContainer}>\n <Tabs.Root defaultValue={content[0]?.id} onChange={handleTabChange}>\n <Tabs.List>\n {content.map((item) => (\n <Tabs.Tab\n key={item.id}\n icon={item.icon}\n tabId={item.id}\n className={styles.tab}\n >\n {item.label}\n </Tabs.Tab>\n ))}\n </Tabs.List>\n <div className={styles.content}>\n <Cards.Root>\n {content.map((item) => (\n <Tabs.Content\n key={`tab-content-${item.id}`}\n tabId={item.id}\n className={styles.sectionContent}\n >\n {item.content}\n </Tabs.Content>\n ))}\n </Cards.Root>\n </div>\n </Tabs.Root>\n </div>\n <div className={styles.mobileContainer}>\n <Accordion.Root defaultValue={content[0]?.id}>\n {content.map((item) => (\n <Accordion.Item key={item.id} value={item.id}>\n <Accordion.Trigger icon={item.icon}>\n {item.label}\n </Accordion.Trigger>\n <Accordion.Content className={styles.sectionContent}>\n {item.content}\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Accordion.Root>\n </div>\n </>\n );\n};\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { AttributionDeprecated as Attribution } from \"~/components/Attribution\";\nimport { useNeighborhoodMarketTrends } from \"~/sdks/NeighborhoodMarketTrends/context\";\n\nexport const Footer = ({ hideAttribution }: { hideAttribution?: boolean }) => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { locale, geography } = useNeighborhoodMarketTrends();\n\n return (\n <div className={styles.container}>\n <p className={styles.dataDisclaimer}>\n {t(\"disclaimer.footer\", {\n context: (geography?.level || 10) >= 30 ? \"large\" : undefined,\n })}\n </p>\n {!hideAttribution && (\n <Attribution sdkName=\"neighborhood-market-trends\" locale={locale} />\n )}\n </div>\n );\n};\n","export const container = `mt-2 md:mt-0 md:flex items-center bg-ll-background [&>a]:justify-end`;\n\nexport const dataDisclaimer = `flex-1 text-sm p-3 text-ll-placeholder`;\n","import { ObjectSchema, string, boolean, number, object, mixed } from \"yup\";\nimport { Options, TabIds } from \"./types\";\n\nexport const schema: ObjectSchema<Options> = object({\n lat: number()\n .min(-90, \"Must be a valid latitude.\")\n .max(90, \"Must be a valid latitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n lng: number()\n .min(-180, \"Must be a valid longitude.\")\n .max(180, \"Must be a valid longitude.\")\n .when(\"geographyId\", {\n is: (geographyId?: string) => typeof geographyId === \"string\",\n then: (fieldSchema) => fieldSchema.optional(),\n otherwise: (fieldSchema) => fieldSchema.required(),\n }),\n geographyId: string().optional(),\n title: mixed<string | boolean>().optional(),\n hideAttribution: boolean().optional(),\n omitTabs: mixed<TabIds[]>().optional(),\n appearance: object({\n colors: object({\n buyerColor: string().optional(),\n sellerColor: string().optional(),\n decreaseColor: string().optional(),\n neutralColor: string().optional(),\n increaseColor: string().optional(),\n }).optional(),\n }).optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport \"~/assets/styles/old-tailwind.css\";\nimport { useTranslation } from \"react-i18next\";\nimport { NeighborhoodMarketTrendsProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { Footer } from \"./components/Footer\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodMarketTrendsProps } from \"./types\";\nimport * as styles from \"./styles\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodMarketTrends = () => {\n const { t } = useTranslation(\"neighborhoodMarketTrends\");\n const { sdkState } = useStateManagerContext<NeighborhoodMarketTrendsProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Market Trends\"\n schema={schema}\n options={sdkState.options!}\n >\n <LocalLogicProvider\n environment={sdkState.globalOptions?.environment?.api}\n apiKey={sdkState.apiKey}\n appearance={sdkState.globalOptions?.appearance}\n locale={sdkState.globalOptions?.locale}\n product={ProductNames.NEIGHBORHOOD_MARKET_TRENDS}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_MARKET_TRENDS,\n productVersion: FULL_APP_VERSION,\n }}\n attributes={{\n location,\n host: sdkState.location,\n host_url: document.referrer,\n locale,\n isMobile,\n }}\n flags={{\n isDebugMode:\n import.meta.env.VITE_TRACKING_PIPELINE_DEBUG === \"true\",\n }}\n >\n <NeighborhoodMarketTrendsProvider>\n <TitleHeader\n title={\n typeof sdkState.options?.title === \"string\" ||\n sdkState.options?.title === false\n ? sdkState.options.title\n : t(\"title\")\n }\n />\n <p className={styles.disclaimer}>{t(\"disclaimer.header\")}</p>\n <Content omitTabs={sdkState.options?.omitTabs} />\n <Footer hideAttribution={sdkState.options?.hideAttribution} />\n </NeighborhoodMarketTrendsProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodMarketTrends;\n","export const disclaimer = `\n mb-6\n text-xs\n text-neutral-800\n`;\n"],"file":"NeighborhoodMarketTrends-legacy-DSHDUUH_.js"}
|