@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,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-C_ttsnZz.js";import{l as i}from"./google-maps-vendor-DvfEEdRU.js";import{a as t,d as o,f as a,g as n,h as r,i as s,m as l,n as d,o as h,p as g,r as p,s as c,t as m,u}from"./sdks-CIuvHxGG.js";import{q as b,r as v,t as f}from"./index-Bi8h_BNl.js";import{n as x,r as y}from"./index.es-BkZlVTZH.js";import{t as I}from"./useGeographies-CtCPN011.js";import{t as _}from"./useResponsiveBreakpoints-Dq6mGzIW.js";import{t as j}from"./Attribution-DnmiY-id.js";/* empty css */import{t as N}from"./ResizeWrapper-C7vwckhm.js";import{t as A}from"./ValidateOptions-DsfMKmBQ.js";import{t as C}from"./useIsMobile-DqKgF2mC.js";import{t as w}from"./TitleHeader-CepE-7Y-.js";import{n as D,t as O}from"./ScoreCardList-PWiDx6Ra.js";import{t as E}from"./NoDataContent-CFLl-Rd-.js";import{t as L}from"./neighborhood-fallback-CizB5oi9.js";var M=e(i(),1);var k={all:()=>["similarNeighborhoods"],list:e=>[...k.all(),e]};var T=e=>{const i=_(),[t,o]=(0,M.useState)(4),{isLoading:a,isFetched:n,data:l}=function({geogID:e,externalId:i,limit:t}){const{client:o}=s(),a={geogId:e,externalId:i,limit:t};return r({queryKey:k.list(a),queryFn:async()=>await o.getSimilarNeighborhoods(a),enabled:!!e})}({...e,limit:8}),d=(0,M.useMemo)(()=>{let e=[];return l&&l.most_similar?(e=l.most_similar.length<t||!i?.lg?[...l.most_similar]:l.most_similar.slice(0,t),e.map(e=>function(e,i){if(null==e||null==i.affordability_index)return i;let t="";return t=Math.abs(1-e/i.affordability_index)<.05?"neutral":e>i.affordability_index?"negative":"positive",{...i,affordabilityComparison:t}}(l?.affordability_index||void 0,e))):e},[l,t,i]),h=(l?.most_similar||[]).length>4&&t<8,g=d.some(e=>void 0!==e?.affordabilityComparison);return{isLoading:a,isFetched:n,similarNeighborhoods:d,hasAffordabilityIndex:g,neighborhoodName:l?.name,limit:t,minimumLimit:4,hasMore:h,viewMore:()=>{8!==t&&o(t+4)},viewLess:()=>{t<8||o(t-4)}}},K=function(e){return e.SDK_VIEWED="neighborhood-match-Viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood-match-Card-Clicked",e.PAGINATION_CLICKED="neighborhood-match-Pagination-Clicked",e}({}),H=function(e){return e.SDK_VIEWED="sdk_viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood_card_clicked",e.PAGINATION_CLICKED="pagination_clicked",e}({}),R=b(),G=M.createContext({}),S=()=>(0,M.useContext)(G),P=({children:e})=>{const{sdkState:i}=f(),t=i.globalOptions?.locale||"en",o=c();v(()=>{o.postEvent({eventType:K.SDK_VIEWED}),o.trackAnalyticsEvent({eventName:H.SDK_VIEWED})});const{isLoading:a,data:n}=I({location:{lat:void 0===i.options?.geographyId?i.options?.lat:void 0,lng:void 0===i.options?.geographyId?i.options?.lng:void 0},geogID:i.options?.geographyId||void 0,externalId:i?.globalOptions?.externalId}),{geographyId:r,geography:s}=(0,M.useMemo)(()=>{const e=Object.entries(n||{});return{geographyId:e[0]?.[0],geography:e[0]?.[1]}},[a,n]),{isLoading:l,isFetched:d,similarNeighborhoods:h,hasAffordabilityIndex:g,neighborhoodName:p,limit:m,minimumLimit:u,hasMore:b,viewMore:x,viewLess:y}=T({geogID:r,externalId:i.globalOptions?.externalId}),_=(0,M.useMemo)(()=>a||l,[a,l]),j=(0,M.useMemo)(()=>({title:i.options?.title,limit:m,minimumLimit:u,hasMore:b,viewMore:x,viewLess:y,isLoading:_,isFetched:d,neighborhoodName:p,similarNeighborhoods:h,hasAffordabilityIndex:g,hideAffordabilityTags:i.options?.hideAffordabilityTags,hideAttribution:i.options?.hideAttribution,hideThumbnails:i.options?.hideThumbnails,locale:t,level:s?.level||10}),[i.options?.title,i.options?.hideAttribution,m,b,_,d,h,g,p,t,s]);return(0,R.jsx)(G.Provider,{value:j,children:e})},V=({isLoading:e=!1,neighborhoodName:i})=>{const{t:t}=n("neighborhoodMatch");return(0,R.jsx)("p",{className:"\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n","data-is-loading":e,children:t(i?"descriptionWithNeighborhood":"description",{neighborhoodName:i,interpolation:{escapeValue:!1}})})},$=()=>{const{t:e}=n("neighborhoodMatch"),i=c(),{limit:t,minimumLimit:o,hasMore:a,viewLess:r,viewMore:s}=S(),l=_();return!l?.lg||!a&&t===o?null:(0,R.jsx)("div",{className:"w-full flex align-center justify-center",children:(0,R.jsxs)(x,{variant:"secondary",onClick:()=>{a&&(i.postEvent({eventType:K.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_more"}]}),i.trackAnalyticsEvent({eventName:H.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_more"}}),s()),!a&&t>o&&(i.postEvent({eventType:K.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_less"}]}),i.trackAnalyticsEvent({eventName:H.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_less"}}),r())},children:[a&&e("pagination.next"),!a&&t>o&&e("pagination.previous")]})})},B=({url:e,imageSrc:i,expanded:t,onClick:o,children:a,...n})=>{const{hideThumbnails:r,hideAffordabilityTags:s}=S(),l=(0,M.useMemo)(()=>r?{}:{backgroundImage:`url(${i||"/sdks-app/v1/assets/neighborhood-fallback-DTJDTD7d.jpg"})`},[r]),d=(0,M.useMemo)(()=>r?t?"expanded":"hidden":"normal",[r,t]);return(0,R.jsxs)("a",{onClick:e=>{e.preventDefault();const{href:i}=e.currentTarget;i&&void 0!==e.currentTarget.href&&0!==i.length&&(void 0!==o&&o(),null!==window.top&&(window.top.location.href=e.currentTarget.href))},href:e||void 0,className:'\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type="negative"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type="neutral"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type="positive"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n',"data-has-url":!!e,"data-height-style":d,...n,children:[(!r||!s)&&(0,R.jsx)("div",{className:'\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style="normal"]:min-h-36\n group-data-[height-style="expanded"]:min-h-7\n group-data-[height-style="expanded"]:bg-transparent\n group-data-[height-style="hidden"]:min-h-0\n',style:l}),a]})},F=({children:e})=>(0,R.jsx)("h3",{className:"w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5",children:e}),W=({isLoading:e=!1,children:i})=>(0,R.jsx)("div",{className:"group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8","data-is-loading":e,children:i}),q="px-2.5 pt-4 pb-6 min-h-[266px]";function z(){const{t:e}=n(["neighborhoodMatch","common"]),i=c(),{isFetched:t,isLoading:o,similarNeighborhoods:a,hasAffordabilityIndex:r,hideAffordabilityTags:s}=S();return t&&0===a.length?(0,R.jsx)(E,{text:e("noData")}):o?(0,R.jsx)(W,{isLoading:!0,children:[0,1,2,3].map(e=>(0,R.jsx)(B,{children:(0,R.jsxs)("div",{className:q,children:[(0,R.jsx)(F,{children:" "}),(0,R.jsx)(O,{children:(0,R.jsx)("span",{})})]})},`similar-neighborhood-card-skeleton-${e}`))}):(0,R.jsx)(W,{isLoading:o,children:a.map((t,o)=>{return(0,R.jsxs)(B,{onClick:(a=o,()=>{i.postEvent({eventType:K.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:[{label:"position_in_set",data:a}]}),i.trackAnalyticsEvent({eventName:H.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:{ll_position_in_set:a}})}),url:t.redirect_url,imageSrc:t.thumbnail_url,expanded:r,children:[void 0!==t.affordabilityComparison&&(0,R.jsx)("div",{className:"absolute top-0 right-4",children:(0,R.jsx)(y,{isTopLeftRounded:!1,isTopRightRounded:!1,isVisible:!s&&!!t.affordabilityComparison,variant:t.affordabilityComparison,children:e(`tags.${t.affordabilityComparison}`)})}),(0,R.jsxs)("div",{className:q,children:[(0,R.jsx)(F,{"data-alt":t.name,children:t.name}),t.scores&&(0,R.jsx)(O,{children:Object.entries(t.scores).map(([i,o])=>o>=0&&(0,R.jsx)(D,{title:e(`common:scores.${i}.title`),scoreKey:i,value:o},`similar-neighborhood-${t.id}-scores-${i}`))})]})]},`similar-neighborhood-card-${t.id}`);var a})})}function J(){const{t:e}=n(["neighborhoodMatch","common"]),{title:i,locale:t,isLoading:o,level:a,neighborhoodName:r,hideAttribution:s}=S();return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(w,{title:"string"==typeof i||!1===i?i:e("title",{context:a})}),(0,R.jsx)(V,{neighborhoodName:r,isLoading:o}),(0,R.jsx)(z,{}),(0,R.jsx)($,{}),(0,R.jsx)(j,{sdkName:"neighborhood-match",locale:t,isHidden:s})]})}var U=u({lat:o().min(-90,"Must be a valid latitude.").max(90,"Must be a valid latitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),lng:o().min(-180,"Must be a valid longitude.").max(180,"Must be a valid longitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),geographyId:a().optional(),title:l().optional(),hideAffordabilityTags:g().optional(),hideAttribution:g().optional(),hideThumbnails:g().optional()}).noUnknown(!0);h(d.neighborhoodMatch.key);var Q=()=>{const{sdkState:e}=f(),i=C(),o=e.globalOptions?.locale||"en",a=(0,M.useMemo)(()=>e.options?.geographyId?{geographyId:e.options?.geographyId}:{lat:e.options?.lat,lng:e.options?.lng},[e.options?.lat,e.options?.lng,e.options?.geographyId]);return(0,R.jsx)(N,{children:(0,R.jsx)(A,{sdk:"Neighborhood Match",schema:U,options:e.options,children:(0,R.jsx)(p,{environment:e.globalOptions?.environment?.api,apiKey:e.apiKey,appearance:e.globalOptions?.appearance,locale:e.globalOptions?.locale,product:m.NEIGHBORHOOD_MATCH,children:(0,R.jsx)(t,{trackingPipelineSettings:{apiKey:e.apiKey||""},analyticsSettings:d.neighborhoodMatch,meta:{clientId:e.clientId,productName:m.NEIGHBORHOOD_MATCH,productVersion:"1.24.43"},attributes:{location:a,host:e.location,host_url:document.referrer,locale:o,isMobile:i},flags:{isDebugMode:!1},children:(0,R.jsx)(P,{children:(0,R.jsx)(J,{})})})})})})};export{Q as default};
|
|
2
|
-
//# sourceMappingURL=NeighborhoodMatch-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-C_ttsnZz.js";import{l as i}from"./google-maps-vendor-DvfEEdRU.js";import{a as t,d as o,f as a,g as n,h as r,i as s,m as l,n as d,o as h,p as g,r as p,s as c,t as m,u}from"./sdks-BTkz21XL.js";import{q as b,r as v,t as f}from"./index-PbHyodiU.js";import{n as x,r as y}from"./index.es-DuM-WVhV.js";import{t as I}from"./useGeographies-DejQbRC9.js";import{t as _}from"./useResponsiveBreakpoints-Dq6mGzIW.js";import{t as j}from"./Attribution-D012fWNs.js";/* empty css */import{t as N}from"./ResizeWrapper-DbYmMKOU.js";import{t as A}from"./ValidateOptions-BqL9iY9R.js";import{t as C}from"./useIsMobile-Co5SddxR.js";import{t as w}from"./TitleHeader-Be2YRN93.js";import{n as D,t as O}from"./ScoreCardList-B4NURGgK.js";import{t as E}from"./NoDataContent-CTxzT718.js";import{t as L}from"./neighborhood-fallback-CizB5oi9.js";var M=e(i(),1);var k={all:()=>["similarNeighborhoods"],list:e=>[...k.all(),e]};var T=e=>{const i=_(),[t,o]=(0,M.useState)(4),{isLoading:a,isFetched:n,data:l}=function({geogID:e,externalId:i,limit:t}){const{client:o}=s(),a={geogId:e,externalId:i,limit:t};return r({queryKey:k.list(a),queryFn:async()=>await o.getSimilarNeighborhoods(a),enabled:!!e})}({...e,limit:8}),d=(0,M.useMemo)(()=>{let e=[];return l&&l.most_similar?(e=l.most_similar.length<t||!i?.lg?[...l.most_similar]:l.most_similar.slice(0,t),e.map(e=>function(e,i){if(null==e||null==i.affordability_index)return i;let t="";return t=Math.abs(1-e/i.affordability_index)<.05?"neutral":e>i.affordability_index?"negative":"positive",{...i,affordabilityComparison:t}}(l?.affordability_index||void 0,e))):e},[l,t,i]),h=(l?.most_similar||[]).length>4&&t<8,g=d.some(e=>void 0!==e?.affordabilityComparison);return{isLoading:a,isFetched:n,similarNeighborhoods:d,hasAffordabilityIndex:g,neighborhoodName:l?.name,limit:t,minimumLimit:4,hasMore:h,viewMore:()=>{8!==t&&o(t+4)},viewLess:()=>{t<8||o(t-4)}}},K=function(e){return e.SDK_VIEWED="neighborhood-match-Viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood-match-Card-Clicked",e.PAGINATION_CLICKED="neighborhood-match-Pagination-Clicked",e}({}),H=function(e){return e.SDK_VIEWED="sdk_viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood_card_clicked",e.PAGINATION_CLICKED="pagination_clicked",e}({}),R=b(),G=M.createContext({}),S=()=>(0,M.useContext)(G),P=({children:e})=>{const{sdkState:i}=f(),t=i.globalOptions?.locale||"en",o=c();v(()=>{o.postEvent({eventType:K.SDK_VIEWED}),o.trackAnalyticsEvent({eventName:H.SDK_VIEWED})});const{isLoading:a,data:n}=I({location:{lat:void 0===i.options?.geographyId?i.options?.lat:void 0,lng:void 0===i.options?.geographyId?i.options?.lng:void 0},geogID:i.options?.geographyId||void 0,externalId:i?.globalOptions?.externalId}),{geographyId:r,geography:s}=(0,M.useMemo)(()=>{const e=Object.entries(n||{});return{geographyId:e[0]?.[0],geography:e[0]?.[1]}},[a,n]),{isLoading:l,isFetched:d,similarNeighborhoods:h,hasAffordabilityIndex:g,neighborhoodName:p,limit:m,minimumLimit:u,hasMore:b,viewMore:x,viewLess:y}=T({geogID:r,externalId:i.globalOptions?.externalId}),_=(0,M.useMemo)(()=>a||l,[a,l]),j=(0,M.useMemo)(()=>({title:i.options?.title,limit:m,minimumLimit:u,hasMore:b,viewMore:x,viewLess:y,isLoading:_,isFetched:d,neighborhoodName:p,similarNeighborhoods:h,hasAffordabilityIndex:g,hideAffordabilityTags:i.options?.hideAffordabilityTags,hideAttribution:i.options?.hideAttribution,hideThumbnails:i.options?.hideThumbnails,locale:t,level:s?.level||10}),[i.options?.title,i.options?.hideAttribution,m,b,_,d,h,g,p,t,s]);return(0,R.jsx)(G.Provider,{value:j,children:e})},V=({isLoading:e=!1,neighborhoodName:i})=>{const{t:t}=n("neighborhoodMatch");return(0,R.jsx)("p",{className:"\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n","data-is-loading":e,children:t(i?"descriptionWithNeighborhood":"description",{neighborhoodName:i,interpolation:{escapeValue:!1}})})},$=()=>{const{t:e}=n("neighborhoodMatch"),i=c(),{limit:t,minimumLimit:o,hasMore:a,viewLess:r,viewMore:s}=S(),l=_();return!l?.lg||!a&&t===o?null:(0,R.jsx)("div",{className:"w-full flex align-center justify-center",children:(0,R.jsxs)(x,{variant:"secondary",onClick:()=>{a&&(i.postEvent({eventType:K.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_more"}]}),i.trackAnalyticsEvent({eventName:H.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_more"}}),s()),!a&&t>o&&(i.postEvent({eventType:K.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_less"}]}),i.trackAnalyticsEvent({eventName:H.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_less"}}),r())},children:[a&&e("pagination.next"),!a&&t>o&&e("pagination.previous")]})})},B=({url:e,imageSrc:i,expanded:t,onClick:o,children:a,...n})=>{const{hideThumbnails:r,hideAffordabilityTags:s}=S(),l=(0,M.useMemo)(()=>r?{}:{backgroundImage:`url(${i||"/sdks-app/v1/assets/neighborhood-fallback-DTJDTD7d.jpg"})`},[r]),d=(0,M.useMemo)(()=>r?t?"expanded":"hidden":"normal",[r,t]);return(0,R.jsxs)("a",{onClick:e=>{e.preventDefault();const{href:i}=e.currentTarget;i&&void 0!==e.currentTarget.href&&0!==i.length&&(void 0!==o&&o(),null!==window.top&&(window.top.location.href=e.currentTarget.href))},href:e||void 0,className:'\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type="negative"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type="neutral"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type="positive"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n',"data-has-url":!!e,"data-height-style":d,...n,children:[(!r||!s)&&(0,R.jsx)("div",{className:'\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style="normal"]:min-h-36\n group-data-[height-style="expanded"]:min-h-7\n group-data-[height-style="expanded"]:bg-transparent\n group-data-[height-style="hidden"]:min-h-0\n',style:l}),a]})},F=({children:e})=>(0,R.jsx)("h3",{className:"w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5",children:e}),W=({isLoading:e=!1,children:i})=>(0,R.jsx)("div",{className:"group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8","data-is-loading":e,children:i}),q="px-2.5 pt-4 pb-6 min-h-[266px]";function z(){const{t:e}=n(["neighborhoodMatch","common"]),i=c(),{isFetched:t,isLoading:o,similarNeighborhoods:a,hasAffordabilityIndex:r,hideAffordabilityTags:s}=S();return t&&0===a.length?(0,R.jsx)(E,{text:e("noData")}):o?(0,R.jsx)(W,{isLoading:!0,children:[0,1,2,3].map(e=>(0,R.jsx)(B,{children:(0,R.jsxs)("div",{className:q,children:[(0,R.jsx)(F,{children:" "}),(0,R.jsx)(O,{children:(0,R.jsx)("span",{})})]})},`similar-neighborhood-card-skeleton-${e}`))}):(0,R.jsx)(W,{isLoading:o,children:a.map((t,o)=>{return(0,R.jsxs)(B,{onClick:(a=o,()=>{i.postEvent({eventType:K.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:[{label:"position_in_set",data:a}]}),i.trackAnalyticsEvent({eventName:H.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:{ll_position_in_set:a}})}),url:t.redirect_url,imageSrc:t.thumbnail_url,expanded:r,children:[void 0!==t.affordabilityComparison&&(0,R.jsx)("div",{className:"absolute top-0 right-4",children:(0,R.jsx)(y,{isTopLeftRounded:!1,isTopRightRounded:!1,isVisible:!s&&!!t.affordabilityComparison,variant:t.affordabilityComparison,children:e(`tags.${t.affordabilityComparison}`)})}),(0,R.jsxs)("div",{className:q,children:[(0,R.jsx)(F,{"data-alt":t.name,children:t.name}),t.scores&&(0,R.jsx)(O,{children:Object.entries(t.scores).map(([i,o])=>o>=0&&(0,R.jsx)(D,{title:e(`common:scores.${i}.title`),scoreKey:i,value:o},`similar-neighborhood-${t.id}-scores-${i}`))})]})]},`similar-neighborhood-card-${t.id}`);var a})})}function J(){const{t:e}=n(["neighborhoodMatch","common"]),{title:i,locale:t,isLoading:o,level:a,neighborhoodName:r,hideAttribution:s}=S();return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(w,{title:"string"==typeof i||!1===i?i:e("title",{context:a})}),(0,R.jsx)(V,{neighborhoodName:r,isLoading:o}),(0,R.jsx)(z,{}),(0,R.jsx)($,{}),(0,R.jsx)(j,{sdkName:"neighborhood-match",locale:t,isHidden:s})]})}var U=u({lat:o().min(-90,"Must be a valid latitude.").max(90,"Must be a valid latitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),lng:o().min(-180,"Must be a valid longitude.").max(180,"Must be a valid longitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),geographyId:a().optional(),title:l().optional(),hideAffordabilityTags:g().optional(),hideAttribution:g().optional(),hideThumbnails:g().optional()}).noUnknown(!0);h(d.neighborhoodMatch.key);var Q=()=>{const{sdkState:e}=f(),i=C(),o=e.globalOptions?.locale||"en",a=(0,M.useMemo)(()=>e.options?.geographyId?{geographyId:e.options?.geographyId}:{lat:e.options?.lat,lng:e.options?.lng},[e.options?.lat,e.options?.lng,e.options?.geographyId]);return(0,R.jsx)(N,{children:(0,R.jsx)(A,{sdk:"Neighborhood Match",schema:U,options:e.options,children:(0,R.jsx)(p,{environment:e.globalOptions?.environment?.api,apiKey:e.apiKey,appearance:e.globalOptions?.appearance,locale:e.globalOptions?.locale,product:m.NEIGHBORHOOD_MATCH,children:(0,R.jsx)(t,{trackingPipelineSettings:{apiKey:e.apiKey||""},analyticsSettings:d.neighborhoodMatch,meta:{clientId:e.clientId,productName:m.NEIGHBORHOOD_MATCH,productVersion:"1.24.44"},attributes:{location:a,host:e.location,host_url:document.referrer,locale:o,isMobile:i},flags:{isDebugMode:!1},children:(0,R.jsx)(P,{children:(0,R.jsx)(J,{})})})})})})};export{Q as default};
|
|
2
|
+
//# sourceMappingURL=NeighborhoodMatch-GqzEoreu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborhoodMatch-BLDNZBRX.js","names":[],"sources":["../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/addAffordabilityComparisonToNeighborhood/index.ts","../../src/features/similarNeighborhoods/keyFactory.ts","../../src/features/clientLibrary/useSimilarNeighborhoods.ts","../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/index.ts","../../src/sdks/NeighborhoodMatch/types.ts","../../src/sdks/NeighborhoodMatch/context.tsx","../../src/sdks/NeighborhoodMatch/components/Description/styles.ts","../../src/sdks/NeighborhoodMatch/components/Description/index.tsx","../../src/sdks/NeighborhoodMatch/components/PaginationButton/styles.ts","../../src/sdks/NeighborhoodMatch/components/PaginationButton/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/index.tsx","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/styles.ts","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/index.tsx","../../src/sdks/NeighborhoodMatch/components/Content/index.tsx","../../src/sdks/NeighborhoodMatch/schema.ts","../../src/sdks/NeighborhoodMatch/index.tsx"],"sourcesContent":["import type { Neighborhood } from \"@local-logic/client\";\nimport type {\n ComparedNeighborhood,\n AffordabilityComparison,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport function addAffordabilityComparisonToNeighborhood(\n baseAffordabilityIndex: number | undefined,\n comparingNeighborhood: Neighborhood,\n): ComparedNeighborhood {\n if (\n baseAffordabilityIndex == null ||\n comparingNeighborhood.affordability_index == null\n ) {\n return comparingNeighborhood;\n }\n\n let affordabilityComparison = \"\";\n\n if (\n Math.abs(\n 1 - baseAffordabilityIndex / comparingNeighborhood.affordability_index,\n ) < 0.05\n ) {\n affordabilityComparison = \"neutral\";\n } else if (\n baseAffordabilityIndex > comparingNeighborhood.affordability_index\n ) {\n affordabilityComparison = \"negative\";\n } else {\n affordabilityComparison = \"positive\";\n }\n\n return {\n ...comparingNeighborhood,\n affordabilityComparison: affordabilityComparison as AffordabilityComparison,\n };\n}\n","import { similarNeighborhoodsParameters } from \"./types\";\n\nexport const similarNeighborhoodsKeys = {\n all: () => [\"similarNeighborhoods\"] as const,\n list: (filters: Partial<similarNeighborhoodsParameters>) =>\n [...similarNeighborhoodsKeys.all(), filters] as const,\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useLocalLogic } from \"~/context/LocalLogicProvider\";\nimport { similarNeighborhoodsKeys } from \"~/features/similarNeighborhoods\";\n\nexport type SimilarNeighborhoodsParams = {\n lat?: number;\n lng?: number;\n geogID?: string;\n externalId?: string;\n limit?: number;\n};\n\nexport function useSimilarNeighborhoods({\n geogID,\n externalId,\n limit,\n}: SimilarNeighborhoodsParams) {\n const { client } = useLocalLogic();\n const params = {\n geogId: geogID,\n externalId,\n limit,\n };\n\n const fetchSimilarNeighborhoods = async () => {\n const response = await client.getSimilarNeighborhoods(params);\n\n return response;\n };\n\n return useQuery({\n queryKey: similarNeighborhoodsKeys.list(params),\n queryFn: fetchSimilarNeighborhoods,\n enabled: !!geogID,\n });\n}\n","import { useMemo, useState } from \"react\";\nimport { addAffordabilityComparisonToNeighborhood } from \"./addAffordabilityComparisonToNeighborhood\";\nimport type { ComparedNeighborhood } from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\nimport {\n useSimilarNeighborhoods as useClientLibrarySimilarNeighborhoods,\n type SimilarNeighborhoodsParams,\n} from \"~/features/clientLibrary/useSimilarNeighborhoods\";\n\nconst MIN_PER_ROW = 4;\nconst MAX_LIMIT = 8;\n\nexport const useSimilarNeighborhoods = (\n params: Omit<SimilarNeighborhoodsParams, \"limit\">,\n) => {\n const breakpoints = useResponsiveBreakpoints();\n const [limit, setLimit] = useState(MIN_PER_ROW);\n\n const {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n data,\n } = useClientLibrarySimilarNeighborhoods({ ...params, limit: MAX_LIMIT });\n\n const similarNeighborhoods = useMemo(() => {\n let neighborhoods: ComparedNeighborhood[] = [];\n\n if (!data || !data.most_similar) {\n return neighborhoods;\n }\n\n if (data.most_similar.length < limit || !breakpoints?.lg) {\n // Somehow we wouldn't have enough to return.\n // So just return what we have\n // We'll also return everything on mobile\n neighborhoods = [...data.most_similar];\n } else {\n neighborhoods = data.most_similar.slice(0, limit);\n }\n\n return neighborhoods.map((similarNeighborhood) =>\n addAffordabilityComparisonToNeighborhood(\n data?.affordability_index || undefined,\n similarNeighborhood,\n ),\n );\n }, [data, limit, breakpoints]);\n\n const hasMore =\n (data?.most_similar || []).length > MIN_PER_ROW && limit < MAX_LIMIT;\n\n const hasAffordabilityIndex = similarNeighborhoods.some(\n (neighborhood) =>\n typeof neighborhood?.affordabilityComparison !== \"undefined\",\n );\n\n const viewMore = () => {\n if (limit === MAX_LIMIT) return;\n setLimit(limit + MIN_PER_ROW);\n };\n\n const viewLess = () => {\n if (limit < MAX_LIMIT) return;\n setLimit(limit - MIN_PER_ROW);\n };\n\n return {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName: data?.name,\n limit,\n minimumLimit: MIN_PER_ROW,\n hasMore,\n viewMore,\n viewLess,\n };\n};\n","import type { Neighborhood } from \"@local-logic/client\";\nimport { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n};\n\nexport type NeighborhoodMatchProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport type AffordabilityComparison = \"negative\" | \"neutral\" | \"positive\";\nexport interface ComparedNeighborhood extends Neighborhood {\n affordabilityComparison?: AffordabilityComparison;\n}\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-match-Viewed\",\n NEIGHBORHOOD_CARD_CLICKED = \"neighborhood-match-Card-Clicked\",\n PAGINATION_CLICKED = \"neighborhood-match-Pagination-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 NEIGHBORHOOD_CARD_CLICKED = \"neighborhood_card_clicked\",\n PAGINATION_CLICKED = \"pagination_clicked\",\n}\n","import React, { useContext, useMemo } from \"react\";\n\nimport type { NeighborhoodMatchProps, ComparedNeighborhood } from \"./types\";\nimport { useSimilarNeighborhoods } from \"./hooks/useSimilarNeighborhoods\";\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\n\nimport { useTracking } from \"~/tracking\";\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\ninterface Location {\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n title: NeighborhoodMatchProps[\"options\"][\"title\"];\n // This is used to limit the results in the context.\n // We'll still query 8 (10 is the max) so that we don't query again\n // since there's no pagination\n limit: number;\n minimumLimit: number;\n hasMore: boolean;\n viewMore: () => void;\n viewLess: () => void;\n isLoading: boolean;\n isFetched: boolean;\n similarNeighborhoods: ComparedNeighborhood[];\n hasAffordabilityIndex: boolean;\n neighborhoodName?: string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n locale: \"en\" | \"fr\";\n level: number;\n};\n\nconst NeighborhoodMatchContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodMatch = () => useContext(NeighborhoodMatchContext);\n\nconst NeighborhoodMatchProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({ eventName: AnalyticsEvents.SDK_VIEWED });\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 {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n } = useSimilarNeighborhoods({\n geogID: geographyId,\n externalId: sdkState.globalOptions?.externalId,\n });\n\n const isLoading = useMemo(\n () => isGeographyLoading || isSimilarNeighborhoodsLoading,\n [isGeographyLoading, isSimilarNeighborhoodsLoading],\n );\n\n const contextValue = useMemo(\n () => ({\n title: sdkState.options?.title,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n isLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n neighborhoodName,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags: sdkState.options?.hideAffordabilityTags,\n hideAttribution: sdkState.options?.hideAttribution,\n hideThumbnails: sdkState.options?.hideThumbnails,\n locale,\n level: geography?.level || 10,\n }),\n [\n sdkState.options?.title,\n sdkState.options?.hideAttribution,\n limit,\n hasMore,\n isLoading,\n isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n locale,\n geography,\n ],\n );\n\n return (\n <NeighborhoodMatchContext.Provider value={contextValue}>\n {children}\n </NeighborhoodMatchContext.Provider>\n );\n};\n\nexport { useNeighborhoodMatch, NeighborhoodMatchProvider, type Location };\n","export const text = `\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\n\nexport const Description = ({\n isLoading = false,\n neighborhoodName,\n}: {\n isLoading?: boolean;\n neighborhoodName?: string;\n}) => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n\n return (\n <p className={styles.text} data-is-loading={isLoading}>\n {t(neighborhoodName ? \"descriptionWithNeighborhood\" : \"description\", {\n neighborhoodName,\n interpolation: { escapeValue: false },\n })}\n </p>\n );\n};\n","export const container = `w-full flex align-center justify-center`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Button } from \"@local-logic/design-system\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport const PaginationButton = () => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n const tracking = useTracking();\n const { limit, minimumLimit, hasMore, viewLess, viewMore } =\n useNeighborhoodMatch();\n const breakpoints = useResponsiveBreakpoints();\n\n const handleClick = () => {\n if (hasMore) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_more\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_more\",\n },\n });\n viewMore();\n }\n\n if (!hasMore && limit > minimumLimit) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_less\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_less\",\n },\n });\n\n viewLess();\n }\n };\n\n if (!breakpoints?.lg || (!hasMore && limit === minimumLimit)) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <Button variant=\"secondary\" onClick={handleClick}>\n {hasMore && t(\"pagination.next\")}\n {!hasMore && limit > minimumLimit && t(\"pagination.previous\")}\n </Button>\n </div>\n );\n};\n","export const container = `group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8`;\n","export const container = `\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type=\"negative\"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type=\"neutral\"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type=\"positive\"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n`;\n\nexport const imageCover = `\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style=\"normal\"]:min-h-36\n group-data-[height-style=\"expanded\"]:min-h-7\n group-data-[height-style=\"expanded\"]:bg-transparent\n group-data-[height-style=\"hidden\"]:min-h-0\n`;\n","import React, { useMemo } from \"react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport NeighborhoodFallbackImage from \"~/assets/images/neighborhood-fallback.jpg\";\n\ntype CardProps = {\n url?: string;\n imageSrc?: string;\n expanded?: boolean;\n // Can be used to trigger events\n onClick?: () => void;\n children: React.ReactNode;\n};\n\nexport const Card = ({\n url,\n imageSrc,\n expanded,\n onClick,\n children,\n ...rest\n}: CardProps) => {\n const { hideThumbnails, hideAffordabilityTags } = useNeighborhoodMatch();\n\n const style = useMemo(\n () =>\n hideThumbnails\n ? {}\n : {\n backgroundImage: `url(${imageSrc || NeighborhoodFallbackImage})`,\n },\n [hideThumbnails],\n );\n\n const heightStyle = useMemo(() => {\n if (!hideThumbnails) return \"normal\";\n if (expanded) return \"expanded\";\n\n return \"hidden\";\n }, [hideThumbnails, expanded]);\n\n const handleOnClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n\n const { href } = event.currentTarget;\n\n if (\n !href ||\n typeof event.currentTarget.href === \"undefined\" ||\n href.length === 0\n ) {\n return;\n }\n\n if (typeof onClick !== \"undefined\") {\n onClick();\n }\n\n if (window.top !== null) {\n window.top.location.href = event.currentTarget.href;\n }\n };\n\n return (\n <a\n onClick={handleOnClick}\n href={url || undefined}\n className={styles.container}\n data-has-url={!!url}\n data-height-style={heightStyle}\n {...rest}\n >\n {(!hideThumbnails || !hideAffordabilityTags) && (\n <div className={styles.imageCover} style={style} />\n )}\n\n {children}\n </a>\n );\n};\n","export const title = `w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5`;\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Title = ({ children }: { children: React.ReactNode }) => (\n <h3 className={styles.title}>{children}</h3>\n);\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Root = ({\n isLoading = false,\n children,\n}: {\n isLoading?: boolean;\n children: React.ReactNode;\n}) => (\n <div className={styles.container} data-is-loading={isLoading}>\n {children}\n </div>\n);\n\n// Export children\nexport { Card } from \"./Card\";\nexport { Title } from \"./Title\";\n","// Setting min height of 266 makes all cards have the same height\n// in case there's less scores in one card\nexport const cardDataContent = `px-2.5 pt-4 pb-6 min-h-[266px]`;\nexport const tag = `absolute top-0 right-4`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport type { Neighborhood } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport * as CardList from \"../CardList\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\n\nimport * as ScoreCardList from \"~/components/ScoreCardList\";\n\nexport function Neighborhoods() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const tracking = useTracking();\n const {\n isFetched,\n isLoading,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags,\n } = useNeighborhoodMatch();\n\n const handleCardClickEvent = (position: number) => () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: [\n {\n label: \"position_in_set\",\n data: position,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: {\n ll_position_in_set: position,\n },\n });\n };\n\n if (isFetched && similarNeighborhoods.length === 0) {\n return <NoDataContent text={t(\"noData\")} />;\n }\n\n if (isLoading) {\n return (\n <CardList.Root isLoading>\n {[0, 1, 2, 3].map((index) => (\n <CardList.Card key={`similar-neighborhood-card-skeleton-${index}`}>\n <div className={styles.cardDataContent}>\n <CardList.Title> </CardList.Title>\n\n <ScoreCardList.Root>\n <span></span>\n </ScoreCardList.Root>\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n }\n\n return (\n <CardList.Root isLoading={isLoading}>\n {similarNeighborhoods.map((neighborhood, index) => (\n <CardList.Card\n key={`similar-neighborhood-card-${neighborhood.id}`}\n onClick={handleCardClickEvent(index)}\n url={neighborhood.redirect_url}\n imageSrc={neighborhood.thumbnail_url}\n expanded={hasAffordabilityIndex}\n >\n {typeof neighborhood.affordabilityComparison !== \"undefined\" && (\n <div className={styles.tag}>\n <Tag\n isTopLeftRounded={false}\n isTopRightRounded={false}\n isVisible={\n !hideAffordabilityTags &&\n !!neighborhood.affordabilityComparison\n }\n variant={neighborhood.affordabilityComparison}\n >\n {t(`tags.${neighborhood.affordabilityComparison}`)}\n </Tag>\n </div>\n )}\n\n <div className={styles.cardDataContent}>\n <CardList.Title data-alt={neighborhood.name}>\n {neighborhood.name}\n </CardList.Title>\n\n {neighborhood.scores && (\n <ScoreCardList.Root>\n {Object.entries(neighborhood.scores).map(\n ([key, value]) =>\n value >= 0 && (\n <ScoreCardList.Card\n key={`similar-neighborhood-${neighborhood.id}-scores-${key}`}\n title={t(\n `common:scores.${key as keyof Neighborhood[\"scores\"]}.title`,\n )}\n scoreKey={key as keyof Neighborhood[\"scores\"]}\n value={value}\n />\n ),\n )}\n </ScoreCardList.Root>\n )}\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n}\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Description } from \"../Description\";\nimport { PaginationButton } from \"../PaginationButton\";\nimport { Neighborhoods } from \"../Neighborhoods\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport { Attribution } from \"~/components/Attribution\";\n\nexport function Content() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const { title, locale, isLoading, level, neighborhoodName, hideAttribution } =\n useNeighborhoodMatch();\n\n return (\n <>\n <TitleHeader\n title={\n typeof title === \"string\" || title === false\n ? title\n : t(\"title\", {\n context: level,\n })\n }\n />\n\n <Description neighborhoodName={neighborhoodName} isLoading={isLoading} />\n\n <Neighborhoods />\n <PaginationButton />\n\n <Attribution\n sdkName=\"neighborhood-match\"\n locale={locale}\n isHidden={hideAttribution}\n />\n </>\n );\n}\n","import { ObjectSchema, string, boolean, number, object, mixed } from \"yup\";\nimport { Options } 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 hideAffordabilityTags: boolean().optional(),\n hideAttribution: boolean().optional(),\n hideThumbnails: boolean().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport { NeighborhoodMatchProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodMatchProps } from \"./types\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\n\n// TODO Move this import to sdks/sdks-app/src/App.tsx once all SDKs are migrated\nimport \"~/assets/styles/globals.css\";\n\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { ProductNames } from \"~/types\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodMatch.key);\n\nconst NeighborhoodMatch = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const isMobile = useIsMobile();\n\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 Match\"\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_MATCH}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodMatch}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_MATCH,\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 <NeighborhoodMatchProvider>\n <Content />\n </NeighborhoodMatchProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodMatch;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NeighborhoodMatch-GqzEoreu.js","names":[],"sources":["../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/addAffordabilityComparisonToNeighborhood/index.ts","../../src/features/similarNeighborhoods/keyFactory.ts","../../src/features/clientLibrary/useSimilarNeighborhoods.ts","../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/index.ts","../../src/sdks/NeighborhoodMatch/types.ts","../../src/sdks/NeighborhoodMatch/context.tsx","../../src/sdks/NeighborhoodMatch/components/Description/styles.ts","../../src/sdks/NeighborhoodMatch/components/Description/index.tsx","../../src/sdks/NeighborhoodMatch/components/PaginationButton/styles.ts","../../src/sdks/NeighborhoodMatch/components/PaginationButton/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/index.tsx","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/styles.ts","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/index.tsx","../../src/sdks/NeighborhoodMatch/components/Content/index.tsx","../../src/sdks/NeighborhoodMatch/schema.ts","../../src/sdks/NeighborhoodMatch/index.tsx"],"sourcesContent":["import type { Neighborhood } from \"@local-logic/client\";\nimport type {\n ComparedNeighborhood,\n AffordabilityComparison,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport function addAffordabilityComparisonToNeighborhood(\n baseAffordabilityIndex: number | undefined,\n comparingNeighborhood: Neighborhood,\n): ComparedNeighborhood {\n if (\n baseAffordabilityIndex == null ||\n comparingNeighborhood.affordability_index == null\n ) {\n return comparingNeighborhood;\n }\n\n let affordabilityComparison = \"\";\n\n if (\n Math.abs(\n 1 - baseAffordabilityIndex / comparingNeighborhood.affordability_index,\n ) < 0.05\n ) {\n affordabilityComparison = \"neutral\";\n } else if (\n baseAffordabilityIndex > comparingNeighborhood.affordability_index\n ) {\n affordabilityComparison = \"negative\";\n } else {\n affordabilityComparison = \"positive\";\n }\n\n return {\n ...comparingNeighborhood,\n affordabilityComparison: affordabilityComparison as AffordabilityComparison,\n };\n}\n","import { similarNeighborhoodsParameters } from \"./types\";\n\nexport const similarNeighborhoodsKeys = {\n all: () => [\"similarNeighborhoods\"] as const,\n list: (filters: Partial<similarNeighborhoodsParameters>) =>\n [...similarNeighborhoodsKeys.all(), filters] as const,\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useLocalLogic } from \"~/context/LocalLogicProvider\";\nimport { similarNeighborhoodsKeys } from \"~/features/similarNeighborhoods\";\n\nexport type SimilarNeighborhoodsParams = {\n lat?: number;\n lng?: number;\n geogID?: string;\n externalId?: string;\n limit?: number;\n};\n\nexport function useSimilarNeighborhoods({\n geogID,\n externalId,\n limit,\n}: SimilarNeighborhoodsParams) {\n const { client } = useLocalLogic();\n const params = {\n geogId: geogID,\n externalId,\n limit,\n };\n\n const fetchSimilarNeighborhoods = async () => {\n const response = await client.getSimilarNeighborhoods(params);\n\n return response;\n };\n\n return useQuery({\n queryKey: similarNeighborhoodsKeys.list(params),\n queryFn: fetchSimilarNeighborhoods,\n enabled: !!geogID,\n });\n}\n","import { useMemo, useState } from \"react\";\nimport { addAffordabilityComparisonToNeighborhood } from \"./addAffordabilityComparisonToNeighborhood\";\nimport type { ComparedNeighborhood } from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\nimport {\n useSimilarNeighborhoods as useClientLibrarySimilarNeighborhoods,\n type SimilarNeighborhoodsParams,\n} from \"~/features/clientLibrary/useSimilarNeighborhoods\";\n\nconst MIN_PER_ROW = 4;\nconst MAX_LIMIT = 8;\n\nexport const useSimilarNeighborhoods = (\n params: Omit<SimilarNeighborhoodsParams, \"limit\">,\n) => {\n const breakpoints = useResponsiveBreakpoints();\n const [limit, setLimit] = useState(MIN_PER_ROW);\n\n const {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n data,\n } = useClientLibrarySimilarNeighborhoods({ ...params, limit: MAX_LIMIT });\n\n const similarNeighborhoods = useMemo(() => {\n let neighborhoods: ComparedNeighborhood[] = [];\n\n if (!data || !data.most_similar) {\n return neighborhoods;\n }\n\n if (data.most_similar.length < limit || !breakpoints?.lg) {\n // Somehow we wouldn't have enough to return.\n // So just return what we have\n // We'll also return everything on mobile\n neighborhoods = [...data.most_similar];\n } else {\n neighborhoods = data.most_similar.slice(0, limit);\n }\n\n return neighborhoods.map((similarNeighborhood) =>\n addAffordabilityComparisonToNeighborhood(\n data?.affordability_index || undefined,\n similarNeighborhood,\n ),\n );\n }, [data, limit, breakpoints]);\n\n const hasMore =\n (data?.most_similar || []).length > MIN_PER_ROW && limit < MAX_LIMIT;\n\n const hasAffordabilityIndex = similarNeighborhoods.some(\n (neighborhood) =>\n typeof neighborhood?.affordabilityComparison !== \"undefined\",\n );\n\n const viewMore = () => {\n if (limit === MAX_LIMIT) return;\n setLimit(limit + MIN_PER_ROW);\n };\n\n const viewLess = () => {\n if (limit < MAX_LIMIT) return;\n setLimit(limit - MIN_PER_ROW);\n };\n\n return {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName: data?.name,\n limit,\n minimumLimit: MIN_PER_ROW,\n hasMore,\n viewMore,\n viewLess,\n };\n};\n","import type { Neighborhood } from \"@local-logic/client\";\nimport { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n};\n\nexport type NeighborhoodMatchProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport type AffordabilityComparison = \"negative\" | \"neutral\" | \"positive\";\nexport interface ComparedNeighborhood extends Neighborhood {\n affordabilityComparison?: AffordabilityComparison;\n}\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-match-Viewed\",\n NEIGHBORHOOD_CARD_CLICKED = \"neighborhood-match-Card-Clicked\",\n PAGINATION_CLICKED = \"neighborhood-match-Pagination-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 NEIGHBORHOOD_CARD_CLICKED = \"neighborhood_card_clicked\",\n PAGINATION_CLICKED = \"pagination_clicked\",\n}\n","import React, { useContext, useMemo } from \"react\";\n\nimport type { NeighborhoodMatchProps, ComparedNeighborhood } from \"./types\";\nimport { useSimilarNeighborhoods } from \"./hooks/useSimilarNeighborhoods\";\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\n\nimport { useTracking } from \"~/tracking\";\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\ninterface Location {\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n title: NeighborhoodMatchProps[\"options\"][\"title\"];\n // This is used to limit the results in the context.\n // We'll still query 8 (10 is the max) so that we don't query again\n // since there's no pagination\n limit: number;\n minimumLimit: number;\n hasMore: boolean;\n viewMore: () => void;\n viewLess: () => void;\n isLoading: boolean;\n isFetched: boolean;\n similarNeighborhoods: ComparedNeighborhood[];\n hasAffordabilityIndex: boolean;\n neighborhoodName?: string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n locale: \"en\" | \"fr\";\n level: number;\n};\n\nconst NeighborhoodMatchContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodMatch = () => useContext(NeighborhoodMatchContext);\n\nconst NeighborhoodMatchProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({ eventName: AnalyticsEvents.SDK_VIEWED });\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 {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n } = useSimilarNeighborhoods({\n geogID: geographyId,\n externalId: sdkState.globalOptions?.externalId,\n });\n\n const isLoading = useMemo(\n () => isGeographyLoading || isSimilarNeighborhoodsLoading,\n [isGeographyLoading, isSimilarNeighborhoodsLoading],\n );\n\n const contextValue = useMemo(\n () => ({\n title: sdkState.options?.title,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n isLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n neighborhoodName,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags: sdkState.options?.hideAffordabilityTags,\n hideAttribution: sdkState.options?.hideAttribution,\n hideThumbnails: sdkState.options?.hideThumbnails,\n locale,\n level: geography?.level || 10,\n }),\n [\n sdkState.options?.title,\n sdkState.options?.hideAttribution,\n limit,\n hasMore,\n isLoading,\n isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n locale,\n geography,\n ],\n );\n\n return (\n <NeighborhoodMatchContext.Provider value={contextValue}>\n {children}\n </NeighborhoodMatchContext.Provider>\n );\n};\n\nexport { useNeighborhoodMatch, NeighborhoodMatchProvider, type Location };\n","export const text = `\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\n\nexport const Description = ({\n isLoading = false,\n neighborhoodName,\n}: {\n isLoading?: boolean;\n neighborhoodName?: string;\n}) => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n\n return (\n <p className={styles.text} data-is-loading={isLoading}>\n {t(neighborhoodName ? \"descriptionWithNeighborhood\" : \"description\", {\n neighborhoodName,\n interpolation: { escapeValue: false },\n })}\n </p>\n );\n};\n","export const container = `w-full flex align-center justify-center`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Button } from \"@local-logic/design-system\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport const PaginationButton = () => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n const tracking = useTracking();\n const { limit, minimumLimit, hasMore, viewLess, viewMore } =\n useNeighborhoodMatch();\n const breakpoints = useResponsiveBreakpoints();\n\n const handleClick = () => {\n if (hasMore) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_more\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_more\",\n },\n });\n viewMore();\n }\n\n if (!hasMore && limit > minimumLimit) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_less\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_less\",\n },\n });\n\n viewLess();\n }\n };\n\n if (!breakpoints?.lg || (!hasMore && limit === minimumLimit)) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <Button variant=\"secondary\" onClick={handleClick}>\n {hasMore && t(\"pagination.next\")}\n {!hasMore && limit > minimumLimit && t(\"pagination.previous\")}\n </Button>\n </div>\n );\n};\n","export const container = `group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8`;\n","export const container = `\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type=\"negative\"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type=\"neutral\"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type=\"positive\"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n`;\n\nexport const imageCover = `\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style=\"normal\"]:min-h-36\n group-data-[height-style=\"expanded\"]:min-h-7\n group-data-[height-style=\"expanded\"]:bg-transparent\n group-data-[height-style=\"hidden\"]:min-h-0\n`;\n","import React, { useMemo } from \"react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport NeighborhoodFallbackImage from \"~/assets/images/neighborhood-fallback.jpg\";\n\ntype CardProps = {\n url?: string;\n imageSrc?: string;\n expanded?: boolean;\n // Can be used to trigger events\n onClick?: () => void;\n children: React.ReactNode;\n};\n\nexport const Card = ({\n url,\n imageSrc,\n expanded,\n onClick,\n children,\n ...rest\n}: CardProps) => {\n const { hideThumbnails, hideAffordabilityTags } = useNeighborhoodMatch();\n\n const style = useMemo(\n () =>\n hideThumbnails\n ? {}\n : {\n backgroundImage: `url(${imageSrc || NeighborhoodFallbackImage})`,\n },\n [hideThumbnails],\n );\n\n const heightStyle = useMemo(() => {\n if (!hideThumbnails) return \"normal\";\n if (expanded) return \"expanded\";\n\n return \"hidden\";\n }, [hideThumbnails, expanded]);\n\n const handleOnClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n\n const { href } = event.currentTarget;\n\n if (\n !href ||\n typeof event.currentTarget.href === \"undefined\" ||\n href.length === 0\n ) {\n return;\n }\n\n if (typeof onClick !== \"undefined\") {\n onClick();\n }\n\n if (window.top !== null) {\n window.top.location.href = event.currentTarget.href;\n }\n };\n\n return (\n <a\n onClick={handleOnClick}\n href={url || undefined}\n className={styles.container}\n data-has-url={!!url}\n data-height-style={heightStyle}\n {...rest}\n >\n {(!hideThumbnails || !hideAffordabilityTags) && (\n <div className={styles.imageCover} style={style} />\n )}\n\n {children}\n </a>\n );\n};\n","export const title = `w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5`;\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Title = ({ children }: { children: React.ReactNode }) => (\n <h3 className={styles.title}>{children}</h3>\n);\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Root = ({\n isLoading = false,\n children,\n}: {\n isLoading?: boolean;\n children: React.ReactNode;\n}) => (\n <div className={styles.container} data-is-loading={isLoading}>\n {children}\n </div>\n);\n\n// Export children\nexport { Card } from \"./Card\";\nexport { Title } from \"./Title\";\n","// Setting min height of 266 makes all cards have the same height\n// in case there's less scores in one card\nexport const cardDataContent = `px-2.5 pt-4 pb-6 min-h-[266px]`;\nexport const tag = `absolute top-0 right-4`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport type { Neighborhood } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport * as CardList from \"../CardList\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\n\nimport * as ScoreCardList from \"~/components/ScoreCardList\";\n\nexport function Neighborhoods() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const tracking = useTracking();\n const {\n isFetched,\n isLoading,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags,\n } = useNeighborhoodMatch();\n\n const handleCardClickEvent = (position: number) => () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: [\n {\n label: \"position_in_set\",\n data: position,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: {\n ll_position_in_set: position,\n },\n });\n };\n\n if (isFetched && similarNeighborhoods.length === 0) {\n return <NoDataContent text={t(\"noData\")} />;\n }\n\n if (isLoading) {\n return (\n <CardList.Root isLoading>\n {[0, 1, 2, 3].map((index) => (\n <CardList.Card key={`similar-neighborhood-card-skeleton-${index}`}>\n <div className={styles.cardDataContent}>\n <CardList.Title> </CardList.Title>\n\n <ScoreCardList.Root>\n <span></span>\n </ScoreCardList.Root>\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n }\n\n return (\n <CardList.Root isLoading={isLoading}>\n {similarNeighborhoods.map((neighborhood, index) => (\n <CardList.Card\n key={`similar-neighborhood-card-${neighborhood.id}`}\n onClick={handleCardClickEvent(index)}\n url={neighborhood.redirect_url}\n imageSrc={neighborhood.thumbnail_url}\n expanded={hasAffordabilityIndex}\n >\n {typeof neighborhood.affordabilityComparison !== \"undefined\" && (\n <div className={styles.tag}>\n <Tag\n isTopLeftRounded={false}\n isTopRightRounded={false}\n isVisible={\n !hideAffordabilityTags &&\n !!neighborhood.affordabilityComparison\n }\n variant={neighborhood.affordabilityComparison}\n >\n {t(`tags.${neighborhood.affordabilityComparison}`)}\n </Tag>\n </div>\n )}\n\n <div className={styles.cardDataContent}>\n <CardList.Title data-alt={neighborhood.name}>\n {neighborhood.name}\n </CardList.Title>\n\n {neighborhood.scores && (\n <ScoreCardList.Root>\n {Object.entries(neighborhood.scores).map(\n ([key, value]) =>\n value >= 0 && (\n <ScoreCardList.Card\n key={`similar-neighborhood-${neighborhood.id}-scores-${key}`}\n title={t(\n `common:scores.${key as keyof Neighborhood[\"scores\"]}.title`,\n )}\n scoreKey={key as keyof Neighborhood[\"scores\"]}\n value={value}\n />\n ),\n )}\n </ScoreCardList.Root>\n )}\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n}\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Description } from \"../Description\";\nimport { PaginationButton } from \"../PaginationButton\";\nimport { Neighborhoods } from \"../Neighborhoods\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport { Attribution } from \"~/components/Attribution\";\n\nexport function Content() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const { title, locale, isLoading, level, neighborhoodName, hideAttribution } =\n useNeighborhoodMatch();\n\n return (\n <>\n <TitleHeader\n title={\n typeof title === \"string\" || title === false\n ? title\n : t(\"title\", {\n context: level,\n })\n }\n />\n\n <Description neighborhoodName={neighborhoodName} isLoading={isLoading} />\n\n <Neighborhoods />\n <PaginationButton />\n\n <Attribution\n sdkName=\"neighborhood-match\"\n locale={locale}\n isHidden={hideAttribution}\n />\n </>\n );\n}\n","import { ObjectSchema, string, boolean, number, object, mixed } from \"yup\";\nimport { Options } 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 hideAffordabilityTags: boolean().optional(),\n hideAttribution: boolean().optional(),\n hideThumbnails: boolean().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport { NeighborhoodMatchProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodMatchProps } from \"./types\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\n\n// TODO Move this import to sdks/sdks-app/src/App.tsx once all SDKs are migrated\nimport \"~/assets/styles/globals.css\";\n\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { ProductNames } from \"~/types\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodMatch.key);\n\nconst NeighborhoodMatch = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const isMobile = useIsMobile();\n\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 Match\"\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_MATCH}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodMatch}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_MATCH,\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 <NeighborhoodMatchProvider>\n <Content />\n </NeighborhoodMatchProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodMatch;\n"],"mappings":"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"}
|
package/dist/assets/{NeighborhoodMatch-legacy-C2QyjRPr.js → NeighborhoodMatch-legacy-SGEcOXuf.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(){const e=["url","imageSrc","expanded","onClick","children"];function i(e,i){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),t.push.apply(t,o)}return t}function t(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach(function(i){o(e,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})}return e}function o(e,i,t){return(i=function(e){var i=function(e,i){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,i||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===i?String:Number)(e)}(e,"string");return"symbol"==typeof i?i:i+""}(i))in e?Object.defineProperty(e,i,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[i]=t,e}System.register(["./rolldown-runtime-legacy-Djb2rrqm.js","./google-maps-vendor-legacy-CPuMOKGq.js","./sdks-legacy-3YngGDux.js","./index-legacy-DF60d_4Z.js","./index.es-legacy-DdMTxXQK.js","./useGeographies-legacy-BmNvVGxt.js","./useResponsiveBreakpoints-legacy-CHMcuyvR.js","./Attribution-legacy-Da4FA00m.js","./globals-legacy-BkBmZmLf.js","./ResizeWrapper-legacy-WwfLyk1y.js","./ValidateOptions-legacy-CtRpWaj6.js","./useIsMobile-legacy-jEoaA3sZ.js","./TitleHeader-legacy-UtQZo396.js","./ScoreCardList-legacy-BK5dq36c.js","./NoDataContent-legacy-aWMMhT9c.js","./neighborhood-fallback-legacy-Bu1BwGpC.js"],function(i,o){var n,a,r,l,s,d,c,u,g,h,p,v,m,b,f,y,x,j,I,O,_,w,N,C,A,D,E,k,L,M,T,P,S,K,H,R,G,V,$,B,F,W,q,z,J,U,Q,X;function Y(){const{t:e}=d(["neighborhoodMatch","common"]),i=b(),{isFetched:t,isLoading:o,similarNeighborhoods:n,hasAffordabilityIndex:a,hideAffordabilityTags:r}=$();return t&&0===n.length?(0,G.jsx)(T,{text:e("noData")}):o?(0,G.jsx)(J,{isLoading:!0,children:[0,1,2,3].map(e=>(0,G.jsx)(q,{children:(0,G.jsxs)("div",{className:U,children:[(0,G.jsx)(z,{children:" "}),(0,G.jsx)(M,{children:(0,G.jsx)("span",{})})]})},`similar-neighborhood-card-skeleton-${e}`))}):(0,G.jsx)(J,{isLoading:o,children:n.map((t,o)=>{return(0,G.jsxs)(q,{onClick:(n=o,()=>{i.postEvent({eventType:H.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:[{label:"position_in_set",data:n}]}),i.trackAnalyticsEvent({eventName:R.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:{ll_position_in_set:n}})}),url:t.redirect_url,imageSrc:t.thumbnail_url,expanded:a,children:[void 0!==t.affordabilityComparison&&(0,G.jsx)("div",{className:Q,children:(0,G.jsx)(_,{isTopLeftRounded:!1,isTopRightRounded:!1,isVisible:!r&&!!t.affordabilityComparison,variant:t.affordabilityComparison,children:e(`tags.${t.affordabilityComparison}`)})}),(0,G.jsxs)("div",{className:U,children:[(0,G.jsx)(z,{"data-alt":t.name,children:t.name}),t.scores&&(0,G.jsx)(M,{children:Object.entries(t.scores).map(([i,o])=>o>=0&&(0,G.jsx)(L,{title:e(`common:scores.${i}.title`),scoreKey:i,value:o},`similar-neighborhood-${t.id}-scores-${i}`))})]})]},`similar-neighborhood-card-${t.id}`);var n})})}function Z(){const{t:e}=d(["neighborhoodMatch","common"]),{title:i,locale:t,isLoading:o,level:n,neighborhoodName:a,hideAttribution:r}=$();return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(k,{title:"string"==typeof i||!1===i?i:e("title",{context:n})}),(0,G.jsx)(F,{neighborhoodName:a,isLoading:o}),(0,G.jsx)(Y,{}),(0,G.jsx)(W,{}),(0,G.jsx)(C,{sdkName:"neighborhood-match",locale:t,isHidden:r})]})}return{setters:[function(e){n=e.a},function(e){a=e.l},function(e){r=e.a,l=e.d,s=e.f,d=e.g,c=e.h,u=e.i,g=e.m,h=e.n,p=e.o,v=e.p,m=e.r,b=e.s,f=e.t,y=e.u},function(e){x=e.q,j=e.r,I=e.t},function(e){O=e.n,_=e.r},function(e){w=e.t},function(e){N=e.t},function(e){C=e.t},function(e){},function(e){A=e.t},function(e){D=e.t},function(e){E=e.t},function(e){k=e.t},function(e){L=e.n,M=e.t},function(e){T=e.t},function(e){e.t}],execute:function(){P=n(a(),1),S={all:()=>["similarNeighborhoods"],list:e=>[...S.all(),e]},K=e=>{const i=N(),[o,n]=(0,P.useState)(4),{isLoading:a,isFetched:r,data:l}=function({geogID:e,externalId:i,limit:t}){const{client:o}=u(),n={geogId:e,externalId:i,limit:t};return c({queryKey:S.list(n),queryFn:async()=>await o.getSimilarNeighborhoods(n),enabled:!!e})}(t(t({},e),{},{limit:8})),s=(0,P.useMemo)(()=>{let e=[];return l&&l.most_similar?(e=l.most_similar.length<o||null==i||!i.lg?[...l.most_similar]:l.most_similar.slice(0,o),e.map(e=>function(e,i){if(null==e||null==i.affordability_index)return i;let o="";return o=Math.abs(1-e/i.affordability_index)<.05?"neutral":e>i.affordability_index?"negative":"positive",t(t({},i),{},{affordabilityComparison:o})}((null==l?void 0:l.affordability_index)||void 0,e))):e},[l,o,i]),d=((null==l?void 0:l.most_similar)||[]).length>4&&o<8,g=s.some(e=>void 0!==(null==e?void 0:e.affordabilityComparison));return{isLoading:a,isFetched:r,similarNeighborhoods:s,hasAffordabilityIndex:g,neighborhoodName:null==l?void 0:l.name,limit:o,minimumLimit:4,hasMore:d,viewMore:()=>{8!==o&&n(o+4)},viewLess:()=>{o<8||n(o-4)}}},H=function(e){return e.SDK_VIEWED="neighborhood-match-Viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood-match-Card-Clicked",e.PAGINATION_CLICKED="neighborhood-match-Pagination-Clicked",e}({}),R=function(e){return e.SDK_VIEWED="sdk_viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood_card_clicked",e.PAGINATION_CLICKED="pagination_clicked",e}({}),G=x(),V=P.createContext({}),$=()=>(0,P.useContext)(V),B=({children:e})=>{var i,t,o,n,a,r,l,s,d,c;const{sdkState:u}=I(),g=(null===(i=u.globalOptions)||void 0===i?void 0:i.locale)||"en",h=b();j(()=>{h.postEvent({eventType:H.SDK_VIEWED}),h.trackAnalyticsEvent({eventName:R.SDK_VIEWED})});const{isLoading:p,data:v}=w({location:{lat:void 0===(null===(t=u.options)||void 0===t?void 0:t.geographyId)?null===(o=u.options)||void 0===o?void 0:o.lat:void 0,lng:void 0===(null===(n=u.options)||void 0===n?void 0:n.geographyId)?null===(a=u.options)||void 0===a?void 0:a.lng:void 0},geogID:(null===(r=u.options)||void 0===r?void 0:r.geographyId)||void 0,externalId:null==u||null===(l=u.globalOptions)||void 0===l?void 0:l.externalId}),{geographyId:m,geography:f}=(0,P.useMemo)(()=>{var e,i;const t=Object.entries(v||{});return{geographyId:null===(e=t[0])||void 0===e?void 0:e[0],geography:null===(i=t[0])||void 0===i?void 0:i[1]}},[p,v]),{isLoading:y,isFetched:x,similarNeighborhoods:O,hasAffordabilityIndex:_,neighborhoodName:N,limit:C,minimumLimit:A,hasMore:D,viewMore:E,viewLess:k}=K({geogID:m,externalId:null===(s=u.globalOptions)||void 0===s?void 0:s.externalId}),L=(0,P.useMemo)(()=>p||y,[p,y]),M=(0,P.useMemo)(()=>{var e,i,t,o;return{title:null===(e=u.options)||void 0===e?void 0:e.title,limit:C,minimumLimit:A,hasMore:D,viewMore:E,viewLess:k,isLoading:L,isFetched:x,neighborhoodName:N,similarNeighborhoods:O,hasAffordabilityIndex:_,hideAffordabilityTags:null===(i=u.options)||void 0===i?void 0:i.hideAffordabilityTags,hideAttribution:null===(t=u.options)||void 0===t?void 0:t.hideAttribution,hideThumbnails:null===(o=u.options)||void 0===o?void 0:o.hideThumbnails,locale:g,level:(null==f?void 0:f.level)||10}},[null===(d=u.options)||void 0===d?void 0:d.title,null===(c=u.options)||void 0===c?void 0:c.hideAttribution,C,D,L,x,O,_,N,g,f]);return(0,G.jsx)(V.Provider,{value:M,children:e})},F=({isLoading:e=!1,neighborhoodName:i})=>{const{t:t}=d("neighborhoodMatch");return(0,G.jsx)("p",{className:"\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n","data-is-loading":e,children:t(i?"descriptionWithNeighborhood":"description",{neighborhoodName:i,interpolation:{escapeValue:!1}})})},W=()=>{const{t:e}=d("neighborhoodMatch"),i=b(),{limit:t,minimumLimit:o,hasMore:n,viewLess:a,viewMore:r}=$(),l=N();return null==l||!l.lg||!n&&t===o?null:(0,G.jsx)("div",{className:"w-full flex align-center justify-center",children:(0,G.jsxs)(O,{variant:"secondary",onClick:()=>{n&&(i.postEvent({eventType:H.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_more"}]}),i.trackAnalyticsEvent({eventName:R.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_more"}}),r()),!n&&t>o&&(i.postEvent({eventType:H.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_less"}]}),i.trackAnalyticsEvent({eventName:R.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_less"}}),a())},children:[n&&e("pagination.next"),!n&&t>o&&e("pagination.previous")]})})},q=i=>{let{url:o,imageSrc:n,expanded:a,onClick:r,children:l}=i,s=function(e,i){if(null==e)return{};var t,o,n=function(e,i){if(null==e)return{};var t={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(-1!==i.indexOf(o))continue;t[o]=e[o]}return t}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],-1===i.indexOf(t)&&{}.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}(i,e);const{hideThumbnails:d,hideAffordabilityTags:c}=$(),u=(0,P.useMemo)(()=>d?{}:{backgroundImage:`url(${n||"/sdks-app/v1/assets/neighborhood-fallback-DTJDTD7d.jpg"})`},[d]),g=(0,P.useMemo)(()=>d?a?"expanded":"hidden":"normal",[d,a]);return(0,G.jsxs)("a",t(t({onClick:e=>{e.preventDefault();const{href:i}=e.currentTarget;i&&void 0!==e.currentTarget.href&&0!==i.length&&(void 0!==r&&r(),null!==window.top&&(window.top.location.href=e.currentTarget.href))},href:o||void 0,className:'\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type="negative"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type="neutral"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type="positive"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n',"data-has-url":!!o,"data-height-style":g},s),{},{children:[(!d||!c)&&(0,G.jsx)("div",{className:'\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style="normal"]:min-h-36\n group-data-[height-style="expanded"]:min-h-7\n group-data-[height-style="expanded"]:bg-transparent\n group-data-[height-style="hidden"]:min-h-0\n',style:u}),l]}))},z=({children:e})=>(0,G.jsx)("h3",{className:"w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5",children:e}),J=({isLoading:e=!1,children:i})=>(0,G.jsx)("div",{className:"group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8","data-is-loading":e,children:i}),U="px-2.5 pt-4 pb-6 min-h-[266px]",Q="absolute top-0 right-4",X=y({lat:l().min(-90,"Must be a valid latitude.").max(90,"Must be a valid latitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),lng:l().min(-180,"Must be a valid longitude.").max(180,"Must be a valid longitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),geographyId:s().optional(),title:g().optional(),hideAffordabilityTags:v().optional(),hideAttribution:v().optional(),hideThumbnails:v().optional()}).noUnknown(!0),p(h.neighborhoodMatch.key),i("default",()=>{var e,i,t,o,n,a,l;const{sdkState:s}=I(),d=E(),c=(null===(e=s.globalOptions)||void 0===e?void 0:e.locale)||"en",u=(0,P.useMemo)(()=>{var e,i,t,o;return null!==(e=s.options)&&void 0!==e&&e.geographyId?{geographyId:null===(i=s.options)||void 0===i?void 0:i.geographyId}:{lat:null===(t=s.options)||void 0===t?void 0:t.lat,lng:null===(o=s.options)||void 0===o?void 0:o.lng}},[null===(i=s.options)||void 0===i?void 0:i.lat,null===(t=s.options)||void 0===t?void 0:t.lng,null===(o=s.options)||void 0===o?void 0:o.geographyId]);return(0,G.jsx)(A,{children:(0,G.jsx)(D,{sdk:"Neighborhood Match",schema:X,options:s.options,children:(0,G.jsx)(m,{environment:null===(n=s.globalOptions)||void 0===n||null===(n=n.environment)||void 0===n?void 0:n.api,apiKey:s.apiKey,appearance:null===(a=s.globalOptions)||void 0===a?void 0:a.appearance,locale:null===(l=s.globalOptions)||void 0===l?void 0:l.locale,product:f.NEIGHBORHOOD_MATCH,children:(0,G.jsx)(r,{trackingPipelineSettings:{apiKey:s.apiKey||""},analyticsSettings:h.neighborhoodMatch,meta:{clientId:s.clientId,productName:f.NEIGHBORHOOD_MATCH,productVersion:"1.24.43"},attributes:{location:u,host:s.location,host_url:document.referrer,locale:c,isMobile:d},flags:{isDebugMode:!1},children:(0,G.jsx)(B,{children:(0,G.jsx)(Z,{})})})})})})})}}})}();
|
|
2
|
-
//# sourceMappingURL=NeighborhoodMatch-legacy-
|
|
1
|
+
!function(){const e=["url","imageSrc","expanded","onClick","children"];function i(e,i){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);i&&(o=o.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),t.push.apply(t,o)}return t}function t(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach(function(i){o(e,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(n,i))})}return e}function o(e,i,t){return(i=function(e){var i=function(e,i){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,i||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===i?String:Number)(e)}(e,"string");return"symbol"==typeof i?i:i+""}(i))in e?Object.defineProperty(e,i,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[i]=t,e}System.register(["./rolldown-runtime-legacy-Djb2rrqm.js","./google-maps-vendor-legacy-CPuMOKGq.js","./sdks-legacy-3sJ2n28B.js","./index-legacy-CYps6nGB.js","./index.es-legacy-Cz2m6e4L.js","./useGeographies-legacy-B5ciev2M.js","./useResponsiveBreakpoints-legacy-CHMcuyvR.js","./Attribution-legacy-DSXG-3Q0.js","./globals-legacy-BkBmZmLf.js","./ResizeWrapper-legacy-C0ua6RC5.js","./ValidateOptions-legacy-BQ69tin-.js","./useIsMobile-legacy-B53LlWR8.js","./TitleHeader-legacy-CzXSoMFC.js","./ScoreCardList-legacy-BTRPIWUP.js","./NoDataContent-legacy-BWvHzb0g.js","./neighborhood-fallback-legacy-Bu1BwGpC.js"],function(i,o){var n,a,r,l,s,d,c,u,g,h,p,v,m,b,f,y,x,j,I,O,_,w,N,C,A,D,E,k,L,M,T,P,S,K,H,R,G,V,$,B,F,W,q,z,J,U,Q,X;function Y(){const{t:e}=d(["neighborhoodMatch","common"]),i=b(),{isFetched:t,isLoading:o,similarNeighborhoods:n,hasAffordabilityIndex:a,hideAffordabilityTags:r}=$();return t&&0===n.length?(0,G.jsx)(T,{text:e("noData")}):o?(0,G.jsx)(J,{isLoading:!0,children:[0,1,2,3].map(e=>(0,G.jsx)(q,{children:(0,G.jsxs)("div",{className:U,children:[(0,G.jsx)(z,{children:" "}),(0,G.jsx)(M,{children:(0,G.jsx)("span",{})})]})},`similar-neighborhood-card-skeleton-${e}`))}):(0,G.jsx)(J,{isLoading:o,children:n.map((t,o)=>{return(0,G.jsxs)(q,{onClick:(n=o,()=>{i.postEvent({eventType:H.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:[{label:"position_in_set",data:n}]}),i.trackAnalyticsEvent({eventName:R.NEIGHBORHOOD_CARD_CLICKED,eventAttributes:{ll_position_in_set:n}})}),url:t.redirect_url,imageSrc:t.thumbnail_url,expanded:a,children:[void 0!==t.affordabilityComparison&&(0,G.jsx)("div",{className:Q,children:(0,G.jsx)(_,{isTopLeftRounded:!1,isTopRightRounded:!1,isVisible:!r&&!!t.affordabilityComparison,variant:t.affordabilityComparison,children:e(`tags.${t.affordabilityComparison}`)})}),(0,G.jsxs)("div",{className:U,children:[(0,G.jsx)(z,{"data-alt":t.name,children:t.name}),t.scores&&(0,G.jsx)(M,{children:Object.entries(t.scores).map(([i,o])=>o>=0&&(0,G.jsx)(L,{title:e(`common:scores.${i}.title`),scoreKey:i,value:o},`similar-neighborhood-${t.id}-scores-${i}`))})]})]},`similar-neighborhood-card-${t.id}`);var n})})}function Z(){const{t:e}=d(["neighborhoodMatch","common"]),{title:i,locale:t,isLoading:o,level:n,neighborhoodName:a,hideAttribution:r}=$();return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(k,{title:"string"==typeof i||!1===i?i:e("title",{context:n})}),(0,G.jsx)(F,{neighborhoodName:a,isLoading:o}),(0,G.jsx)(Y,{}),(0,G.jsx)(W,{}),(0,G.jsx)(C,{sdkName:"neighborhood-match",locale:t,isHidden:r})]})}return{setters:[function(e){n=e.a},function(e){a=e.l},function(e){r=e.a,l=e.d,s=e.f,d=e.g,c=e.h,u=e.i,g=e.m,h=e.n,p=e.o,v=e.p,m=e.r,b=e.s,f=e.t,y=e.u},function(e){x=e.q,j=e.r,I=e.t},function(e){O=e.n,_=e.r},function(e){w=e.t},function(e){N=e.t},function(e){C=e.t},function(e){},function(e){A=e.t},function(e){D=e.t},function(e){E=e.t},function(e){k=e.t},function(e){L=e.n,M=e.t},function(e){T=e.t},function(e){e.t}],execute:function(){P=n(a(),1),S={all:()=>["similarNeighborhoods"],list:e=>[...S.all(),e]},K=e=>{const i=N(),[o,n]=(0,P.useState)(4),{isLoading:a,isFetched:r,data:l}=function({geogID:e,externalId:i,limit:t}){const{client:o}=u(),n={geogId:e,externalId:i,limit:t};return c({queryKey:S.list(n),queryFn:async()=>await o.getSimilarNeighborhoods(n),enabled:!!e})}(t(t({},e),{},{limit:8})),s=(0,P.useMemo)(()=>{let e=[];return l&&l.most_similar?(e=l.most_similar.length<o||null==i||!i.lg?[...l.most_similar]:l.most_similar.slice(0,o),e.map(e=>function(e,i){if(null==e||null==i.affordability_index)return i;let o="";return o=Math.abs(1-e/i.affordability_index)<.05?"neutral":e>i.affordability_index?"negative":"positive",t(t({},i),{},{affordabilityComparison:o})}((null==l?void 0:l.affordability_index)||void 0,e))):e},[l,o,i]),d=((null==l?void 0:l.most_similar)||[]).length>4&&o<8,g=s.some(e=>void 0!==(null==e?void 0:e.affordabilityComparison));return{isLoading:a,isFetched:r,similarNeighborhoods:s,hasAffordabilityIndex:g,neighborhoodName:null==l?void 0:l.name,limit:o,minimumLimit:4,hasMore:d,viewMore:()=>{8!==o&&n(o+4)},viewLess:()=>{o<8||n(o-4)}}},H=function(e){return e.SDK_VIEWED="neighborhood-match-Viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood-match-Card-Clicked",e.PAGINATION_CLICKED="neighborhood-match-Pagination-Clicked",e}({}),R=function(e){return e.SDK_VIEWED="sdk_viewed",e.NEIGHBORHOOD_CARD_CLICKED="neighborhood_card_clicked",e.PAGINATION_CLICKED="pagination_clicked",e}({}),G=x(),V=P.createContext({}),$=()=>(0,P.useContext)(V),B=({children:e})=>{var i,t,o,n,a,r,l,s,d,c;const{sdkState:u}=I(),g=(null===(i=u.globalOptions)||void 0===i?void 0:i.locale)||"en",h=b();j(()=>{h.postEvent({eventType:H.SDK_VIEWED}),h.trackAnalyticsEvent({eventName:R.SDK_VIEWED})});const{isLoading:p,data:v}=w({location:{lat:void 0===(null===(t=u.options)||void 0===t?void 0:t.geographyId)?null===(o=u.options)||void 0===o?void 0:o.lat:void 0,lng:void 0===(null===(n=u.options)||void 0===n?void 0:n.geographyId)?null===(a=u.options)||void 0===a?void 0:a.lng:void 0},geogID:(null===(r=u.options)||void 0===r?void 0:r.geographyId)||void 0,externalId:null==u||null===(l=u.globalOptions)||void 0===l?void 0:l.externalId}),{geographyId:m,geography:f}=(0,P.useMemo)(()=>{var e,i;const t=Object.entries(v||{});return{geographyId:null===(e=t[0])||void 0===e?void 0:e[0],geography:null===(i=t[0])||void 0===i?void 0:i[1]}},[p,v]),{isLoading:y,isFetched:x,similarNeighborhoods:O,hasAffordabilityIndex:_,neighborhoodName:N,limit:C,minimumLimit:A,hasMore:D,viewMore:E,viewLess:k}=K({geogID:m,externalId:null===(s=u.globalOptions)||void 0===s?void 0:s.externalId}),L=(0,P.useMemo)(()=>p||y,[p,y]),M=(0,P.useMemo)(()=>{var e,i,t,o;return{title:null===(e=u.options)||void 0===e?void 0:e.title,limit:C,minimumLimit:A,hasMore:D,viewMore:E,viewLess:k,isLoading:L,isFetched:x,neighborhoodName:N,similarNeighborhoods:O,hasAffordabilityIndex:_,hideAffordabilityTags:null===(i=u.options)||void 0===i?void 0:i.hideAffordabilityTags,hideAttribution:null===(t=u.options)||void 0===t?void 0:t.hideAttribution,hideThumbnails:null===(o=u.options)||void 0===o?void 0:o.hideThumbnails,locale:g,level:(null==f?void 0:f.level)||10}},[null===(d=u.options)||void 0===d?void 0:d.title,null===(c=u.options)||void 0===c?void 0:c.hideAttribution,C,D,L,x,O,_,N,g,f]);return(0,G.jsx)(V.Provider,{value:M,children:e})},F=({isLoading:e=!1,neighborhoodName:i})=>{const{t:t}=d("neighborhoodMatch");return(0,G.jsx)("p",{className:"\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n","data-is-loading":e,children:t(i?"descriptionWithNeighborhood":"description",{neighborhoodName:i,interpolation:{escapeValue:!1}})})},W=()=>{const{t:e}=d("neighborhoodMatch"),i=b(),{limit:t,minimumLimit:o,hasMore:n,viewLess:a,viewMore:r}=$(),l=N();return null==l||!l.lg||!n&&t===o?null:(0,G.jsx)("div",{className:"w-full flex align-center justify-center",children:(0,G.jsxs)(O,{variant:"secondary",onClick:()=>{n&&(i.postEvent({eventType:H.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_more"}]}),i.trackAnalyticsEvent({eventName:R.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_more"}}),r()),!n&&t>o&&(i.postEvent({eventType:H.PAGINATION_CLICKED,eventAttributes:[{label:"pagination_action_type",data:"view_less"}]}),i.trackAnalyticsEvent({eventName:R.PAGINATION_CLICKED,eventAttributes:{ll_pagination_action_type:"view_less"}}),a())},children:[n&&e("pagination.next"),!n&&t>o&&e("pagination.previous")]})})},q=i=>{let{url:o,imageSrc:n,expanded:a,onClick:r,children:l}=i,s=function(e,i){if(null==e)return{};var t,o,n=function(e,i){if(null==e)return{};var t={};for(var o in e)if({}.hasOwnProperty.call(e,o)){if(-1!==i.indexOf(o))continue;t[o]=e[o]}return t}(e,i);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],-1===i.indexOf(t)&&{}.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}(i,e);const{hideThumbnails:d,hideAffordabilityTags:c}=$(),u=(0,P.useMemo)(()=>d?{}:{backgroundImage:`url(${n||"/sdks-app/v1/assets/neighborhood-fallback-DTJDTD7d.jpg"})`},[d]),g=(0,P.useMemo)(()=>d?a?"expanded":"hidden":"normal",[d,a]);return(0,G.jsxs)("a",t(t({onClick:e=>{e.preventDefault();const{href:i}=e.currentTarget;i&&void 0!==e.currentTarget.href&&0!==i.length&&(void 0!==r&&r(),null!==window.top&&(window.top.location.href=e.currentTarget.href))},href:o||void 0,className:'\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type="negative"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type="neutral"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type="positive"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n',"data-has-url":!!o,"data-height-style":g},s),{},{children:[(!d||!c)&&(0,G.jsx)("div",{className:'\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style="normal"]:min-h-36\n group-data-[height-style="expanded"]:min-h-7\n group-data-[height-style="expanded"]:bg-transparent\n group-data-[height-style="hidden"]:min-h-0\n',style:u}),l]}))},z=({children:e})=>(0,G.jsx)("h3",{className:"w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5",children:e}),J=({isLoading:e=!1,children:i})=>(0,G.jsx)("div",{className:"group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8","data-is-loading":e,children:i}),U="px-2.5 pt-4 pb-6 min-h-[266px]",Q="absolute top-0 right-4",X=y({lat:l().min(-90,"Must be a valid latitude.").max(90,"Must be a valid latitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),lng:l().min(-180,"Must be a valid longitude.").max(180,"Must be a valid longitude.").when("geographyId",{is:e=>"string"==typeof e,then:e=>e.optional(),otherwise:e=>e.required()}),geographyId:s().optional(),title:g().optional(),hideAffordabilityTags:v().optional(),hideAttribution:v().optional(),hideThumbnails:v().optional()}).noUnknown(!0),p(h.neighborhoodMatch.key),i("default",()=>{var e,i,t,o,n,a,l;const{sdkState:s}=I(),d=E(),c=(null===(e=s.globalOptions)||void 0===e?void 0:e.locale)||"en",u=(0,P.useMemo)(()=>{var e,i,t,o;return null!==(e=s.options)&&void 0!==e&&e.geographyId?{geographyId:null===(i=s.options)||void 0===i?void 0:i.geographyId}:{lat:null===(t=s.options)||void 0===t?void 0:t.lat,lng:null===(o=s.options)||void 0===o?void 0:o.lng}},[null===(i=s.options)||void 0===i?void 0:i.lat,null===(t=s.options)||void 0===t?void 0:t.lng,null===(o=s.options)||void 0===o?void 0:o.geographyId]);return(0,G.jsx)(A,{children:(0,G.jsx)(D,{sdk:"Neighborhood Match",schema:X,options:s.options,children:(0,G.jsx)(m,{environment:null===(n=s.globalOptions)||void 0===n||null===(n=n.environment)||void 0===n?void 0:n.api,apiKey:s.apiKey,appearance:null===(a=s.globalOptions)||void 0===a?void 0:a.appearance,locale:null===(l=s.globalOptions)||void 0===l?void 0:l.locale,product:f.NEIGHBORHOOD_MATCH,children:(0,G.jsx)(r,{trackingPipelineSettings:{apiKey:s.apiKey||""},analyticsSettings:h.neighborhoodMatch,meta:{clientId:s.clientId,productName:f.NEIGHBORHOOD_MATCH,productVersion:"1.24.44"},attributes:{location:u,host:s.location,host_url:document.referrer,locale:c,isMobile:d},flags:{isDebugMode:!1},children:(0,G.jsx)(B,{children:(0,G.jsx)(Z,{})})})})})})})}}})}();
|
|
2
|
+
//# sourceMappingURL=NeighborhoodMatch-legacy-SGEcOXuf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborhoodMatch-legacy-C2QyjRPr.js","names":[],"sources":["../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/addAffordabilityComparisonToNeighborhood/index.ts","../../src/features/similarNeighborhoods/keyFactory.ts","../../src/features/clientLibrary/useSimilarNeighborhoods.ts","../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/index.ts","../../src/sdks/NeighborhoodMatch/types.ts","../../src/sdks/NeighborhoodMatch/context.tsx","../../src/sdks/NeighborhoodMatch/components/Description/styles.ts","../../src/sdks/NeighborhoodMatch/components/Description/index.tsx","../../src/sdks/NeighborhoodMatch/components/PaginationButton/styles.ts","../../src/sdks/NeighborhoodMatch/components/PaginationButton/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/index.tsx","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/styles.ts","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/index.tsx","../../src/sdks/NeighborhoodMatch/components/Content/index.tsx","../../src/sdks/NeighborhoodMatch/schema.ts","../../src/sdks/NeighborhoodMatch/index.tsx"],"sourcesContent":["import type { Neighborhood } from \"@local-logic/client\";\nimport type {\n ComparedNeighborhood,\n AffordabilityComparison,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport function addAffordabilityComparisonToNeighborhood(\n baseAffordabilityIndex: number | undefined,\n comparingNeighborhood: Neighborhood,\n): ComparedNeighborhood {\n if (\n baseAffordabilityIndex == null ||\n comparingNeighborhood.affordability_index == null\n ) {\n return comparingNeighborhood;\n }\n\n let affordabilityComparison = \"\";\n\n if (\n Math.abs(\n 1 - baseAffordabilityIndex / comparingNeighborhood.affordability_index,\n ) < 0.05\n ) {\n affordabilityComparison = \"neutral\";\n } else if (\n baseAffordabilityIndex > comparingNeighborhood.affordability_index\n ) {\n affordabilityComparison = \"negative\";\n } else {\n affordabilityComparison = \"positive\";\n }\n\n return {\n ...comparingNeighborhood,\n affordabilityComparison: affordabilityComparison as AffordabilityComparison,\n };\n}\n","import { similarNeighborhoodsParameters } from \"./types\";\n\nexport const similarNeighborhoodsKeys = {\n all: () => [\"similarNeighborhoods\"] as const,\n list: (filters: Partial<similarNeighborhoodsParameters>) =>\n [...similarNeighborhoodsKeys.all(), filters] as const,\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useLocalLogic } from \"~/context/LocalLogicProvider\";\nimport { similarNeighborhoodsKeys } from \"~/features/similarNeighborhoods\";\n\nexport type SimilarNeighborhoodsParams = {\n lat?: number;\n lng?: number;\n geogID?: string;\n externalId?: string;\n limit?: number;\n};\n\nexport function useSimilarNeighborhoods({\n geogID,\n externalId,\n limit,\n}: SimilarNeighborhoodsParams) {\n const { client } = useLocalLogic();\n const params = {\n geogId: geogID,\n externalId,\n limit,\n };\n\n const fetchSimilarNeighborhoods = async () => {\n const response = await client.getSimilarNeighborhoods(params);\n\n return response;\n };\n\n return useQuery({\n queryKey: similarNeighborhoodsKeys.list(params),\n queryFn: fetchSimilarNeighborhoods,\n enabled: !!geogID,\n });\n}\n","import { useMemo, useState } from \"react\";\nimport { addAffordabilityComparisonToNeighborhood } from \"./addAffordabilityComparisonToNeighborhood\";\nimport type { ComparedNeighborhood } from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\nimport {\n useSimilarNeighborhoods as useClientLibrarySimilarNeighborhoods,\n type SimilarNeighborhoodsParams,\n} from \"~/features/clientLibrary/useSimilarNeighborhoods\";\n\nconst MIN_PER_ROW = 4;\nconst MAX_LIMIT = 8;\n\nexport const useSimilarNeighborhoods = (\n params: Omit<SimilarNeighborhoodsParams, \"limit\">,\n) => {\n const breakpoints = useResponsiveBreakpoints();\n const [limit, setLimit] = useState(MIN_PER_ROW);\n\n const {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n data,\n } = useClientLibrarySimilarNeighborhoods({ ...params, limit: MAX_LIMIT });\n\n const similarNeighborhoods = useMemo(() => {\n let neighborhoods: ComparedNeighborhood[] = [];\n\n if (!data || !data.most_similar) {\n return neighborhoods;\n }\n\n if (data.most_similar.length < limit || !breakpoints?.lg) {\n // Somehow we wouldn't have enough to return.\n // So just return what we have\n // We'll also return everything on mobile\n neighborhoods = [...data.most_similar];\n } else {\n neighborhoods = data.most_similar.slice(0, limit);\n }\n\n return neighborhoods.map((similarNeighborhood) =>\n addAffordabilityComparisonToNeighborhood(\n data?.affordability_index || undefined,\n similarNeighborhood,\n ),\n );\n }, [data, limit, breakpoints]);\n\n const hasMore =\n (data?.most_similar || []).length > MIN_PER_ROW && limit < MAX_LIMIT;\n\n const hasAffordabilityIndex = similarNeighborhoods.some(\n (neighborhood) =>\n typeof neighborhood?.affordabilityComparison !== \"undefined\",\n );\n\n const viewMore = () => {\n if (limit === MAX_LIMIT) return;\n setLimit(limit + MIN_PER_ROW);\n };\n\n const viewLess = () => {\n if (limit < MAX_LIMIT) return;\n setLimit(limit - MIN_PER_ROW);\n };\n\n return {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName: data?.name,\n limit,\n minimumLimit: MIN_PER_ROW,\n hasMore,\n viewMore,\n viewLess,\n };\n};\n","import type { Neighborhood } from \"@local-logic/client\";\nimport { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n};\n\nexport type NeighborhoodMatchProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport type AffordabilityComparison = \"negative\" | \"neutral\" | \"positive\";\nexport interface ComparedNeighborhood extends Neighborhood {\n affordabilityComparison?: AffordabilityComparison;\n}\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-match-Viewed\",\n NEIGHBORHOOD_CARD_CLICKED = \"neighborhood-match-Card-Clicked\",\n PAGINATION_CLICKED = \"neighborhood-match-Pagination-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 NEIGHBORHOOD_CARD_CLICKED = \"neighborhood_card_clicked\",\n PAGINATION_CLICKED = \"pagination_clicked\",\n}\n","import React, { useContext, useMemo } from \"react\";\n\nimport type { NeighborhoodMatchProps, ComparedNeighborhood } from \"./types\";\nimport { useSimilarNeighborhoods } from \"./hooks/useSimilarNeighborhoods\";\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\n\nimport { useTracking } from \"~/tracking\";\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\ninterface Location {\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n title: NeighborhoodMatchProps[\"options\"][\"title\"];\n // This is used to limit the results in the context.\n // We'll still query 8 (10 is the max) so that we don't query again\n // since there's no pagination\n limit: number;\n minimumLimit: number;\n hasMore: boolean;\n viewMore: () => void;\n viewLess: () => void;\n isLoading: boolean;\n isFetched: boolean;\n similarNeighborhoods: ComparedNeighborhood[];\n hasAffordabilityIndex: boolean;\n neighborhoodName?: string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n locale: \"en\" | \"fr\";\n level: number;\n};\n\nconst NeighborhoodMatchContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodMatch = () => useContext(NeighborhoodMatchContext);\n\nconst NeighborhoodMatchProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({ eventName: AnalyticsEvents.SDK_VIEWED });\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 {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n } = useSimilarNeighborhoods({\n geogID: geographyId,\n externalId: sdkState.globalOptions?.externalId,\n });\n\n const isLoading = useMemo(\n () => isGeographyLoading || isSimilarNeighborhoodsLoading,\n [isGeographyLoading, isSimilarNeighborhoodsLoading],\n );\n\n const contextValue = useMemo(\n () => ({\n title: sdkState.options?.title,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n isLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n neighborhoodName,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags: sdkState.options?.hideAffordabilityTags,\n hideAttribution: sdkState.options?.hideAttribution,\n hideThumbnails: sdkState.options?.hideThumbnails,\n locale,\n level: geography?.level || 10,\n }),\n [\n sdkState.options?.title,\n sdkState.options?.hideAttribution,\n limit,\n hasMore,\n isLoading,\n isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n locale,\n geography,\n ],\n );\n\n return (\n <NeighborhoodMatchContext.Provider value={contextValue}>\n {children}\n </NeighborhoodMatchContext.Provider>\n );\n};\n\nexport { useNeighborhoodMatch, NeighborhoodMatchProvider, type Location };\n","export const text = `\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\n\nexport const Description = ({\n isLoading = false,\n neighborhoodName,\n}: {\n isLoading?: boolean;\n neighborhoodName?: string;\n}) => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n\n return (\n <p className={styles.text} data-is-loading={isLoading}>\n {t(neighborhoodName ? \"descriptionWithNeighborhood\" : \"description\", {\n neighborhoodName,\n interpolation: { escapeValue: false },\n })}\n </p>\n );\n};\n","export const container = `w-full flex align-center justify-center`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Button } from \"@local-logic/design-system\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport const PaginationButton = () => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n const tracking = useTracking();\n const { limit, minimumLimit, hasMore, viewLess, viewMore } =\n useNeighborhoodMatch();\n const breakpoints = useResponsiveBreakpoints();\n\n const handleClick = () => {\n if (hasMore) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_more\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_more\",\n },\n });\n viewMore();\n }\n\n if (!hasMore && limit > minimumLimit) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_less\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_less\",\n },\n });\n\n viewLess();\n }\n };\n\n if (!breakpoints?.lg || (!hasMore && limit === minimumLimit)) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <Button variant=\"secondary\" onClick={handleClick}>\n {hasMore && t(\"pagination.next\")}\n {!hasMore && limit > minimumLimit && t(\"pagination.previous\")}\n </Button>\n </div>\n );\n};\n","export const container = `group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8`;\n","export const container = `\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type=\"negative\"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type=\"neutral\"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type=\"positive\"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n`;\n\nexport const imageCover = `\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style=\"normal\"]:min-h-36\n group-data-[height-style=\"expanded\"]:min-h-7\n group-data-[height-style=\"expanded\"]:bg-transparent\n group-data-[height-style=\"hidden\"]:min-h-0\n`;\n","import React, { useMemo } from \"react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport NeighborhoodFallbackImage from \"~/assets/images/neighborhood-fallback.jpg\";\n\ntype CardProps = {\n url?: string;\n imageSrc?: string;\n expanded?: boolean;\n // Can be used to trigger events\n onClick?: () => void;\n children: React.ReactNode;\n};\n\nexport const Card = ({\n url,\n imageSrc,\n expanded,\n onClick,\n children,\n ...rest\n}: CardProps) => {\n const { hideThumbnails, hideAffordabilityTags } = useNeighborhoodMatch();\n\n const style = useMemo(\n () =>\n hideThumbnails\n ? {}\n : {\n backgroundImage: `url(${imageSrc || NeighborhoodFallbackImage})`,\n },\n [hideThumbnails],\n );\n\n const heightStyle = useMemo(() => {\n if (!hideThumbnails) return \"normal\";\n if (expanded) return \"expanded\";\n\n return \"hidden\";\n }, [hideThumbnails, expanded]);\n\n const handleOnClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n\n const { href } = event.currentTarget;\n\n if (\n !href ||\n typeof event.currentTarget.href === \"undefined\" ||\n href.length === 0\n ) {\n return;\n }\n\n if (typeof onClick !== \"undefined\") {\n onClick();\n }\n\n if (window.top !== null) {\n window.top.location.href = event.currentTarget.href;\n }\n };\n\n return (\n <a\n onClick={handleOnClick}\n href={url || undefined}\n className={styles.container}\n data-has-url={!!url}\n data-height-style={heightStyle}\n {...rest}\n >\n {(!hideThumbnails || !hideAffordabilityTags) && (\n <div className={styles.imageCover} style={style} />\n )}\n\n {children}\n </a>\n );\n};\n","export const title = `w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5`;\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Title = ({ children }: { children: React.ReactNode }) => (\n <h3 className={styles.title}>{children}</h3>\n);\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Root = ({\n isLoading = false,\n children,\n}: {\n isLoading?: boolean;\n children: React.ReactNode;\n}) => (\n <div className={styles.container} data-is-loading={isLoading}>\n {children}\n </div>\n);\n\n// Export children\nexport { Card } from \"./Card\";\nexport { Title } from \"./Title\";\n","// Setting min height of 266 makes all cards have the same height\n// in case there's less scores in one card\nexport const cardDataContent = `px-2.5 pt-4 pb-6 min-h-[266px]`;\nexport const tag = `absolute top-0 right-4`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport type { Neighborhood } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport * as CardList from \"../CardList\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\n\nimport * as ScoreCardList from \"~/components/ScoreCardList\";\n\nexport function Neighborhoods() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const tracking = useTracking();\n const {\n isFetched,\n isLoading,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags,\n } = useNeighborhoodMatch();\n\n const handleCardClickEvent = (position: number) => () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: [\n {\n label: \"position_in_set\",\n data: position,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: {\n ll_position_in_set: position,\n },\n });\n };\n\n if (isFetched && similarNeighborhoods.length === 0) {\n return <NoDataContent text={t(\"noData\")} />;\n }\n\n if (isLoading) {\n return (\n <CardList.Root isLoading>\n {[0, 1, 2, 3].map((index) => (\n <CardList.Card key={`similar-neighborhood-card-skeleton-${index}`}>\n <div className={styles.cardDataContent}>\n <CardList.Title> </CardList.Title>\n\n <ScoreCardList.Root>\n <span></span>\n </ScoreCardList.Root>\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n }\n\n return (\n <CardList.Root isLoading={isLoading}>\n {similarNeighborhoods.map((neighborhood, index) => (\n <CardList.Card\n key={`similar-neighborhood-card-${neighborhood.id}`}\n onClick={handleCardClickEvent(index)}\n url={neighborhood.redirect_url}\n imageSrc={neighborhood.thumbnail_url}\n expanded={hasAffordabilityIndex}\n >\n {typeof neighborhood.affordabilityComparison !== \"undefined\" && (\n <div className={styles.tag}>\n <Tag\n isTopLeftRounded={false}\n isTopRightRounded={false}\n isVisible={\n !hideAffordabilityTags &&\n !!neighborhood.affordabilityComparison\n }\n variant={neighborhood.affordabilityComparison}\n >\n {t(`tags.${neighborhood.affordabilityComparison}`)}\n </Tag>\n </div>\n )}\n\n <div className={styles.cardDataContent}>\n <CardList.Title data-alt={neighborhood.name}>\n {neighborhood.name}\n </CardList.Title>\n\n {neighborhood.scores && (\n <ScoreCardList.Root>\n {Object.entries(neighborhood.scores).map(\n ([key, value]) =>\n value >= 0 && (\n <ScoreCardList.Card\n key={`similar-neighborhood-${neighborhood.id}-scores-${key}`}\n title={t(\n `common:scores.${key as keyof Neighborhood[\"scores\"]}.title`,\n )}\n scoreKey={key as keyof Neighborhood[\"scores\"]}\n value={value}\n />\n ),\n )}\n </ScoreCardList.Root>\n )}\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n}\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Description } from \"../Description\";\nimport { PaginationButton } from \"../PaginationButton\";\nimport { Neighborhoods } from \"../Neighborhoods\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport { Attribution } from \"~/components/Attribution\";\n\nexport function Content() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const { title, locale, isLoading, level, neighborhoodName, hideAttribution } =\n useNeighborhoodMatch();\n\n return (\n <>\n <TitleHeader\n title={\n typeof title === \"string\" || title === false\n ? title\n : t(\"title\", {\n context: level,\n })\n }\n />\n\n <Description neighborhoodName={neighborhoodName} isLoading={isLoading} />\n\n <Neighborhoods />\n <PaginationButton />\n\n <Attribution\n sdkName=\"neighborhood-match\"\n locale={locale}\n isHidden={hideAttribution}\n />\n </>\n );\n}\n","import { ObjectSchema, string, boolean, number, object, mixed } from \"yup\";\nimport { Options } 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 hideAffordabilityTags: boolean().optional(),\n hideAttribution: boolean().optional(),\n hideThumbnails: boolean().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport { NeighborhoodMatchProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodMatchProps } from \"./types\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\n\n// TODO Move this import to sdks/sdks-app/src/App.tsx once all SDKs are migrated\nimport \"~/assets/styles/globals.css\";\n\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { ProductNames } from \"~/types\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodMatch.key);\n\nconst NeighborhoodMatch = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const isMobile = useIsMobile();\n\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 Match\"\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_MATCH}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodMatch}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_MATCH,\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 <NeighborhoodMatchProvider>\n <Content />\n </NeighborhoodMatchProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodMatch;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NeighborhoodMatch-legacy-SGEcOXuf.js","names":[],"sources":["../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/addAffordabilityComparisonToNeighborhood/index.ts","../../src/features/similarNeighborhoods/keyFactory.ts","../../src/features/clientLibrary/useSimilarNeighborhoods.ts","../../src/sdks/NeighborhoodMatch/hooks/useSimilarNeighborhoods/index.ts","../../src/sdks/NeighborhoodMatch/types.ts","../../src/sdks/NeighborhoodMatch/context.tsx","../../src/sdks/NeighborhoodMatch/components/Description/styles.ts","../../src/sdks/NeighborhoodMatch/components/Description/index.tsx","../../src/sdks/NeighborhoodMatch/components/PaginationButton/styles.ts","../../src/sdks/NeighborhoodMatch/components/PaginationButton/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Card/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/styles.ts","../../src/sdks/NeighborhoodMatch/components/CardList/Root/Title/index.tsx","../../src/sdks/NeighborhoodMatch/components/CardList/Root/index.tsx","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/styles.ts","../../src/sdks/NeighborhoodMatch/components/Neighborhoods/index.tsx","../../src/sdks/NeighborhoodMatch/components/Content/index.tsx","../../src/sdks/NeighborhoodMatch/schema.ts","../../src/sdks/NeighborhoodMatch/index.tsx"],"sourcesContent":["import type { Neighborhood } from \"@local-logic/client\";\nimport type {\n ComparedNeighborhood,\n AffordabilityComparison,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport function addAffordabilityComparisonToNeighborhood(\n baseAffordabilityIndex: number | undefined,\n comparingNeighborhood: Neighborhood,\n): ComparedNeighborhood {\n if (\n baseAffordabilityIndex == null ||\n comparingNeighborhood.affordability_index == null\n ) {\n return comparingNeighborhood;\n }\n\n let affordabilityComparison = \"\";\n\n if (\n Math.abs(\n 1 - baseAffordabilityIndex / comparingNeighborhood.affordability_index,\n ) < 0.05\n ) {\n affordabilityComparison = \"neutral\";\n } else if (\n baseAffordabilityIndex > comparingNeighborhood.affordability_index\n ) {\n affordabilityComparison = \"negative\";\n } else {\n affordabilityComparison = \"positive\";\n }\n\n return {\n ...comparingNeighborhood,\n affordabilityComparison: affordabilityComparison as AffordabilityComparison,\n };\n}\n","import { similarNeighborhoodsParameters } from \"./types\";\n\nexport const similarNeighborhoodsKeys = {\n all: () => [\"similarNeighborhoods\"] as const,\n list: (filters: Partial<similarNeighborhoodsParameters>) =>\n [...similarNeighborhoodsKeys.all(), filters] as const,\n};\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useLocalLogic } from \"~/context/LocalLogicProvider\";\nimport { similarNeighborhoodsKeys } from \"~/features/similarNeighborhoods\";\n\nexport type SimilarNeighborhoodsParams = {\n lat?: number;\n lng?: number;\n geogID?: string;\n externalId?: string;\n limit?: number;\n};\n\nexport function useSimilarNeighborhoods({\n geogID,\n externalId,\n limit,\n}: SimilarNeighborhoodsParams) {\n const { client } = useLocalLogic();\n const params = {\n geogId: geogID,\n externalId,\n limit,\n };\n\n const fetchSimilarNeighborhoods = async () => {\n const response = await client.getSimilarNeighborhoods(params);\n\n return response;\n };\n\n return useQuery({\n queryKey: similarNeighborhoodsKeys.list(params),\n queryFn: fetchSimilarNeighborhoods,\n enabled: !!geogID,\n });\n}\n","import { useMemo, useState } from \"react\";\nimport { addAffordabilityComparisonToNeighborhood } from \"./addAffordabilityComparisonToNeighborhood\";\nimport type { ComparedNeighborhood } from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\nimport {\n useSimilarNeighborhoods as useClientLibrarySimilarNeighborhoods,\n type SimilarNeighborhoodsParams,\n} from \"~/features/clientLibrary/useSimilarNeighborhoods\";\n\nconst MIN_PER_ROW = 4;\nconst MAX_LIMIT = 8;\n\nexport const useSimilarNeighborhoods = (\n params: Omit<SimilarNeighborhoodsParams, \"limit\">,\n) => {\n const breakpoints = useResponsiveBreakpoints();\n const [limit, setLimit] = useState(MIN_PER_ROW);\n\n const {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n data,\n } = useClientLibrarySimilarNeighborhoods({ ...params, limit: MAX_LIMIT });\n\n const similarNeighborhoods = useMemo(() => {\n let neighborhoods: ComparedNeighborhood[] = [];\n\n if (!data || !data.most_similar) {\n return neighborhoods;\n }\n\n if (data.most_similar.length < limit || !breakpoints?.lg) {\n // Somehow we wouldn't have enough to return.\n // So just return what we have\n // We'll also return everything on mobile\n neighborhoods = [...data.most_similar];\n } else {\n neighborhoods = data.most_similar.slice(0, limit);\n }\n\n return neighborhoods.map((similarNeighborhood) =>\n addAffordabilityComparisonToNeighborhood(\n data?.affordability_index || undefined,\n similarNeighborhood,\n ),\n );\n }, [data, limit, breakpoints]);\n\n const hasMore =\n (data?.most_similar || []).length > MIN_PER_ROW && limit < MAX_LIMIT;\n\n const hasAffordabilityIndex = similarNeighborhoods.some(\n (neighborhood) =>\n typeof neighborhood?.affordabilityComparison !== \"undefined\",\n );\n\n const viewMore = () => {\n if (limit === MAX_LIMIT) return;\n setLimit(limit + MIN_PER_ROW);\n };\n\n const viewLess = () => {\n if (limit < MAX_LIMIT) return;\n setLimit(limit - MIN_PER_ROW);\n };\n\n return {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName: data?.name,\n limit,\n minimumLimit: MIN_PER_ROW,\n hasMore,\n viewMore,\n viewLess,\n };\n};\n","import type { Neighborhood } from \"@local-logic/client\";\nimport { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n};\n\nexport type NeighborhoodMatchProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport type AffordabilityComparison = \"negative\" | \"neutral\" | \"positive\";\nexport interface ComparedNeighborhood extends Neighborhood {\n affordabilityComparison?: AffordabilityComparison;\n}\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-match-Viewed\",\n NEIGHBORHOOD_CARD_CLICKED = \"neighborhood-match-Card-Clicked\",\n PAGINATION_CLICKED = \"neighborhood-match-Pagination-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 NEIGHBORHOOD_CARD_CLICKED = \"neighborhood_card_clicked\",\n PAGINATION_CLICKED = \"pagination_clicked\",\n}\n","import React, { useContext, useMemo } from \"react\";\n\nimport type { NeighborhoodMatchProps, ComparedNeighborhood } from \"./types\";\nimport { useSimilarNeighborhoods } from \"./hooks/useSimilarNeighborhoods\";\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\n\nimport { useTracking } from \"~/tracking\";\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\ninterface Location {\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n title: NeighborhoodMatchProps[\"options\"][\"title\"];\n // This is used to limit the results in the context.\n // We'll still query 8 (10 is the max) so that we don't query again\n // since there's no pagination\n limit: number;\n minimumLimit: number;\n hasMore: boolean;\n viewMore: () => void;\n viewLess: () => void;\n isLoading: boolean;\n isFetched: boolean;\n similarNeighborhoods: ComparedNeighborhood[];\n hasAffordabilityIndex: boolean;\n neighborhoodName?: string;\n hideAffordabilityTags?: boolean;\n hideAttribution?: boolean;\n hideThumbnails?: boolean;\n locale: \"en\" | \"fr\";\n level: number;\n};\n\nconst NeighborhoodMatchContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodMatch = () => useContext(NeighborhoodMatchContext);\n\nconst NeighborhoodMatchProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({ eventName: AnalyticsEvents.SDK_VIEWED });\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 {\n isLoading: isSimilarNeighborhoodsLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n } = useSimilarNeighborhoods({\n geogID: geographyId,\n externalId: sdkState.globalOptions?.externalId,\n });\n\n const isLoading = useMemo(\n () => isGeographyLoading || isSimilarNeighborhoodsLoading,\n [isGeographyLoading, isSimilarNeighborhoodsLoading],\n );\n\n const contextValue = useMemo(\n () => ({\n title: sdkState.options?.title,\n limit,\n minimumLimit,\n hasMore,\n viewMore,\n viewLess,\n isLoading,\n isFetched: isSimilarNeighborhoodsFetched,\n neighborhoodName,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags: sdkState.options?.hideAffordabilityTags,\n hideAttribution: sdkState.options?.hideAttribution,\n hideThumbnails: sdkState.options?.hideThumbnails,\n locale,\n level: geography?.level || 10,\n }),\n [\n sdkState.options?.title,\n sdkState.options?.hideAttribution,\n limit,\n hasMore,\n isLoading,\n isSimilarNeighborhoodsFetched,\n similarNeighborhoods,\n hasAffordabilityIndex,\n neighborhoodName,\n locale,\n geography,\n ],\n );\n\n return (\n <NeighborhoodMatchContext.Provider value={contextValue}>\n {children}\n </NeighborhoodMatchContext.Provider>\n );\n};\n\nexport { useNeighborhoodMatch, NeighborhoodMatchProvider, type Location };\n","export const text = `\n text-gray-400 text-sm font-normal leading-5 mb-5\n data-[is-loading=true]:bg-gray-200 data-[is-loading=true]:rounded-sm data-[is-loading=true]:animate-pulse\n data-[is-loading=true]:text-transparent data-[is-loading=true]:max-w-96 data-[is-loading=true]:h-4\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\n\nexport const Description = ({\n isLoading = false,\n neighborhoodName,\n}: {\n isLoading?: boolean;\n neighborhoodName?: string;\n}) => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n\n return (\n <p className={styles.text} data-is-loading={isLoading}>\n {t(neighborhoodName ? \"descriptionWithNeighborhood\" : \"description\", {\n neighborhoodName,\n interpolation: { escapeValue: false },\n })}\n </p>\n );\n};\n","export const container = `w-full flex align-center justify-center`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Button } from \"@local-logic/design-system\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\nimport { useResponsiveBreakpoints } from \"~/hooks/useResponsiveBreakpoints\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nexport const PaginationButton = () => {\n const { t } = useTranslation(\"neighborhoodMatch\");\n const tracking = useTracking();\n const { limit, minimumLimit, hasMore, viewLess, viewMore } =\n useNeighborhoodMatch();\n const breakpoints = useResponsiveBreakpoints();\n\n const handleClick = () => {\n if (hasMore) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_more\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_more\",\n },\n });\n viewMore();\n }\n\n if (!hasMore && limit > minimumLimit) {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.PAGINATION_CLICKED,\n eventAttributes: [\n {\n label: \"pagination_action_type\",\n data: \"view_less\",\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.PAGINATION_CLICKED,\n eventAttributes: {\n ll_pagination_action_type: \"view_less\",\n },\n });\n\n viewLess();\n }\n };\n\n if (!breakpoints?.lg || (!hasMore && limit === minimumLimit)) {\n return null;\n }\n\n return (\n <div className={styles.container}>\n <Button variant=\"secondary\" onClick={handleClick}>\n {hasMore && t(\"pagination.next\")}\n {!hasMore && limit > minimumLimit && t(\"pagination.previous\")}\n </Button>\n </div>\n );\n};\n","export const container = `group/card-list w-full flex overflow-auto lg:grid lg:grid-cols-4 gap-x-4 gap-y-8 lg:space-between lg:overflow-hidden no-scrollbar pb-8`;\n","export const container = `\n relative bg-base-white border border-gray-150 rounded-lg min-w-60 overflow-hidden\n shadow-2sm transition-shadow\n group\n \n data-[has-url=true]:hover:shadow-md\n data-[has-url=true]:data-[tag-type=\"negative\"]:hover:border-feedback-danger-100\n data-[has-url=true]:data-[tag-type=\"neutral\"]:hover:border-feedback-warning-200\n data-[has-url=true]:data-[tag-type=\"positive\"]:hover:border-feedback-success-100\n\n group-data-[is-loading=true]/card-list:border-gray-200 group-data-[is-loading=true]/card-list:bg-gray-200/50 group-data-[is-loading=true]/card-list:animate-pulse\n`;\n\nexport const imageCover = `\n bg-gray-300/50 w-full bg-cover bg-no-repeat bg-center\n\n group-data-[height-style=\"normal\"]:min-h-36\n group-data-[height-style=\"expanded\"]:min-h-7\n group-data-[height-style=\"expanded\"]:bg-transparent\n group-data-[height-style=\"hidden\"]:min-h-0\n`;\n","import React, { useMemo } from \"react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport NeighborhoodFallbackImage from \"~/assets/images/neighborhood-fallback.jpg\";\n\ntype CardProps = {\n url?: string;\n imageSrc?: string;\n expanded?: boolean;\n // Can be used to trigger events\n onClick?: () => void;\n children: React.ReactNode;\n};\n\nexport const Card = ({\n url,\n imageSrc,\n expanded,\n onClick,\n children,\n ...rest\n}: CardProps) => {\n const { hideThumbnails, hideAffordabilityTags } = useNeighborhoodMatch();\n\n const style = useMemo(\n () =>\n hideThumbnails\n ? {}\n : {\n backgroundImage: `url(${imageSrc || NeighborhoodFallbackImage})`,\n },\n [hideThumbnails],\n );\n\n const heightStyle = useMemo(() => {\n if (!hideThumbnails) return \"normal\";\n if (expanded) return \"expanded\";\n\n return \"hidden\";\n }, [hideThumbnails, expanded]);\n\n const handleOnClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n\n const { href } = event.currentTarget;\n\n if (\n !href ||\n typeof event.currentTarget.href === \"undefined\" ||\n href.length === 0\n ) {\n return;\n }\n\n if (typeof onClick !== \"undefined\") {\n onClick();\n }\n\n if (window.top !== null) {\n window.top.location.href = event.currentTarget.href;\n }\n };\n\n return (\n <a\n onClick={handleOnClick}\n href={url || undefined}\n className={styles.container}\n data-has-url={!!url}\n data-height-style={heightStyle}\n {...rest}\n >\n {(!hideThumbnails || !hideAffordabilityTags) && (\n <div className={styles.imageCover} style={style} />\n )}\n\n {children}\n </a>\n );\n};\n","export const title = `w-full truncate text-ellipsis overflow-hidden font-bold text-sm text-base-black hover:text-clip hover:overflow-auto no-scrollbar mb-3.5`;\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Title = ({ children }: { children: React.ReactNode }) => (\n <h3 className={styles.title}>{children}</h3>\n);\n","import React from \"react\";\n\nimport * as styles from \"./styles\";\n\nexport const Root = ({\n isLoading = false,\n children,\n}: {\n isLoading?: boolean;\n children: React.ReactNode;\n}) => (\n <div className={styles.container} data-is-loading={isLoading}>\n {children}\n </div>\n);\n\n// Export children\nexport { Card } from \"./Card\";\nexport { Title } from \"./Title\";\n","// Setting min height of 266 makes all cards have the same height\n// in case there's less scores in one card\nexport const cardDataContent = `px-2.5 pt-4 pb-6 min-h-[266px]`;\nexport const tag = `absolute top-0 right-4`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport type { Neighborhood } from \"@local-logic/client\";\nimport { Tag } from \"@local-logic/design-system\";\nimport * as CardList from \"../CardList\";\nimport * as styles from \"./styles\";\nimport { useTracking } from \"~/tracking\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport {\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"~/sdks/NeighborhoodMatch/types\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\n\nimport * as ScoreCardList from \"~/components/ScoreCardList\";\n\nexport function Neighborhoods() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const tracking = useTracking();\n const {\n isFetched,\n isLoading,\n similarNeighborhoods,\n hasAffordabilityIndex,\n hideAffordabilityTags,\n } = useNeighborhoodMatch();\n\n const handleCardClickEvent = (position: number) => () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: [\n {\n label: \"position_in_set\",\n data: position,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: {\n ll_position_in_set: position,\n },\n });\n };\n\n if (isFetched && similarNeighborhoods.length === 0) {\n return <NoDataContent text={t(\"noData\")} />;\n }\n\n if (isLoading) {\n return (\n <CardList.Root isLoading>\n {[0, 1, 2, 3].map((index) => (\n <CardList.Card key={`similar-neighborhood-card-skeleton-${index}`}>\n <div className={styles.cardDataContent}>\n <CardList.Title> </CardList.Title>\n\n <ScoreCardList.Root>\n <span></span>\n </ScoreCardList.Root>\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n }\n\n return (\n <CardList.Root isLoading={isLoading}>\n {similarNeighborhoods.map((neighborhood, index) => (\n <CardList.Card\n key={`similar-neighborhood-card-${neighborhood.id}`}\n onClick={handleCardClickEvent(index)}\n url={neighborhood.redirect_url}\n imageSrc={neighborhood.thumbnail_url}\n expanded={hasAffordabilityIndex}\n >\n {typeof neighborhood.affordabilityComparison !== \"undefined\" && (\n <div className={styles.tag}>\n <Tag\n isTopLeftRounded={false}\n isTopRightRounded={false}\n isVisible={\n !hideAffordabilityTags &&\n !!neighborhood.affordabilityComparison\n }\n variant={neighborhood.affordabilityComparison}\n >\n {t(`tags.${neighborhood.affordabilityComparison}`)}\n </Tag>\n </div>\n )}\n\n <div className={styles.cardDataContent}>\n <CardList.Title data-alt={neighborhood.name}>\n {neighborhood.name}\n </CardList.Title>\n\n {neighborhood.scores && (\n <ScoreCardList.Root>\n {Object.entries(neighborhood.scores).map(\n ([key, value]) =>\n value >= 0 && (\n <ScoreCardList.Card\n key={`similar-neighborhood-${neighborhood.id}-scores-${key}`}\n title={t(\n `common:scores.${key as keyof Neighborhood[\"scores\"]}.title`,\n )}\n scoreKey={key as keyof Neighborhood[\"scores\"]}\n value={value}\n />\n ),\n )}\n </ScoreCardList.Root>\n )}\n </div>\n </CardList.Card>\n ))}\n </CardList.Root>\n );\n}\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Description } from \"../Description\";\nimport { PaginationButton } from \"../PaginationButton\";\nimport { Neighborhoods } from \"../Neighborhoods\";\nimport { useNeighborhoodMatch } from \"~/sdks/NeighborhoodMatch/context\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\nimport { Attribution } from \"~/components/Attribution\";\n\nexport function Content() {\n const { t } = useTranslation([\"neighborhoodMatch\", \"common\"]);\n const { title, locale, isLoading, level, neighborhoodName, hideAttribution } =\n useNeighborhoodMatch();\n\n return (\n <>\n <TitleHeader\n title={\n typeof title === \"string\" || title === false\n ? title\n : t(\"title\", {\n context: level,\n })\n }\n />\n\n <Description neighborhoodName={neighborhoodName} isLoading={isLoading} />\n\n <Neighborhoods />\n <PaginationButton />\n\n <Attribution\n sdkName=\"neighborhood-match\"\n locale={locale}\n isHidden={hideAttribution}\n />\n </>\n );\n}\n","import { ObjectSchema, string, boolean, number, object, mixed } from \"yup\";\nimport { Options } 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 hideAffordabilityTags: boolean().optional(),\n hideAttribution: boolean().optional(),\n hideThumbnails: boolean().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport { NeighborhoodMatchProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodMatchProps } from \"./types\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\n\n// TODO Move this import to sdks/sdks-app/src/App.tsx once all SDKs are migrated\nimport \"~/assets/styles/globals.css\";\n\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { ProductNames } from \"~/types\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodMatch.key);\n\nconst NeighborhoodMatch = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodMatchProps>();\n const isMobile = useIsMobile();\n\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 Match\"\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_MATCH}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodMatch}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_MATCH,\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 <NeighborhoodMatchProvider>\n <Content />\n </NeighborhoodMatchProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodMatch;\n"],"mappings":"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"}
|