@local-logic/sdks-app 1.24.55 → 1.24.56
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-kw125yRW.js → Attribution-2HCi1H0z.js} +2 -2
- package/dist/assets/{Attribution-kw125yRW.js.map → Attribution-2HCi1H0z.js.map} +1 -1
- package/dist/assets/{Attribution-legacy-Chi4675H.js → Attribution-legacy-hmpbuPMu.js} +2 -2
- package/dist/assets/{Attribution-legacy-Chi4675H.js.map → Attribution-legacy-hmpbuPMu.js.map} +1 -1
- package/dist/assets/{Cluster-BHQcO6iC-CebPxFZj.js → Cluster-BHQcO6iC-DX5kWZyH.js} +2 -2
- package/dist/assets/{Cluster-BHQcO6iC-CebPxFZj.js.map → Cluster-BHQcO6iC-DX5kWZyH.js.map} +1 -1
- package/dist/assets/{Cluster-BHQcO6iC-legacy-Du0M2J6Q.js → Cluster-BHQcO6iC-legacy-WxX_TN3X.js} +2 -2
- package/dist/assets/{Cluster-BHQcO6iC-legacy-Du0M2J6Q.js.map → Cluster-BHQcO6iC-legacy-WxX_TN3X.js.map} +1 -1
- package/dist/assets/{Google-BFAJ84CT-BYUDq3Rn.js → Google-BFAJ84CT-Db023BJm.js} +2 -2
- package/dist/assets/{Google-BFAJ84CT-BYUDq3Rn.js.map → Google-BFAJ84CT-Db023BJm.js.map} +1 -1
- package/dist/assets/{Google-BFAJ84CT-legacy-C-p2r3Dr.js → Google-BFAJ84CT-legacy-Q3rCFcGm.js} +2 -2
- package/dist/assets/{Google-BFAJ84CT-legacy-C-p2r3Dr.js.map → Google-BFAJ84CT-legacy-Q3rCFcGm.js.map} +1 -1
- package/dist/assets/{Google-BS41ufih-D9AZqNEh.js → Google-BS41ufih-X58phnIN.js} +2 -2
- package/dist/assets/{Google-BS41ufih-D9AZqNEh.js.map → Google-BS41ufih-X58phnIN.js.map} +1 -1
- package/dist/assets/{Google-BS41ufih-legacy-BVmSzd63.js → Google-BS41ufih-legacy-BfxDRR82.js} +2 -2
- package/dist/assets/{Google-BS41ufih-legacy-BVmSzd63.js.map → Google-BS41ufih-legacy-BfxDRR82.js.map} +1 -1
- package/dist/assets/{Google-CH7a2yx--Cn8Y8O80.js → Google-CH7a2yx--BVYhsOGa.js} +2 -2
- package/dist/assets/{Google-CH7a2yx--Cn8Y8O80.js.map → Google-CH7a2yx--BVYhsOGa.js.map} +1 -1
- package/dist/assets/{Google-CH7a2yx--legacy-DM1UNBoi.js → Google-CH7a2yx--legacy-BR9qm28j.js} +2 -2
- package/dist/assets/{Google-CH7a2yx--legacy-DM1UNBoi.js.map → Google-CH7a2yx--legacy-BR9qm28j.js.map} +1 -1
- package/dist/assets/{Google-CXGCn-oJ-legacy-BahBoExF.js → Google-CXGCn-oJ-legacy-BVlGLk_e.js} +2 -2
- package/dist/assets/{Google-CXGCn-oJ-legacy-BahBoExF.js.map → Google-CXGCn-oJ-legacy-BVlGLk_e.js.map} +1 -1
- package/dist/assets/{Google-CXGCn-oJ-DVH6KUqZ.js → Google-CXGCn-oJ-vzJMTYIB.js} +2 -2
- package/dist/assets/{Google-CXGCn-oJ-DVH6KUqZ.js.map → Google-CXGCn-oJ-vzJMTYIB.js.map} +1 -1
- package/dist/assets/{Google-DbOLrYJn-B0DksMt_.js → Google-DbOLrYJn-DqgI84Qa.js} +2 -2
- package/dist/assets/{Google-DbOLrYJn-B0DksMt_.js.map → Google-DbOLrYJn-DqgI84Qa.js.map} +1 -1
- package/dist/assets/{Google-DbOLrYJn-legacy-BRnfvM8x.js → Google-DbOLrYJn-legacy-Dsn8Xq1g.js} +2 -2
- package/dist/assets/{Google-DbOLrYJn-legacy-BRnfvM8x.js.map → Google-DbOLrYJn-legacy-Dsn8Xq1g.js.map} +1 -1
- package/dist/assets/{GridGraph-_o1JnUxh.js → GridGraph-ByIMVoVp.js} +2 -2
- package/dist/assets/{GridGraph-_o1JnUxh.js.map → GridGraph-ByIMVoVp.js.map} +1 -1
- package/dist/assets/{GridGraph-legacy-Cbh3J_fT.js → GridGraph-legacy-BE5z29HW.js} +2 -2
- package/dist/assets/{GridGraph-legacy-Cbh3J_fT.js.map → GridGraph-legacy-BE5z29HW.js.map} +1 -1
- package/dist/assets/{LeadCapture-OHuG-_-X.js → LeadCapture-C0JBU0CZ.js} +2 -2
- package/dist/assets/{LeadCapture-OHuG-_-X.js.map → LeadCapture-C0JBU0CZ.js.map} +1 -1
- package/dist/assets/{LeadCapture-legacy-D2LNKZFz.js → LeadCapture-legacy-DWZLKdNo.js} +2 -2
- package/dist/assets/{LeadCapture-legacy-D2LNKZFz.js.map → LeadCapture-legacy-DWZLKdNo.js.map} +1 -1
- package/dist/assets/{LocalContent-Th91ikte.js → LocalContent-CS98zXJ_.js} +2 -2
- package/dist/assets/{LocalContent-Th91ikte.js.map → LocalContent-CS98zXJ_.js.map} +1 -1
- package/dist/assets/LocalContent-legacy-BdOlGwjM.js +2 -0
- package/dist/assets/{LocalContent-legacy-Dn8xkYe1.js.map → LocalContent-legacy-BdOlGwjM.js.map} +1 -1
- package/dist/assets/{LocalDemographics-BoFc5tV3.js → LocalDemographics-DyligQCX.js} +2 -2
- package/dist/assets/{LocalDemographics-BoFc5tV3.js.map → LocalDemographics-DyligQCX.js.map} +1 -1
- package/dist/assets/{LocalDemographics-legacy-CWB9XMw_.js → LocalDemographics-legacy-DT8RJjXO.js} +2 -2
- package/dist/assets/{LocalDemographics-legacy-CWB9XMw_.js.map → LocalDemographics-legacy-DT8RJjXO.js.map} +1 -1
- package/dist/assets/{Mapbox-CpLnA607-C8WLdGzJ.js → Mapbox-CpLnA607-DHjDY_aW.js} +2 -2
- package/dist/assets/{Mapbox-CpLnA607-C8WLdGzJ.js.map → Mapbox-CpLnA607-DHjDY_aW.js.map} +1 -1
- package/dist/assets/{Mapbox-CpLnA607-legacy-CGRbZKvE.js → Mapbox-CpLnA607-legacy-C0pFwnFD.js} +2 -2
- package/dist/assets/{Mapbox-CpLnA607-legacy-CGRbZKvE.js.map → Mapbox-CpLnA607-legacy-C0pFwnFD.js.map} +1 -1
- package/dist/assets/{Mapbox-DDJ1gHRb-CoVu4X50.js → Mapbox-DDJ1gHRb-BrYg3lP5.js} +2 -2
- package/dist/assets/{Mapbox-DDJ1gHRb-CoVu4X50.js.map → Mapbox-DDJ1gHRb-BrYg3lP5.js.map} +1 -1
- package/dist/assets/{Mapbox-DDJ1gHRb-legacy-BPzC_BxB.js → Mapbox-DDJ1gHRb-legacy-CPCjCTbO.js} +2 -2
- package/dist/assets/{Mapbox-DDJ1gHRb-legacy-BPzC_BxB.js.map → Mapbox-DDJ1gHRb-legacy-CPCjCTbO.js.map} +1 -1
- package/dist/assets/{Mapbox-DtZmt1D_-Bl4KegHk.js → Mapbox-DtZmt1D_-TqeHUWdD.js} +2 -2
- package/dist/assets/{Mapbox-DtZmt1D_-Bl4KegHk.js.map → Mapbox-DtZmt1D_-TqeHUWdD.js.map} +1 -1
- package/dist/assets/{Mapbox-DtZmt1D_-legacy-CL4jFUY4.js → Mapbox-DtZmt1D_-legacy-BSAfDOYm.js} +2 -2
- package/dist/assets/{Mapbox-DtZmt1D_-legacy-CL4jFUY4.js.map → Mapbox-DtZmt1D_-legacy-BSAfDOYm.js.map} +1 -1
- package/dist/assets/{Mapbox-spw-ix-j-ByvfOXcz.js → Mapbox-spw-ix-j-Cz8Kahzo.js} +2 -2
- package/dist/assets/{Mapbox-spw-ix-j-ByvfOXcz.js.map → Mapbox-spw-ix-j-Cz8Kahzo.js.map} +1 -1
- package/dist/assets/{Mapbox-spw-ix-j-legacy-BdKN6y0O.js → Mapbox-spw-ix-j-legacy-iknI8U8h.js} +2 -2
- package/dist/assets/{Mapbox-spw-ix-j-legacy-BdKN6y0O.js.map → Mapbox-spw-ix-j-legacy-iknI8U8h.js.map} +1 -1
- package/dist/assets/{Mapbox-u11C3LWs-ou3xo84X.js → Mapbox-u11C3LWs-BwSCsWME.js} +2 -2
- package/dist/assets/{Mapbox-u11C3LWs-ou3xo84X.js.map → Mapbox-u11C3LWs-BwSCsWME.js.map} +1 -1
- package/dist/assets/{Mapbox-u11C3LWs-legacy-ChNDofS-.js → Mapbox-u11C3LWs-legacy-027mNjvM.js} +2 -2
- package/dist/assets/{Mapbox-u11C3LWs-legacy-ChNDofS-.js.map → Mapbox-u11C3LWs-legacy-027mNjvM.js.map} +1 -1
- package/dist/assets/{Maptiler-DJScKW8p-D6EXhR9t.js → Maptiler-DJScKW8p-L89TcGXV.js} +2 -2
- package/dist/assets/{Maptiler-DJScKW8p-D6EXhR9t.js.map → Maptiler-DJScKW8p-L89TcGXV.js.map} +1 -1
- package/dist/assets/{Maptiler-DJScKW8p-legacy-Bwixwxpw.js → Maptiler-DJScKW8p-legacy-CHPsYdr2.js} +2 -2
- package/dist/assets/{Maptiler-DJScKW8p-legacy-Bwixwxpw.js.map → Maptiler-DJScKW8p-legacy-CHPsYdr2.js.map} +1 -1
- package/dist/assets/{Maptiler-DdeFS4iM-CGZ09RjZ.js → Maptiler-DdeFS4iM-BOLYvuUZ.js} +2 -2
- package/dist/assets/{Maptiler-DdeFS4iM-CGZ09RjZ.js.map → Maptiler-DdeFS4iM-BOLYvuUZ.js.map} +1 -1
- package/dist/assets/{Maptiler-DdeFS4iM-legacy-QtRpj8xP.js → Maptiler-DdeFS4iM-legacy-BW0zwfen.js} +2 -2
- package/dist/assets/{Maptiler-DdeFS4iM-legacy-QtRpj8xP.js.map → Maptiler-DdeFS4iM-legacy-BW0zwfen.js.map} +1 -1
- package/dist/assets/{Maptiler-DqeshLom-CXaXHA2F.js → Maptiler-DqeshLom-2dFTRZIA.js} +2 -2
- package/dist/assets/{Maptiler-DqeshLom-CXaXHA2F.js.map → Maptiler-DqeshLom-2dFTRZIA.js.map} +1 -1
- package/dist/assets/{Maptiler-DqeshLom-legacy-Cpos6yik.js → Maptiler-DqeshLom-legacy-DuLrccIs.js} +2 -2
- package/dist/assets/{Maptiler-DqeshLom-legacy-Cpos6yik.js.map → Maptiler-DqeshLom-legacy-DuLrccIs.js.map} +1 -1
- package/dist/assets/{Maptiler-DsqJbPDD-CAQM6_gR.js → Maptiler-DsqJbPDD-BwibJMp5.js} +2 -2
- package/dist/assets/{Maptiler-DsqJbPDD-CAQM6_gR.js.map → Maptiler-DsqJbPDD-BwibJMp5.js.map} +1 -1
- package/dist/assets/{Maptiler-DsqJbPDD-legacy-IZOEEMY7.js → Maptiler-DsqJbPDD-legacy-DnNfJ6Xy.js} +2 -2
- package/dist/assets/{Maptiler-DsqJbPDD-legacy-IZOEEMY7.js.map → Maptiler-DsqJbPDD-legacy-DnNfJ6Xy.js.map} +1 -1
- package/dist/assets/{Maptiler-YjlcPccn-D1uiJCxO.js → Maptiler-YjlcPccn-0iRRyOVa.js} +2 -2
- package/dist/assets/{Maptiler-YjlcPccn-D1uiJCxO.js.map → Maptiler-YjlcPccn-0iRRyOVa.js.map} +1 -1
- package/dist/assets/{Maptiler-YjlcPccn-legacy-DrnTx-fy.js → Maptiler-YjlcPccn-legacy-Ced_ez5M.js} +2 -2
- package/dist/assets/{Maptiler-YjlcPccn-legacy-DrnTx-fy.js.map → Maptiler-YjlcPccn-legacy-Ced_ez5M.js.map} +1 -1
- package/dist/assets/{MarkerIcon-Bc3X9WQk-CAeRswLc.js → MarkerIcon-Bc3X9WQk-BWwswF54.js} +2 -2
- package/dist/assets/{MarkerIcon-Bc3X9WQk-CAeRswLc.js.map → MarkerIcon-Bc3X9WQk-BWwswF54.js.map} +1 -1
- package/dist/assets/{MarkerIcon-Bc3X9WQk-legacy-hujJwn_h.js → MarkerIcon-Bc3X9WQk-legacy-C6rYUPOZ.js} +2 -2
- package/dist/assets/{MarkerIcon-Bc3X9WQk-legacy-hujJwn_h.js.map → MarkerIcon-Bc3X9WQk-legacy-C6rYUPOZ.js.map} +1 -1
- package/dist/assets/{NeighborhoodCard-BHMcB4dQ.js → NeighborhoodCard-BZWAFttb.js} +2 -2
- package/dist/assets/{NeighborhoodCard-BHMcB4dQ.js.map → NeighborhoodCard-BZWAFttb.js.map} +1 -1
- package/dist/assets/{NeighborhoodCard-legacy-BNd6CJpc.js → NeighborhoodCard-legacy-B9cqO1_h.js} +2 -2
- package/dist/assets/{NeighborhoodCard-legacy-BNd6CJpc.js.map → NeighborhoodCard-legacy-B9cqO1_h.js.map} +1 -1
- package/dist/assets/{NeighborhoodCharacteristics-x7BCbeSG.js → NeighborhoodCharacteristics-DbEfG4Ti.js} +2 -2
- package/dist/assets/{NeighborhoodCharacteristics-x7BCbeSG.js.map → NeighborhoodCharacteristics-DbEfG4Ti.js.map} +1 -1
- package/dist/assets/{NeighborhoodCharacteristics-legacy-DV4yD_wP.js → NeighborhoodCharacteristics-legacy-2THotxWx.js} +2 -2
- package/dist/assets/{NeighborhoodCharacteristics-legacy-DV4yD_wP.js.map → NeighborhoodCharacteristics-legacy-2THotxWx.js.map} +1 -1
- package/dist/assets/{NeighborhoodDemographics-B3rv4k_B.js → NeighborhoodDemographics-D_BWe55L.js} +2 -2
- package/dist/assets/{NeighborhoodDemographics-B3rv4k_B.js.map → NeighborhoodDemographics-D_BWe55L.js.map} +1 -1
- package/dist/assets/{NeighborhoodDemographics-legacy-itJX5Mgc.js → NeighborhoodDemographics-legacy-BH0y1nif.js} +2 -2
- package/dist/assets/{NeighborhoodDemographics-legacy-itJX5Mgc.js.map → NeighborhoodDemographics-legacy-BH0y1nif.js.map} +1 -1
- package/dist/assets/{NeighborhoodFeatured-CW84mNx9.js → NeighborhoodFeatured-BDrFJKj5.js} +2 -2
- package/dist/assets/{NeighborhoodFeatured-CW84mNx9.js.map → NeighborhoodFeatured-BDrFJKj5.js.map} +1 -1
- package/dist/assets/{NeighborhoodFeatured-legacy-DhNugi04.js → NeighborhoodFeatured-legacy-wwLydNFz.js} +2 -2
- package/dist/assets/{NeighborhoodFeatured-legacy-DhNugi04.js.map → NeighborhoodFeatured-legacy-wwLydNFz.js.map} +1 -1
- package/dist/assets/{NeighborhoodHero-DADIHl6H.js → NeighborhoodHero-IqemoCbl.js} +2 -2
- package/dist/assets/{NeighborhoodHero-DADIHl6H.js.map → NeighborhoodHero-IqemoCbl.js.map} +1 -1
- package/dist/assets/{NeighborhoodHero-legacy-CkHlzf9Z.js → NeighborhoodHero-legacy-Cx0sgcGF.js} +2 -2
- package/dist/assets/{NeighborhoodHero-legacy-CkHlzf9Z.js.map → NeighborhoodHero-legacy-Cx0sgcGF.js.map} +1 -1
- package/dist/assets/{NeighborhoodHighlights-D19WC2mx.js → NeighborhoodHighlights-BgG5_1pC.js} +2 -2
- package/dist/assets/{NeighborhoodHighlights-D19WC2mx.js.map → NeighborhoodHighlights-BgG5_1pC.js.map} +1 -1
- package/dist/assets/{NeighborhoodHighlights-legacy-C_jXd4U5.js → NeighborhoodHighlights-legacy-tjiEPXIC.js} +2 -2
- package/dist/assets/{NeighborhoodHighlights-legacy-C_jXd4U5.js.map → NeighborhoodHighlights-legacy-tjiEPXIC.js.map} +1 -1
- package/dist/assets/{NeighborhoodMap-BsNsYKro.js → NeighborhoodMap-CryxJ8YK.js} +2 -2
- package/dist/assets/{NeighborhoodMap-BsNsYKro.js.map → NeighborhoodMap-CryxJ8YK.js.map} +1 -1
- package/dist/assets/{NeighborhoodMap-legacy-DYqn9nZ7.js → NeighborhoodMap-legacy-B_83udpC.js} +2 -2
- package/dist/assets/{NeighborhoodMap-legacy-DYqn9nZ7.js.map → NeighborhoodMap-legacy-B_83udpC.js.map} +1 -1
- package/dist/assets/{NeighborhoodMarketTrends-BN9hbHm9.js → NeighborhoodMarketTrends-Br6-XeD6.js} +3 -3
- package/dist/assets/{NeighborhoodMarketTrends-BN9hbHm9.js.map → NeighborhoodMarketTrends-Br6-XeD6.js.map} +1 -1
- package/dist/assets/{NeighborhoodMarketTrends-legacy-BJkauwYD.js → NeighborhoodMarketTrends-legacy-Bi1mguZX.js} +2 -2
- package/dist/assets/{NeighborhoodMarketTrends-legacy-BJkauwYD.js.map → NeighborhoodMarketTrends-legacy-Bi1mguZX.js.map} +1 -1
- package/dist/assets/{NeighborhoodMatch-CoRo5HAb.js → NeighborhoodMatch-DvLO4qaB.js} +2 -2
- package/dist/assets/{NeighborhoodMatch-CoRo5HAb.js.map → NeighborhoodMatch-DvLO4qaB.js.map} +1 -1
- package/dist/assets/{NeighborhoodMatch-legacy-Cdcs7Jtp.js → NeighborhoodMatch-legacy-ZclKLwt_.js} +2 -2
- package/dist/assets/{NeighborhoodMatch-legacy-Cdcs7Jtp.js.map → NeighborhoodMatch-legacy-ZclKLwt_.js.map} +1 -1
- package/dist/assets/{NeighborhoodPropertyValueDrivers-B_lDfBFc.js → NeighborhoodPropertyValueDrivers-ZMwp6o_K.js} +2 -2
- package/dist/assets/{NeighborhoodPropertyValueDrivers-B_lDfBFc.js.map → NeighborhoodPropertyValueDrivers-ZMwp6o_K.js.map} +1 -1
- package/dist/assets/{NeighborhoodPropertyValueDrivers-legacy-TJNQuhau.js → NeighborhoodPropertyValueDrivers-legacy-ClpI1sTg.js} +2 -2
- package/dist/assets/{NeighborhoodPropertyValueDrivers-legacy-TJNQuhau.js.map → NeighborhoodPropertyValueDrivers-legacy-ClpI1sTg.js.map} +1 -1
- package/dist/assets/{NeighborhoodSchools-legacy-CC_o4gDE.js → NeighborhoodSchools-legacy-B9ymnDAp.js} +2 -2
- package/dist/assets/{NeighborhoodSchools-legacy-CC_o4gDE.js.map → NeighborhoodSchools-legacy-B9ymnDAp.js.map} +1 -1
- package/dist/assets/{NeighborhoodSchools-COVdlDmI.js → NeighborhoodSchools-vbUyiOld.js} +2 -2
- package/dist/assets/{NeighborhoodSchools-COVdlDmI.js.map → NeighborhoodSchools-vbUyiOld.js.map} +1 -1
- package/dist/assets/{NeighborhoodShowcase-BEYsGLqf.js → NeighborhoodShowcase-Doy-5q6f.js} +2 -2
- package/dist/assets/{NeighborhoodShowcase-BEYsGLqf.js.map → NeighborhoodShowcase-Doy-5q6f.js.map} +1 -1
- package/dist/assets/{NeighborhoodShowcase-legacy-DjbPOhlY.js → NeighborhoodShowcase-legacy-CRtfXTaI.js} +2 -2
- package/dist/assets/{NeighborhoodShowcase-legacy-DjbPOhlY.js.map → NeighborhoodShowcase-legacy-CRtfXTaI.js.map} +1 -1
- package/dist/assets/{NoDataContent-Ct6cseKS.js → NoDataContent-DgFnor3o.js} +2 -2
- package/dist/assets/{NoDataContent-Ct6cseKS.js.map → NoDataContent-DgFnor3o.js.map} +1 -1
- package/dist/assets/{NoDataContent-legacy-C6bZD_ML.js → NoDataContent-legacy-DlOuhAd2.js} +2 -2
- package/dist/assets/{NoDataContent-legacy-C6bZD_ML.js.map → NoDataContent-legacy-DlOuhAd2.js.map} +1 -1
- package/dist/assets/{ResizeWrapper-CxzTXRsZ.js → ResizeWrapper-DL4XvSn8.js} +2 -2
- package/dist/assets/{ResizeWrapper-CxzTXRsZ.js.map → ResizeWrapper-DL4XvSn8.js.map} +1 -1
- package/dist/assets/{ResizeWrapper-legacy-Cnj-xOLf.js → ResizeWrapper-legacy-B04qVKmq.js} +2 -2
- package/dist/assets/{ResizeWrapper-legacy-Cnj-xOLf.js.map → ResizeWrapper-legacy-B04qVKmq.js.map} +1 -1
- package/dist/assets/{ScoreCardList-C2UIFw9G.js → ScoreCardList-B6mNuZlx.js} +2 -2
- package/dist/assets/{ScoreCardList-C2UIFw9G.js.map → ScoreCardList-B6mNuZlx.js.map} +1 -1
- package/dist/assets/{ScoreCardList-legacy-D5rhovz4.js → ScoreCardList-legacy-DwEyIhTl.js} +2 -2
- package/dist/assets/{ScoreCardList-legacy-D5rhovz4.js.map → ScoreCardList-legacy-DwEyIhTl.js.map} +1 -1
- package/dist/assets/{ScoreIcon-Bpp4EF8q.js → ScoreIcon-Cg7RT3Vo.js} +2 -2
- package/dist/assets/{ScoreIcon-Bpp4EF8q.js.map → ScoreIcon-Cg7RT3Vo.js.map} +1 -1
- package/dist/assets/{ScoreIcon-legacy-iLznJMpz.js → ScoreIcon-legacy-RFFTRA8d.js} +2 -2
- package/dist/assets/{ScoreIcon-legacy-iLznJMpz.js.map → ScoreIcon-legacy-RFFTRA8d.js.map} +1 -1
- package/dist/assets/{Testing--n5Ro0Ek-EG8KLikO.js → Testing--n5Ro0Ek-D8nt7Y7q.js} +2 -2
- package/dist/assets/{Testing--n5Ro0Ek-EG8KLikO.js.map → Testing--n5Ro0Ek-D8nt7Y7q.js.map} +1 -1
- package/dist/assets/{Testing--n5Ro0Ek-legacy-CLVqeABo.js → Testing--n5Ro0Ek-legacy-CFjg8ooP.js} +2 -2
- package/dist/assets/{Testing--n5Ro0Ek-legacy-CLVqeABo.js.map → Testing--n5Ro0Ek-legacy-CFjg8ooP.js.map} +1 -1
- package/dist/assets/{Testing-BNJwzbRK-CNg1O9DZ.js → Testing-BNJwzbRK-bFZ7P8-6.js} +2 -2
- package/dist/assets/{Testing-BNJwzbRK-CNg1O9DZ.js.map → Testing-BNJwzbRK-bFZ7P8-6.js.map} +1 -1
- package/dist/assets/{Testing-BNJwzbRK-legacy-CHlUAxxR.js → Testing-BNJwzbRK-legacy-BtTaGg-R.js} +2 -2
- package/dist/assets/{Testing-BNJwzbRK-legacy-CHlUAxxR.js.map → Testing-BNJwzbRK-legacy-BtTaGg-R.js.map} +1 -1
- package/dist/assets/{Testing-CoRLhmNT-CZbxquD7.js → Testing-CoRLhmNT-hFm6GYEL.js} +2 -2
- package/dist/assets/{Testing-CoRLhmNT-CZbxquD7.js.map → Testing-CoRLhmNT-hFm6GYEL.js.map} +1 -1
- package/dist/assets/{Testing-CoRLhmNT-legacy-B5x3S7nT.js → Testing-CoRLhmNT-legacy-BQsiB3kU.js} +2 -2
- package/dist/assets/{Testing-CoRLhmNT-legacy-B5x3S7nT.js.map → Testing-CoRLhmNT-legacy-BQsiB3kU.js.map} +1 -1
- package/dist/assets/{Testing-DGUeGxdc-borOpe6x.js → Testing-DGUeGxdc-J7Bsk7t7.js} +2 -2
- package/dist/assets/{Testing-DGUeGxdc-borOpe6x.js.map → Testing-DGUeGxdc-J7Bsk7t7.js.map} +1 -1
- package/dist/assets/{Testing-DGUeGxdc-legacy-CW1DFsnU.js → Testing-DGUeGxdc-legacy-BGL3YPsM.js} +2 -2
- package/dist/assets/{Testing-DGUeGxdc-legacy-CW1DFsnU.js.map → Testing-DGUeGxdc-legacy-BGL3YPsM.js.map} +1 -1
- package/dist/assets/{Testing-DzWAcbhL-B4HmQQAb.js → Testing-DzWAcbhL-hsoSXEFw.js} +2 -2
- package/dist/assets/{Testing-DzWAcbhL-B4HmQQAb.js.map → Testing-DzWAcbhL-hsoSXEFw.js.map} +1 -1
- package/dist/assets/{Testing-DzWAcbhL-legacy-Bxr9W4nv.js → Testing-DzWAcbhL-legacy-64fvk5WE.js} +2 -2
- package/dist/assets/{Testing-DzWAcbhL-legacy-Bxr9W4nv.js.map → Testing-DzWAcbhL-legacy-64fvk5WE.js.map} +1 -1
- package/dist/assets/{TitleHeader-DcqFVLw0.js → TitleHeader-Dj1tNqDf.js} +2 -2
- package/dist/assets/{TitleHeader-DcqFVLw0.js.map → TitleHeader-Dj1tNqDf.js.map} +1 -1
- package/dist/assets/{TitleHeader-legacy-BPZzovWy.js → TitleHeader-legacy-CWUtPHkh.js} +2 -2
- package/dist/assets/{TitleHeader-legacy-BPZzovWy.js.map → TitleHeader-legacy-CWUtPHkh.js.map} +1 -1
- package/dist/assets/{Trans-BiiDiriP.js → Trans-DXjW9BxJ.js} +2 -2
- package/dist/assets/{Trans-BiiDiriP.js.map → Trans-DXjW9BxJ.js.map} +1 -1
- package/dist/assets/{Trans-legacy-CrR8QHJy.js → Trans-legacy-Bwf3E-FV.js} +2 -2
- package/dist/assets/{Trans-legacy-CrR8QHJy.js.map → Trans-legacy-Bwf3E-FV.js.map} +1 -1
- package/dist/assets/{ValidateOptions-Bi7oExtq.js → ValidateOptions-DyF1Ukyh.js} +2 -2
- package/dist/assets/{ValidateOptions-Bi7oExtq.js.map → ValidateOptions-DyF1Ukyh.js.map} +1 -1
- package/dist/assets/{ValidateOptions-legacy-DNVt370k.js → ValidateOptions-legacy-B9Pj1AAc.js} +2 -2
- package/dist/assets/{ValidateOptions-legacy-DNVt370k.js.map → ValidateOptions-legacy-B9Pj1AAc.js.map} +1 -1
- package/dist/assets/{dist-B9e9e0gS.js → dist-CB0P4GqX.js} +2 -2
- package/dist/assets/{dist-B9e9e0gS.js.map → dist-CB0P4GqX.js.map} +1 -1
- package/dist/assets/{dist-legacy-CHceR0tu.js → dist-legacy-BE8N8DIu.js} +2 -2
- package/dist/assets/{dist-legacy-CHceR0tu.js.map → dist-legacy-BE8N8DIu.js.map} +1 -1
- package/dist/assets/{getMapProviderConfig-DshfQt_F.js → getMapProviderConfig-Cq2tbhEP.js} +3 -3
- package/dist/assets/{getMapProviderConfig-DshfQt_F.js.map → getMapProviderConfig-Cq2tbhEP.js.map} +1 -1
- package/dist/assets/{getMapProviderConfig-legacy-BvkFz-sz.js → getMapProviderConfig-legacy-DRKsbPue.js} +2 -2
- package/dist/assets/{getMapProviderConfig-legacy-BvkFz-sz.js.map → getMapProviderConfig-legacy-DRKsbPue.js.map} +1 -1
- package/dist/assets/index-BLzX2sJY.js +3 -0
- package/dist/assets/index-BLzX2sJY.js.map +1 -0
- package/dist/assets/{index-legacy-DmO1-JVm.js → index-legacy-TtLgEE7L.js} +2 -2
- package/dist/assets/index-legacy-TtLgEE7L.js.map +1 -0
- package/dist/assets/{index.es-CoIP10OR.js → index.es-C-sgF721.js} +2 -2
- package/dist/assets/{index.es-CoIP10OR.js.map → index.es-C-sgF721.js.map} +1 -1
- package/dist/assets/{index.es-legacy-CwO7r-Dt.js → index.es-legacy-DSXQCaHP.js} +2 -2
- package/dist/assets/{index.es-legacy-CwO7r-Dt.js.map → index.es-legacy-DSXQCaHP.js.map} +1 -1
- package/dist/assets/{mapbox-jb8Zev6T-CRa8nPW8.js → mapbox-jb8Zev6T-D669-nQA.js} +2 -2
- package/dist/assets/{mapbox-jb8Zev6T-CRa8nPW8.js.map → mapbox-jb8Zev6T-D669-nQA.js.map} +1 -1
- package/dist/assets/{mapbox-jb8Zev6T-legacy-BHd691KT.js → mapbox-jb8Zev6T-legacy-BakhHKBi.js} +2 -2
- package/dist/assets/{mapbox-jb8Zev6T-legacy-BHd691KT.js.map → mapbox-jb8Zev6T-legacy-BakhHKBi.js.map} +1 -1
- package/dist/assets/{maplibre-CUYkxr-D-Bd2zI-jg.js → maplibre-CUYkxr-D-CJAd5mUh.js} +2 -2
- package/dist/assets/{maplibre-CUYkxr-D-Bd2zI-jg.js.map → maplibre-CUYkxr-D-CJAd5mUh.js.map} +1 -1
- package/dist/assets/{maplibre-CUYkxr-D-legacy-DtZmB5qu.js → maplibre-CUYkxr-D-legacy-C7G7lNbu.js} +2 -2
- package/dist/assets/{maplibre-CUYkxr-D-legacy-DtZmB5qu.js.map → maplibre-CUYkxr-D-legacy-C7G7lNbu.js.map} +1 -1
- package/dist/assets/neighborhood-fallback-CI_Ro8Y3.js.map +1 -1
- package/dist/assets/neighborhood-fallback-legacy-BVguI_1R.js.map +1 -1
- package/dist/assets/{sdks-CuW4Djod.js → sdks-C9bPocUu.js} +2 -2
- package/dist/assets/{sdks-CuW4Djod.js.map → sdks-C9bPocUu.js.map} +1 -1
- package/dist/assets/{sdks-legacy-CWRbdzCl.js → sdks-legacy-Dd5HUZAr.js} +2 -2
- package/dist/assets/{sdks-legacy-CWRbdzCl.js.map → sdks-legacy-Dd5HUZAr.js.map} +1 -1
- package/dist/assets/{useDemographicsData-legacy-BydgmVxf.js → useDemographicsData-legacy-DtyUwAi8.js} +2 -2
- package/dist/assets/{useDemographicsData-legacy-BydgmVxf.js.map → useDemographicsData-legacy-DtyUwAi8.js.map} +1 -1
- package/dist/assets/{useDemographicsData-y8UgvH09.js → useDemographicsData-wPcQ8WH8.js} +2 -2
- package/dist/assets/{useDemographicsData-y8UgvH09.js.map → useDemographicsData-wPcQ8WH8.js.map} +1 -1
- package/dist/assets/{useGeographies-CTn6gk-Q.js → useGeographies-DbGT9Trs.js} +2 -2
- package/dist/assets/{useGeographies-CTn6gk-Q.js.map → useGeographies-DbGT9Trs.js.map} +1 -1
- package/dist/assets/{useGeographies-legacy-BG5-avO1.js → useGeographies-legacy-D5Sw2YSV.js} +2 -2
- package/dist/assets/{useGeographies-legacy-BG5-avO1.js.map → useGeographies-legacy-D5Sw2YSV.js.map} +1 -1
- package/dist/assets/{useIsMobile-CFbJXB5u.js → useIsMobile-Cg2JCJAy.js} +2 -2
- package/dist/assets/{useIsMobile-CFbJXB5u.js.map → useIsMobile-Cg2JCJAy.js.map} +1 -1
- package/dist/assets/{useIsMobile-legacy-DTVBSpF3.js → useIsMobile-legacy-V7KQv1D5.js} +2 -2
- package/dist/assets/{useIsMobile-legacy-DTVBSpF3.js.map → useIsMobile-legacy-V7KQv1D5.js.map} +1 -1
- package/dist/assets/{useLocation-DdJbm9TZ.js → useLocation-B4ntmDa0.js} +2 -2
- package/dist/assets/{useLocation-DdJbm9TZ.js.map → useLocation-B4ntmDa0.js.map} +1 -1
- package/dist/assets/{useLocation-legacy-Bt1WPwut.js → useLocation-legacy-BmlX8Dvb.js} +2 -2
- package/dist/assets/{useLocation-legacy-Bt1WPwut.js.map → useLocation-legacy-BmlX8Dvb.js.map} +1 -1
- package/dist/assets/{useProfiles-DrK6LfKa.js → useProfiles-DRwMqBnl.js} +2 -2
- package/dist/assets/{useProfiles-DrK6LfKa.js.map → useProfiles-DRwMqBnl.js.map} +1 -1
- package/dist/assets/{useProfiles-legacy-Cg-yR2CE.js → useProfiles-legacy-jRxj5PYQ.js} +2 -2
- package/dist/assets/{useProfiles-legacy-Cg-yR2CE.js.map → useProfiles-legacy-jRxj5PYQ.js.map} +1 -1
- package/dist/assets/{useSchools-wtdyLGlp.js → useSchools-BVum8z8-.js} +2 -2
- package/dist/assets/{useSchools-wtdyLGlp.js.map → useSchools-BVum8z8-.js.map} +1 -1
- package/dist/assets/{useSchools-legacy-DwyAxe2p.js → useSchools-legacy-CUYYEf7H.js} +2 -2
- package/dist/assets/{useSchools-legacy-DwyAxe2p.js.map → useSchools-legacy-CUYYEf7H.js.map} +1 -1
- package/dist/assets/{useScores-CnapwN0c.js → useScores-BPQlXmkW.js} +2 -2
- package/dist/assets/{useScores-CnapwN0c.js.map → useScores-BPQlXmkW.js.map} +1 -1
- package/dist/assets/{useScores-legacy-DE5QSjbJ.js → useScores-legacy-9pSoACyM.js} +2 -2
- package/dist/assets/{useScores-legacy-DE5QSjbJ.js.map → useScores-legacy-9pSoACyM.js.map} +1 -1
- package/dist/index.html +2 -2
- package/dist/types/i18n/en/localContent.d.ts +1 -0
- package/dist/types/i18n/en/localContent.d.ts.map +1 -1
- package/dist/types/i18n/en/localContent.js +1 -0
- package/dist/types/i18n/en/localContent.js.map +1 -1
- package/dist/types/i18n/fr/localContent.d.ts +1 -0
- package/dist/types/i18n/fr/localContent.d.ts.map +1 -1
- package/dist/types/i18n/fr/localContent.js +1 -0
- package/dist/types/i18n/fr/localContent.js.map +1 -1
- package/dist/types/i18n/index.d.ts +1 -0
- package/dist/types/i18n/index.d.ts.map +1 -1
- package/dist/types/sdks/LocalContent/components/CommuteCalculator/Root/Form/Select/index.d.ts.map +1 -1
- package/dist/types/sdks/LocalContent/components/CommuteCalculator/Root/Form/Select/index.js +1 -1
- package/dist/types/sdks/LocalContent/components/CommuteCalculator/Root/Form/Select/index.js.map +1 -1
- package/dist/types/sdks/LocalContent/components/CommuteCalculator/Root/Form/Select/index.test.d.ts +2 -0
- package/dist/types/sdks/LocalContent/components/CommuteCalculator/Root/Form/Select/index.test.d.ts.map +1 -0
- package/dist/types/sdks/LocalContent/components/CommuteCalculator/Root/Form/Select/index.test.js +26 -0
- package/dist/types/sdks/LocalContent/components/CommuteCalculator/Root/Form/Select/index.test.js.map +1 -0
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/Header/index.d.ts.map +1 -1
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/Header/index.js +2 -2
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/Header/index.js.map +1 -1
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/Header/index.test.js +23 -0
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/Header/index.test.js.map +1 -1
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/context.d.ts +1 -0
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/context.d.ts.map +1 -1
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/context.js +4 -2
- package/dist/types/sdks/LocalContent/components/Sidebar/Root/context.js.map +1 -1
- package/package.json +1 -1
- package/dist/assets/LocalContent-legacy-Dn8xkYe1.js +0 -2
- package/dist/assets/index-D95PGgh0.js +0 -3
- package/dist/assets/index-D95PGgh0.js.map +0 -1
- package/dist/assets/index-legacy-DmO1-JVm.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborhoodFeatured-legacy-DhNugi04.js","names":[],"sources":["../../src/sdks/NeighborhoodFeatured/hooks/useFavoriteNeighborhoods.ts","../../src/sdks/NeighborhoodFeatured/types.ts","../../src/sdks/NeighborhoodFeatured/context.tsx","../../src/sdks/NeighborhoodFeatured/components/Content/styles.ts","../../src/sdks/NeighborhoodFeatured/components/Content/index.tsx","../../src/sdks/NeighborhoodFeatured/schema.ts","../../src/sdks/NeighborhoodFeatured/index.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { NeighborhoodFeaturedProps } from \"../types\";\nimport errorTracker from \"~/utils/errorTracker\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport type { ApiNeighborhood } from \"~/types/neighborhoods\";\nimport { transformNeighborhood } from \"~/utils/transformNeighborhood\";\n\nconst ENVIRONMENTS = {\n dev: \"https://api-qa.locallogic.co/neighborhood-management-v1\",\n qa: \"https://api-qa.locallogic.co/neighborhood-management-v1\",\n prod: \"https://api.locallogic.co/neighborhood-management-v1\",\n};\n\nexport function useFavoriteNeighborhoods({\n externalId,\n}: {\n externalId?: string;\n}) {\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const baseURL =\n ENVIRONMENTS[sdkState.globalOptions?.environment?.api || \"prod\"];\n\n const fetchMyNeighborhoods = () =>\n fetch(\n `${baseURL}/sdk/favorite-neighborhoods/${externalId}?include=configurations`,\n {\n headers: {\n Accept: \"application/json\",\n Authorization: sdkState.apiKey as string,\n \"x-ll-sdk-name\": \"neighborhood-featured\",\n },\n method: \"GET\",\n },\n )\n .then((response) => {\n if ([204, 404].includes(response.status)) {\n return null;\n }\n\n if (response.status >= 300) {\n throw new Error(`Request failed with status ${response.status}`);\n }\n\n return response.json();\n })\n .then((response) => ({\n featured: transformNeighborhood(\n sdkState.globalOptions?.locale || \"en\",\n response.featured,\n response.configurations[response.featured?.geog_id],\n ),\n favorites: response.favorites?.map((neighborhood: ApiNeighborhood) =>\n transformNeighborhood(\n sdkState.globalOptions?.locale || \"en\",\n neighborhood,\n response.configurations[neighborhood?.geog_id],\n ),\n ),\n }))\n .catch((error) => {\n errorTracker.captureException(error);\n\n throw error;\n });\n\n return useQuery({\n queryKey: [\"myNeighborhoods\"],\n queryFn: fetchMyNeighborhoods,\n enabled: !!externalId && !!sdkState.apiKey,\n });\n}\n","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n exploreShowcaseURL?: string;\n urlSchemaSpacer?: string;\n singleNeighborhoodURLSchema?: string;\n};\n\nexport type NeighborhoodFeaturedProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-featured-Viewed\",\n NEIGHBORHOOD_CARD_CLICKED = \"neighborhood-featured-Card-Clicked\",\n EXPLORE_MORE_NEIGHBORHOODS_CLICKED = \"neighborhood-featured-Explore-Neighborhoods-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_featured_Card_Clicked\",\n EXPLORE_MORE_NEIGHBORHOODS_CLICKED = \"neighborhood_featured_Explore_Neighborhoods_Clicked\",\n}\n","import React, { useContext } from \"react\";\nimport { useFavoriteNeighborhoods } from \"./hooks/useFavoriteNeighborhoods\";\nimport {\n type NeighborhoodFeaturedProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\n\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport type { FavoriteNeighborhoods } from \"~/types/neighborhoods\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n isFetched: boolean;\n neighborhoods?: FavoriteNeighborhoods;\n};\n\nconst NeighborhoodFeaturedContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodFeatured = () => useContext(NeighborhoodFeaturedContext);\n\nconst NeighborhoodFeaturedProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { data, isFetched, isLoading } = useFavoriteNeighborhoods({\n externalId: sdkState.globalOptions?.externalId,\n });\n\n if (!sdkState.globalOptions?.externalId) {\n throw new Error(\"externalId is required to launch the SDK\");\n }\n\n return (\n <NeighborhoodFeaturedContext.Provider\n value={{\n isFetched,\n isLoading,\n neighborhoods: data,\n }}\n >\n {children}\n </NeighborhoodFeaturedContext.Provider>\n );\n};\n\nexport { useNeighborhoodFeatured, NeighborhoodFeaturedProvider };\n","export const favorites = ` \n place-items-center my-4\n flex justify-between gap-4\n\n flex-col md:flex-row\n`;\n\nexport const card = `\n flex-1 w-full\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n`;\n\nexport const container = `w-full py-2`;\n\nexport const featured = `\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n`;\n\nexport const button = `\n border border-gray-200 rounded-md\n text-ll-primary py-3 px-6\n text-center\n w-96 mx-auto max-w-full block\n\n hover:border-ll-primary\n hover:text-ll-primary\n\n duration-100 transition-colors\n`;\n\nexport const loadingContent = `w-full h-full flex justify-center align-cennter`;\nexport const blankState = `w-full h-full bg-ll-surface py-6 px-5 rounded-md text-ll-placeholder`;\n","import React from \"react\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { LoadingSpinner } from \"~/components/deprecated\";\nimport { useTracking } from \"~/tracking\";\n\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useNeighborhoodFeatured } from \"~/sdks/NeighborhoodFeatured/context\";\nimport { Neighborhood } from \"~/types/neighborhoods\";\nimport {\n AnalyticsEvents,\n NeighborhoodFeaturedProps,\n TrackingPipelineEvents,\n} from \"~/sdks/NeighborhoodFeatured/types\";\n\nimport { getNeighborhoodURLFromSchema } from \"~/utils/formatters/neighborhoodURLSchema\";\n\nimport { NeighborhoodCard } from \"~/components/NeighborhoodCard\";\n\nexport const Content = () => {\n const { t } = useTranslation(\"neighborhoodFeatured\");\n const tracking = useTracking();\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const exploreGatewayURL = sdkState.options?.exploreShowcaseURL || undefined;\n const urlSpacer = sdkState.options?.urlSchemaSpacer || \"-\";\n\n const { neighborhoods, isFetched, isLoading } = useNeighborhoodFeatured();\n const singleNeighborhoodURLSchema =\n sdkState.options?.singleNeighborhoodURLSchema || undefined;\n\n if (!neighborhoods?.featured && neighborhoods?.favorites?.length === 0) {\n return null;\n }\n\n const handleExploreGateway = () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.EXPLORE_MORE_NEIGHBORHOODS_CLICKED,\n eventAttributes: [\n {\n label: \"externalId\",\n data: sdkState.globalOptions?.externalId,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.EXPLORE_MORE_NEIGHBORHOODS_CLICKED,\n eventAttributes: {\n ll_externalID: sdkState.globalOptions?.externalId,\n },\n });\n };\n\n const handleNeighborhoodCardClick =\n (neighborhood: Neighborhood, label: string) => () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: [\n {\n label: \"geogID\",\n data: neighborhood.geogId,\n },\n {\n label: \"name\",\n data: neighborhood.name,\n },\n {\n label: \"label\",\n data: label,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: {\n ll_geogID: neighborhood.geogId,\n ll_name: neighborhood.name,\n ll_label: label,\n },\n });\n };\n\n return (\n <>\n {!isFetched ? (\n <div className={styles.loadingContent}>\n <LoadingSpinner image />\n </div>\n ) : (\n <>\n {neighborhoods ? (\n <div className={styles.container}>\n <div className={styles.featured} data-is-loading={isLoading}>\n {neighborhoods?.featured && (\n <div\n onClick={handleNeighborhoodCardClick(\n neighborhoods?.featured,\n \"featured\",\n )}\n >\n <NeighborhoodCard\n key={neighborhoods?.featured.geogId}\n isFeatured\n neighborhood={neighborhoods?.featured}\n href={\n singleNeighborhoodURLSchema &&\n getNeighborhoodURLFromSchema(\n singleNeighborhoodURLSchema,\n neighborhoods?.featured,\n urlSpacer,\n )\n }\n />\n </div>\n )}\n </div>\n\n <div className={styles.favorites}>\n {neighborhoods?.favorites?.map((neighborhood, index) => (\n <div\n className={styles.card}\n key={neighborhood.geogId}\n data-is-loading={isLoading}\n onClick={handleNeighborhoodCardClick(\n neighborhood,\n `favorite_${index + 1}`,\n )}\n >\n <NeighborhoodCard\n neighborhood={neighborhood}\n href={\n singleNeighborhoodURLSchema &&\n getNeighborhoodURLFromSchema(\n singleNeighborhoodURLSchema,\n neighborhood,\n urlSpacer,\n )\n }\n />\n </div>\n ))}\n </div>\n\n {exploreGatewayURL && (\n <a\n onClick={handleExploreGateway}\n className={styles.button}\n href={exploreGatewayURL}\n target=\"_parent\"\n rel=\"noreferrer\"\n >\n {t(`exploreMoreNeighborhoods`)}\n </a>\n )}\n </div>\n ) : (\n <div className={styles.blankState}>\n <Trans\n i18nKey=\"noData\"\n t={t}\n components={{\n LinkToHub: (\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={import.meta.env.VITE_NEIGHBORHOOD_MANAGEMENT_URL}\n />\n ),\n bold: <strong />,\n }}\n />\n </div>\n )}\n </>\n )}\n </>\n );\n};\n","import { ObjectSchema, number, object, string } from \"yup\";\nimport { Options } from \"./types\";\n\nexport const schema: ObjectSchema<Options> = object({\n // We don't need lat/lng/geographyId for the NeighborhoodFeatured SDK\n // But we need to keep it due to how the SDK library is currently implemented\n lat: number().optional(),\n lng: number().optional(),\n geographyId: string().optional(),\n exploreShowcaseURL: string().optional(),\n urlSchemaSpacer: string().length(1).optional(),\n singleNeighborhoodURLSchema: string().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport \"~/assets/styles/old-tailwind.css\";\nimport type { NeighborhoodFeaturedProps } from \"./types\";\nimport { NeighborhoodFeaturedProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodFeatured.key);\n\nconst NeighborhoodFeatured = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Featured\"\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_FEATURED}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodFeatured}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_FEATURED,\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 <NeighborhoodFeaturedProvider>\n <Content />\n </NeighborhoodFeaturedProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodFeatured;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NeighborhoodFeatured-legacy-wwLydNFz.js","names":[],"sources":["../../src/sdks/NeighborhoodFeatured/hooks/useFavoriteNeighborhoods.ts","../../src/sdks/NeighborhoodFeatured/types.ts","../../src/sdks/NeighborhoodFeatured/context.tsx","../../src/sdks/NeighborhoodFeatured/components/Content/styles.ts","../../src/sdks/NeighborhoodFeatured/components/Content/index.tsx","../../src/sdks/NeighborhoodFeatured/schema.ts","../../src/sdks/NeighborhoodFeatured/index.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { NeighborhoodFeaturedProps } from \"../types\";\nimport errorTracker from \"~/utils/errorTracker\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport type { ApiNeighborhood } from \"~/types/neighborhoods\";\nimport { transformNeighborhood } from \"~/utils/transformNeighborhood\";\n\nconst ENVIRONMENTS = {\n dev: \"https://api-qa.locallogic.co/neighborhood-management-v1\",\n qa: \"https://api-qa.locallogic.co/neighborhood-management-v1\",\n prod: \"https://api.locallogic.co/neighborhood-management-v1\",\n};\n\nexport function useFavoriteNeighborhoods({\n externalId,\n}: {\n externalId?: string;\n}) {\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const baseURL =\n ENVIRONMENTS[sdkState.globalOptions?.environment?.api || \"prod\"];\n\n const fetchMyNeighborhoods = () =>\n fetch(\n `${baseURL}/sdk/favorite-neighborhoods/${externalId}?include=configurations`,\n {\n headers: {\n Accept: \"application/json\",\n Authorization: sdkState.apiKey as string,\n \"x-ll-sdk-name\": \"neighborhood-featured\",\n },\n method: \"GET\",\n },\n )\n .then((response) => {\n if ([204, 404].includes(response.status)) {\n return null;\n }\n\n if (response.status >= 300) {\n throw new Error(`Request failed with status ${response.status}`);\n }\n\n return response.json();\n })\n .then((response) => ({\n featured: transformNeighborhood(\n sdkState.globalOptions?.locale || \"en\",\n response.featured,\n response.configurations[response.featured?.geog_id],\n ),\n favorites: response.favorites?.map((neighborhood: ApiNeighborhood) =>\n transformNeighborhood(\n sdkState.globalOptions?.locale || \"en\",\n neighborhood,\n response.configurations[neighborhood?.geog_id],\n ),\n ),\n }))\n .catch((error) => {\n errorTracker.captureException(error);\n\n throw error;\n });\n\n return useQuery({\n queryKey: [\"myNeighborhoods\"],\n queryFn: fetchMyNeighborhoods,\n enabled: !!externalId && !!sdkState.apiKey,\n });\n}\n","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n exploreShowcaseURL?: string;\n urlSchemaSpacer?: string;\n singleNeighborhoodURLSchema?: string;\n};\n\nexport type NeighborhoodFeaturedProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-featured-Viewed\",\n NEIGHBORHOOD_CARD_CLICKED = \"neighborhood-featured-Card-Clicked\",\n EXPLORE_MORE_NEIGHBORHOODS_CLICKED = \"neighborhood-featured-Explore-Neighborhoods-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_featured_Card_Clicked\",\n EXPLORE_MORE_NEIGHBORHOODS_CLICKED = \"neighborhood_featured_Explore_Neighborhoods_Clicked\",\n}\n","import React, { useContext } from \"react\";\nimport { useFavoriteNeighborhoods } from \"./hooks/useFavoriteNeighborhoods\";\nimport {\n type NeighborhoodFeaturedProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\n\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport type { FavoriteNeighborhoods } from \"~/types/neighborhoods\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n isFetched: boolean;\n neighborhoods?: FavoriteNeighborhoods;\n};\n\nconst NeighborhoodFeaturedContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodFeatured = () => useContext(NeighborhoodFeaturedContext);\n\nconst NeighborhoodFeaturedProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { data, isFetched, isLoading } = useFavoriteNeighborhoods({\n externalId: sdkState.globalOptions?.externalId,\n });\n\n if (!sdkState.globalOptions?.externalId) {\n throw new Error(\"externalId is required to launch the SDK\");\n }\n\n return (\n <NeighborhoodFeaturedContext.Provider\n value={{\n isFetched,\n isLoading,\n neighborhoods: data,\n }}\n >\n {children}\n </NeighborhoodFeaturedContext.Provider>\n );\n};\n\nexport { useNeighborhoodFeatured, NeighborhoodFeaturedProvider };\n","export const favorites = ` \n place-items-center my-4\n flex justify-between gap-4\n\n flex-col md:flex-row\n`;\n\nexport const card = `\n flex-1 w-full\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n`;\n\nexport const container = `w-full py-2`;\n\nexport const featured = `\n data-[is-loading=true]:bg-gray-200\n data-[is-loading=true]:animate-pulse\n`;\n\nexport const button = `\n border border-gray-200 rounded-md\n text-ll-primary py-3 px-6\n text-center\n w-96 mx-auto max-w-full block\n\n hover:border-ll-primary\n hover:text-ll-primary\n\n duration-100 transition-colors\n`;\n\nexport const loadingContent = `w-full h-full flex justify-center align-cennter`;\nexport const blankState = `w-full h-full bg-ll-surface py-6 px-5 rounded-md text-ll-placeholder`;\n","import React from \"react\";\nimport { useTranslation, Trans } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { LoadingSpinner } from \"~/components/deprecated\";\nimport { useTracking } from \"~/tracking\";\n\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useNeighborhoodFeatured } from \"~/sdks/NeighborhoodFeatured/context\";\nimport { Neighborhood } from \"~/types/neighborhoods\";\nimport {\n AnalyticsEvents,\n NeighborhoodFeaturedProps,\n TrackingPipelineEvents,\n} from \"~/sdks/NeighborhoodFeatured/types\";\n\nimport { getNeighborhoodURLFromSchema } from \"~/utils/formatters/neighborhoodURLSchema\";\n\nimport { NeighborhoodCard } from \"~/components/NeighborhoodCard\";\n\nexport const Content = () => {\n const { t } = useTranslation(\"neighborhoodFeatured\");\n const tracking = useTracking();\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const exploreGatewayURL = sdkState.options?.exploreShowcaseURL || undefined;\n const urlSpacer = sdkState.options?.urlSchemaSpacer || \"-\";\n\n const { neighborhoods, isFetched, isLoading } = useNeighborhoodFeatured();\n const singleNeighborhoodURLSchema =\n sdkState.options?.singleNeighborhoodURLSchema || undefined;\n\n if (!neighborhoods?.featured && neighborhoods?.favorites?.length === 0) {\n return null;\n }\n\n const handleExploreGateway = () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.EXPLORE_MORE_NEIGHBORHOODS_CLICKED,\n eventAttributes: [\n {\n label: \"externalId\",\n data: sdkState.globalOptions?.externalId,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.EXPLORE_MORE_NEIGHBORHOODS_CLICKED,\n eventAttributes: {\n ll_externalID: sdkState.globalOptions?.externalId,\n },\n });\n };\n\n const handleNeighborhoodCardClick =\n (neighborhood: Neighborhood, label: string) => () => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: [\n {\n label: \"geogID\",\n data: neighborhood.geogId,\n },\n {\n label: \"name\",\n data: neighborhood.name,\n },\n {\n label: \"label\",\n data: label,\n },\n ],\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.NEIGHBORHOOD_CARD_CLICKED,\n eventAttributes: {\n ll_geogID: neighborhood.geogId,\n ll_name: neighborhood.name,\n ll_label: label,\n },\n });\n };\n\n return (\n <>\n {!isFetched ? (\n <div className={styles.loadingContent}>\n <LoadingSpinner image />\n </div>\n ) : (\n <>\n {neighborhoods ? (\n <div className={styles.container}>\n <div className={styles.featured} data-is-loading={isLoading}>\n {neighborhoods?.featured && (\n <div\n onClick={handleNeighborhoodCardClick(\n neighborhoods?.featured,\n \"featured\",\n )}\n >\n <NeighborhoodCard\n key={neighborhoods?.featured.geogId}\n isFeatured\n neighborhood={neighborhoods?.featured}\n href={\n singleNeighborhoodURLSchema &&\n getNeighborhoodURLFromSchema(\n singleNeighborhoodURLSchema,\n neighborhoods?.featured,\n urlSpacer,\n )\n }\n />\n </div>\n )}\n </div>\n\n <div className={styles.favorites}>\n {neighborhoods?.favorites?.map((neighborhood, index) => (\n <div\n className={styles.card}\n key={neighborhood.geogId}\n data-is-loading={isLoading}\n onClick={handleNeighborhoodCardClick(\n neighborhood,\n `favorite_${index + 1}`,\n )}\n >\n <NeighborhoodCard\n neighborhood={neighborhood}\n href={\n singleNeighborhoodURLSchema &&\n getNeighborhoodURLFromSchema(\n singleNeighborhoodURLSchema,\n neighborhood,\n urlSpacer,\n )\n }\n />\n </div>\n ))}\n </div>\n\n {exploreGatewayURL && (\n <a\n onClick={handleExploreGateway}\n className={styles.button}\n href={exploreGatewayURL}\n target=\"_parent\"\n rel=\"noreferrer\"\n >\n {t(`exploreMoreNeighborhoods`)}\n </a>\n )}\n </div>\n ) : (\n <div className={styles.blankState}>\n <Trans\n i18nKey=\"noData\"\n t={t}\n components={{\n LinkToHub: (\n <a\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={import.meta.env.VITE_NEIGHBORHOOD_MANAGEMENT_URL}\n />\n ),\n bold: <strong />,\n }}\n />\n </div>\n )}\n </>\n )}\n </>\n );\n};\n","import { ObjectSchema, number, object, string } from \"yup\";\nimport { Options } from \"./types\";\n\nexport const schema: ObjectSchema<Options> = object({\n // We don't need lat/lng/geographyId for the NeighborhoodFeatured SDK\n // But we need to keep it due to how the SDK library is currently implemented\n lat: number().optional(),\n lng: number().optional(),\n geographyId: string().optional(),\n exploreShowcaseURL: string().optional(),\n urlSchemaSpacer: string().length(1).optional(),\n singleNeighborhoodURLSchema: string().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport \"~/assets/styles/old-tailwind.css\";\nimport type { NeighborhoodFeaturedProps } from \"./types\";\nimport { NeighborhoodFeaturedProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodFeatured.key);\n\nconst NeighborhoodFeatured = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodFeaturedProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Featured\"\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_FEATURED}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodFeatured}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_FEATURED,\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 <NeighborhoodFeaturedProvider>\n <Content />\n </NeighborhoodFeaturedProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodFeatured;\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-C_ttsnZz.js";import{l as a}from"./google-maps-vendor-DvfEEdRU.js";import{a as t,c as o,d as s,f as n,g as l,n as i,o as r,r as p,t as d,u as g}from"./sdks-
|
|
2
|
-
//# sourceMappingURL=NeighborhoodHero-
|
|
1
|
+
import{a as e}from"./rolldown-runtime-C_ttsnZz.js";import{l as a}from"./google-maps-vendor-DvfEEdRU.js";import{a as t,c as o,d as s,f as n,g as l,n as i,o as r,r as p,t as d,u as g}from"./sdks-C9bPocUu.js";import{t as m}from"./MapPin.es-CeIIzhD6.js";import{Y as c,i as u,n as h}from"./index-BLzX2sJY.js";import{t as x}from"./useGeographies-DbGT9Trs.js";/* empty css */import{t as b}from"./ResizeWrapper-DL4XvSn8.js";import{t as y}from"./ValidateOptions-DyF1Ukyh.js";import{t as f}from"./useIsMobile-Cg2JCJAy.js";import{t as j}from"./useProfiles-DRwMqBnl.js";var k=e(a(),1),v=function(e){return e.SDK_VIEWED="neighborhood-hero-Viewed",e}({}),I=function(e){return e.SDK_VIEWED="sdk_viewed",e}({}),E=c(),O=k.createContext({}),_=()=>(0,k.useContext)(O),w=({children:e})=>{const{sdkState:a}=h(),t=a.globalOptions?.locale||"en",o=r(),s=f();u(()=>{o.postEvent({eventType:v.SDK_VIEWED}),o.trackAnalyticsEvent({eventName:I.SDK_VIEWED})});const{isLoading:n,data:l}=x({geogID:a.options?.geographyId,location:{lat:a.options?.lat,lng:a.options?.lng},externalId:a?.globalOptions?.externalId}),{data:i,isFetching:p}=j({geogID:a.options?.geographyId,location:{lat:a.options?.lat,lng:a.options?.lng},externalId:a?.globalOptions?.externalId}),d=(0,k.useMemo)(()=>Object.values(l||{})[0],[n,l]),g=(0,k.useMemo)(()=>n||p,[n,p]),m=(0,k.useMemo)(()=>{const e=(a.options?.image||"").toLocaleLowerCase();return"hide"===e?null:"string"==typeof d?.image_url&&d?.image_url.length>0?d.image_url:"string"==typeof a.options?.image&&"nofallback"!==e&&"http"===e.substring(0,4)?a.options.image:"nofallback"===e?null:s?"/sdks-app/v1/assets/mobile_fallback-DExTxyjy.jpg":"/sdks-app/v1/assets/desktop_fallback-Hx4IEAqY.jpg"},[d?.image_url,a?.options?.image,s]),c=(0,k.useMemo)(()=>({isLoading:g,locale:t,geography:d,isFallbackImage:null!==m&&["/sdks-app/v1/assets/mobile_fallback-DExTxyjy.jpg","/sdks-app/v1/assets/desktop_fallback-Hx4IEAqY.jpg"].includes(m),neighborhoodImage:m,neighborhoodSummary:i?.profiles.summary}),[g,t,d,m,i?.profiles?.summary,a]);return(0,E.jsx)(O.Provider,{value:c,children:e})},D=()=>{const{isLoading:e,locale:a,geography:t,neighborhoodImage:o,isFallbackImage:s}=_(),n=(0,k.useMemo)(()=>o?{backgroundImage:`url("${o}")`}:{},[o]);return e?null:(0,E.jsx)("div",{"data-testid":"header-container",className:"\n h-72 w-full\n bg-cover bg-no-repeat bg-center\n group\n",style:n,"data-has-image":null!==o,"data-use-backdrop":!s&&null!==o,children:(0,E.jsxs)("div",{className:"\n h-full w-full px-6 pt-6 pb-px lg:p-6\n flex flex-col gap-6 text-center justify-center\n\n group-data-[has-image=false]:text-left\n group-data-[use-backdrop=true]:bg-base-black/30\n",children:[(0,E.jsx)(m,{className:"\n w-12 h-12 text-base-white mx-auto\n\n group-data-[use-backdrop=false]:text-primary-100\n group-data-[has-image=false]:mx-0\n"}),(0,E.jsx)("h1",{"data-testid":"micro-location",className:"\n text-base-white text-4xl md:text-5xl font-bold\n group-data-[use-backdrop=false]:text-primary-100\n",children:t?.name?.[a]}),void 0!==t&&t?.level<30&&void 0!==t.city&&(0,E.jsx)("div",{"data-testid":"macro-location",className:"\n text-base-white text-2xl md:text-4xl -mt-3\n group-data-[use-backdrop=false]:text-primary-100\n",children:t?.city?.[a]})]})})},M=()=>{const{t:e}=l("neighborhoodHero"),{neighborhoodSummary:a,geography:t}=_();return a?(0,E.jsxs)("div",{className:"px-6 pt-6 pb-px lg:p-6 bg-gray-150/40","data-testid":"summary-container",children:[(0,E.jsx)("h2",{className:"\n text-primary-100 text-2xl font-semibold leading-7\n mb-2 lg:mb-2.5\n","data-testid":"summary-title",children:e("summaryTitle",{context:t&&t.level>=30?"area":void 0})}),(0,E.jsx)("p",{className:"\n text-base-black font-normal\n leading-5 lg:leading-6\n text-sm lg:text-lg\n","data-testid":"summary-description",children:a})]}):null},N=()=>(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(D,{}),(0,E.jsx)(M,{})]}),H=g({lat:s().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:s().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:n().optional(),image:n().optional()}).noUnknown(!0);o(i.neighborhoodWrap.key);var S=()=>{const{sdkState:e}=h(),a=f(),o=e.globalOptions?.locale||"en",s=(0,k.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,E.jsx)(b,{children:(0,E.jsx)(y,{sdk:"Neighborhood Hero",schema:H,options:e.options,children:(0,E.jsx)(p,{environment:e.globalOptions?.environment?.api,apiKey:e.apiKey,appearance:e.globalOptions?.appearance,locale:e.globalOptions?.locale,product:d.NEIGHBORHOOD_HERO,children:(0,E.jsx)(t,{trackingPipelineSettings:{apiKey:e.apiKey||""},analyticsSettings:i.neighborhoodWrap,meta:{clientId:e.clientId,productName:d.NEIGHBORHOOD_HERO,productVersion:"1.24.56"},attributes:{location:s,host:e.location,host_url:document.referrer,locale:o,isMobile:a},flags:{isDebugMode:!1},children:(0,E.jsx)(w,{children:(0,E.jsx)(N,{})})})})})})};export{S as default};
|
|
2
|
+
//# sourceMappingURL=NeighborhoodHero-IqemoCbl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborhoodHero-DADIHl6H.js","names":[],"sources":["../../src/sdks/NeighborhoodHero/assets/images/desktop_fallback.jpg","../../src/sdks/NeighborhoodHero/assets/images/mobile_fallback.jpg","../../src/sdks/NeighborhoodHero/types.ts","../../src/sdks/NeighborhoodHero/context.tsx","../../src/sdks/NeighborhoodHero/components/Header/styles.ts","../../src/sdks/NeighborhoodHero/components/Header/index.tsx","../../src/sdks/NeighborhoodHero/components/Summary/styles.ts","../../src/sdks/NeighborhoodHero/components/Summary/index.tsx","../../src/sdks/NeighborhoodHero/components/Content/index.tsx","../../src/sdks/NeighborhoodHero/schema.ts","../../src/sdks/NeighborhoodHero/index.tsx"],"sourcesContent":["export default \"__VITE_ASSET__U2YZxvNlcnuoWcGKwa9Wsw__\"","export default \"__VITE_ASSET__cLZLOsSELI_GmwKcVOKKRw__\"","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n image?: string;\n};\n\nexport type NeighborhoodHeroProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-hero-Viewed\",\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}\n","import React, { useContext, useMemo } from \"react\";\nimport type { Geography } from \"@local-logic/client\";\nimport DesktopFallback from \"./assets/images/desktop_fallback.jpg\";\nimport MobileFallback from \"./assets/images/mobile_fallback.jpg\";\nimport {\n type NeighborhoodHeroProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useProfiles } from \"~/features/clientLibrary/useProfiles\";\n\ninterface Location {\n label?: string;\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n isLoading: boolean;\n locale: \"en\" | \"fr\";\n geography?: Geography;\n neighborhoodImage: string | null;\n isFallbackImage: boolean;\n neighborhoodSummary?: string;\n};\n\nconst NeighborhoodHeroContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodHero = () => useContext(NeighborhoodHeroContext);\n\nconst NeighborhoodHeroProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n const isMobile = useIsMobile();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const { data: profilesData, isFetching: isProfilesFetching } = useProfiles({\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n });\n\n const geography = useMemo(() => {\n const geographiesArray = Object.values(geographyData || {});\n\n return geographiesArray[0];\n }, [isGeographyLoading, geographyData]);\n\n const isLoading = useMemo(\n () => isGeographyLoading || isProfilesFetching,\n [isGeographyLoading, isProfilesFetching],\n );\n\n const neighborhoodImage = useMemo(() => {\n const lowercaseOptionsImageValue = (\n sdkState.options?.image || \"\"\n ).toLocaleLowerCase();\n\n // Always hide the image if the option is set to \"hide\"\n if (lowercaseOptionsImageValue === \"hide\") {\n return null;\n }\n\n // If the geography has an image, use it by default\n if (\n typeof geography?.image_url === \"string\" &&\n geography?.image_url.length > 0\n ) {\n return geography.image_url as string;\n }\n\n // If the image option is set to a string, use it as the image (unless the string is \"noFallback\" which is obviuosly not an image)\n if (\n typeof sdkState.options?.image === \"string\" &&\n lowercaseOptionsImageValue !== \"nofallback\" &&\n lowercaseOptionsImageValue.substring(0, 4) === \"http\"\n ) {\n return sdkState.options.image;\n }\n\n // No fallback image\n if (lowercaseOptionsImageValue === \"nofallback\") {\n return null;\n }\n\n // Fallback image based on the device\n return isMobile ? MobileFallback : DesktopFallback;\n }, [geography?.image_url, sdkState?.options?.image, isMobile]);\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n locale,\n geography,\n isFallbackImage:\n neighborhoodImage !== null &&\n [MobileFallback, DesktopFallback].includes(neighborhoodImage),\n neighborhoodImage,\n neighborhoodSummary: profilesData?.profiles.summary,\n }),\n [\n isLoading,\n locale,\n geography,\n neighborhoodImage,\n profilesData?.profiles?.summary,\n sdkState,\n ],\n );\n\n return (\n <NeighborhoodHeroContext.Provider value={contextValue}>\n {children}\n </NeighborhoodHeroContext.Provider>\n );\n};\n\nexport { useNeighborhoodHero, NeighborhoodHeroProvider, type Location };\n","export const container = `\n h-72 w-full\n bg-cover bg-no-repeat bg-center\n group\n`;\n\nexport const gradientContainer = `\n h-full w-full px-6 pt-6 pb-px lg:p-6\n flex flex-col gap-6 text-center justify-center\n\n group-data-[has-image=false]:text-left\n group-data-[use-backdrop=true]:bg-base-black/30\n`;\n\nexport const icon = `\n w-12 h-12 text-base-white mx-auto\n\n group-data-[use-backdrop=false]:text-primary-100\n group-data-[has-image=false]:mx-0\n`;\n\nexport const microLocation = `\n text-base-white text-4xl md:text-5xl font-bold\n group-data-[use-backdrop=false]:text-primary-100\n`;\n\nexport const macroLocation = `\n text-base-white text-2xl md:text-4xl -mt-3\n group-data-[use-backdrop=false]:text-primary-100\n`;\n","import React, { useMemo } from \"react\";\n\nimport { MapPinIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Header = () => {\n const { isLoading, locale, geography, neighborhoodImage, isFallbackImage } =\n useNeighborhoodHero();\n\n const style = useMemo(() => {\n if (!neighborhoodImage) {\n return {};\n }\n\n return {\n backgroundImage: `url(\"${neighborhoodImage}\")`,\n };\n }, [neighborhoodImage]);\n\n if (isLoading) {\n return null;\n }\n\n return (\n <div\n data-testid=\"header-container\"\n className={styles.container}\n style={style}\n data-has-image={neighborhoodImage !== null}\n data-use-backdrop={!isFallbackImage && neighborhoodImage !== null}\n >\n <div className={styles.gradientContainer}>\n <MapPinIcon className={styles.icon} />\n <h1 data-testid=\"micro-location\" className={styles.microLocation}>\n {geography?.name?.[locale]}\n </h1>\n {typeof geography !== \"undefined\" &&\n geography?.level < 30 &&\n typeof geography.city !== \"undefined\" && (\n <div data-testid=\"macro-location\" className={styles.macroLocation}>\n {geography?.city?.[locale]}\n </div>\n )}\n </div>\n </div>\n );\n};\n","export const container = `px-6 pt-6 pb-px lg:p-6 bg-gray-150/40`;\n\nexport const title = `\n text-primary-100 text-2xl font-semibold leading-7\n mb-2 lg:mb-2.5\n`;\n\nexport const text = `\n text-base-black font-normal\n leading-5 lg:leading-6\n text-sm lg:text-lg\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Summary = () => {\n const { t } = useTranslation(\"neighborhoodHero\");\n const { neighborhoodSummary, geography } = useNeighborhoodHero();\n\n if (!neighborhoodSummary) {\n return null;\n }\n\n return (\n <div className={styles.container} data-testid=\"summary-container\">\n <h2 className={styles.title} data-testid=\"summary-title\">\n {t(\"summaryTitle\", {\n context: geography && geography.level >= 30 ? \"area\" : undefined,\n })}\n </h2>\n <p className={styles.text} data-testid=\"summary-description\">\n {neighborhoodSummary}\n </p>\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Header } from \"../Header\";\nimport { Summary } from \"../Summary\";\n\nexport const Content = () => (\n <>\n <Header />\n <Summary />\n </>\n);\n","import { ObjectSchema, number, object, string } 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 image: string().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\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 type { NeighborhoodHeroProps } from \"./types\";\nimport { NeighborhoodHeroProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodHero = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Hero\"\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_HERO}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_HERO,\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 <NeighborhoodHeroProvider>\n <Content />\n </NeighborhoodHeroProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodHero;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NeighborhoodHero-IqemoCbl.js","names":[],"sources":["../../src/sdks/NeighborhoodHero/assets/images/desktop_fallback.jpg","../../src/sdks/NeighborhoodHero/assets/images/mobile_fallback.jpg","../../src/sdks/NeighborhoodHero/types.ts","../../src/sdks/NeighborhoodHero/context.tsx","../../src/sdks/NeighborhoodHero/components/Header/styles.ts","../../src/sdks/NeighborhoodHero/components/Header/index.tsx","../../src/sdks/NeighborhoodHero/components/Summary/styles.ts","../../src/sdks/NeighborhoodHero/components/Summary/index.tsx","../../src/sdks/NeighborhoodHero/components/Content/index.tsx","../../src/sdks/NeighborhoodHero/schema.ts","../../src/sdks/NeighborhoodHero/index.tsx"],"sourcesContent":["export default \"__VITE_ASSET__kSHvwCjLFxLpY3FM1MyAsA__\"","export default \"__VITE_ASSET__y3WuTrdTs_Si7uYpRddj9w__\"","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n image?: string;\n};\n\nexport type NeighborhoodHeroProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-hero-Viewed\",\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}\n","import React, { useContext, useMemo } from \"react\";\nimport type { Geography } from \"@local-logic/client\";\nimport DesktopFallback from \"./assets/images/desktop_fallback.jpg\";\nimport MobileFallback from \"./assets/images/mobile_fallback.jpg\";\nimport {\n type NeighborhoodHeroProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useProfiles } from \"~/features/clientLibrary/useProfiles\";\n\ninterface Location {\n label?: string;\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n isLoading: boolean;\n locale: \"en\" | \"fr\";\n geography?: Geography;\n neighborhoodImage: string | null;\n isFallbackImage: boolean;\n neighborhoodSummary?: string;\n};\n\nconst NeighborhoodHeroContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodHero = () => useContext(NeighborhoodHeroContext);\n\nconst NeighborhoodHeroProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n const isMobile = useIsMobile();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const { data: profilesData, isFetching: isProfilesFetching } = useProfiles({\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n });\n\n const geography = useMemo(() => {\n const geographiesArray = Object.values(geographyData || {});\n\n return geographiesArray[0];\n }, [isGeographyLoading, geographyData]);\n\n const isLoading = useMemo(\n () => isGeographyLoading || isProfilesFetching,\n [isGeographyLoading, isProfilesFetching],\n );\n\n const neighborhoodImage = useMemo(() => {\n const lowercaseOptionsImageValue = (\n sdkState.options?.image || \"\"\n ).toLocaleLowerCase();\n\n // Always hide the image if the option is set to \"hide\"\n if (lowercaseOptionsImageValue === \"hide\") {\n return null;\n }\n\n // If the geography has an image, use it by default\n if (\n typeof geography?.image_url === \"string\" &&\n geography?.image_url.length > 0\n ) {\n return geography.image_url as string;\n }\n\n // If the image option is set to a string, use it as the image (unless the string is \"noFallback\" which is obviuosly not an image)\n if (\n typeof sdkState.options?.image === \"string\" &&\n lowercaseOptionsImageValue !== \"nofallback\" &&\n lowercaseOptionsImageValue.substring(0, 4) === \"http\"\n ) {\n return sdkState.options.image;\n }\n\n // No fallback image\n if (lowercaseOptionsImageValue === \"nofallback\") {\n return null;\n }\n\n // Fallback image based on the device\n return isMobile ? MobileFallback : DesktopFallback;\n }, [geography?.image_url, sdkState?.options?.image, isMobile]);\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n locale,\n geography,\n isFallbackImage:\n neighborhoodImage !== null &&\n [MobileFallback, DesktopFallback].includes(neighborhoodImage),\n neighborhoodImage,\n neighborhoodSummary: profilesData?.profiles.summary,\n }),\n [\n isLoading,\n locale,\n geography,\n neighborhoodImage,\n profilesData?.profiles?.summary,\n sdkState,\n ],\n );\n\n return (\n <NeighborhoodHeroContext.Provider value={contextValue}>\n {children}\n </NeighborhoodHeroContext.Provider>\n );\n};\n\nexport { useNeighborhoodHero, NeighborhoodHeroProvider, type Location };\n","export const container = `\n h-72 w-full\n bg-cover bg-no-repeat bg-center\n group\n`;\n\nexport const gradientContainer = `\n h-full w-full px-6 pt-6 pb-px lg:p-6\n flex flex-col gap-6 text-center justify-center\n\n group-data-[has-image=false]:text-left\n group-data-[use-backdrop=true]:bg-base-black/30\n`;\n\nexport const icon = `\n w-12 h-12 text-base-white mx-auto\n\n group-data-[use-backdrop=false]:text-primary-100\n group-data-[has-image=false]:mx-0\n`;\n\nexport const microLocation = `\n text-base-white text-4xl md:text-5xl font-bold\n group-data-[use-backdrop=false]:text-primary-100\n`;\n\nexport const macroLocation = `\n text-base-white text-2xl md:text-4xl -mt-3\n group-data-[use-backdrop=false]:text-primary-100\n`;\n","import React, { useMemo } from \"react\";\n\nimport { MapPinIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Header = () => {\n const { isLoading, locale, geography, neighborhoodImage, isFallbackImage } =\n useNeighborhoodHero();\n\n const style = useMemo(() => {\n if (!neighborhoodImage) {\n return {};\n }\n\n return {\n backgroundImage: `url(\"${neighborhoodImage}\")`,\n };\n }, [neighborhoodImage]);\n\n if (isLoading) {\n return null;\n }\n\n return (\n <div\n data-testid=\"header-container\"\n className={styles.container}\n style={style}\n data-has-image={neighborhoodImage !== null}\n data-use-backdrop={!isFallbackImage && neighborhoodImage !== null}\n >\n <div className={styles.gradientContainer}>\n <MapPinIcon className={styles.icon} />\n <h1 data-testid=\"micro-location\" className={styles.microLocation}>\n {geography?.name?.[locale]}\n </h1>\n {typeof geography !== \"undefined\" &&\n geography?.level < 30 &&\n typeof geography.city !== \"undefined\" && (\n <div data-testid=\"macro-location\" className={styles.macroLocation}>\n {geography?.city?.[locale]}\n </div>\n )}\n </div>\n </div>\n );\n};\n","export const container = `px-6 pt-6 pb-px lg:p-6 bg-gray-150/40`;\n\nexport const title = `\n text-primary-100 text-2xl font-semibold leading-7\n mb-2 lg:mb-2.5\n`;\n\nexport const text = `\n text-base-black font-normal\n leading-5 lg:leading-6\n text-sm lg:text-lg\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Summary = () => {\n const { t } = useTranslation(\"neighborhoodHero\");\n const { neighborhoodSummary, geography } = useNeighborhoodHero();\n\n if (!neighborhoodSummary) {\n return null;\n }\n\n return (\n <div className={styles.container} data-testid=\"summary-container\">\n <h2 className={styles.title} data-testid=\"summary-title\">\n {t(\"summaryTitle\", {\n context: geography && geography.level >= 30 ? \"area\" : undefined,\n })}\n </h2>\n <p className={styles.text} data-testid=\"summary-description\">\n {neighborhoodSummary}\n </p>\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Header } from \"../Header\";\nimport { Summary } from \"../Summary\";\n\nexport const Content = () => (\n <>\n <Header />\n <Summary />\n </>\n);\n","import { ObjectSchema, number, object, string } 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 image: string().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\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 type { NeighborhoodHeroProps } from \"./types\";\nimport { NeighborhoodHeroProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodHero = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Hero\"\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_HERO}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_HERO,\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 <NeighborhoodHeroProvider>\n <Content />\n </NeighborhoodHeroProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodHero;\n"],"mappings":"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"}
|
package/dist/assets/{NeighborhoodHero-legacy-CkHlzf9Z.js → NeighborhoodHero-legacy-Cx0sgcGF.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["./rolldown-runtime-legacy-Djb2rrqm.js","./google-maps-vendor-legacy-CPuMOKGq.js","./sdks-legacy-
|
|
2
|
-
//# sourceMappingURL=NeighborhoodHero-legacy-
|
|
1
|
+
System.register(["./rolldown-runtime-legacy-Djb2rrqm.js","./google-maps-vendor-legacy-CPuMOKGq.js","./sdks-legacy-Dd5HUZAr.js","./MapPin.es-legacy-1txsfaDD.js","./index-legacy-TtLgEE7L.js","./useGeographies-legacy-D5Sw2YSV.js","./globals-legacy-DrNe10l0.js","./ResizeWrapper-legacy-B04qVKmq.js","./ValidateOptions-legacy-B9Pj1AAc.js","./useIsMobile-legacy-V7KQv1D5.js","./useProfiles-legacy-jRxj5PYQ.js"],function(e,o){var l,n,a,t,i,s,d,r,u,g,c,p,v,m,h,x,b,y,f,j,k,I,E,O,_,w,D,M,N,S,H,K;return{setters:[function(e){l=e.a},function(e){n=e.l},function(e){a=e.a,t=e.c,i=e.d,s=e.f,d=e.g,r=e.n,u=e.o,g=e.r,c=e.t,p=e.u},function(e){v=e.t},function(e){m=e.Y,h=e.i,x=e.n},function(e){b=e.t},function(e){},function(e){y=e.t},function(e){f=e.t},function(e){j=e.t},function(e){k=e.t}],execute:function(){I=l(n(),1),E=function(e){return e.SDK_VIEWED="neighborhood-hero-Viewed",e}({}),O=function(e){return e.SDK_VIEWED="sdk_viewed",e}({}),_=m(),w=I.createContext({}),D=()=>(0,I.useContext)(w),M=({children:e})=>{var o,l,n,a,t,i,s,d,r,g,c;const{sdkState:p}=x(),v=(null===(o=p.globalOptions)||void 0===o?void 0:o.locale)||"en",m=u(),y=j();h(()=>{m.postEvent({eventType:E.SDK_VIEWED}),m.trackAnalyticsEvent({eventName:O.SDK_VIEWED})});const{isLoading:f,data:D}=b({geogID:null===(l=p.options)||void 0===l?void 0:l.geographyId,location:{lat:null===(n=p.options)||void 0===n?void 0:n.lat,lng:null===(a=p.options)||void 0===a?void 0:a.lng},externalId:null==p||null===(t=p.globalOptions)||void 0===t?void 0:t.externalId}),{data:M,isFetching:N}=k({geogID:null===(i=p.options)||void 0===i?void 0:i.geographyId,location:{lat:null===(s=p.options)||void 0===s?void 0:s.lat,lng:null===(d=p.options)||void 0===d?void 0:d.lng},externalId:null==p||null===(r=p.globalOptions)||void 0===r?void 0:r.externalId}),S=(0,I.useMemo)(()=>Object.values(D||{})[0],[f,D]),H=(0,I.useMemo)(()=>f||N,[f,N]),K=(0,I.useMemo)(()=>{var e,o;const l=((null===(e=p.options)||void 0===e?void 0:e.image)||"").toLocaleLowerCase();return"hide"===l?null:"string"==typeof(null==S?void 0:S.image_url)&&(null==S?void 0:S.image_url.length)>0?S.image_url:"string"==typeof(null===(o=p.options)||void 0===o?void 0:o.image)&&"nofallback"!==l&&"http"===l.substring(0,4)?p.options.image:"nofallback"===l?null:y?"/sdks-app/v1/assets/mobile_fallback-DExTxyjy.jpg":"/sdks-app/v1/assets/desktop_fallback-Hx4IEAqY.jpg"},[null==S?void 0:S.image_url,null==p||null===(g=p.options)||void 0===g?void 0:g.image,y]),V=(0,I.useMemo)(()=>({isLoading:H,locale:v,geography:S,isFallbackImage:null!==K&&["/sdks-app/v1/assets/mobile_fallback-DExTxyjy.jpg","/sdks-app/v1/assets/desktop_fallback-Hx4IEAqY.jpg"].includes(K),neighborhoodImage:K,neighborhoodSummary:null==M?void 0:M.profiles.summary}),[H,v,S,K,null==M||null===(c=M.profiles)||void 0===c?void 0:c.summary,p]);return(0,_.jsx)(w.Provider,{value:V,children:e})},N=()=>{var e,o;const{isLoading:l,locale:n,geography:a,neighborhoodImage:t,isFallbackImage:i}=D(),s=(0,I.useMemo)(()=>t?{backgroundImage:`url("${t}")`}:{},[t]);return l?null:(0,_.jsx)("div",{"data-testid":"header-container",className:"\n h-72 w-full\n bg-cover bg-no-repeat bg-center\n group\n",style:s,"data-has-image":null!==t,"data-use-backdrop":!i&&null!==t,children:(0,_.jsxs)("div",{className:"\n h-full w-full px-6 pt-6 pb-px lg:p-6\n flex flex-col gap-6 text-center justify-center\n\n group-data-[has-image=false]:text-left\n group-data-[use-backdrop=true]:bg-base-black/30\n",children:[(0,_.jsx)(v,{className:"\n w-12 h-12 text-base-white mx-auto\n\n group-data-[use-backdrop=false]:text-primary-100\n group-data-[has-image=false]:mx-0\n"}),(0,_.jsx)("h1",{"data-testid":"micro-location",className:"\n text-base-white text-4xl md:text-5xl font-bold\n group-data-[use-backdrop=false]:text-primary-100\n",children:null==a||null===(e=a.name)||void 0===e?void 0:e[n]}),void 0!==a&&(null==a?void 0:a.level)<30&&void 0!==a.city&&(0,_.jsx)("div",{"data-testid":"macro-location",className:"\n text-base-white text-2xl md:text-4xl -mt-3\n group-data-[use-backdrop=false]:text-primary-100\n",children:null==a||null===(o=a.city)||void 0===o?void 0:o[n]})]})})},S=()=>{const{t:e}=d("neighborhoodHero"),{neighborhoodSummary:o,geography:l}=D();return o?(0,_.jsxs)("div",{className:"px-6 pt-6 pb-px lg:p-6 bg-gray-150/40","data-testid":"summary-container",children:[(0,_.jsx)("h2",{className:"\n text-primary-100 text-2xl font-semibold leading-7\n mb-2 lg:mb-2.5\n","data-testid":"summary-title",children:e("summaryTitle",{context:l&&l.level>=30?"area":void 0})}),(0,_.jsx)("p",{className:"\n text-base-black font-normal\n leading-5 lg:leading-6\n text-sm lg:text-lg\n","data-testid":"summary-description",children:o})]}):null},H=()=>(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(N,{}),(0,_.jsx)(S,{})]}),K=p({lat:i().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:i().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(),image:s().optional()}).noUnknown(!0),t(r.neighborhoodWrap.key),e("default",()=>{var e,o,l,n,t,i,s;const{sdkState:d}=x(),u=j(),p=(null===(e=d.globalOptions)||void 0===e?void 0:e.locale)||"en",v=(0,I.useMemo)(()=>{var e,o,l,n;return null!==(e=d.options)&&void 0!==e&&e.geographyId?{geographyId:null===(o=d.options)||void 0===o?void 0:o.geographyId}:{lat:null===(l=d.options)||void 0===l?void 0:l.lat,lng:null===(n=d.options)||void 0===n?void 0:n.lng}},[null===(o=d.options)||void 0===o?void 0:o.lat,null===(l=d.options)||void 0===l?void 0:l.lng,null===(n=d.options)||void 0===n?void 0:n.geographyId]);return(0,_.jsx)(y,{children:(0,_.jsx)(f,{sdk:"Neighborhood Hero",schema:K,options:d.options,children:(0,_.jsx)(g,{environment:null===(t=d.globalOptions)||void 0===t||null===(t=t.environment)||void 0===t?void 0:t.api,apiKey:d.apiKey,appearance:null===(i=d.globalOptions)||void 0===i?void 0:i.appearance,locale:null===(s=d.globalOptions)||void 0===s?void 0:s.locale,product:c.NEIGHBORHOOD_HERO,children:(0,_.jsx)(a,{trackingPipelineSettings:{apiKey:d.apiKey||""},analyticsSettings:r.neighborhoodWrap,meta:{clientId:d.clientId,productName:c.NEIGHBORHOOD_HERO,productVersion:"1.24.56"},attributes:{location:v,host:d.location,host_url:document.referrer,locale:p,isMobile:u},flags:{isDebugMode:!1},children:(0,_.jsx)(M,{children:(0,_.jsx)(H,{})})})})})})})}}});
|
|
2
|
+
//# sourceMappingURL=NeighborhoodHero-legacy-Cx0sgcGF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborhoodHero-legacy-CkHlzf9Z.js","names":[],"sources":["../../src/sdks/NeighborhoodHero/assets/images/desktop_fallback.jpg","../../src/sdks/NeighborhoodHero/assets/images/mobile_fallback.jpg","../../src/sdks/NeighborhoodHero/types.ts","../../src/sdks/NeighborhoodHero/context.tsx","../../src/sdks/NeighborhoodHero/components/Header/styles.ts","../../src/sdks/NeighborhoodHero/components/Header/index.tsx","../../src/sdks/NeighborhoodHero/components/Summary/styles.ts","../../src/sdks/NeighborhoodHero/components/Summary/index.tsx","../../src/sdks/NeighborhoodHero/components/Content/index.tsx","../../src/sdks/NeighborhoodHero/schema.ts","../../src/sdks/NeighborhoodHero/index.tsx"],"sourcesContent":["export default \"__VITE_ASSET__cn7IAAGY294pWGc7MpElVg__\"","export default \"__VITE_ASSET__DUq8YoikZLXEejpNZ1KQvg__\"","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n image?: string;\n};\n\nexport type NeighborhoodHeroProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-hero-Viewed\",\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}\n","import React, { useContext, useMemo } from \"react\";\nimport type { Geography } from \"@local-logic/client\";\nimport DesktopFallback from \"./assets/images/desktop_fallback.jpg\";\nimport MobileFallback from \"./assets/images/mobile_fallback.jpg\";\nimport {\n type NeighborhoodHeroProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useProfiles } from \"~/features/clientLibrary/useProfiles\";\n\ninterface Location {\n label?: string;\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n isLoading: boolean;\n locale: \"en\" | \"fr\";\n geography?: Geography;\n neighborhoodImage: string | null;\n isFallbackImage: boolean;\n neighborhoodSummary?: string;\n};\n\nconst NeighborhoodHeroContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodHero = () => useContext(NeighborhoodHeroContext);\n\nconst NeighborhoodHeroProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n const isMobile = useIsMobile();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const { data: profilesData, isFetching: isProfilesFetching } = useProfiles({\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n });\n\n const geography = useMemo(() => {\n const geographiesArray = Object.values(geographyData || {});\n\n return geographiesArray[0];\n }, [isGeographyLoading, geographyData]);\n\n const isLoading = useMemo(\n () => isGeographyLoading || isProfilesFetching,\n [isGeographyLoading, isProfilesFetching],\n );\n\n const neighborhoodImage = useMemo(() => {\n const lowercaseOptionsImageValue = (\n sdkState.options?.image || \"\"\n ).toLocaleLowerCase();\n\n // Always hide the image if the option is set to \"hide\"\n if (lowercaseOptionsImageValue === \"hide\") {\n return null;\n }\n\n // If the geography has an image, use it by default\n if (\n typeof geography?.image_url === \"string\" &&\n geography?.image_url.length > 0\n ) {\n return geography.image_url as string;\n }\n\n // If the image option is set to a string, use it as the image (unless the string is \"noFallback\" which is obviuosly not an image)\n if (\n typeof sdkState.options?.image === \"string\" &&\n lowercaseOptionsImageValue !== \"nofallback\" &&\n lowercaseOptionsImageValue.substring(0, 4) === \"http\"\n ) {\n return sdkState.options.image;\n }\n\n // No fallback image\n if (lowercaseOptionsImageValue === \"nofallback\") {\n return null;\n }\n\n // Fallback image based on the device\n return isMobile ? MobileFallback : DesktopFallback;\n }, [geography?.image_url, sdkState?.options?.image, isMobile]);\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n locale,\n geography,\n isFallbackImage:\n neighborhoodImage !== null &&\n [MobileFallback, DesktopFallback].includes(neighborhoodImage),\n neighborhoodImage,\n neighborhoodSummary: profilesData?.profiles.summary,\n }),\n [\n isLoading,\n locale,\n geography,\n neighborhoodImage,\n profilesData?.profiles?.summary,\n sdkState,\n ],\n );\n\n return (\n <NeighborhoodHeroContext.Provider value={contextValue}>\n {children}\n </NeighborhoodHeroContext.Provider>\n );\n};\n\nexport { useNeighborhoodHero, NeighborhoodHeroProvider, type Location };\n","export const container = `\n h-72 w-full\n bg-cover bg-no-repeat bg-center\n group\n`;\n\nexport const gradientContainer = `\n h-full w-full px-6 pt-6 pb-px lg:p-6\n flex flex-col gap-6 text-center justify-center\n\n group-data-[has-image=false]:text-left\n group-data-[use-backdrop=true]:bg-base-black/30\n`;\n\nexport const icon = `\n w-12 h-12 text-base-white mx-auto\n\n group-data-[use-backdrop=false]:text-primary-100\n group-data-[has-image=false]:mx-0\n`;\n\nexport const microLocation = `\n text-base-white text-4xl md:text-5xl font-bold\n group-data-[use-backdrop=false]:text-primary-100\n`;\n\nexport const macroLocation = `\n text-base-white text-2xl md:text-4xl -mt-3\n group-data-[use-backdrop=false]:text-primary-100\n`;\n","import React, { useMemo } from \"react\";\n\nimport { MapPinIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Header = () => {\n const { isLoading, locale, geography, neighborhoodImage, isFallbackImage } =\n useNeighborhoodHero();\n\n const style = useMemo(() => {\n if (!neighborhoodImage) {\n return {};\n }\n\n return {\n backgroundImage: `url(\"${neighborhoodImage}\")`,\n };\n }, [neighborhoodImage]);\n\n if (isLoading) {\n return null;\n }\n\n return (\n <div\n data-testid=\"header-container\"\n className={styles.container}\n style={style}\n data-has-image={neighborhoodImage !== null}\n data-use-backdrop={!isFallbackImage && neighborhoodImage !== null}\n >\n <div className={styles.gradientContainer}>\n <MapPinIcon className={styles.icon} />\n <h1 data-testid=\"micro-location\" className={styles.microLocation}>\n {geography?.name?.[locale]}\n </h1>\n {typeof geography !== \"undefined\" &&\n geography?.level < 30 &&\n typeof geography.city !== \"undefined\" && (\n <div data-testid=\"macro-location\" className={styles.macroLocation}>\n {geography?.city?.[locale]}\n </div>\n )}\n </div>\n </div>\n );\n};\n","export const container = `px-6 pt-6 pb-px lg:p-6 bg-gray-150/40`;\n\nexport const title = `\n text-primary-100 text-2xl font-semibold leading-7\n mb-2 lg:mb-2.5\n`;\n\nexport const text = `\n text-base-black font-normal\n leading-5 lg:leading-6\n text-sm lg:text-lg\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Summary = () => {\n const { t } = useTranslation(\"neighborhoodHero\");\n const { neighborhoodSummary, geography } = useNeighborhoodHero();\n\n if (!neighborhoodSummary) {\n return null;\n }\n\n return (\n <div className={styles.container} data-testid=\"summary-container\">\n <h2 className={styles.title} data-testid=\"summary-title\">\n {t(\"summaryTitle\", {\n context: geography && geography.level >= 30 ? \"area\" : undefined,\n })}\n </h2>\n <p className={styles.text} data-testid=\"summary-description\">\n {neighborhoodSummary}\n </p>\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Header } from \"../Header\";\nimport { Summary } from \"../Summary\";\n\nexport const Content = () => (\n <>\n <Header />\n <Summary />\n </>\n);\n","import { ObjectSchema, number, object, string } 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 image: string().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\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 type { NeighborhoodHeroProps } from \"./types\";\nimport { NeighborhoodHeroProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodHero = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Hero\"\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_HERO}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_HERO,\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 <NeighborhoodHeroProvider>\n <Content />\n </NeighborhoodHeroProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodHero;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NeighborhoodHero-legacy-Cx0sgcGF.js","names":[],"sources":["../../src/sdks/NeighborhoodHero/assets/images/desktop_fallback.jpg","../../src/sdks/NeighborhoodHero/assets/images/mobile_fallback.jpg","../../src/sdks/NeighborhoodHero/types.ts","../../src/sdks/NeighborhoodHero/context.tsx","../../src/sdks/NeighborhoodHero/components/Header/styles.ts","../../src/sdks/NeighborhoodHero/components/Header/index.tsx","../../src/sdks/NeighborhoodHero/components/Summary/styles.ts","../../src/sdks/NeighborhoodHero/components/Summary/index.tsx","../../src/sdks/NeighborhoodHero/components/Content/index.tsx","../../src/sdks/NeighborhoodHero/schema.ts","../../src/sdks/NeighborhoodHero/index.tsx"],"sourcesContent":["export default \"__VITE_ASSET__cn7IAAGY294pWGc7MpElVg__\"","export default \"__VITE_ASSET__DUq8YoikZLXEejpNZ1KQvg__\"","import { SDKOptions } from \"~/types/options\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n image?: string;\n};\n\nexport type NeighborhoodHeroProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-hero-Viewed\",\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}\n","import React, { useContext, useMemo } from \"react\";\nimport type { Geography } from \"@local-logic/client\";\nimport DesktopFallback from \"./assets/images/desktop_fallback.jpg\";\nimport MobileFallback from \"./assets/images/mobile_fallback.jpg\";\nimport {\n type NeighborhoodHeroProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { useTracking } from \"~/tracking\";\n\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useProfiles } from \"~/features/clientLibrary/useProfiles\";\n\ninterface Location {\n label?: string;\n lat: number;\n lng: number;\n}\n\nexport type DefaultContext = {\n isLoading: boolean;\n locale: \"en\" | \"fr\";\n geography?: Geography;\n neighborhoodImage: string | null;\n isFallbackImage: boolean;\n neighborhoodSummary?: string;\n};\n\nconst NeighborhoodHeroContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\n\nconst useNeighborhoodHero = () => useContext(NeighborhoodHeroContext);\n\nconst NeighborhoodHeroProvider = ({\n children,\n}: {\n children: React.JSX.Element;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const locale = sdkState.globalOptions?.locale || \"en\";\n const tracking = useTracking();\n const isMobile = useIsMobile();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const { data: profilesData, isFetching: isProfilesFetching } = useProfiles({\n geogID: sdkState.options?.geographyId,\n location: {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n },\n externalId: sdkState?.globalOptions?.externalId,\n });\n\n const geography = useMemo(() => {\n const geographiesArray = Object.values(geographyData || {});\n\n return geographiesArray[0];\n }, [isGeographyLoading, geographyData]);\n\n const isLoading = useMemo(\n () => isGeographyLoading || isProfilesFetching,\n [isGeographyLoading, isProfilesFetching],\n );\n\n const neighborhoodImage = useMemo(() => {\n const lowercaseOptionsImageValue = (\n sdkState.options?.image || \"\"\n ).toLocaleLowerCase();\n\n // Always hide the image if the option is set to \"hide\"\n if (lowercaseOptionsImageValue === \"hide\") {\n return null;\n }\n\n // If the geography has an image, use it by default\n if (\n typeof geography?.image_url === \"string\" &&\n geography?.image_url.length > 0\n ) {\n return geography.image_url as string;\n }\n\n // If the image option is set to a string, use it as the image (unless the string is \"noFallback\" which is obviuosly not an image)\n if (\n typeof sdkState.options?.image === \"string\" &&\n lowercaseOptionsImageValue !== \"nofallback\" &&\n lowercaseOptionsImageValue.substring(0, 4) === \"http\"\n ) {\n return sdkState.options.image;\n }\n\n // No fallback image\n if (lowercaseOptionsImageValue === \"nofallback\") {\n return null;\n }\n\n // Fallback image based on the device\n return isMobile ? MobileFallback : DesktopFallback;\n }, [geography?.image_url, sdkState?.options?.image, isMobile]);\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n locale,\n geography,\n isFallbackImage:\n neighborhoodImage !== null &&\n [MobileFallback, DesktopFallback].includes(neighborhoodImage),\n neighborhoodImage,\n neighborhoodSummary: profilesData?.profiles.summary,\n }),\n [\n isLoading,\n locale,\n geography,\n neighborhoodImage,\n profilesData?.profiles?.summary,\n sdkState,\n ],\n );\n\n return (\n <NeighborhoodHeroContext.Provider value={contextValue}>\n {children}\n </NeighborhoodHeroContext.Provider>\n );\n};\n\nexport { useNeighborhoodHero, NeighborhoodHeroProvider, type Location };\n","export const container = `\n h-72 w-full\n bg-cover bg-no-repeat bg-center\n group\n`;\n\nexport const gradientContainer = `\n h-full w-full px-6 pt-6 pb-px lg:p-6\n flex flex-col gap-6 text-center justify-center\n\n group-data-[has-image=false]:text-left\n group-data-[use-backdrop=true]:bg-base-black/30\n`;\n\nexport const icon = `\n w-12 h-12 text-base-white mx-auto\n\n group-data-[use-backdrop=false]:text-primary-100\n group-data-[has-image=false]:mx-0\n`;\n\nexport const microLocation = `\n text-base-white text-4xl md:text-5xl font-bold\n group-data-[use-backdrop=false]:text-primary-100\n`;\n\nexport const macroLocation = `\n text-base-white text-2xl md:text-4xl -mt-3\n group-data-[use-backdrop=false]:text-primary-100\n`;\n","import React, { useMemo } from \"react\";\n\nimport { MapPinIcon } from \"@phosphor-icons/react\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Header = () => {\n const { isLoading, locale, geography, neighborhoodImage, isFallbackImage } =\n useNeighborhoodHero();\n\n const style = useMemo(() => {\n if (!neighborhoodImage) {\n return {};\n }\n\n return {\n backgroundImage: `url(\"${neighborhoodImage}\")`,\n };\n }, [neighborhoodImage]);\n\n if (isLoading) {\n return null;\n }\n\n return (\n <div\n data-testid=\"header-container\"\n className={styles.container}\n style={style}\n data-has-image={neighborhoodImage !== null}\n data-use-backdrop={!isFallbackImage && neighborhoodImage !== null}\n >\n <div className={styles.gradientContainer}>\n <MapPinIcon className={styles.icon} />\n <h1 data-testid=\"micro-location\" className={styles.microLocation}>\n {geography?.name?.[locale]}\n </h1>\n {typeof geography !== \"undefined\" &&\n geography?.level < 30 &&\n typeof geography.city !== \"undefined\" && (\n <div data-testid=\"macro-location\" className={styles.macroLocation}>\n {geography?.city?.[locale]}\n </div>\n )}\n </div>\n </div>\n );\n};\n","export const container = `px-6 pt-6 pb-px lg:p-6 bg-gray-150/40`;\n\nexport const title = `\n text-primary-100 text-2xl font-semibold leading-7\n mb-2 lg:mb-2.5\n`;\n\nexport const text = `\n text-base-black font-normal\n leading-5 lg:leading-6\n text-sm lg:text-lg\n`;\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHero } from \"~/sdks/NeighborhoodHero/context\";\n\nexport const Summary = () => {\n const { t } = useTranslation(\"neighborhoodHero\");\n const { neighborhoodSummary, geography } = useNeighborhoodHero();\n\n if (!neighborhoodSummary) {\n return null;\n }\n\n return (\n <div className={styles.container} data-testid=\"summary-container\">\n <h2 className={styles.title} data-testid=\"summary-title\">\n {t(\"summaryTitle\", {\n context: geography && geography.level >= 30 ? \"area\" : undefined,\n })}\n </h2>\n <p className={styles.text} data-testid=\"summary-description\">\n {neighborhoodSummary}\n </p>\n </div>\n );\n};\n","import React from \"react\";\n\nimport { Header } from \"../Header\";\nimport { Summary } from \"../Summary\";\n\nexport const Content = () => (\n <>\n <Header />\n <Summary />\n </>\n);\n","import { ObjectSchema, number, object, string } 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 image: string().optional(),\n}).noUnknown(true);\n","import React, { useMemo } from \"react\";\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 type { NeighborhoodHeroProps } from \"./types\";\nimport { NeighborhoodHeroProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\n\nimport ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodHero = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodHeroProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Hero\"\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_HERO}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_HERO,\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 <NeighborhoodHeroProvider>\n <Content />\n </NeighborhoodHeroProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodHero;\n"],"mappings":"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"}
|
package/dist/assets/{NeighborhoodHighlights-D19WC2mx.js → NeighborhoodHighlights-BgG5_1pC.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as t}from"./rolldown-runtime-C_ttsnZz.js";import{l as e}from"./google-maps-vendor-DvfEEdRU.js";import{a as i,c as o,d as a,f as s,g as n,m as r,n as l,o as g,r as d,t as h,u as p}from"./sdks-
|
|
2
|
-
//# sourceMappingURL=NeighborhoodHighlights-
|
|
1
|
+
import{a as t}from"./rolldown-runtime-C_ttsnZz.js";import{l as e}from"./google-maps-vendor-DvfEEdRU.js";import{a as i,c as o,d as a,f as s,g as n,m as r,n as l,o as g,r as d,t as h,u as p}from"./sdks-C9bPocUu.js";import{t as c}from"./ScoreIcon-Cg7RT3Vo.js";import{t as u}from"./SpinnerGap.es-ClE6VWmW.js";import{Y as m,i as f,n as x}from"./index-BLzX2sJY.js";import{t as y}from"./useGeographies-DbGT9Trs.js";/* empty css */import{t as j}from"./ResizeWrapper-DL4XvSn8.js";import{t as b}from"./ValidateOptions-DyF1Ukyh.js";import{t as v}from"./useIsMobile-Cg2JCJAy.js";import{t as I}from"./useScores-BPQlXmkW.js";import{t as w}from"./TitleHeader-Dj1tNqDf.js";import{t as N}from"./NoDataContent-DgFnor3o.js";var H=t(e(),1),D=function(t){return t.SDK_VIEWED="neighborhood-highlights-Viewed",t}({}),M=function(t){return t.SDK_VIEWED="sdk_viewed",t}({}),O={transport:["pedestrian_friendly","car_friendly","transit_friendly","cycling_friendly"],services:["groceries","shopping","restaurants","cafes"],character:["quiet","parks","vibrant","nightlife"]},S=[...O.transport,...O.services,...O.character],k=m(),E=H.createContext({}),_=()=>(0,H.useContext)(E),L=({children:t})=>{const{sdkState:e}=x(),i=g();f(()=>{i.postEvent({eventType:D.SDK_VIEWED}),i.trackAnalyticsEvent({eventName:M.SDK_VIEWED})});const{isLoading:o,data:a}=y({location:{lat:void 0===e.options?.geographyId?e.options?.lat:void 0,lng:void 0===e.options?.geographyId?e.options?.lng:void 0},externalId:e?.globalOptions?.externalId}),{data:s,isFetching:n}=I({geographyId:(0,H.useMemo)(()=>void 0!==e.options?.geographyId?e.options.geographyId:Object.keys(a||{})[0],[e.options?.geographyId,a]),location:{},include:S}),r=(0,H.useMemo)(()=>o||n,[o,n]),l=(0,H.useMemo)(()=>({isLoading:r,title:e.options?.title,scores:s?.geographies[0]?.scores}),[r,s,e.options?.title]);return(0,k.jsx)(E.Provider,{value:l,children:t})},G="\n text-primary-100 w-7 h-7\n \n group-data-[is-loading=true]/highlight-item:text-gray-200\n group-data-[is-loading=true]/highlight-item:animate-spin\n";function K({isLoading:t=!1,score:e}){return(0,k.jsx)("div",{className:"\n rounded-full bg-primary-100 w-16 h-16 flex items-center justify-center\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n\n ",children:(0,k.jsxs)("div",{className:"rounded-full bg-gray-25 w-12 h-12 border-2 border-base-white flex items-center justify-center",children:[t&&(0,k.jsx)(u,{className:G}),!t&&e&&(0,k.jsx)(c,{score:e,className:G})]})})}function V({score:t}){const{t:e}=n(["neighborhoodHighlights","common"]);return(0,k.jsxs)("div",{"data-testid":`highlight-content-${t}`,className:"\n group-data-[is-loading=true]/highlight-item:flex\n group-data-[is-loading=true]/highlight-item:flex-col\n group-data-[is-loading=true]/highlight-item:grow\n",children:[(0,k.jsx)("p",{"data-testid":"highlight-title",className:"\n text-md mb-1\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:w-full\n group-data-[is-loading=true]/highlight-item:h-2\n\n group-data-[is-loading=true]/highlight-item:[&>span]:hidden\n",children:(0,k.jsx)("span",{children:e("highlight.title")})}),(0,k.jsx)("p",{"data-testid":"highlight-pill",className:"\n text-sm leading-4 font-bold bg-primary-100 text-base-white py-1 px-2 inline rounded\n \n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:animate-pulse\n group-data-[is-loading=true]/highlight-item:w-28\n group-data-[is-loading=true]/highlight-item:h-7\n",children:t&&e(`common:scores.${t}.title`)})]})}var W=({isLoading:t=!1,score:e})=>(0,k.jsxs)("div",{"data-testid":"item",className:"group/highlight-item bg-gray-25 px-5 py-4 flex w-80 items-center gap-x-4 rounded-xl","data-is-loading":t,"data-score":e,children:[(0,k.jsx)(K,{isLoading:t,score:e}),(0,k.jsx)(V,{score:e})]});function T(){const{t:t}=n("neighborhoodHighlights"),{isLoading:e,scores:i}=_(),o=(0,H.useMemo)(()=>e||!i?[]:function(t){const e=[];return void 0===t||S.map(e=>({scoreName:e,value:Math.round(10*Number(t[e]?.value))/10*2})).filter(t=>t.value>7).sort((t,e)=>t.value<e.value?1:-1).slice(0,3).map(t=>e.push(t.scoreName)),e}(i),[i,e]);return e||0!==o.length?(0,k.jsx)("div",{"data-testid":"highlights-container",className:"flex flex-col gap-4 w-full lg:flex-row",children:(e?[1,2,3]:o).map((t,i)=>(0,k.jsx)(W,{isLoading:e,score:"number"!=typeof t?t:void 0},i))}):(0,k.jsx)(N,{text:t("noData")})}function q(){const{t:t}=n("neighborhoodHighlights"),{title:e}=_();return(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(w,{title:"string"==typeof e||!1===e?e:t("title")}),(0,k.jsx)(T,{})]})}var C=p({lat:a().min(-90,"Must be a valid latitude.").max(90,"Must be a valid latitude.").when("geographyId",{is:t=>"string"==typeof t,then:t=>t.optional(),otherwise:t=>t.required()}),lng:a().min(-180,"Must be a valid longitude.").max(180,"Must be a valid longitude.").when("geographyId",{is:t=>"string"==typeof t,then:t=>t.optional(),otherwise:t=>t.required()}),geographyId:s().optional(),title:r().optional()}).noUnknown(!0);o(l.neighborhoodWrap.key);var R=()=>{const{sdkState:t}=x(),e=v(),o=t.globalOptions?.locale||"en",a=(0,H.useMemo)(()=>t.options?.geographyId?{geographyId:t.options?.geographyId}:{lat:t.options?.lat,lng:t.options?.lng},[t.options?.lat,t.options?.lng,t.options?.geographyId]);return(0,k.jsx)(j,{children:(0,k.jsx)(b,{sdk:"Neighborhood Highlights",schema:C,options:t.options,children:(0,k.jsx)(d,{environment:t.globalOptions?.environment?.api,apiKey:t.apiKey,appearance:t.globalOptions?.appearance,locale:t.globalOptions?.locale,product:h.NEIGHBORHOOD_HIGHLIGHTS,children:(0,k.jsx)(i,{trackingPipelineSettings:{apiKey:t.apiKey||""},analyticsSettings:l.neighborhoodWrap,meta:{clientId:t.clientId,productName:h.NEIGHBORHOOD_HIGHLIGHTS,productVersion:"1.24.56"},attributes:{location:a,host:t.location,host_url:document.referrer,locale:o,isMobile:e},flags:{isDebugMode:!1},children:(0,k.jsx)(L,{children:(0,k.jsx)(q,{})})})})})})};export{R as default};
|
|
2
|
+
//# sourceMappingURL=NeighborhoodHighlights-BgG5_1pC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeighborhoodHighlights-D19WC2mx.js","names":[],"sources":["../../src/sdks/NeighborhoodHighlights/types.ts","../../src/sdks/NeighborhoodHighlights/constants.ts","../../src/sdks/NeighborhoodHighlights/context.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/styles.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Icon/styles.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Icon/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Content/styles.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Content/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/styles.ts","../../src/sdks/NeighborhoodHighlights/utils/getHighlightScoreKeys/index.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Content/index.tsx","../../src/sdks/NeighborhoodHighlights/schema.ts","../../src/sdks/NeighborhoodHighlights/index.tsx"],"sourcesContent":["import { SDKOptions } from \"~/types/options\";\n\nexport type Section = \"transport\" | \"services\" | \"character\";\n\nexport type Score =\n | \"pedestrian_friendly\"\n | \"car_friendly\"\n | \"transit_friendly\"\n | \"cycling_friendly\"\n | \"groceries\"\n | \"shopping\"\n | \"restaurants\"\n | \"cafes\"\n | \"quiet\"\n | \"parks\"\n | \"vibrant\"\n | \"nightlife\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n};\n\nexport type NeighborhoodHighlightsProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-highlights-Viewed\",\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}\n","import { type Score } from \"./types\";\n\nexport const MINIMUM_SCORE_VALUE = 7;\n\nexport const sectionScores = {\n transport: [\n \"pedestrian_friendly\",\n \"car_friendly\",\n \"transit_friendly\",\n \"cycling_friendly\",\n ] as Score[],\n services: [\"groceries\", \"shopping\", \"restaurants\", \"cafes\"] as Score[],\n character: [\"quiet\", \"parks\", \"vibrant\", \"nightlife\"] as Score[],\n};\n\nexport const includeScores = [\n ...sectionScores.transport,\n ...sectionScores.services,\n ...sectionScores.character,\n];\n","import React, { useContext, useMemo } from \"react\";\nimport { type Scores } from \"@local-logic/client\";\nimport {\n NeighborhoodHighlightsProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { includeScores } from \"./constants\";\nimport { useTracking } from \"~/tracking\";\n\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useScores } from \"~/features/clientLibrary/useScores\";\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n title: NeighborhoodHighlightsProps[\"options\"][\"title\"];\n scores?: Scores[\"location\"];\n};\n\nconst NeighborhoodHighlightsContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\nconst useNeighborhoodHighlights = () =>\n useContext(NeighborhoodHighlightsContext);\n\nconst NeighborhoodHighlightsProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodHighlightsProps>();\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n location: {\n lat:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lat\n : undefined,\n lng:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lng\n : undefined,\n },\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const geographyId = useMemo(() => {\n if (typeof sdkState.options?.geographyId !== \"undefined\") {\n return sdkState.options.geographyId;\n }\n\n return Object.keys(geographyData || {})[0];\n }, [sdkState.options?.geographyId, geographyData]);\n\n const { data: scoresData, isFetching: isScoresFetching } = useScores({\n geographyId,\n location: {},\n include: includeScores,\n });\n\n const isLoading = useMemo(\n () => isGeographyLoading || isScoresFetching,\n [isGeographyLoading, isScoresFetching],\n );\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n title: sdkState.options?.title,\n scores: scoresData?.geographies[0]?.scores,\n }),\n [isLoading, scoresData, sdkState.options?.title],\n );\n\n return (\n <NeighborhoodHighlightsContext.Provider value={contextValue}>\n {children}\n </NeighborhoodHighlightsContext.Provider>\n );\n};\n\nexport { useNeighborhoodHighlights, NeighborhoodHighlightsProvider };\n","export const container = `group/highlight-item bg-gray-25 px-5 py-4 flex w-80 items-center gap-x-4 rounded-xl`;\n","export const container = `\n rounded-full bg-primary-100 w-16 h-16 flex items-center justify-center\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n\n `;\nexport const content = `rounded-full bg-gray-25 w-12 h-12 border-2 border-base-white flex items-center justify-center`;\nexport const icon = `\n text-primary-100 w-7 h-7\n \n group-data-[is-loading=true]/highlight-item:text-gray-200\n group-data-[is-loading=true]/highlight-item:animate-spin\n`;\n","import React from \"react\";\n\nimport type { Scores } from \"@local-logic/client\";\nimport { SpinnerGapIcon } from \"@phosphor-icons/react\";\nimport * as styles from \"./styles\";\nimport { ScoreIcon } from \"~/components/ScoreIcon\";\n\nexport function Icon({\n isLoading = false,\n score,\n}: {\n isLoading?: boolean;\n score?: keyof Scores[\"location\"];\n}) {\n return (\n <div className={styles.container}>\n <div className={styles.content}>\n {isLoading && <SpinnerGapIcon className={styles.icon} />}\n {!isLoading && score && (\n <ScoreIcon score={score} className={styles.icon} />\n )}\n </div>\n </div>\n );\n}\n","export const container = `\n group-data-[is-loading=true]/highlight-item:flex\n group-data-[is-loading=true]/highlight-item:flex-col\n group-data-[is-loading=true]/highlight-item:grow\n`;\n\nexport const text = `\n text-md mb-1\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:w-full\n group-data-[is-loading=true]/highlight-item:h-2\n\n group-data-[is-loading=true]/highlight-item:[&>span]:hidden\n`;\nexport const pill = `\n text-sm leading-4 font-bold bg-primary-100 text-base-white py-1 px-2 inline rounded\n \n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:animate-pulse\n group-data-[is-loading=true]/highlight-item:w-28\n group-data-[is-loading=true]/highlight-item:h-7\n`;\n","import React from \"react\";\n\nimport type { Scores } from \"@local-logic/client\";\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\n\nexport function Content({ score }: { score?: keyof Scores[\"location\"] }) {\n const { t } = useTranslation([\"neighborhoodHighlights\", \"common\"]);\n\n return (\n <div\n data-testid={`highlight-content-${score}`}\n className={styles.container}\n >\n <p data-testid=\"highlight-title\" className={styles.text}>\n <span>{t(\"highlight.title\")}</span>\n </p>\n <p data-testid=\"highlight-pill\" className={styles.pill}>\n {score && t(`common:scores.${score}.title`)}\n </p>\n </div>\n );\n}\n","import React from \"react\";\n\nimport type { Scores } from \"@local-logic/client\";\nimport * as styles from \"./styles\";\n\nimport { Icon } from \"./Icon\";\nimport { Content } from \"./Content\";\n\nexport const Item = ({\n isLoading = false,\n score,\n}: {\n isLoading?: boolean;\n score?: keyof Scores[\"location\"];\n}) => {\n return (\n <div\n data-testid=\"item\"\n className={styles.container}\n data-is-loading={isLoading}\n data-score={score}\n >\n <Icon isLoading={isLoading} score={score} />\n <Content score={score} />\n </div>\n );\n};\n","export const container = `flex flex-col gap-4 w-full lg:flex-row`;\n","import type { Scores } from \"@local-logic/client\";\nimport {\n includeScores,\n MINIMUM_SCORE_VALUE,\n} from \"~/sdks/NeighborhoodHighlights/constants\";\n\nexport function getHighlightScoreKeys(scores: Scores[\"location\"]) {\n const highlightKeys: (keyof Scores[\"location\"])[] = [];\n\n if (typeof scores === \"undefined\") {\n // Safety check just in case\n return highlightKeys;\n }\n\n const filteredScores = includeScores\n .map((scoreName) => ({\n scoreName,\n value: (Math.round(Number(scores[scoreName]?.value) * 10) / 10) * 2,\n }))\n .filter((score) => score.value > MINIMUM_SCORE_VALUE)\n .sort((a, b) => (a.value < b.value ? 1 : -1))\n .slice(0, 3);\n\n filteredScores.map((item) => highlightKeys.push(item.scoreName));\n\n return highlightKeys;\n}\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Item } from \"./Item\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHighlights } from \"~/sdks/NeighborhoodHighlights/context\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\n\nimport { getHighlightScoreKeys } from \"~/sdks/NeighborhoodHighlights/utils/getHighlightScoreKeys\";\n\nexport function Highlights() {\n const { t } = useTranslation(\"neighborhoodHighlights\");\n const { isLoading, scores } = useNeighborhoodHighlights();\n\n const highlights = useMemo(() => {\n if (isLoading || !scores) {\n return [];\n }\n\n return getHighlightScoreKeys(scores);\n }, [scores, isLoading]);\n\n if (!isLoading && highlights.length === 0) {\n return <NoDataContent text={t(\"noData\")} />;\n }\n\n return (\n <div data-testid=\"highlights-container\" className={styles.container}>\n {(isLoading ? [1, 2, 3] : highlights).map((highlight, index) => (\n <Item\n key={index}\n isLoading={isLoading}\n score={typeof highlight !== \"number\" ? highlight : undefined}\n />\n ))}\n </div>\n );\n}\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Highlights } from \"../Highlights\";\nimport { useNeighborhoodHighlights } from \"~/sdks/NeighborhoodHighlights/context\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\n\nexport function Content() {\n const { t } = useTranslation(\"neighborhoodHighlights\");\n const { title } = useNeighborhoodHighlights();\n\n return (\n <>\n <TitleHeader\n title={\n typeof title === \"string\" || title === false ? title : t(\"title\")\n }\n />\n\n <Highlights />\n </>\n );\n}\n","import { ObjectSchema, string, mixed, number, object } 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}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport { NeighborhoodHighlightsProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodHighlightsProps } from \"./types\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\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 ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodHighlights = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodHighlightsProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Highlights\"\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_HIGHLIGHTS}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_HIGHLIGHTS,\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 <NeighborhoodHighlightsProvider>\n <Content />\n </NeighborhoodHighlightsProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodHighlights;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NeighborhoodHighlights-BgG5_1pC.js","names":[],"sources":["../../src/sdks/NeighborhoodHighlights/types.ts","../../src/sdks/NeighborhoodHighlights/constants.ts","../../src/sdks/NeighborhoodHighlights/context.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/styles.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Icon/styles.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Icon/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Content/styles.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/Content/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/Item/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Highlights/styles.ts","../../src/sdks/NeighborhoodHighlights/utils/getHighlightScoreKeys/index.ts","../../src/sdks/NeighborhoodHighlights/components/Highlights/index.tsx","../../src/sdks/NeighborhoodHighlights/components/Content/index.tsx","../../src/sdks/NeighborhoodHighlights/schema.ts","../../src/sdks/NeighborhoodHighlights/index.tsx"],"sourcesContent":["import { SDKOptions } from \"~/types/options\";\n\nexport type Section = \"transport\" | \"services\" | \"character\";\n\nexport type Score =\n | \"pedestrian_friendly\"\n | \"car_friendly\"\n | \"transit_friendly\"\n | \"cycling_friendly\"\n | \"groceries\"\n | \"shopping\"\n | \"restaurants\"\n | \"cafes\"\n | \"quiet\"\n | \"parks\"\n | \"vibrant\"\n | \"nightlife\";\n\nexport type Options = {\n lat?: number;\n lng?: number;\n geographyId?: string;\n title?: boolean | string;\n};\n\nexport type NeighborhoodHighlightsProps = SDKOptions<\n Options,\n {\n options: Options | undefined;\n }\n>;\n\nexport enum TrackingPipelineEvents {\n SDK_VIEWED = \"neighborhood-highlights-Viewed\",\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}\n","import { type Score } from \"./types\";\n\nexport const MINIMUM_SCORE_VALUE = 7;\n\nexport const sectionScores = {\n transport: [\n \"pedestrian_friendly\",\n \"car_friendly\",\n \"transit_friendly\",\n \"cycling_friendly\",\n ] as Score[],\n services: [\"groceries\", \"shopping\", \"restaurants\", \"cafes\"] as Score[],\n character: [\"quiet\", \"parks\", \"vibrant\", \"nightlife\"] as Score[],\n};\n\nexport const includeScores = [\n ...sectionScores.transport,\n ...sectionScores.services,\n ...sectionScores.character,\n];\n","import React, { useContext, useMemo } from \"react\";\nimport { type Scores } from \"@local-logic/client\";\nimport {\n NeighborhoodHighlightsProps,\n TrackingPipelineEvents,\n AnalyticsEvents,\n} from \"./types\";\nimport { includeScores } from \"./constants\";\nimport { useTracking } from \"~/tracking\";\n\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport { useGeographies } from \"~/features/clientLibrary/useGeographies\";\nimport { useScores } from \"~/features/clientLibrary/useScores\";\nimport useEffectOnce from \"~/hooks/useEffectOnce\";\n\nexport type DefaultContext = {\n isLoading: boolean;\n title: NeighborhoodHighlightsProps[\"options\"][\"title\"];\n scores?: Scores[\"location\"];\n};\n\nconst NeighborhoodHighlightsContext = React.createContext<DefaultContext>(\n {} as DefaultContext,\n);\nconst useNeighborhoodHighlights = () =>\n useContext(NeighborhoodHighlightsContext);\n\nconst NeighborhoodHighlightsProvider = ({\n children,\n}: {\n children: React.ReactNode;\n}) => {\n const { sdkState } = useStateManagerContext<NeighborhoodHighlightsProps>();\n const tracking = useTracking();\n\n useEffectOnce(() => {\n tracking.postEvent({\n eventType: TrackingPipelineEvents.SDK_VIEWED,\n });\n\n tracking.trackAnalyticsEvent({\n eventName: AnalyticsEvents.SDK_VIEWED,\n });\n });\n\n const { isLoading: isGeographyLoading, data: geographyData } = useGeographies(\n {\n location: {\n lat:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lat\n : undefined,\n lng:\n typeof sdkState.options?.geographyId === \"undefined\"\n ? sdkState.options?.lng\n : undefined,\n },\n externalId: sdkState?.globalOptions?.externalId,\n },\n );\n\n const geographyId = useMemo(() => {\n if (typeof sdkState.options?.geographyId !== \"undefined\") {\n return sdkState.options.geographyId;\n }\n\n return Object.keys(geographyData || {})[0];\n }, [sdkState.options?.geographyId, geographyData]);\n\n const { data: scoresData, isFetching: isScoresFetching } = useScores({\n geographyId,\n location: {},\n include: includeScores,\n });\n\n const isLoading = useMemo(\n () => isGeographyLoading || isScoresFetching,\n [isGeographyLoading, isScoresFetching],\n );\n\n const contextValue = useMemo(\n () => ({\n isLoading,\n title: sdkState.options?.title,\n scores: scoresData?.geographies[0]?.scores,\n }),\n [isLoading, scoresData, sdkState.options?.title],\n );\n\n return (\n <NeighborhoodHighlightsContext.Provider value={contextValue}>\n {children}\n </NeighborhoodHighlightsContext.Provider>\n );\n};\n\nexport { useNeighborhoodHighlights, NeighborhoodHighlightsProvider };\n","export const container = `group/highlight-item bg-gray-25 px-5 py-4 flex w-80 items-center gap-x-4 rounded-xl`;\n","export const container = `\n rounded-full bg-primary-100 w-16 h-16 flex items-center justify-center\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n\n `;\nexport const content = `rounded-full bg-gray-25 w-12 h-12 border-2 border-base-white flex items-center justify-center`;\nexport const icon = `\n text-primary-100 w-7 h-7\n \n group-data-[is-loading=true]/highlight-item:text-gray-200\n group-data-[is-loading=true]/highlight-item:animate-spin\n`;\n","import React from \"react\";\n\nimport type { Scores } from \"@local-logic/client\";\nimport { SpinnerGapIcon } from \"@phosphor-icons/react\";\nimport * as styles from \"./styles\";\nimport { ScoreIcon } from \"~/components/ScoreIcon\";\n\nexport function Icon({\n isLoading = false,\n score,\n}: {\n isLoading?: boolean;\n score?: keyof Scores[\"location\"];\n}) {\n return (\n <div className={styles.container}>\n <div className={styles.content}>\n {isLoading && <SpinnerGapIcon className={styles.icon} />}\n {!isLoading && score && (\n <ScoreIcon score={score} className={styles.icon} />\n )}\n </div>\n </div>\n );\n}\n","export const container = `\n group-data-[is-loading=true]/highlight-item:flex\n group-data-[is-loading=true]/highlight-item:flex-col\n group-data-[is-loading=true]/highlight-item:grow\n`;\n\nexport const text = `\n text-md mb-1\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:w-full\n group-data-[is-loading=true]/highlight-item:h-2\n\n group-data-[is-loading=true]/highlight-item:[&>span]:hidden\n`;\nexport const pill = `\n text-sm leading-4 font-bold bg-primary-100 text-base-white py-1 px-2 inline rounded\n \n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:animate-pulse\n group-data-[is-loading=true]/highlight-item:w-28\n group-data-[is-loading=true]/highlight-item:h-7\n`;\n","import React from \"react\";\n\nimport type { Scores } from \"@local-logic/client\";\nimport { useTranslation } from \"react-i18next\";\n\nimport * as styles from \"./styles\";\n\nexport function Content({ score }: { score?: keyof Scores[\"location\"] }) {\n const { t } = useTranslation([\"neighborhoodHighlights\", \"common\"]);\n\n return (\n <div\n data-testid={`highlight-content-${score}`}\n className={styles.container}\n >\n <p data-testid=\"highlight-title\" className={styles.text}>\n <span>{t(\"highlight.title\")}</span>\n </p>\n <p data-testid=\"highlight-pill\" className={styles.pill}>\n {score && t(`common:scores.${score}.title`)}\n </p>\n </div>\n );\n}\n","import React from \"react\";\n\nimport type { Scores } from \"@local-logic/client\";\nimport * as styles from \"./styles\";\n\nimport { Icon } from \"./Icon\";\nimport { Content } from \"./Content\";\n\nexport const Item = ({\n isLoading = false,\n score,\n}: {\n isLoading?: boolean;\n score?: keyof Scores[\"location\"];\n}) => {\n return (\n <div\n data-testid=\"item\"\n className={styles.container}\n data-is-loading={isLoading}\n data-score={score}\n >\n <Icon isLoading={isLoading} score={score} />\n <Content score={score} />\n </div>\n );\n};\n","export const container = `flex flex-col gap-4 w-full lg:flex-row`;\n","import type { Scores } from \"@local-logic/client\";\nimport {\n includeScores,\n MINIMUM_SCORE_VALUE,\n} from \"~/sdks/NeighborhoodHighlights/constants\";\n\nexport function getHighlightScoreKeys(scores: Scores[\"location\"]) {\n const highlightKeys: (keyof Scores[\"location\"])[] = [];\n\n if (typeof scores === \"undefined\") {\n // Safety check just in case\n return highlightKeys;\n }\n\n const filteredScores = includeScores\n .map((scoreName) => ({\n scoreName,\n value: (Math.round(Number(scores[scoreName]?.value) * 10) / 10) * 2,\n }))\n .filter((score) => score.value > MINIMUM_SCORE_VALUE)\n .sort((a, b) => (a.value < b.value ? 1 : -1))\n .slice(0, 3);\n\n filteredScores.map((item) => highlightKeys.push(item.scoreName));\n\n return highlightKeys;\n}\n","import React, { useMemo } from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Item } from \"./Item\";\nimport * as styles from \"./styles\";\nimport { useNeighborhoodHighlights } from \"~/sdks/NeighborhoodHighlights/context\";\n\nimport { NoDataContent } from \"~/components/NoDataContent\";\n\nimport { getHighlightScoreKeys } from \"~/sdks/NeighborhoodHighlights/utils/getHighlightScoreKeys\";\n\nexport function Highlights() {\n const { t } = useTranslation(\"neighborhoodHighlights\");\n const { isLoading, scores } = useNeighborhoodHighlights();\n\n const highlights = useMemo(() => {\n if (isLoading || !scores) {\n return [];\n }\n\n return getHighlightScoreKeys(scores);\n }, [scores, isLoading]);\n\n if (!isLoading && highlights.length === 0) {\n return <NoDataContent text={t(\"noData\")} />;\n }\n\n return (\n <div data-testid=\"highlights-container\" className={styles.container}>\n {(isLoading ? [1, 2, 3] : highlights).map((highlight, index) => (\n <Item\n key={index}\n isLoading={isLoading}\n score={typeof highlight !== \"number\" ? highlight : undefined}\n />\n ))}\n </div>\n );\n}\n","import React from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { Highlights } from \"../Highlights\";\nimport { useNeighborhoodHighlights } from \"~/sdks/NeighborhoodHighlights/context\";\n\nimport { TitleHeader } from \"~/components/TitleHeader\";\n\nexport function Content() {\n const { t } = useTranslation(\"neighborhoodHighlights\");\n const { title } = useNeighborhoodHighlights();\n\n return (\n <>\n <TitleHeader\n title={\n typeof title === \"string\" || title === false ? title : t(\"title\")\n }\n />\n\n <Highlights />\n </>\n );\n}\n","import { ObjectSchema, string, mixed, number, object } 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}).noUnknown(true);\n","import React, { useMemo } from \"react\";\nimport { NeighborhoodHighlightsProvider } from \"./context\";\nimport { Content } from \"./components/Content\";\nimport { schema } from \"./schema\";\nimport { NeighborhoodHighlightsProps } from \"./types\";\nimport { TrackingProvider, initializeAnalytics } from \"~/tracking\";\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 ResizeWrapper from \"~/components/ResizeWrapper\";\nimport { ValidateOptions } from \"~/components/ValidateOptions\";\nimport { LocalLogicProvider } from \"~/context/LocalLogicProvider\";\nimport { useStateManagerContext } from \"~/context/stateManager\";\nimport useIsMobile from \"~/hooks/useIsMobile\";\nimport { ProductNames } from \"~/types\";\nimport { ANALYTICS_SETTINGS } from \"~/constants/analytics\";\n\ninitializeAnalytics(ANALYTICS_SETTINGS.neighborhoodWrap.key);\n\nconst NeighborhoodHighlights = () => {\n const { sdkState } = useStateManagerContext<NeighborhoodHighlightsProps>();\n const isMobile = useIsMobile();\n const locale = sdkState.globalOptions?.locale || \"en\";\n\n const location = useMemo(() => {\n if (sdkState.options?.geographyId) {\n return {\n geographyId: sdkState.options?.geographyId,\n };\n }\n\n return {\n lat: sdkState.options?.lat,\n lng: sdkState.options?.lng,\n };\n }, [\n sdkState.options?.lat,\n sdkState.options?.lng,\n sdkState.options?.geographyId,\n ]);\n\n return (\n <ResizeWrapper>\n <ValidateOptions\n sdk=\"Neighborhood Highlights\"\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_HIGHLIGHTS}\n >\n <TrackingProvider\n trackingPipelineSettings={{\n apiKey: sdkState.apiKey || \"\",\n }}\n analyticsSettings={ANALYTICS_SETTINGS.neighborhoodWrap}\n meta={{\n clientId: sdkState.clientId,\n productName: ProductNames.NEIGHBORHOOD_HIGHLIGHTS,\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 <NeighborhoodHighlightsProvider>\n <Content />\n </NeighborhoodHighlightsProvider>\n </TrackingProvider>\n </LocalLogicProvider>\n </ValidateOptions>\n </ResizeWrapper>\n );\n};\n\nexport default NeighborhoodHighlights;\n"],"mappings":"+tBAgCA,EAAA,SAAA,UACE,EAAA,WAAA,mCADF,KAMA,EAAA,SAAA,UACE,EAAA,WAAA,eADF,KClCa,EAAgB,CAC3B,UAAW,CACT,sBACA,eACA,mBACA,oBAEF,SAAU,CAAC,YAAa,WAAY,cAAe,SACnD,UAAW,CAAC,QAAS,QAAS,UAAW,cAG9B,EAAgB,IACxB,EAAc,aACd,EAAc,YACd,EAAc,iBCGb,EAAA,EAAsC,cAC1C,CAAA,GAEI,EAAA,KAAA,EAAA,EAAA,YACO,GAEP,EAAA,EACJ,eAIA,MAAM,SAAE,GAAa,IACf,EAAW,IAEjB,EAAA,KACE,EAAS,UAAU,CACjB,UAAW,EAAuB,aAGpC,EAAS,oBAAoB,CAC3B,UAAW,EAAgB,eAI/B,MAAQ,UAAW,EAAoB,KAAM,GAAkB,EAC7D,CACE,SAAU,CACR,SAC2C,IAAlC,EAAS,SAAS,YACrB,EAAS,SAAS,SAClB,EACN,SAC2C,IAAlC,EAAS,SAAS,YACrB,EAAS,SAAS,SAClB,GAER,WAAY,GAAU,eAAe,cAYjC,KAAM,EAAY,WAAY,GAAqB,EAAU,CACnE,aAAA,EAAA,EAAA,SAAA,SAR6C,IAAlC,EAAS,SAAS,YACpB,EAAS,QAAQ,YAGnB,OAAO,KAAK,GAAiB,CAAA,GAAI,GACvC,CAAC,EAAS,SAAS,YAAa,IAIjC,SAAU,CAAA,EACV,QAAS,IAGL,GAAA,EAAA,EAAA,SAAA,IACE,GAAsB,EAC5B,CAAC,EAAoB,IAGjB,GAAA,EAAA,EAAA,SAAA,KAAA,CAEF,YACA,MAAO,EAAS,SAAS,MACzB,OAAQ,GAAY,YAAY,IAAI,SAEtC,CAAC,EAAW,EAAY,EAAS,SAAS,QAG5C,OACE,EAAA,EAAA,KAAC,EAA8B,SAA/B,CAAwC,MAAO,EAC5C,cEpFM,EAAO,8JCApB,SAAgB,GAAK,UACnB,GAAY,EAAA,MACZ,IAKA,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UDfgB,0JCgBnB,EAAA,EAAA,MAAC,MAAD,CAAK,UDVY,yGCUjB,CACG,IAAa,EAAA,EAAA,KAAC,EAAD,CAAgB,UAAW,KACvC,GAAa,IACb,EAAA,EAAA,KAAC,EAAD,CAAkB,QAAO,UAAW,SEZ9C,SAAgB,GAAQ,MAAE,IACxB,MAAM,EAAE,GAAM,EAAe,CAAC,yBAA0B,WAExD,OACE,EAAA,EAAA,MAAC,MAAD,CACE,cAAa,qBAAqB,IAClC,UDbmB,8KCWrB,EAIE,EAAA,EAAA,KAAC,IAAD,CAAG,cAAY,kBAAkB,UDTnB,sQCUZ,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAE,wBAEX,EAAA,EAAA,KAAC,IAAD,CAAG,cAAY,iBAAiB,UDHlB,wUCIX,GAAS,EAAE,iBAAiB,gBCXrC,IAAa,EAAA,EACX,aAAY,EACZ,YAME,EAAA,EAAA,MAAC,MAAD,CACE,cAAY,OACZ,ULlBmB,sFKmBnB,kBAAiB,EACjB,aAAY,WAJd,EAME,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAkB,WACnC,EAAA,EAAA,KAAC,EAAD,CAAgB,aGZtB,SAAgB,IACd,MAAM,EAAE,GAAM,EAAe,2BACvB,UAAE,EAAA,OAAW,GAAW,IAExB,GAAA,EAAA,EAAA,SAAA,IACA,IAAc,EACT,GDXb,SAAsC,GACpC,MAAM,EAA8C,GAEpD,YAAsB,IAAX,GAKY,EACpB,IAAK,IAAA,CACJ,YACA,MAAQ,KAAK,MAAyC,GAAnC,OAAO,EAAO,IAAY,QAAe,GAAM,KAEnE,OAAQ,GAAU,EAAM,MAAA,GACxB,KAAA,CAAM,EAAG,IAAO,EAAE,MAAQ,EAAE,MAAQ,GAAI,GACxC,MAAM,EAAG,GAEG,IAAK,GAAS,EAAc,KAAK,EAAK,YAZ5C,ECSA,CAAsB,GAC5B,CAAC,EAAQ,IAEZ,OAAK,GAAmC,IAAtB,EAAW,QAK3B,EAAA,EAAA,KAAC,MAAD,CAAK,cAAY,uBAAuB,UF5BnB,mDE6BjB,EAAY,CAAC,EAAG,EAAG,GAAK,GAAY,IAAA,CAAK,EAAW,KACpD,EAAA,EAAA,KAAC,EAAD,CAEa,YACX,MAA4B,iBAAd,EAAyB,OAAY,GAF9C,OAPJ,EAAA,EAAA,KAAC,EAAD,CAAe,KAAM,EAAE,YChBlC,SAAgB,IACd,MAAM,EAAE,GAAM,EAAe,2BACvB,MAAE,GAAU,IAElB,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAD,CACE,MACmB,iBAAV,IAAgC,IAAV,EAAkB,EAAQ,EAAE,YAI7D,EAAA,EAAA,KAAC,EAAD,CAAA,MCjBN,IAAa,EAAgC,EAAO,CAClD,IAAK,IACF,KAAI,GAAK,6BACT,IAAI,GAAI,6BACR,KAAK,cAAe,CACnB,GAAK,GAAgD,iBAAhB,EACrC,KAAO,GAAgB,EAAY,WACnC,UAAY,GAAgB,EAAY,aAE5C,IAAK,IACF,KAAI,IAAM,8BACV,IAAI,IAAK,8BACT,KAAK,cAAe,CACnB,GAAK,GAAgD,iBAAhB,EACrC,KAAO,GAAgB,EAAY,WACnC,UAAY,GAAgB,EAAY,aAE5C,YAAa,IAAS,WACtB,MAAO,IAA0B,aAChC,WAAU,GCJb,EAAoB,EAAmB,iBAAiB,KAExD,IAAM,EAAA,KACJ,MAAM,SAAE,GAAa,IACf,EAAW,IACX,EAAS,EAAS,eAAe,QAAU,KAE3C,GAAA,EAAA,EAAA,SAAA,IACA,EAAS,SAAS,YACb,CACL,YAAa,EAAS,SAAS,aAI5B,CACL,IAAK,EAAS,SAAS,IACvB,IAAK,EAAS,SAAS,KAExB,CACD,EAAS,SAAS,IAClB,EAAS,SAAS,IAClB,EAAS,SAAS,cAGpB,OACE,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CACE,IAAI,0BACI,SACR,QAAS,EAAS,kBAElB,EAAA,EAAA,KAAC,EAAD,CACE,YAAa,EAAS,eAAe,aAAa,IAClD,OAAQ,EAAS,OACjB,WAAY,EAAS,eAAe,WACpC,OAAQ,EAAS,eAAe,OAChC,QAAS,EAAa,kCAEtB,EAAA,EAAA,KAAC,EAAD,CACE,yBAA0B,CACxB,OAAQ,EAAS,QAAU,IAE7B,kBAAmB,EAAmB,iBACtC,KAAM,CACJ,SAAU,EAAS,SACnB,YAAa,EAAa,wBAC1B,eAAA,WAEF,WAAY,CACV,WACA,KAAM,EAAS,SACf,SAAU,SAAS,SACnB,SACA,YAEF,MAAO,CACL,aACE,aAGJ,EAAA,EAAA,KAAC,EAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["./rolldown-runtime-legacy-Djb2rrqm.js","./google-maps-vendor-legacy-CPuMOKGq.js","./sdks-legacy-
|
|
2
|
-
//# sourceMappingURL=NeighborhoodHighlights-legacy-
|
|
1
|
+
System.register(["./rolldown-runtime-legacy-Djb2rrqm.js","./google-maps-vendor-legacy-CPuMOKGq.js","./sdks-legacy-Dd5HUZAr.js","./ScoreIcon-legacy-RFFTRA8d.js","./SpinnerGap.es-legacy-36N4tZZX.js","./index-legacy-TtLgEE7L.js","./useGeographies-legacy-D5Sw2YSV.js","./globals-legacy-DrNe10l0.js","./ResizeWrapper-legacy-B04qVKmq.js","./ValidateOptions-legacy-B9Pj1AAc.js","./useIsMobile-legacy-V7KQv1D5.js","./useScores-legacy-9pSoACyM.js","./TitleHeader-legacy-CWUtPHkh.js","./NoDataContent-legacy-DlOuhAd2.js"],function(i,e){var t,o,n,a,l,s,r,d,g,u,h,c,p,v,m,y,f,x,j,b,I,w,N,H,S,D,M,O,k,E,_,L,G,K,V,W,T,q,C,R,B,F,P;function $({isLoading:i=!1,score:e}){return(0,_.jsx)("div",{className:V,children:(0,_.jsxs)("div",{className:W,children:[i&&(0,_.jsx)(m,{className:T}),!i&&e&&(0,_.jsx)(v,{score:e,className:T})]})})}function z({score:i}){const{t:e}=r(["neighborhoodHighlights","common"]);return(0,_.jsxs)("div",{"data-testid":`highlight-content-${i}`,className:q,children:[(0,_.jsx)("p",{"data-testid":"highlight-title",className:C,children:(0,_.jsx)("span",{children:e("highlight.title")})}),(0,_.jsx)("p",{"data-testid":"highlight-pill",className:R,children:i&&e(`common:scores.${i}.title`)})]})}function A(){const{t:i}=r("neighborhoodHighlights"),{isLoading:e,scores:t}=G(),o=(0,D.useMemo)(()=>e||!t?[]:function(i){const e=[];return void 0===i||E.map(e=>{var t;return{scoreName:e,value:Math.round(10*Number(null===(t=i[e])||void 0===t?void 0:t.value))/10*2}}).filter(i=>i.value>7).sort((i,e)=>i.value<e.value?1:-1).slice(0,3).map(i=>e.push(i.scoreName)),e}(t),[t,e]);return e||0!==o.length?(0,_.jsx)("div",{"data-testid":"highlights-container",className:F,children:(e?[1,2,3]:o).map((i,t)=>(0,_.jsx)(B,{isLoading:e,score:"number"!=typeof i?i:void 0},t))}):(0,_.jsx)(S,{text:i("noData")})}function U(){const{t:i}=r("neighborhoodHighlights"),{title:e}=G();return(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(H,{title:"string"==typeof e||!1===e?e:i("title")}),(0,_.jsx)(A,{})]})}return{setters:[function(i){t=i.a},function(i){o=i.l},function(i){n=i.a,a=i.c,l=i.d,s=i.f,r=i.g,d=i.m,g=i.n,u=i.o,h=i.r,c=i.t,p=i.u},function(i){v=i.t},function(i){m=i.t},function(i){y=i.Y,f=i.i,x=i.n},function(i){j=i.t},function(i){},function(i){b=i.t},function(i){I=i.t},function(i){w=i.t},function(i){N=i.t},function(i){H=i.t},function(i){S=i.t}],execute:function(){D=t(o(),1),M=function(i){return i.SDK_VIEWED="neighborhood-highlights-Viewed",i}({}),O=function(i){return i.SDK_VIEWED="sdk_viewed",i}({}),E=[...(k={transport:["pedestrian_friendly","car_friendly","transit_friendly","cycling_friendly"],services:["groceries","shopping","restaurants","cafes"],character:["quiet","parks","vibrant","nightlife"]}).transport,...k.services,...k.character],_=y(),L=D.createContext({}),G=()=>(0,D.useContext)(L),K=({children:i})=>{var e,t,o,n,a,l,s;const{sdkState:r}=x(),d=u();f(()=>{d.postEvent({eventType:M.SDK_VIEWED}),d.trackAnalyticsEvent({eventName:O.SDK_VIEWED})});const{isLoading:g,data:h}=j({location:{lat:void 0===(null===(e=r.options)||void 0===e?void 0:e.geographyId)?null===(t=r.options)||void 0===t?void 0:t.lat:void 0,lng:void 0===(null===(o=r.options)||void 0===o?void 0:o.geographyId)?null===(n=r.options)||void 0===n?void 0:n.lng:void 0},externalId:null==r||null===(a=r.globalOptions)||void 0===a?void 0:a.externalId}),{data:c,isFetching:p}=N({geographyId:(0,D.useMemo)(()=>{var i;return void 0!==(null===(i=r.options)||void 0===i?void 0:i.geographyId)?r.options.geographyId:Object.keys(h||{})[0]},[null===(l=r.options)||void 0===l?void 0:l.geographyId,h]),location:{},include:E}),v=(0,D.useMemo)(()=>g||p,[g,p]),m=(0,D.useMemo)(()=>{var i,e;return{isLoading:v,title:null===(i=r.options)||void 0===i?void 0:i.title,scores:null==c||null===(e=c.geographies[0])||void 0===e?void 0:e.scores}},[v,c,null===(s=r.options)||void 0===s?void 0:s.title]);return(0,_.jsx)(L.Provider,{value:m,children:i})},V="\n rounded-full bg-primary-100 w-16 h-16 flex items-center justify-center\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n\n ",W="rounded-full bg-gray-25 w-12 h-12 border-2 border-base-white flex items-center justify-center",T="\n text-primary-100 w-7 h-7\n \n group-data-[is-loading=true]/highlight-item:text-gray-200\n group-data-[is-loading=true]/highlight-item:animate-spin\n",q="\n group-data-[is-loading=true]/highlight-item:flex\n group-data-[is-loading=true]/highlight-item:flex-col\n group-data-[is-loading=true]/highlight-item:grow\n",C="\n text-md mb-1\n\n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:w-full\n group-data-[is-loading=true]/highlight-item:h-2\n\n group-data-[is-loading=true]/highlight-item:[&>span]:hidden\n",R="\n text-sm leading-4 font-bold bg-primary-100 text-base-white py-1 px-2 inline rounded\n \n group-data-[is-loading=true]/highlight-item:bg-gray-200\n group-data-[is-loading=true]/highlight-item:animate-pulse\n group-data-[is-loading=true]/highlight-item:w-28\n group-data-[is-loading=true]/highlight-item:h-7\n",B=({isLoading:i=!1,score:e})=>(0,_.jsxs)("div",{"data-testid":"item",className:"group/highlight-item bg-gray-25 px-5 py-4 flex w-80 items-center gap-x-4 rounded-xl","data-is-loading":i,"data-score":e,children:[(0,_.jsx)($,{isLoading:i,score:e}),(0,_.jsx)(z,{score:e})]}),F="flex flex-col gap-4 w-full lg:flex-row",P=p({lat:l().min(-90,"Must be a valid latitude.").max(90,"Must be a valid latitude.").when("geographyId",{is:i=>"string"==typeof i,then:i=>i.optional(),otherwise:i=>i.required()}),lng:l().min(-180,"Must be a valid longitude.").max(180,"Must be a valid longitude.").when("geographyId",{is:i=>"string"==typeof i,then:i=>i.optional(),otherwise:i=>i.required()}),geographyId:s().optional(),title:d().optional()}).noUnknown(!0),a(g.neighborhoodWrap.key),i("default",()=>{var i,e,t,o,a,l,s;const{sdkState:r}=x(),d=w(),u=(null===(i=r.globalOptions)||void 0===i?void 0:i.locale)||"en",p=(0,D.useMemo)(()=>{var i,e,t,o;return null!==(i=r.options)&&void 0!==i&&i.geographyId?{geographyId:null===(e=r.options)||void 0===e?void 0:e.geographyId}:{lat:null===(t=r.options)||void 0===t?void 0:t.lat,lng:null===(o=r.options)||void 0===o?void 0:o.lng}},[null===(e=r.options)||void 0===e?void 0:e.lat,null===(t=r.options)||void 0===t?void 0:t.lng,null===(o=r.options)||void 0===o?void 0:o.geographyId]);return(0,_.jsx)(b,{children:(0,_.jsx)(I,{sdk:"Neighborhood Highlights",schema:P,options:r.options,children:(0,_.jsx)(h,{environment:null===(a=r.globalOptions)||void 0===a||null===(a=a.environment)||void 0===a?void 0:a.api,apiKey:r.apiKey,appearance:null===(l=r.globalOptions)||void 0===l?void 0:l.appearance,locale:null===(s=r.globalOptions)||void 0===s?void 0:s.locale,product:c.NEIGHBORHOOD_HIGHLIGHTS,children:(0,_.jsx)(n,{trackingPipelineSettings:{apiKey:r.apiKey||""},analyticsSettings:g.neighborhoodWrap,meta:{clientId:r.clientId,productName:c.NEIGHBORHOOD_HIGHLIGHTS,productVersion:"1.24.56"},attributes:{location:p,host:r.location,host_url:document.referrer,locale:u,isMobile:d},flags:{isDebugMode:!1},children:(0,_.jsx)(K,{children:(0,_.jsx)(U,{})})})})})})})}}});
|
|
2
|
+
//# sourceMappingURL=NeighborhoodHighlights-legacy-tjiEPXIC.js.map
|